From 38a6f191dd2bcc2cc3181e12a0e6c760b65210d5 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Thu, 19 Feb 2026 17:25:51 -0800 Subject: [PATCH 1/6] [turbopack] Add a simple tool to inspect serialized SST files and report on their contents (#89310) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Example run ``` $ cargo run -p turbo-persistence --bin sst_inspect -- ~/projects/front/apps/vercel-site/.next/cache/turbopack/v16.2.0-canary.8-207-g8e5467e841e6e-dirty ... Analyzing 169 SST files in /Users/lukesandberg/projects/front/apps/vercel-site/.next/cache/turbopack/v16.2.0-canary.8-207-g8e5467e841e6e-dirty ═══════════════════════════════════════════════════════════════════════════════ Family 0 (Infra): ═══════════════════════════════════════════════════════════════════════════════ SST files: 1, Total entries: 2 Total file size: 44 B Averages: File size: 44 B Keys per file: 2 Keys per key block: 2.0 Per-file Overhead (total): 8 B (18.2% of total file size) Key compression dictionaries: 0 B Average per file: 0 B Block directories: 8 B Average per file: 8 B Block Statistics: Index blocks: 1 blocks (uncompressed), 3 B Key blocks: 1 blocks (uncompressed), 25 B Value blocks: none Entry Type Histogram: type 9: 1 ( 50.0%) │█████████████████████████│ inline 1 bytes type 12: 1 ( 50.0%) │█████████████████████████│ inline 4 bytes Value Storage: Inline: 2 entries, 5 B total ═══════════════════════════════════════════════════════════════════════════════ Family 1 (TaskMeta): ═══════════════════════════════════════════════════════════════════════════════ SST files: 36, Total entries: 8,840,774 Total file size: 670.46 MB Averages: File size: 18.62 MB Keys per file: 245,577 Keys per key block: 1358.2 Per-file Overhead (total): 64.09 KB (0.0% of total file size) Key compression dictionaries: 0 B Average per file: 0 B Block directories: 64.09 KB Average per file: 1.78 KB Block Statistics: Index blocks: 36 blocks (uncompressed), 63.32 KB Key blocks: 6,509 blocks (6,478 compressed, 31 uncompressed) stored: 115.52 MB, actual: 134.92 MB (14% savings) Value blocks: 9,862 blocks (9,046 compressed, 816 uncompressed) stored: 554.75 MB, actual: 673.49 MB (18% savings) Entry Type Histogram: type 0: 8,840,005 (100.0%) │████████████████████████████████████████│ small value (in value block) type 3: 769 ( 0.0%) ││ medium value Value Storage: Small (value block refs): 8,840,005 entries Medium (dedicated blocks): 769 entries ═══════════════════════════════════════════════════════════════════════════════ Family 2 (TaskData): ═══════════════════════════════════════════════════════════════════════════════ SST files: 96, Total entries: 8,840,774 Total file size: 2.60 GB Averages: File size: 27.76 MB Keys per file: 92,091 Keys per key block: 1354.3 Per-file Overhead (total): 253.12 KB (0.0% of total file size) Key compression dictionaries: 0 B Average per file: 0 B Block directories: 253.12 KB Average per file: 2.64 KB Block Statistics: Index blocks: 96 blocks (uncompressed), 63.09 KB Key blocks: 6,528 blocks (uncompressed), 134.84 MB Value blocks: 58,175 blocks (57,911 compressed, 264 uncompressed) stored: 2.47 GB, actual: 5.82 GB (58% savings) Entry Type Histogram: type 0: 8,825,784 ( 99.8%) │████████████████████████████████████████│ small value (in value block) type 3: 14,990 ( 0.2%) ││ medium value Value Storage: Small (value block refs): 8,825,784 entries Medium (dedicated blocks): 14,990 entries ═══════════════════════════════════════════════════════════════════════════════ Family 3 (TaskCache): ═══════════════════════════════════════════════════════════════════════════════ SST files: 36, Total entries: 8,847,914 Total file size: 327.29 MB Averages: File size: 9.09 MB Keys per file: 245,775 Keys per key block: 321.5 Per-file Overhead (total): 2.36 MB (0.7% of total file size) Key compression dictionaries: 2.25 MB Average per file: 64.00 KB Block directories: 107.63 KB Average per file: 2.99 KB Block Statistics: Index blocks: 36 blocks (uncompressed), 268.47 KB Key blocks: 27,517 blocks, stored: 324.57 MB, actual: 495.61 MB (35% savings) Value blocks: none Entry Type Histogram: type 12: 8,847,914 (100.0%) │████████████████████████████████████████│ inline 4 bytes Value Storage: Inline: 8,847,914 entries, 33.75 MB total ``` --- turbopack/crates/turbo-persistence/Cargo.toml | 4 + turbopack/crates/turbo-persistence/README.md | 6 +- .../turbo-persistence/src/bin/sst_inspect.rs | 785 ++++++++++++++++++ turbopack/crates/turbo-persistence/src/lib.rs | 4 +- 4 files changed, 796 insertions(+), 3 deletions(-) create mode 100644 turbopack/crates/turbo-persistence/src/bin/sst_inspect.rs diff --git a/turbopack/crates/turbo-persistence/Cargo.toml b/turbopack/crates/turbo-persistence/Cargo.toml index 2a40642afd466..bc5e91d43559c 100644 --- a/turbopack/crates/turbo-persistence/Cargo.toml +++ b/turbopack/crates/turbo-persistence/Cargo.toml @@ -42,6 +42,10 @@ rayon = { workspace = true } tempfile = { workspace = true } turbo-tasks-malloc = { workspace = true } +[[bin]] +name = "sst_inspect" +path = "src/bin/sst_inspect.rs" + [lints] workspace = true diff --git a/turbopack/crates/turbo-persistence/README.md b/turbopack/crates/turbo-persistence/README.md index 8af39c9bba727..9c49c82919669 100644 --- a/turbopack/crates/turbo-persistence/README.md +++ b/turbopack/crates/turbo-persistence/README.md @@ -105,7 +105,7 @@ The hashes are sorted. - foreach entry - 1 byte type - 3 bytes position in block after header -- Max block size: 16 MB +- Max block size: 16 KB A Key block contains n keys, which specify n key value pairs. @@ -147,6 +147,9 @@ Depending on the `type` field entry has a different format: The entries are sorted by key hash and key. +Future: + * Some tables have fixed sized keys with consistent values (4 byte task ids). We could optimize key block representation in this case by skipping offset tables. + #### Value Block - no header, all bytes are data referenced by other blocks @@ -170,6 +173,7 @@ Reading start from the current sequence number and goes downwards. - not found -> break - Key Block: find key by binary search - found -> lookup value from value block, return + - read value as inline, or by using the block index in the key to find the value elsewhere in the file. - not found -> break ## Writing diff --git a/turbopack/crates/turbo-persistence/src/bin/sst_inspect.rs b/turbopack/crates/turbo-persistence/src/bin/sst_inspect.rs new file mode 100644 index 0000000000000..c4d34774a9068 --- /dev/null +++ b/turbopack/crates/turbo-persistence/src/bin/sst_inspect.rs @@ -0,0 +1,785 @@ +//! SST file inspector binary for turbo-persistence databases. +//! +//! This tool inspects SST files to report entry type statistics per family, +//! useful for verifying that inline value optimization is being used. +//! +//! Entry types: +//! - 0: Small value (stored in value block) +//! - 1: Blob reference +//! - 2: Deleted/tombstone +//! - 3: Medium value +//! - 8-255: Inline value where (type - 8) = value byte count + +use std::{ + collections::BTreeMap, + fs::{self, File}, + path::{Path, PathBuf}, + sync::Arc, +}; + +use anyhow::{Context, Result, bail}; +use byteorder::{BE, ReadBytesExt}; +use lzzzz::lz4::{decompress, decompress_with_dict}; +use memmap2::Mmap; +use turbo_persistence::meta_file::MetaFile; +// Import shared constants from the crate +use turbo_persistence::static_sorted_file::{ + BLOCK_TYPE_INDEX, BLOCK_TYPE_KEY_NO_HASH, BLOCK_TYPE_KEY_WITH_HASH, KEY_BLOCK_ENTRY_TYPE_BLOB, + KEY_BLOCK_ENTRY_TYPE_DELETED, KEY_BLOCK_ENTRY_TYPE_INLINE_MIN, KEY_BLOCK_ENTRY_TYPE_MEDIUM, + KEY_BLOCK_ENTRY_TYPE_SMALL, +}; + +/// Block size information +#[derive(Default, Debug, Clone)] +struct BlockSizeInfo { + /// Size as stored on disk (after compression, if any) + stored_size: u64, + /// Actual size (after decompression) + actual_size: u64, + /// Number of blocks that were compressed + compressed_count: u64, + /// Number of blocks stored uncompressed + uncompressed_count: u64, +} + +impl BlockSizeInfo { + fn add(&mut self, stored: u64, actual: u64, was_compressed: bool) { + self.stored_size += stored; + self.actual_size += actual; + if was_compressed { + self.compressed_count += 1; + } else { + self.uncompressed_count += 1; + } + } + + fn total_count(&self) -> u64 { + self.compressed_count + self.uncompressed_count + } + + fn merge(&mut self, other: &BlockSizeInfo) { + self.stored_size += other.stored_size; + self.actual_size += other.actual_size; + self.compressed_count += other.compressed_count; + self.uncompressed_count += other.uncompressed_count; + } +} + +/// Statistics for a single SST file +#[derive(Default, Debug, Clone)] +struct SstStats { + /// Count of entries by type + entry_type_counts: BTreeMap, + /// Total entries + total_entries: u64, + + /// Index block sizes + index_blocks: BlockSizeInfo, + /// Key block sizes + key_blocks: BlockSizeInfo, + /// Value block sizes (small values) + value_blocks: BlockSizeInfo, + + /// Key compression dictionary size + key_dict_size: u64, + /// Block directory size (block_count * 4 bytes at end of file) + block_directory_size: u64, + + /// Value sizes by type (inline values track actual bytes) + inline_value_bytes: u64, + small_value_refs: u64, // Count of references to value blocks + medium_value_refs: u64, // Count of references to medium values + blob_refs: u64, // Count of blob references + deleted_count: u64, // Count of deleted entries + + /// File size in bytes + file_size: u64, +} + +impl SstStats { + fn merge(&mut self, other: &SstStats) { + for (ty, count) in &other.entry_type_counts { + *self.entry_type_counts.entry(*ty).or_insert(0) += count; + } + self.total_entries += other.total_entries; + self.index_blocks.merge(&other.index_blocks); + self.key_blocks.merge(&other.key_blocks); + self.value_blocks.merge(&other.value_blocks); + self.key_dict_size += other.key_dict_size; + self.block_directory_size += other.block_directory_size; + self.inline_value_bytes += other.inline_value_bytes; + self.small_value_refs += other.small_value_refs; + self.medium_value_refs += other.medium_value_refs; + self.blob_refs += other.blob_refs; + self.deleted_count += other.deleted_count; + self.file_size += other.file_size; + } +} + +/// Information about an SST file from the meta file +struct SstInfo { + sequence_number: u32, + key_compression_dictionary_length: u16, + block_count: u16, +} + +fn entry_type_description(ty: u8) -> String { + match ty { + KEY_BLOCK_ENTRY_TYPE_SMALL => "small value (in value block)".to_string(), + KEY_BLOCK_ENTRY_TYPE_BLOB => "blob reference".to_string(), + KEY_BLOCK_ENTRY_TYPE_DELETED => "deleted/tombstone".to_string(), + KEY_BLOCK_ENTRY_TYPE_MEDIUM => "medium value".to_string(), + ty if ty >= KEY_BLOCK_ENTRY_TYPE_INLINE_MIN => { + let inline_size = ty - KEY_BLOCK_ENTRY_TYPE_INLINE_MIN; + format!("inline {} bytes", inline_size) + } + _ => format!("unknown type {}", ty), + } +} + +fn family_name(family: u32) -> &'static str { + match family { + 0 => "Infra", + 1 => "TaskMeta", + 2 => "TaskData", + 3 => "TaskCache", + _ => "Unknown", + } +} + +/// Format a number with comma separators for readability +fn format_number(n: u64) -> String { + let s = n.to_string(); + let mut result = String::with_capacity(s.len() + s.len() / 3); + for (i, c) in s.chars().enumerate() { + if i > 0 && (s.len() - i).is_multiple_of(3) { + result.push(','); + } + result.push(c); + } + result +} + +fn format_bytes(bytes: u64) -> String { + if bytes >= 1024 * 1024 * 1024 { + format!("{:.2} GB", bytes as f64 / (1024.0 * 1024.0 * 1024.0)) + } else if bytes >= 1024 * 1024 { + format!("{:.2} MB", bytes as f64 / (1024.0 * 1024.0)) + } else if bytes >= 1024 { + format!("{:.2} KB", bytes as f64 / 1024.0) + } else { + format!("{} B", bytes) + } +} + +/// Collect SST info from all meta files in the database directory +fn collect_sst_info(db_path: &Path) -> Result>> { + let mut meta_files: Vec = fs::read_dir(db_path)? + .filter_map(|entry| entry.ok()) + .map(|entry| entry.path()) + .filter(|path| path.extension().is_some_and(|ext| ext == "meta")) + .collect(); + + meta_files.sort(); + + if meta_files.is_empty() { + bail!("No .meta files found in {}", db_path.display()); + } + + let mut family_sst_info: BTreeMap> = BTreeMap::new(); + + for meta_path in &meta_files { + // Extract sequence number from filename + let filename = meta_path.file_stem().and_then(|s| s.to_str()).unwrap_or(""); + let seq_num: u32 = filename.parse().unwrap_or(0); + + let meta_file = MetaFile::open(db_path, seq_num) + .with_context(|| format!("Failed to open {}", meta_path.display()))?; + + let family = meta_file.family(); + + for entry in meta_file.entries() { + family_sst_info.entry(family).or_default().push(SstInfo { + sequence_number: entry.sequence_number(), + key_compression_dictionary_length: entry.key_compression_dictionary_length(), + block_count: entry.block_count(), + }); + } + } + + Ok(family_sst_info) +} + +/// Decompress a block, respecting the optional compression protocol. +/// When uncompressed_length is 0, the block is stored uncompressed. +fn decompress_block( + compressed: &[u8], + uncompressed_length: u32, + dictionary: Option<&[u8]>, +) -> Result> { + // Sentinel: uncompressed_length = 0 means block is stored uncompressed + if uncompressed_length == 0 { + return Ok(Arc::from(compressed)); + } + + let mut buffer = vec![0u8; uncompressed_length as usize]; + let bytes_written = if let Some(dict) = dictionary { + decompress_with_dict(compressed, &mut buffer, dict)? + } else { + decompress(compressed, &mut buffer)? + }; + assert_eq!( + bytes_written, uncompressed_length as usize, + "Decompressed length does not match expected" + ); + Ok(Arc::from(buffer)) +} + +/// Analyze an SST file and return entry type statistics +fn analyze_sst_file(db_path: &Path, info: &SstInfo) -> Result { + let filename = format!("{:08}.sst", info.sequence_number); + let path = db_path.join(&filename); + + let file = File::open(&path).with_context(|| format!("Failed to open {}", filename))?; + let file_size = file.metadata()?.len(); + let mmap = unsafe { Mmap::map(&file)? }; + + let mut stats = SstStats { + key_dict_size: info.key_compression_dictionary_length as u64, + block_directory_size: info.block_count as u64 * 4, + file_size, + ..Default::default() + }; + + // Calculate offsets + let block_offsets_start = mmap.len() - (info.block_count as usize * 4); + let blocks_start = info.key_compression_dictionary_length as usize; + + // Get key compression dictionary if present + let key_dict = if info.key_compression_dictionary_length > 0 { + Some(&mmap[0..info.key_compression_dictionary_length as usize]) + } else { + None + }; + + // Iterate through all blocks + for block_index in 0..info.block_count { + let offset = block_offsets_start + block_index as usize * 4; + + let block_start = if block_index == 0 { + blocks_start + } else { + blocks_start + (&mmap[offset - 4..offset]).read_u32::()? as usize + }; + let block_end = blocks_start + (&mmap[offset..offset + 4]).read_u32::()? as usize; + + // Read uncompressed length and compressed data + let uncompressed_length = (&mmap[block_start..block_start + 4]).read_u32::()?; + let compressed_data = &mmap[block_start + 4..block_end]; + let compressed_size = compressed_data.len() as u64; + + // Determine if block was compressed (uncompressed_length > 0 means it was compressed) + let was_compressed = uncompressed_length > 0; + // Actual size: if uncompressed_length is 0, use stored size (block wasn't compressed) + let actual_size = if uncompressed_length == 0 { + compressed_size + } else { + uncompressed_length as u64 + }; + + // Try to decompress with key dictionary first (for key/index blocks) + let decompressed = match decompress_block(compressed_data, uncompressed_length, key_dict) { + Ok(data) => data, + Err(_) => { + // If that fails, try without dictionary (value blocks) + match decompress_block(compressed_data, uncompressed_length, None) { + Ok(_) => { + // This is a value block + stats + .value_blocks + .add(compressed_size, actual_size, was_compressed); + continue; // Value blocks don't have entry type headers + } + Err(e) => { + eprintln!( + "Warning: Failed to decompress block {} in {:08}.sst: {}", + block_index, info.sequence_number, e + ); + continue; + } + } + } + }; + + let block = &decompressed[..]; + if block.is_empty() { + continue; + } + + let block_type = block[0]; + + // The index block is always the LAST block in the file + let is_last_block = block_index == info.block_count - 1; + + match block_type { + BLOCK_TYPE_INDEX if is_last_block => { + // Validate index block structure: 1 byte type + 2 byte first_block + N*(10 bytes) + let content_len = block.len() - 3; // subtract header + if content_len % 10 == 0 { + stats + .index_blocks + .add(compressed_size, actual_size, was_compressed); + } else { + // Invalid structure, treat as value block + stats + .value_blocks + .add(compressed_size, actual_size, was_compressed); + } + } + BLOCK_TYPE_KEY_WITH_HASH | BLOCK_TYPE_KEY_NO_HASH => { + // Key block - extract entry types + if block.len() < 4 { + // Too small to be a valid key block, likely garbage from wrong decompression + stats + .value_blocks + .add(compressed_size, actual_size, was_compressed); + continue; + } + + // Entry count is stored as 3 bytes after the block type + let entry_count = + ((block[1] as u32) << 16) | ((block[2] as u32) << 8) | (block[3] as u32); + + // Validate entry count - if it's unreasonably large or the block is too small + // to contain the headers, this is likely garbage from wrong decompression + let expected_header_size = 4 + entry_count as usize * 4; + if entry_count == 0 || entry_count > 100_000 || expected_header_size > block.len() { + // Invalid key block structure, treat as value block + stats + .value_blocks + .add(compressed_size, actual_size, was_compressed); + continue; + } + + stats + .key_blocks + .add(compressed_size, actual_size, was_compressed); + + // Entry headers start at offset 4 + // Each entry header is 4 bytes: 1 byte type + 3 bytes position + for i in 0..entry_count as usize { + let header_offset = 4 + i * 4; + if header_offset >= block.len() { + break; + } + let entry_type = block[header_offset]; + + *stats.entry_type_counts.entry(entry_type).or_insert(0) += 1; + stats.total_entries += 1; + + // Track value statistics + match entry_type { + KEY_BLOCK_ENTRY_TYPE_SMALL => { + stats.small_value_refs += 1; + } + KEY_BLOCK_ENTRY_TYPE_BLOB => { + stats.blob_refs += 1; + } + KEY_BLOCK_ENTRY_TYPE_DELETED => { + stats.deleted_count += 1; + } + KEY_BLOCK_ENTRY_TYPE_MEDIUM => { + stats.medium_value_refs += 1; + } + ty if ty >= KEY_BLOCK_ENTRY_TYPE_INLINE_MIN => { + let inline_size = (ty - KEY_BLOCK_ENTRY_TYPE_INLINE_MIN) as u64; + stats.inline_value_bytes += inline_size; + } + _ => {} + } + } + } + _ => { + // Unknown block type - might be a value block that happened to decompress with dict + // Try to identify it as a value block + stats + .value_blocks + .add(compressed_size, actual_size, was_compressed); + } + } + } + + Ok(stats) +} + +fn print_block_stats(name: &str, info: &BlockSizeInfo) { + let total = info.total_count(); + if total == 0 { + println!(" {}: none", name); + return; + } + + // Determine compression status + let all_uncompressed = info.compressed_count == 0; + let all_compressed = info.uncompressed_count == 0; + + if all_uncompressed { + // All blocks uncompressed - just show size + println!( + " {}: {} blocks (uncompressed), {}", + name, + format_number(total), + format_bytes(info.actual_size), + ); + } else if all_compressed { + // All blocks compressed - show stored vs actual with savings + let savings_pct = if info.actual_size > 0 { + ((info.actual_size as f64 - info.stored_size as f64) / info.actual_size as f64) * 100.0 + } else { + 0.0 + }; + let savings_str = if savings_pct < 0.0 { + format!("{:.0}% overhead", -savings_pct) + } else { + format!("{:.0}% savings", savings_pct) + }; + println!( + " {}: {} blocks, stored: {}, actual: {} ({})", + name, + format_number(total), + format_bytes(info.stored_size), + format_bytes(info.actual_size), + savings_str, + ); + } else { + // Mixed - show breakdown + let savings_pct = if info.actual_size > 0 { + ((info.actual_size as f64 - info.stored_size as f64) / info.actual_size as f64) * 100.0 + } else { + 0.0 + }; + let savings_str = if savings_pct < 0.0 { + format!("{:.0}% overhead", -savings_pct) + } else { + format!("{:.0}% savings", savings_pct) + }; + println!( + " {}: {} blocks ({} compressed, {} uncompressed)", + name, + format_number(total), + format_number(info.compressed_count), + format_number(info.uncompressed_count), + ); + println!( + " stored: {}, actual: {} ({})", + format_bytes(info.stored_size), + format_bytes(info.actual_size), + savings_str, + ); + } +} + +fn print_entry_histogram(stats: &SstStats, prefix: &str) { + if stats.entry_type_counts.is_empty() { + return; + } + println!("{}Entry Type Histogram:", prefix); + for (ty, count) in &stats.entry_type_counts { + let pct = (*count as f64 / stats.total_entries as f64) * 100.0; + // Visual bar + let bar_len = (pct / 2.0) as usize; + let bar: String = "█".repeat(bar_len.min(40)); + println!( + "{} type {:3}: {:>12} ({:5.1}%) │{}│ {}", + prefix, + ty, + format_number(*count), + pct, + bar, + entry_type_description(*ty), + ); + } +} + +fn print_value_storage(stats: &SstStats, prefix: &str) { + println!("{}Value Storage:", prefix); + if stats.inline_value_bytes > 0 { + let inline_count: u64 = stats + .entry_type_counts + .iter() + .filter(|(ty, _)| **ty >= KEY_BLOCK_ENTRY_TYPE_INLINE_MIN) + .map(|(_, count)| count) + .sum(); + println!( + "{} Inline: {} entries, {} total", + prefix, + format_number(inline_count), + format_bytes(stats.inline_value_bytes) + ); + } + if stats.small_value_refs > 0 { + println!( + "{} Small (value block refs): {} entries", + prefix, + format_number(stats.small_value_refs) + ); + } + if stats.medium_value_refs > 0 { + println!( + "{} Medium (dedicated blocks): {} entries", + prefix, + format_number(stats.medium_value_refs) + ); + } + if stats.blob_refs > 0 { + println!( + "{} Blob (external files): {} entries", + prefix, + format_number(stats.blob_refs) + ); + } + if stats.deleted_count > 0 { + println!( + "{} Deleted: {} entries", + prefix, + format_number(stats.deleted_count) + ); + } +} + +fn print_sst_details(seq_num: u32, stats: &SstStats) { + println!( + "\n ┌─ SST {:08}.sst ─────────────────────────────────────────────────────", + seq_num + ); + println!( + " │ Entries: {}, File size: {}", + format_number(stats.total_entries), + format_bytes(stats.file_size) + ); + + // Per-file overhead + let overhead = stats.key_dict_size + stats.block_directory_size; + let overhead_pct = if stats.file_size > 0 { + (overhead as f64 / stats.file_size as f64) * 100.0 + } else { + 0.0 + }; + println!(" │"); + println!( + " │ Per-file Overhead: {} ({:.1}% of file)", + format_bytes(overhead), + overhead_pct + ); + println!( + " │ Key compression dictionary: {}", + format_bytes(stats.key_dict_size) + ); + println!( + " │ Block directory: {}", + format_bytes(stats.block_directory_size) + ); + + // Block statistics + println!(" │"); + println!(" │ Block Statistics:"); + print!(" │ "); + print_block_stats("Index blocks", &stats.index_blocks); + print!(" │ "); + print_block_stats("Key blocks", &stats.key_blocks); + print!(" │ "); + print_block_stats("Value blocks", &stats.value_blocks); + + // Entry type histogram + if !stats.entry_type_counts.is_empty() { + println!(" │"); + print_entry_histogram(stats, " │ "); + } + + // Value storage summary + println!(" │"); + print_value_storage(stats, " │ "); + + println!(" └───────────────────────────────────────────────────────────────────────────"); +} + +fn print_family_summary(family: u32, sst_count: usize, stats: &SstStats) { + println!("═══════════════════════════════════════════════════════════════════════════════"); + println!("Family {} ({}):", family, family_name(family)); + println!("═══════════════════════════════════════════════════════════════════════════════"); + + println!( + " SST files: {}, Total entries: {}", + format_number(sst_count as u64), + format_number(stats.total_entries) + ); + println!(" Total file size: {}", format_bytes(stats.file_size)); + + // Averages + if sst_count > 0 { + let avg_file_size = stats.file_size / sst_count as u64; + let avg_keys_per_file = stats.total_entries / sst_count as u64; + let total_key_blocks = stats.key_blocks.total_count(); + let avg_keys_per_block = if total_key_blocks > 0 { + stats.total_entries as f64 / total_key_blocks as f64 + } else { + 0.0 + }; + + println!(); + println!(" Averages:"); + println!(" File size: {}", format_bytes(avg_file_size)); + println!(" Keys per file: {}", format_number(avg_keys_per_file)); + println!(" Keys per key block: {:.1}", avg_keys_per_block); + } + + // Per-file overhead + let total_overhead = stats.key_dict_size + stats.block_directory_size; + let overhead_pct = if stats.file_size > 0 { + (total_overhead as f64 / stats.file_size as f64) * 100.0 + } else { + 0.0 + }; + println!(); + println!( + " Per-file Overhead (total): {} ({:.1}% of total file size)", + format_bytes(total_overhead), + overhead_pct + ); + println!( + " Key compression dictionaries: {}", + format_bytes(stats.key_dict_size) + ); + if sst_count > 0 { + println!( + " Average per file: {}", + format_bytes(stats.key_dict_size / sst_count as u64) + ); + } + println!( + " Block directories: {}", + format_bytes(stats.block_directory_size) + ); + if sst_count > 0 { + println!( + " Average per file: {}", + format_bytes(stats.block_directory_size / sst_count as u64) + ); + } + + println!(); + println!(" Block Statistics:"); + print!(" "); + print_block_stats("Index blocks", &stats.index_blocks); + print!(" "); + print_block_stats("Key blocks", &stats.key_blocks); + print!(" "); + print_block_stats("Value blocks", &stats.value_blocks); + + println!(); + print_entry_histogram(stats, " "); + + println!(); + print_value_storage(stats, " "); + + println!(); +} + +fn main() -> Result<()> { + let args: Vec = std::env::args().collect(); + + // Parse arguments + let mut db_path: Option = None; + let mut verbose = false; + + let mut i = 1; + while i < args.len() { + match args[i].as_str() { + "--verbose" | "-v" => verbose = true, + arg if !arg.starts_with('-') => { + if db_path.is_none() { + db_path = Some(PathBuf::from(arg)); + } + } + _ => { + eprintln!("Unknown option: {}", args[i]); + std::process::exit(1); + } + } + i += 1; + } + + let db_path = match db_path { + Some(p) => p, + None => { + eprintln!("Usage: {} [OPTIONS] ", args[0]); + eprintln!(); + eprintln!("Inspects turbo-persistence SST files to report entry type statistics."); + eprintln!(); + eprintln!("Options:"); + eprintln!(" -v, --verbose Show per-SST file details (default: family totals only)"); + eprintln!(); + eprintln!("Entry types:"); + eprintln!(" 0: Small value (stored in separate value block)"); + eprintln!(" 1: Blob reference"); + eprintln!(" 2: Deleted/tombstone"); + eprintln!(" 3: Medium value"); + eprintln!(" 8+: Inline value (size = type - 8)"); + eprintln!(); + eprintln!("For TaskCache (family 3), values are 4-byte TaskIds."); + eprintln!("Expected entry type is 12 (8 + 4) for inline optimization."); + std::process::exit(1); + } + }; + + if !db_path.is_dir() { + bail!("Not a directory: {}", db_path.display()); + } + + // Collect SST info grouped by family + let family_sst_info = collect_sst_info(&db_path)?; + + let total_sst_count: usize = family_sst_info.values().map(|v| v.len()).sum(); + println!( + "Analyzing {} SST files in {}\n", + format_number(total_sst_count as u64), + db_path.display() + ); + + // Analyze and report by family + for (family, sst_list) in &family_sst_info { + let mut family_stats = SstStats::default(); + let mut sst_stats_list: Vec<(u32, SstStats)> = Vec::new(); + + for info in sst_list { + match analyze_sst_file(&db_path, info) { + Ok(stats) => { + family_stats.merge(&stats); + if verbose { + sst_stats_list.push((info.sequence_number, stats)); + } + } + Err(e) => { + eprintln!( + "Warning: Failed to analyze {:08}.sst: {}", + info.sequence_number, e + ); + } + } + } + + // Print family summary + print_family_summary(*family, sst_list.len(), &family_stats); + + // Print per-SST details in verbose mode + if verbose && !sst_stats_list.is_empty() { + println!(" Per-SST Details:"); + for (seq_num, stats) in &sst_stats_list { + print_sst_details(*seq_num, stats); + } + println!(); + } + } + + Ok(()) +} diff --git a/turbopack/crates/turbo-persistence/src/lib.rs b/turbopack/crates/turbo-persistence/src/lib.rs index 588c484c94585..fd17c20c56449 100644 --- a/turbopack/crates/turbo-persistence/src/lib.rs +++ b/turbopack/crates/turbo-persistence/src/lib.rs @@ -13,11 +13,11 @@ mod db; mod key; mod lookup_entry; mod merge_iter; -mod meta_file; +pub mod meta_file; mod meta_file_builder; mod parallel_scheduler; mod sst_filter; -mod static_sorted_file; +pub mod static_sorted_file; mod static_sorted_file_builder; mod value_block_count_tracker; mod value_buf; From cd27e54989c31e4214bab242f6c474f091734ef9 Mon Sep 17 00:00:00 2001 From: "Sebastian \"Sebbie\" Silbermann" Date: Thu, 19 Feb 2026 17:36:59 -0800 Subject: [PATCH 2/6] Upgrade React from `4842fbea-20260217` to `2ba30655-20260219` (#90211) Co-authored-by: nextjs-bot --- package.json | 32 +- .../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 | 23 +- .../react-dom-server.browser.production.js | 21 +- .../cjs/react-dom-server.bun.production.js | 21 +- .../cjs/react-dom-server.edge.development.js | 23 +- .../cjs/react-dom-server.edge.production.js | 21 +- .../cjs/react-dom-server.node.development.js | 23 +- .../cjs/react-dom-server.node.production.js | 21 +- .../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 | 23 +- .../react-dom-server.browser.production.js | 21 +- .../cjs/react-dom-server.bun.production.js | 21 +- .../cjs/react-dom-server.edge.development.js | 23 +- .../cjs/react-dom-server.edge.production.js | 21 +- .../cjs/react-dom-server.node.development.js | 23 +- .../cjs/react-dom-server.node.production.js | 21 +- .../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 | 228 ++- ...dom-turbopack-client.browser.production.js | 75 +- ...r-dom-turbopack-client.edge.development.js | 224 ++- ...er-dom-turbopack-client.edge.production.js | 75 +- ...r-dom-turbopack-client.node.development.js | 224 ++- ...er-dom-turbopack-client.node.production.js | 75 +- ...om-turbopack-server.browser.development.js | 145 +- ...r-dom-turbopack-server.edge.development.js | 145 +- ...r-dom-turbopack-server.node.development.js | 151 +- .../package.json | 4 +- ...om-turbopack-client.browser.development.js | 228 ++- ...dom-turbopack-client.browser.production.js | 75 +- ...r-dom-turbopack-client.edge.development.js | 224 ++- ...er-dom-turbopack-client.edge.production.js | 75 +- ...r-dom-turbopack-client.node.development.js | 224 ++- ...er-dom-turbopack-client.node.production.js | 75 +- ...om-turbopack-server.browser.development.js | 145 +- ...r-dom-turbopack-server.edge.development.js | 145 +- ...r-dom-turbopack-server.node.development.js | 151 +- .../react-server-dom-turbopack/package.json | 4 +- ...-dom-webpack-client.browser.development.js | 228 ++- ...r-dom-webpack-client.browser.production.js | 75 +- ...ver-dom-webpack-client.edge.development.js | 224 ++- ...rver-dom-webpack-client.edge.production.js | 75 +- ...ver-dom-webpack-client.node.development.js | 224 ++- ...rver-dom-webpack-client.node.production.js | 75 +- ...-dom-webpack-server.browser.development.js | 145 +- ...ver-dom-webpack-server.edge.development.js | 145 +- ...ver-dom-webpack-server.node.development.js | 151 +- .../package.json | 4 +- ...-dom-webpack-client.browser.development.js | 228 ++- ...r-dom-webpack-client.browser.production.js | 75 +- ...ver-dom-webpack-client.edge.development.js | 224 ++- ...rver-dom-webpack-client.edge.production.js | 75 +- ...ver-dom-webpack-client.node.development.js | 224 ++- ...rver-dom-webpack-client.node.production.js | 75 +- ...-dom-webpack-server.browser.development.js | 145 +- ...ver-dom-webpack-server.edge.development.js | 145 +- ...ver-dom-webpack-server.node.development.js | 151 +- .../react-server-dom-webpack/package.json | 4 +- .../compiled/react/cjs/react.development.js | 2 +- .../compiled/react/cjs/react.production.js | 2 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/unistore/unistore.js | 2 +- pnpm-lock.yaml | 1748 ++++++++--------- 94 files changed, 4192 insertions(+), 3438 deletions(-) diff --git a/package.json b/package.json index a9f4fcd544583..09737d402687f 100644 --- a/package.json +++ b/package.json @@ -201,7 +201,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-4842fbea-20260217", + "eslint-plugin-react-hooks": "0.0.0-experimental-2ba30655-20260219", "event-stream": "4.0.1", "execa": "2.0.3", "expect": "29.7.0", @@ -261,16 +261,16 @@ "pretty-ms": "7.0.0", "random-seed": "0.3.0", "react": "19.0.0", - "react-builtin": "npm:react@19.3.0-canary-4842fbea-20260217", + "react-builtin": "npm:react@19.3.0-canary-2ba30655-20260219", "react-dom": "19.0.0", - "react-dom-builtin": "npm:react-dom@19.3.0-canary-4842fbea-20260217", - "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-4842fbea-20260217", - "react-experimental-builtin": "npm:react@0.0.0-experimental-4842fbea-20260217", - "react-is-builtin": "npm:react-is@19.3.0-canary-4842fbea-20260217", - "react-server-dom-turbopack": "19.3.0-canary-4842fbea-20260217", - "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-4842fbea-20260217", - "react-server-dom-webpack": "19.3.0-canary-4842fbea-20260217", - "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-4842fbea-20260217", + "react-dom-builtin": "npm:react-dom@19.3.0-canary-2ba30655-20260219", + "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-2ba30655-20260219", + "react-experimental-builtin": "npm:react@0.0.0-experimental-2ba30655-20260219", + "react-is-builtin": "npm:react-is@19.3.0-canary-2ba30655-20260219", + "react-server-dom-turbopack": "19.3.0-canary-2ba30655-20260219", + "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-2ba30655-20260219", + "react-server-dom-webpack": "19.3.0-canary-2ba30655-20260219", + "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-2ba30655-20260219", "react-ssr-prepass": "1.0.8", "react-virtualized": "9.22.3", "relay-compiler": "13.0.2", @@ -280,8 +280,8 @@ "resolve-from": "5.0.0", "sass": "1.54.0", "satori": "0.15.2", - "scheduler-builtin": "npm:scheduler@0.28.0-canary-4842fbea-20260217", - "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-4842fbea-20260217", + "scheduler-builtin": "npm:scheduler@0.28.0-canary-2ba30655-20260219", + "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-2ba30655-20260219", "seedrandom": "3.0.5", "semver": "7.3.7", "serve-handler": "6.1.6", @@ -326,10 +326,10 @@ "@types/react-dom": "19.2.3", "@types/retry": "0.12.0", "jest-snapshot": "30.0.0-alpha.6", - "react": "19.3.0-canary-4842fbea-20260217", - "react-dom": "19.3.0-canary-4842fbea-20260217", - "react-is": "19.3.0-canary-4842fbea-20260217", - "scheduler": "0.28.0-canary-4842fbea-20260217" + "react": "19.3.0-canary-2ba30655-20260219", + "react-dom": "19.3.0-canary-2ba30655-20260219", + "react-is": "19.3.0-canary-2ba30655-20260219", + "scheduler": "0.28.0-canary-2ba30655-20260219" }, "packageExtensions": { "eslint-plugin-react-hooks@0.0.0-experimental-6de32a5a-20250822": { diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js index 7b96c6504b3eb..fdd7ed026ecad 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 @@ -32708,11 +32708,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -32749,10 +32749,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217" + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -32900,7 +32900,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-experimental-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; "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 3bd2cc7bb79a9..b8352eba625f1 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 @@ -19881,14 +19881,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2229 = React.version; if ( - "19.3.0-experimental-4842fbea-20260217" !== + "19.3.0-experimental-2ba30655-20260219" !== isomorphicReactPackageVersion$jscomp$inline_2229 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2229, - "19.3.0-experimental-4842fbea-20260217" + "19.3.0-experimental-2ba30655-20260219" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -19910,10 +19910,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2928 = { bundleType: 0, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217" + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2929 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20020,4 +20020,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-experimental-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 9ea951bc144e2..7e9b77e0ed40a 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 @@ -32765,11 +32765,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -32806,10 +32806,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217" + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -33287,7 +33287,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-experimental-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; "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 b884856d00d27..35ba8fe62f0e4 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 @@ -21964,14 +21964,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2533 = React.version; if ( - "19.3.0-experimental-4842fbea-20260217" !== + "19.3.0-experimental-2ba30655-20260219" !== isomorphicReactPackageVersion$jscomp$inline_2533 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2533, - "19.3.0-experimental-4842fbea-20260217" + "19.3.0-experimental-2ba30655-20260219" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -21993,10 +21993,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_3249 = { bundleType: 0, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217" + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_3250 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -22264,7 +22264,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-experimental-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; "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 f2158acc0ce24..6d97d9d163aa0 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-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 0089880edbf2e..c493cfbf4fd25 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-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 b7edbbaf466c9..775536e9d3d98 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-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 ad9dc1659d33f..53272da1dfcf4 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-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 022ef96633299..81a876b9e3475 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 @@ -4012,10 +4012,10 @@ childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } - function hasSuspenseyContent(hoistableState) { - return ( - 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages - ); + function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } function getComponentNameFromType(type) { if (null == type) return null; @@ -4886,7 +4886,7 @@ function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -8712,7 +8712,7 @@ !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -9057,7 +9057,9 @@ completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var resumableState$jscomp$0 = request.resumableState, renderState$jscomp$0 = request.renderState; @@ -9492,11 +9494,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11068,7 +11070,8 @@ didWarnAboutGenerators = !1, didWarnAboutMaps = !1, flushedByteSize = 0, - flushingPartialBoundaries = !1; + flushingPartialBoundaries = !1, + flushingShell = !1; ensureCorrectIsomorphicReactVersion(); ensureCorrectIsomorphicReactVersion(); exports.prerender = function (children, options) { @@ -11319,5 +11322,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 90795afe52d03..61faca0494cb7 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 @@ -3544,8 +3544,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); @@ -4314,7 +4316,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -7092,7 +7094,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -7258,7 +7260,8 @@ function flushPartiallyCompletedSegment( : writeChunkAndReturn(destination, dataElementQuotedEnd); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { currentView = new Uint8Array(2048); writtenBytes = 0; @@ -7364,7 +7367,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var resumableState$jscomp$0 = request.resumableState, renderState$jscomp$0 = request.renderState; @@ -7688,12 +7693,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-experimental-4842fbea-20260217" + "19.3.0-experimental-2ba30655-20260219" ) ); } @@ -7944,4 +7949,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 a23b48265a8f5..64f0c3486e419 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 @@ -3144,8 +3144,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); @@ -3942,7 +3944,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -6766,7 +6768,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -6949,7 +6951,8 @@ function flushPartiallyCompletedSegment( : !!destination.write('">'); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { try { if (!(0 < request.pendingRootTasks)) { @@ -7058,7 +7061,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var resumableState$jscomp$0 = request.resumableState, renderState$jscomp$0 = request.renderState; @@ -7383,11 +7388,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7932,4 +7937,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 9f1688c7b2b9d..77c03c1dc04d4 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 @@ -4014,10 +4014,10 @@ childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } - function hasSuspenseyContent(hoistableState) { - return ( - 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages - ); + function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } function getComponentNameFromType(type) { if (null == type) return null; @@ -4894,7 +4894,7 @@ function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -8728,7 +8728,7 @@ !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -9073,7 +9073,9 @@ completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var resumableState$jscomp$0 = request.resumableState, renderState$jscomp$0 = request.renderState; @@ -9521,11 +9523,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11093,7 +11095,8 @@ didWarnAboutGenerators = !1, didWarnAboutMaps = !1, flushedByteSize = 0, - flushingPartialBoundaries = !1; + flushingPartialBoundaries = !1, + flushingShell = !1; ensureCorrectIsomorphicReactVersion(); ensureCorrectIsomorphicReactVersion(); exports.prerender = function (children, options) { @@ -11344,5 +11347,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 5ddd8c8231f2b..53afc209e5387 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 @@ -3559,8 +3559,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, supportsRequestStorage = "function" === typeof AsyncLocalStorage, @@ -4366,7 +4368,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -7187,7 +7189,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -7358,7 +7360,8 @@ function flushPartiallyCompletedSegment( : writeChunkAndReturn(destination, dataElementQuotedEnd); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { currentView = new Uint8Array(4096); writtenBytes = 0; @@ -7469,7 +7472,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var resumableState$jscomp$0 = request.resumableState, renderState$jscomp$0 = request.renderState; @@ -7806,11 +7811,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8060,4 +8065,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 f45e53c3b4569..3af934b1ca08b 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 @@ -3906,10 +3906,10 @@ childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } - function hasSuspenseyContent(hoistableState) { - return ( - 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages - ); + function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } function getComponentNameFromType(type) { if (null == type) return null; @@ -4783,7 +4783,7 @@ function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -8604,7 +8604,7 @@ !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -8947,7 +8947,9 @@ completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var resumableState$jscomp$0 = request.resumableState, renderState$jscomp$0 = request.renderState; @@ -9381,11 +9383,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -11054,7 +11056,8 @@ didWarnAboutGenerators = !1, didWarnAboutMaps = !1, flushedByteSize = 0, - flushingPartialBoundaries = !1; + flushingPartialBoundaries = !1, + flushingShell = !1; ensureCorrectIsomorphicReactVersion(); ensureCorrectIsomorphicReactVersion(); exports.prerender = function (children, options) { @@ -11510,5 +11513,5 @@ } }; }; - exports.version = "19.3.0-experimental-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 7a72f11640541..276abb6aa7956 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 @@ -3451,8 +3451,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, requestStorage = new async_hooks.AsyncLocalStorage(), @@ -4254,7 +4256,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -7072,7 +7074,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -7243,7 +7245,8 @@ function flushPartiallyCompletedSegment( : writeChunkAndReturn(destination, dataElementQuotedEnd); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { currentView = new Uint8Array(4096); writtenBytes = 0; @@ -7355,7 +7358,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var resumableState$jscomp$0 = request.resumableState, renderState$jscomp$0 = request.renderState; @@ -7685,11 +7690,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8239,4 +8244,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 72cc99206f3b0..99f4712d08ae4 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 @@ -33029,11 +33029,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33070,10 +33070,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217" + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -33387,5 +33387,5 @@ } }; }; - exports.version = "19.3.0-experimental-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 8006f1d42cb44..404d780c8a4a0 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 @@ -20197,14 +20197,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2258 = React.version; if ( - "19.3.0-experimental-4842fbea-20260217" !== + "19.3.0-experimental-2ba30655-20260219" !== isomorphicReactPackageVersion$jscomp$inline_2258 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2258, - "19.3.0-experimental-4842fbea-20260217" + "19.3.0-experimental-2ba30655-20260219" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20226,10 +20226,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2962 = { bundleType: 0, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217" + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2963 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20487,4 +20487,4 @@ exports.observeVisibleRects = function ( } }; }; -exports.version = "19.3.0-experimental-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 1b825dc397349..9dfbafe3950e8 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-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; "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 c0d86df3ccdc7..370488851ca5a 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-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 8cfe42a3c1dcd..4ed83b904b18a 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-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 adb1b7e8128ec..6c7b21dd21f04 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-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; diff --git a/packages/next/src/compiled/react-dom-experimental/package.json b/packages/next/src/compiled/react-dom-experimental/package.json index 240620d6c8f8b..de5732a0df9a0 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-4842fbea-20260217" + "scheduler": "0.0.0-experimental-2ba30655-20260219" }, "peerDependencies": { - "react": "0.0.0-experimental-4842fbea-20260217" + "react": "0.0.0-experimental-2ba30655-20260219" }, "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 95041d58004cc..b285a6cf356e4 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 @@ -30463,11 +30463,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -30504,10 +30504,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-4842fbea-20260217", + version: "19.3.0-canary-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-4842fbea-20260217" + reconcilerVersion: "19.3.0-canary-2ba30655-20260219" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -30645,7 +30645,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-canary-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; "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 9f3905be0baa6..a80c2f19121cf 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 @@ -18084,14 +18084,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2036 = React.version; if ( - "19.3.0-canary-4842fbea-20260217" !== + "19.3.0-canary-2ba30655-20260219" !== isomorphicReactPackageVersion$jscomp$inline_2036 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2036, - "19.3.0-canary-4842fbea-20260217" + "19.3.0-canary-2ba30655-20260219" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -18113,10 +18113,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2622 = { bundleType: 0, - version: "19.3.0-canary-4842fbea-20260217", + version: "19.3.0-canary-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-4842fbea-20260217" + reconcilerVersion: "19.3.0-canary-2ba30655-20260219" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2623 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -18214,4 +18214,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-canary-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 c822d0cb8d904..cefda6c2a8a72 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 @@ -30521,11 +30521,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -30562,10 +30562,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-4842fbea-20260217", + version: "19.3.0-canary-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-4842fbea-20260217" + reconcilerVersion: "19.3.0-canary-2ba30655-20260219" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -31033,7 +31033,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-canary-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; "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 294e8bf5efb92..20aa95ac18ee8 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 @@ -20014,14 +20014,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2340 = React.version; if ( - "19.3.0-canary-4842fbea-20260217" !== + "19.3.0-canary-2ba30655-20260219" !== isomorphicReactPackageVersion$jscomp$inline_2340 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2340, - "19.3.0-canary-4842fbea-20260217" + "19.3.0-canary-2ba30655-20260219" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20043,10 +20043,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2939 = { bundleType: 0, - version: "19.3.0-canary-4842fbea-20260217", + version: "19.3.0-canary-2ba30655-20260219", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-4842fbea-20260217" + reconcilerVersion: "19.3.0-canary-2ba30655-20260219" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2940 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20305,7 +20305,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-canary-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; "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 c576256b1758c..3fe0edc945642 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-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; })(); 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 ca21e1dd41868..ee1cbb33ec821 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-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 e3b3e031ad5a3..4a72261afa4e0 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-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; })(); 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 0262cf151b21d..e935ba3e3b4f0 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-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 488e228155d68..cf8051831a117 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 @@ -3809,10 +3809,10 @@ childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } - function hasSuspenseyContent(hoistableState) { - return ( - 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages - ); + function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } function getComponentNameFromType(type) { if (null == type) return null; @@ -4673,7 +4673,7 @@ function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -8413,7 +8413,7 @@ !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -8697,7 +8697,9 @@ completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var renderState$jscomp$0 = request.renderState; if ( @@ -9103,11 +9105,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -10662,7 +10664,8 @@ didWarnAboutGenerators = !1, didWarnAboutMaps = !1, flushedByteSize = 0, - flushingPartialBoundaries = !1; + flushingPartialBoundaries = !1, + flushingShell = !1; ensureCorrectIsomorphicReactVersion(); ensureCorrectIsomorphicReactVersion(); exports.prerender = function (children, options) { @@ -10913,5 +10916,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; })(); 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 e9552a97bae61..70611d5baed58 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 @@ -3341,8 +3341,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); @@ -4101,7 +4103,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -6817,7 +6819,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -6962,7 +6964,8 @@ function flushPartiallyCompletedSegment( destination = writeChunkAndReturn(destination, completeSegmentScriptEnd); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { currentView = new Uint8Array(2048); writtenBytes = 0; @@ -7044,7 +7047,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var renderState$jscomp$0 = request.renderState; if ( @@ -7365,12 +7370,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-canary-4842fbea-20260217" + "19.3.0-canary-2ba30655-20260219" ) ); } @@ -7621,4 +7626,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 b733ec7815fba..098cd549fade1 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 @@ -2964,8 +2964,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); @@ -3752,7 +3754,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -6514,7 +6516,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -6679,7 +6681,8 @@ function flushPartiallyCompletedSegment( destination = !!destination.write('")\x3c/script>'); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { try { if (!(0 < request.pendingRootTasks)) { @@ -6759,7 +6762,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var renderState$jscomp$0 = request.renderState; if ( @@ -7073,11 +7078,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7622,4 +7627,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 ad525ec35e9b1..f5199f320ebdb 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 @@ -3805,10 +3805,10 @@ childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } - function hasSuspenseyContent(hoistableState) { - return ( - 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages - ); + function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } function getComponentNameFromType(type) { if (null == type) return null; @@ -4675,7 +4675,7 @@ function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -8423,7 +8423,7 @@ !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -8707,7 +8707,9 @@ completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var renderState$jscomp$0 = request.renderState; if ( @@ -9126,11 +9128,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -10681,7 +10683,8 @@ didWarnAboutGenerators = !1, didWarnAboutMaps = !1, flushedByteSize = 0, - flushingPartialBoundaries = !1; + flushingPartialBoundaries = !1, + flushingShell = !1; ensureCorrectIsomorphicReactVersion(); ensureCorrectIsomorphicReactVersion(); exports.prerender = function (children, options) { @@ -10932,5 +10935,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; })(); 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 9b01c29675b18..b20edca7aa715 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 @@ -3350,8 +3350,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, supportsRequestStorage = "function" === typeof AsyncLocalStorage, @@ -4147,7 +4149,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -6906,7 +6908,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -7056,7 +7058,8 @@ function flushPartiallyCompletedSegment( destination = writeChunkAndReturn(destination, completeSegmentScriptEnd); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { currentView = new Uint8Array(4096); writtenBytes = 0; @@ -7138,7 +7141,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var renderState$jscomp$0 = request.renderState; if ( @@ -7472,11 +7477,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7726,4 +7731,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 24f7046769867..e78dc0955c187 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 @@ -3711,10 +3711,10 @@ childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } - function hasSuspenseyContent(hoistableState) { - return ( - 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages - ); + function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } function getComponentNameFromType(type) { if (null == type) return null; @@ -4578,7 +4578,7 @@ function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -8313,7 +8313,7 @@ !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -8598,7 +8598,9 @@ completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var renderState$jscomp$0 = request.renderState; if ( @@ -9000,11 +9002,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -10656,7 +10658,8 @@ didWarnAboutGenerators = !1, didWarnAboutMaps = !1, flushedByteSize = 0, - flushingPartialBoundaries = !1; + flushingPartialBoundaries = !1, + flushingShell = !1; ensureCorrectIsomorphicReactVersion(); ensureCorrectIsomorphicReactVersion(); exports.prerender = function (children, options) { @@ -11112,5 +11115,5 @@ } }; }; - exports.version = "19.3.0-canary-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; })(); 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 7c7bc1fbde8fb..a6b9010b21503 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 @@ -3257,8 +3257,10 @@ function hoistHoistables(parentState, childState) { childState.stylesheets.forEach(hoistStylesheetDependency, parentState); childState.suspenseyImages && (parentState.suspenseyImages = !0); } -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; +function hasSuspenseyContent(hoistableState, flushingInShell) { + return flushingInShell + ? hoistableState.suspenseyImages + : 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; } var bind = Function.prototype.bind, requestStorage = new async_hooks.AsyncLocalStorage(), @@ -4050,7 +4052,7 @@ function getViewTransitionClassName(defaultClass, eventClass) { function isEligibleForOutlining(request, boundary) { return ( (500 < boundary.byteSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, !1) || boundary.defer) && null === boundary.preamble ); @@ -6806,7 +6808,7 @@ function flushSegment(request, destination, segment, hoistableState) { !flushingPartialBoundaries && isEligibleForOutlining(request, boundary) && (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState) || + hasSuspenseyContent(boundary.contentState, flushingShell) || boundary.defer) ) (boundary.rootSegmentID = request.nextSegmentId++), @@ -6956,7 +6958,8 @@ function flushPartiallyCompletedSegment( destination = writeChunkAndReturn(destination, completeSegmentScriptEnd); return destination; } -var flushingPartialBoundaries = !1; +var flushingPartialBoundaries = !1, + flushingShell = !1; function flushCompletedQueues(request, destination) { currentView = new Uint8Array(4096); writtenBytes = 0; @@ -7039,7 +7042,9 @@ function flushCompletedQueues(request, destination) { completedPreambleSegments++ ) writeChunk(destination, bodyChunks[completedPreambleSegments]); + flushingShell = !0; flushSegment(request, destination, completedRootSegment, null); + flushingShell = !1; request.completedRootSegment = null; var renderState$jscomp$0 = request.renderState; if ( @@ -7363,11 +7368,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-4842fbea-20260217" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-2ba30655-20260219" !== 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-4842fbea-20260217\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-2ba30655-20260219\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7917,4 +7922,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 b91d18882b527..b026df38c46ca 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-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; "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 58d33ffa1d075..9fa31d372b800 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-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 6157e8787ed61..1ae45a45372d4 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-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; })(); 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 6b287f7a86ae7..5d5c10cfbe188 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-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; diff --git a/packages/next/src/compiled/react-dom/package.json b/packages/next/src/compiled/react-dom/package.json index c5598e04148ab..9dc340aec8e08 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-4842fbea-20260217" + "scheduler": "0.28.0-canary-2ba30655-20260219" }, "peerDependencies": { - "react": "19.3.0-canary-4842fbea-20260217" + "react": "19.3.0-canary-2ba30655-20260219" }, "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 7847baba429bc..367754a8c6ad0 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-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; "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 93c97ce532d56..7da4e253784ec 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-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; 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 b93d642975de8..8a4d91d2b95ad 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-4842fbea-20260217"; + exports.version = "19.3.0-experimental-2ba30655-20260219"; })(); 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 a8be6a7eebb45..3af7f60576946 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-4842fbea-20260217"; +exports.version = "19.3.0-experimental-2ba30655-20260219"; diff --git a/packages/next/src/compiled/react-is/package.json b/packages/next/src/compiled/react-is/package.json index 41863b1a54519..cd6bd5dcd1bae 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-4842fbea-20260217", + "version": "19.3.0-canary-2ba30655-20260219", "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 4a77688d39294..68ea58c6e0d6d 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 @@ -1857,7 +1857,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2552,6 +2552,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2763,6 +2764,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2809,7 +2811,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -2845,7 +2846,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -2932,7 +2932,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3215,19 +3215,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3238,14 +3252,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4361,7 +4375,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4601,88 +4615,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(weakResponse)) { @@ -5114,10 +5144,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217", + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219", 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 e4427c2f66a7b..f8ba96496f81f 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 @@ -745,7 +745,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1335,12 +1335,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1353,7 +1351,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); if ((model = preloadModule(clientReference))) { if (chunk) { @@ -1677,7 +1675,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1770,42 +1768,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 ae30c843e11be..2f1bded1c50e0 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 @@ -2010,7 +2010,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2711,6 +2711,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2922,6 +2923,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2968,7 +2970,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3004,7 +3005,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -3071,7 +3071,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3359,19 +3359,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3382,14 +3396,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4502,7 +4516,7 @@ case 72: id = buffer[0]; streamState = buffer.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4640,88 +4654,104 @@ tag.set(id, buffer)); } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (void 0 !== weakResponse.weak.deref()) { 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 5320966cec5be..24631fd435e30 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 @@ -915,7 +915,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1519,12 +1519,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1537,7 +1535,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1866,7 +1864,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1959,42 +1957,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 cb65903928cf0..4c6332c961757 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 @@ -2013,7 +2013,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2714,6 +2714,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2925,6 +2926,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2971,7 +2973,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3007,7 +3008,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createResponse( bundlerConfig, @@ -3129,7 +3129,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3417,19 +3417,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3440,14 +3454,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4563,7 +4577,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4803,88 +4817,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(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 aa493acae2484..fe5db4c2f22c0 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 @@ -916,7 +916,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1520,12 +1520,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function createStreamState() { return { _rowState: 0, _rowID: 0, _rowTag: 0, _rowLength: 0, _buffer: [] }; @@ -1541,7 +1539,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1876,7 +1874,7 @@ function processFullStringRow(response, streamState, id, tag, row) { case 72: id = row[0]; row = row.slice(1); - response = JSON.parse(row, response._fromJSON); + response = parseModel(response, row); row = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -2063,42 +2061,53 @@ function processBinaryChunk(weakResponse, streamState, chunk) { streamState._rowTag = rowTag; streamState._rowLength = rowLength; } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 5957e87caf5bb..ac07e825752f9 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 @@ -1018,7 +1018,7 @@ TaintRegistryPendingRequests.add(cleanupQueue); var hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1127,7 +1127,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1273,7 +1273,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1301,7 +1301,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1311,9 +1311,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1343,7 +1343,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1353,11 +1353,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1396,9 +1396,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1433,7 +1433,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1444,11 +1444,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1806,7 +1806,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -1957,7 +1957,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -1986,7 +1986,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2247,7 +2247,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2260,7 +2260,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2270,11 +2270,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2314,8 +2314,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2383,7 +2383,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2746,7 +2746,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2765,19 +2765,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2785,6 +2782,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2805,6 +2809,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3136,25 +3141,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3190,9 +3200,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3510,16 +3520,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3550,15 +3560,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3576,7 +3586,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3619,10 +3629,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3630,10 +3640,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3772,7 +3782,7 @@ return performWork(request); }); scheduleWork(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -3790,7 +3800,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3834,7 +3844,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5582,8 +5592,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, TaintRegistryObjects = ReactSharedInternalsServer.TaintRegistryObjects, TaintRegistryValues = ReactSharedInternalsServer.TaintRegistryValues, TaintRegistryByteLengths = @@ -5832,7 +5851,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 277b964825fad..a4d5a728d58a6 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 @@ -1025,7 +1025,7 @@ TaintRegistryPendingRequests.add(cleanupQueue); var hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1134,7 +1134,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1285,7 +1285,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1313,7 +1313,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1323,9 +1323,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1355,7 +1355,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1365,11 +1365,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1408,9 +1408,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1445,7 +1445,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1456,11 +1456,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1866,7 +1866,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -2017,7 +2017,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2046,7 +2046,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2307,7 +2307,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2320,7 +2320,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2330,11 +2330,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2374,8 +2374,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2443,7 +2443,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2817,7 +2817,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2836,19 +2836,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2856,6 +2853,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2876,6 +2880,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3206,25 +3211,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3260,9 +3270,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3580,16 +3590,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3620,15 +3630,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3646,7 +3656,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3689,10 +3699,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3700,10 +3710,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3846,7 +3856,7 @@ return performWork(request); }); setTimeout(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }, 0); } function enqueueFlush(request) { @@ -3864,7 +3874,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3908,7 +3918,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5656,8 +5666,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, TaintRegistryObjects = ReactSharedInternalsServer.TaintRegistryObjects, TaintRegistryValues = ReactSharedInternalsServer.TaintRegistryValues, TaintRegistryByteLengths = @@ -5947,7 +5966,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 dca233beb6930..f64855734eb49 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 @@ -1125,7 +1125,7 @@ TaintRegistryPendingRequests.add(cleanupQueue); var hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1234,7 +1234,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1382,7 +1382,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1410,7 +1410,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1420,9 +1420,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(entry), request.abortableTasks.delete(streamTask), @@ -1452,7 +1452,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1462,11 +1462,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1505,9 +1505,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1542,7 +1542,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1553,11 +1553,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1935,7 +1935,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -2280,7 +2280,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2309,7 +2309,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2569,7 +2569,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2582,7 +2582,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2592,11 +2592,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2636,8 +2636,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2705,7 +2705,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -3074,7 +3074,7 @@ cleanupTaintQueue(request); null !== request.destination ? ((request.status = CLOSED), request.destination.destroy(error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -3093,19 +3093,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -3113,6 +3110,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -3133,6 +3137,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; debug ? request.completedDebugChunks.push(id) @@ -3558,25 +3563,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3612,9 +3622,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3971,16 +3981,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -4012,15 +4022,15 @@ processedChunk = task.id.toString(16) + ":" + json + "\n"; request.completedRegularChunks.push(processedChunk); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -4038,7 +4048,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -4082,10 +4092,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -4093,10 +4103,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -4239,7 +4249,7 @@ requestStorage.run(request, performWork, request); }); setImmediate(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -4257,7 +4267,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), destination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.destination) { request.destination = destination; @@ -4269,7 +4279,7 @@ } } function startFlowingDebug(request, debugDestination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), debugDestination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.debugDestination) { request.debugDestination = debugDestination; @@ -4312,7 +4322,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -6349,8 +6359,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, TaintRegistryObjects = ReactSharedInternalsServer.TaintRegistryObjects, TaintRegistryValues = ReactSharedInternalsServer.TaintRegistryValues, TaintRegistryByteLengths = @@ -6562,13 +6581,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_281 = []; + var JSCompiler_object_inline_chunks_284 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_281.push(chunk); + JSCompiler_object_inline_chunks_284.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_281, { + var blob = new Blob(JSCompiler_object_inline_chunks_284, { 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 2c69b770ef8f8..d1c62b885fe1a 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-4842fbea-20260217", - "react-dom": "0.0.0-experimental-4842fbea-20260217" + "react": "0.0.0-experimental-2ba30655-20260219", + "react-dom": "0.0.0-experimental-2ba30655-20260219" } } \ 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 90f10483bed91..164a695d11726 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 @@ -1857,7 +1857,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2552,6 +2552,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2763,6 +2764,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2809,7 +2811,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -2845,7 +2846,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -2932,7 +2932,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3215,19 +3215,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3238,14 +3252,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4361,7 +4375,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4601,88 +4615,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(weakResponse)) { @@ -5114,10 +5144,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-4842fbea-20260217", + version: "19.3.0-canary-2ba30655-20260219", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-4842fbea-20260217", + reconcilerVersion: "19.3.0-canary-2ba30655-20260219", 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 e4427c2f66a7b..f8ba96496f81f 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 @@ -745,7 +745,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1335,12 +1335,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1353,7 +1351,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); if ((model = preloadModule(clientReference))) { if (chunk) { @@ -1677,7 +1675,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1770,42 +1768,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 ae30c843e11be..2f1bded1c50e0 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 @@ -2010,7 +2010,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2711,6 +2711,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2922,6 +2923,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2968,7 +2970,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3004,7 +3005,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -3071,7 +3071,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3359,19 +3359,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3382,14 +3396,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4502,7 +4516,7 @@ case 72: id = buffer[0]; streamState = buffer.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4640,88 +4654,104 @@ tag.set(id, buffer)); } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (void 0 !== weakResponse.weak.deref()) { 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 5320966cec5be..24631fd435e30 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 @@ -915,7 +915,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1519,12 +1519,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1537,7 +1535,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1866,7 +1864,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1959,42 +1957,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 cb65903928cf0..4c6332c961757 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 @@ -2013,7 +2013,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2714,6 +2714,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2925,6 +2926,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2971,7 +2973,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3007,7 +3008,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createResponse( bundlerConfig, @@ -3129,7 +3129,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3417,19 +3417,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3440,14 +3454,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4563,7 +4577,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4803,88 +4817,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(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 aa493acae2484..fe5db4c2f22c0 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 @@ -916,7 +916,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1520,12 +1520,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function createStreamState() { return { _rowState: 0, _rowID: 0, _rowTag: 0, _rowLength: 0, _buffer: [] }; @@ -1541,7 +1539,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1876,7 +1874,7 @@ function processFullStringRow(response, streamState, id, tag, row) { case 72: id = row[0]; row = row.slice(1); - response = JSON.parse(row, response._fromJSON); + response = parseModel(response, row); row = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -2063,42 +2061,53 @@ function processBinaryChunk(weakResponse, streamState, chunk) { streamState._rowTag = rowTag; streamState._rowLength = rowLength; } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 8768dcc07f1b1..90219d525fe8e 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 @@ -1000,7 +1000,7 @@ pingedTasks = [], hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1109,7 +1109,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1255,7 +1255,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1283,7 +1283,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1293,9 +1293,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1325,7 +1325,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1335,11 +1335,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1378,9 +1378,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1415,7 +1415,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1426,11 +1426,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1788,7 +1788,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -1939,7 +1939,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -1968,7 +1968,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2229,7 +2229,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2242,7 +2242,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2252,11 +2252,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2296,8 +2296,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2365,7 +2365,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2716,7 +2716,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2735,19 +2735,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2755,6 +2752,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2775,6 +2779,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3093,25 +3098,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3147,9 +3157,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3465,16 +3475,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3505,15 +3515,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3531,7 +3541,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3574,10 +3584,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3585,10 +3595,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3726,7 +3736,7 @@ return performWork(request); }); scheduleWork(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -3744,7 +3754,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3788,7 +3798,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5536,8 +5546,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, currentRequest = null, canEmitDebugInfo = !1, serializedSize = 0, @@ -5780,7 +5799,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 aa3ba15139517..bd928068ccfe6 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 @@ -1007,7 +1007,7 @@ pingedTasks = [], hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1116,7 +1116,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1267,7 +1267,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1295,7 +1295,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1305,9 +1305,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1337,7 +1337,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1347,11 +1347,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1390,9 +1390,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1427,7 +1427,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1438,11 +1438,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1848,7 +1848,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -1999,7 +1999,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2028,7 +2028,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2289,7 +2289,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2302,7 +2302,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2312,11 +2312,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2356,8 +2356,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2425,7 +2425,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2787,7 +2787,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2806,19 +2806,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2826,6 +2823,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2846,6 +2850,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3163,25 +3168,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3217,9 +3227,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3535,16 +3545,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3575,15 +3585,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3601,7 +3611,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3644,10 +3654,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3655,10 +3665,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3800,7 +3810,7 @@ return performWork(request); }); setTimeout(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }, 0); } function enqueueFlush(request) { @@ -3818,7 +3828,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3862,7 +3872,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5610,8 +5620,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, currentRequest = null, canEmitDebugInfo = !1, serializedSize = 0, @@ -5895,7 +5914,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 64f10d2e475a7..4f7a24e347416 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 @@ -1107,7 +1107,7 @@ pingedTasks = [], hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1216,7 +1216,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1364,7 +1364,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1392,7 +1392,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1402,9 +1402,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(entry), request.abortableTasks.delete(streamTask), @@ -1434,7 +1434,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1444,11 +1444,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1487,9 +1487,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1524,7 +1524,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1535,11 +1535,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1917,7 +1917,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -2262,7 +2262,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2291,7 +2291,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2551,7 +2551,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2564,7 +2564,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2574,11 +2574,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2618,8 +2618,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2687,7 +2687,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -3044,7 +3044,7 @@ onFatalError(error); null !== request.destination ? ((request.status = CLOSED), request.destination.destroy(error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -3063,19 +3063,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -3083,6 +3080,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -3103,6 +3107,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; debug ? request.completedDebugChunks.push(id) @@ -3515,25 +3520,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3569,9 +3579,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3926,16 +3936,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3967,15 +3977,15 @@ processedChunk = task.id.toString(16) + ":" + json + "\n"; request.completedRegularChunks.push(processedChunk); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3993,7 +4003,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -4037,10 +4047,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -4048,10 +4058,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -4193,7 +4203,7 @@ requestStorage.run(request, performWork, request); }); setImmediate(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -4211,7 +4221,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), destination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.destination) { request.destination = destination; @@ -4223,7 +4233,7 @@ } } function startFlowingDebug(request, debugDestination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), debugDestination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.debugDestination) { request.debugDestination = debugDestination; @@ -4266,7 +4276,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -6303,8 +6313,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, currentRequest = null, canEmitDebugInfo = !1, serializedSize = 0, @@ -6510,13 +6529,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_281 = []; + var JSCompiler_object_inline_chunks_284 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_281.push(chunk); + JSCompiler_object_inline_chunks_284.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_281, { + var blob = new Blob(JSCompiler_object_inline_chunks_284, { 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 33b3caf9ce9ef..6a9017ca3910e 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-4842fbea-20260217", - "react-dom": "19.3.0-canary-4842fbea-20260217" + "react": "19.3.0-canary-2ba30655-20260219", + "react-dom": "19.3.0-canary-2ba30655-20260219" } } \ 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 a70da90ab8964..2eccd30ae9dc7 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 @@ -1866,7 +1866,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2561,6 +2561,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2772,6 +2773,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2818,7 +2820,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -2854,7 +2855,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -2941,7 +2941,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3224,19 +3224,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3247,14 +3261,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4370,7 +4384,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4610,88 +4624,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(weakResponse)) { @@ -5130,10 +5160,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-4842fbea-20260217", + version: "19.3.0-experimental-2ba30655-20260219", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-4842fbea-20260217", + reconcilerVersion: "19.3.0-experimental-2ba30655-20260219", 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 40208177b9e5c..80395e92dae84 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 @@ -756,7 +756,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1346,12 +1346,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1364,7 +1362,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); if ((model = preloadModule(clientReference))) { if (chunk) { @@ -1688,7 +1686,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1781,42 +1779,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 e1e723cffb8cf..6577db0ef1e5e 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 @@ -2013,7 +2013,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2714,6 +2714,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2925,6 +2926,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2971,7 +2973,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3007,7 +3008,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -3074,7 +3074,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3362,19 +3362,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3385,14 +3399,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4505,7 +4519,7 @@ case 72: id = buffer[0]; streamState = buffer.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4643,88 +4657,104 @@ tag.set(id, buffer)); } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (void 0 !== weakResponse.weak.deref()) { 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 b93bbcea66eb4..5ee924239c2bc 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 @@ -917,7 +917,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1521,12 +1521,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1539,7 +1537,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1868,7 +1866,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1961,42 +1959,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 669bce12ed200..8ba308220d46a 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 @@ -2016,7 +2016,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2717,6 +2717,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2928,6 +2929,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2974,7 +2976,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3010,7 +3011,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createResponse( bundlerConfig, @@ -3132,7 +3132,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3420,19 +3420,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3443,14 +3457,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4566,7 +4580,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4806,88 +4820,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(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 4d89c894e4f47..b91f58cd6ec57 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 @@ -918,7 +918,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1522,12 +1522,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function createStreamState() { return { _rowState: 0, _rowID: 0, _rowTag: 0, _rowLength: 0, _buffer: [] }; @@ -1543,7 +1541,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1878,7 +1876,7 @@ function processFullStringRow(response, streamState, id, tag, row) { case 72: id = row[0]; row = row.slice(1); - response = JSON.parse(row, response._fromJSON); + response = parseModel(response, row); row = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -2065,42 +2063,53 @@ function processBinaryChunk(weakResponse, streamState, chunk) { streamState._rowTag = rowTag; streamState._rowLength = rowLength; } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 e63131e03e2d1..77bee7a978471 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 @@ -1018,7 +1018,7 @@ TaintRegistryPendingRequests.add(cleanupQueue); var hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1127,7 +1127,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1273,7 +1273,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1301,7 +1301,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1311,9 +1311,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1343,7 +1343,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1353,11 +1353,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1396,9 +1396,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1433,7 +1433,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1444,11 +1444,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1806,7 +1806,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -1957,7 +1957,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -1986,7 +1986,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2247,7 +2247,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2260,7 +2260,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2270,11 +2270,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2314,8 +2314,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2383,7 +2383,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2746,7 +2746,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2765,19 +2765,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2785,6 +2782,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2805,6 +2809,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3136,25 +3141,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3190,9 +3200,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3510,16 +3520,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3550,15 +3560,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3576,7 +3586,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3619,10 +3629,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3630,10 +3640,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3772,7 +3782,7 @@ return performWork(request); }); scheduleWork(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -3790,7 +3800,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3834,7 +3844,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5589,8 +5599,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, TaintRegistryObjects = ReactSharedInternalsServer.TaintRegistryObjects, TaintRegistryValues = ReactSharedInternalsServer.TaintRegistryValues, TaintRegistryByteLengths = @@ -5846,7 +5865,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 ba079df05e7bf..38b9cc6db09d4 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 @@ -1025,7 +1025,7 @@ TaintRegistryPendingRequests.add(cleanupQueue); var hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1134,7 +1134,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1285,7 +1285,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1313,7 +1313,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1323,9 +1323,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1355,7 +1355,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1365,11 +1365,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1408,9 +1408,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1445,7 +1445,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1456,11 +1456,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1866,7 +1866,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -2017,7 +2017,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2046,7 +2046,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2307,7 +2307,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2320,7 +2320,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2330,11 +2330,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2374,8 +2374,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2443,7 +2443,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2817,7 +2817,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2836,19 +2836,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2856,6 +2853,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2876,6 +2880,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3206,25 +3211,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3260,9 +3270,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3580,16 +3590,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3620,15 +3630,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3646,7 +3656,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3689,10 +3699,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3700,10 +3710,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3846,7 +3856,7 @@ return performWork(request); }); setTimeout(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }, 0); } function enqueueFlush(request) { @@ -3864,7 +3874,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3908,7 +3918,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5659,8 +5669,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, TaintRegistryObjects = ReactSharedInternalsServer.TaintRegistryObjects, TaintRegistryValues = ReactSharedInternalsServer.TaintRegistryValues, TaintRegistryByteLengths = @@ -5949,7 +5968,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 af763b3010893..eee1f5cda6fdc 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 @@ -1125,7 +1125,7 @@ TaintRegistryPendingRequests.add(cleanupQueue); var hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1234,7 +1234,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1382,7 +1382,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1410,7 +1410,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1420,9 +1420,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(entry), request.abortableTasks.delete(streamTask), @@ -1452,7 +1452,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1462,11 +1462,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1505,9 +1505,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1542,7 +1542,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1553,11 +1553,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1935,7 +1935,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -2280,7 +2280,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2309,7 +2309,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2569,7 +2569,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2582,7 +2582,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2592,11 +2592,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2636,8 +2636,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2705,7 +2705,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -3074,7 +3074,7 @@ cleanupTaintQueue(request); null !== request.destination ? ((request.status = CLOSED), request.destination.destroy(error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -3093,19 +3093,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -3113,6 +3110,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -3133,6 +3137,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; debug ? request.completedDebugChunks.push(id) @@ -3558,25 +3563,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3612,9 +3622,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3971,16 +3981,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -4012,15 +4022,15 @@ processedChunk = task.id.toString(16) + ":" + json + "\n"; request.completedRegularChunks.push(processedChunk); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -4038,7 +4048,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -4082,10 +4092,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -4093,10 +4103,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -4239,7 +4249,7 @@ requestStorage.run(request, performWork, request); }); setImmediate(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -4257,7 +4267,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), destination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.destination) { request.destination = destination; @@ -4269,7 +4279,7 @@ } } function startFlowingDebug(request, debugDestination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), debugDestination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.debugDestination) { request.debugDestination = debugDestination; @@ -4312,7 +4322,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -6352,8 +6362,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, TaintRegistryObjects = ReactSharedInternalsServer.TaintRegistryObjects, TaintRegistryValues = ReactSharedInternalsServer.TaintRegistryValues, TaintRegistryByteLengths = @@ -6564,13 +6583,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_281 = []; + var JSCompiler_object_inline_chunks_284 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_281.push(chunk); + JSCompiler_object_inline_chunks_284.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_281, { + var blob = new Blob(JSCompiler_object_inline_chunks_284, { 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 9a194b79e4fd6..0c3a69e28e494 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-4842fbea-20260217", - "react-dom": "0.0.0-experimental-4842fbea-20260217", + "react": "0.0.0-experimental-2ba30655-20260219", + "react-dom": "0.0.0-experimental-2ba30655-20260219", "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 a61537f4b808c..4920dfdf27379 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 @@ -1866,7 +1866,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2561,6 +2561,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2772,6 +2773,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2818,7 +2820,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -2854,7 +2855,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -2941,7 +2941,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3224,19 +3224,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3247,14 +3261,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4370,7 +4384,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4610,88 +4624,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(weakResponse)) { @@ -5130,10 +5160,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-4842fbea-20260217", + version: "19.3.0-canary-2ba30655-20260219", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-4842fbea-20260217", + reconcilerVersion: "19.3.0-canary-2ba30655-20260219", 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 40208177b9e5c..80395e92dae84 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 @@ -756,7 +756,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1346,12 +1346,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1364,7 +1362,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); if ((model = preloadModule(clientReference))) { if (chunk) { @@ -1688,7 +1686,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1781,42 +1779,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 e1e723cffb8cf..6577db0ef1e5e 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 @@ -2013,7 +2013,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2714,6 +2714,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2925,6 +2926,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2971,7 +2973,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3007,7 +3008,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createStreamState(weakResponse, streamDebugValue) { var streamState = { @@ -3074,7 +3074,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3362,19 +3362,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3385,14 +3399,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4505,7 +4519,7 @@ case 72: id = buffer[0]; streamState = buffer.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4643,88 +4657,104 @@ tag.set(id, buffer)); } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (void 0 !== weakResponse.weak.deref()) { 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 b93bbcea66eb4..5ee924239c2bc 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 @@ -917,7 +917,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1521,12 +1521,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function resolveBuffer(response, id, buffer) { response = response._chunks; @@ -1539,7 +1537,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1868,7 +1866,7 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { case 72: id = buffer[0]; buffer = buffer.slice(1); - response = JSON.parse(buffer, response._fromJSON); + response = parseModel(response, buffer); buffer = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -1961,42 +1959,53 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { tag.set(id, response)); } } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 669bce12ed200..8ba308220d46a 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 @@ -2016,7 +2016,7 @@ initializingChunk = chunk; initializeDebugChunk(response, chunk); try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -2717,6 +2717,7 @@ } 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2928,6 +2929,7 @@ 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."; }, + set: function () {}, enumerable: !0, configurable: !1 }); @@ -2974,7 +2976,6 @@ this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; @@ -3010,7 +3011,6 @@ ? (closeDebugChannel(debugChannel), (this._debugChannel = void 0)) : debugChannelRegistry.register(this, debugChannel, this)); replayConsole && markAllTracksInOrder(); - this._fromJSON = createFromJSONCallback(this); } function createResponse( bundlerConfig, @@ -3132,7 +3132,7 @@ function resolveModule(response, id, model, streamState) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference( response._bundlerConfig, model @@ -3420,19 +3420,33 @@ } function resolveErrorDev(response, errorInfo) { var name = errorInfo.name, - env = errorInfo.env; - var error = buildFakeCallStack( + message = errorInfo.message, + stack = errorInfo.stack, + env = errorInfo.env, + errorOptions = + "cause" in errorInfo + ? { + cause: reviveModel( + response, + errorInfo.cause, + errorInfo, + "cause" + ) + } + : void 0; + message = buildFakeCallStack( response, - errorInfo.stack, + stack, env, !1, Error.bind( null, - errorInfo.message || - "An error occurred in the Server Components render but no message was provided" + message || + "An error occurred in the Server Components render but no message was provided", + errorOptions ) ); - var ownerTask = null; + stack = null; null != errorInfo.owner && ((errorInfo = errorInfo.owner.slice(1)), (errorInfo = getOutlinedModel( @@ -3443,14 +3457,14 @@ createModel )), null !== errorInfo && - (ownerTask = initializeFakeTask(response, errorInfo))); - null === ownerTask + (stack = initializeFakeTask(response, errorInfo))); + null === stack ? ((response = getRootTask(response, env)), - (error = null != response ? response.run(error) : error())) - : (error = ownerTask.run(error)); - error.name = name; - error.environmentName = env; - return error; + (response = null != response ? response.run(message) : message())) + : (response = stack.run(message)); + response.name = name; + response.environmentName = env; + return response; } function createFakeFunction( name, @@ -4566,7 +4580,7 @@ case 72: id = row[0]; streamState = row.slice(1); - response = JSON.parse(streamState, response._fromJSON); + response = parseModel(response, streamState); streamState = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -4806,88 +4820,104 @@ streamState._rowLength = rowLength; } } - function createFromJSONCallback(response) { - return function (key, value) { - 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; - } + function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); + } + function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + if (value[0] === REACT_ELEMENT_TYPE) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + key = value[4]; + parentObject = value[5]; + i = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === key ? null : key + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: i + }); + 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 === parentObject ? null : parentObject + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + key = initializingHandler; + initializingHandler = key.parent; + if (key.errored) { + parentObject = new ReactPromise("rejected", null, key.reason); + initializeElement(response, value, null); + response = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + response.debugStack = value._debugStack; + supportsCreateTask && (response.debugTask = value._debugTask); + parentObject._debugInfo = [response]; + response = createLazyChunkWrapper(parentObject, i); + break b; + } + if (0 < key.deps) { + parentObject = new ReactPromise("blocked", null, null); + key.value = value; + key.chunk = parentObject; + i = createLazyChunkWrapper(parentObject, i); + response = initializeElement.bind(null, response, value, i); + parentObject.then(response, response); + response = i; + break b; } - initializeElement(response, value, null); - key = value; } - else key = value; - return key; - } - return value; + initializeElement(response, value, null); + response = value; + } + else response = value; + return response; } - }; + return value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject + ? (value[i] = parentObject) + : delete value[i]); + return value; } function close(weakResponse) { if (!hasGCedResponse(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 4d89c894e4f47..b91f58cd6ec57 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 @@ -918,7 +918,7 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var value = JSON.parse(resolvedModel, response._fromJSON), + var value = parseModel(response, resolvedModel), resolveListeners = chunk.value; if (null !== resolveListeners) for ( @@ -1522,12 +1522,10 @@ function ResponseInstance( this._nonce = nonce; this._chunks = chunks; this._stringDecoder = new util.TextDecoder(); - this._fromJSON = null; this._closed = !1; this._closedReason = null; this._allowPartialStream = allowPartialStream; this._tempRefs = temporaryReferences; - this._fromJSON = createFromJSONCallback(this); } function createStreamState() { return { _rowState: 0, _rowID: 0, _rowTag: 0, _rowLength: 0, _buffer: [] }; @@ -1543,7 +1541,7 @@ function resolveBuffer(response, id, buffer) { function resolveModule(response, id, model) { var chunks = response._chunks, chunk = chunks.get(id); - model = JSON.parse(model, response._fromJSON); + model = parseModel(response, model); var clientReference = resolveClientReference(response._bundlerConfig, model); prepareDestinationWithChunks( response._moduleLoading, @@ -1878,7 +1876,7 @@ function processFullStringRow(response, streamState, id, tag, row) { case 72: id = row[0]; row = row.slice(1); - response = JSON.parse(row, response._fromJSON); + response = parseModel(response, row); row = ReactDOMSharedInternals.d; switch (id) { case "D": @@ -2065,42 +2063,53 @@ function processBinaryChunk(weakResponse, streamState, chunk) { streamState._rowTag = rowTag; streamState._rowLength = rowLength; } -function createFromJSONCallback(response) { - return function (key, value) { - 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 ( - ((key = { +function parseModel(response, json) { + json = JSON.parse(json); + return reviveModel(response, json, { "": json }, ""); +} +function reviveModel(response, value, parentObject, key) { + if ("string" === typeof value) + return "$" === value[0] + ? parseModelString(response, parentObject, key, value) + : value; + if ("object" !== typeof value || null === value) return value; + if (isArrayImpl(value)) { + for (var i = 0; i < value.length; i++) + value[i] = reviveModel(response, value[i], value, "" + i); + return value[0] === REACT_ELEMENT_TYPE + ? (value[0] === REACT_ELEMENT_TYPE + ? ((response = { $$typeof: REACT_ELEMENT_TYPE, type: value[1], key: value[2], ref: null, props: value[3] }), - null !== initializingHandler) - ) - if ( + null !== initializingHandler && ((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; - } - }; + value.errored + ? ((response = new ReactPromise( + "rejected", + null, + value.reason + )), + (response = createLazyChunkWrapper(response))) + : 0 < value.deps && + ((i = new ReactPromise("blocked", null, null)), + (value.value = response), + (value.chunk = i), + (response = createLazyChunkWrapper(i))))) + : (response = value), + response) + : value; + } + for (i in value) + "__proto__" === i + ? delete value[i] + : ((parentObject = reviveModel(response, value[i], value, i)), + void 0 !== parentObject ? (value[i] = parentObject) : delete value[i]); + return value; } function close(weakResponse) { weakResponse._allowPartialStream 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 abbc423ad1db9..54c1add1c1a8c 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 @@ -1000,7 +1000,7 @@ pingedTasks = [], hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1109,7 +1109,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1255,7 +1255,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1283,7 +1283,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1293,9 +1293,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1325,7 +1325,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1335,11 +1335,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1378,9 +1378,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1415,7 +1415,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1426,11 +1426,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1788,7 +1788,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -1939,7 +1939,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -1968,7 +1968,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2229,7 +2229,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2242,7 +2242,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2252,11 +2252,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2296,8 +2296,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2365,7 +2365,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2716,7 +2716,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2735,19 +2735,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2755,6 +2752,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2775,6 +2779,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3093,25 +3098,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3147,9 +3157,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3465,16 +3475,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3505,15 +3515,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3531,7 +3541,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3574,10 +3584,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3585,10 +3595,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3726,7 +3736,7 @@ return performWork(request); }); scheduleWork(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -3744,7 +3754,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3788,7 +3798,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5543,8 +5553,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, currentRequest = null, canEmitDebugInfo = !1, serializedSize = 0, @@ -5794,7 +5813,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 2b2be9833e6b0..fb5a8d73cd74b 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 @@ -1007,7 +1007,7 @@ pingedTasks = [], hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1116,7 +1116,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1267,7 +1267,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1295,7 +1295,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1305,9 +1305,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(stringToChunk(entry)), request.abortableTasks.delete(streamTask), @@ -1337,7 +1337,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1347,11 +1347,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1390,9 +1390,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1427,7 +1427,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1438,11 +1438,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1848,7 +1848,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -1999,7 +1999,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2028,7 +2028,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2289,7 +2289,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2302,7 +2302,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2312,11 +2312,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2356,8 +2356,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2425,7 +2425,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -2787,7 +2787,7 @@ null !== request.destination ? ((request.status = CLOSED), closeWithError(request.destination, error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -2806,19 +2806,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -2826,6 +2823,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -2846,6 +2850,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; id = stringToChunk(id); debug @@ -3163,25 +3168,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3217,9 +3227,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3535,16 +3545,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3575,15 +3585,15 @@ var json = stringify(resolvedModel); emitModelChunk(request, task.id, json); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3601,7 +3611,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -3644,10 +3654,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -3655,10 +3665,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -3800,7 +3810,7 @@ return performWork(request); }); setTimeout(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }, 0); } function enqueueFlush(request) { @@ -3818,7 +3828,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(destination, request.fatalError); else if (request.status !== CLOSED && null === request.destination) { @@ -3862,7 +3872,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -5613,8 +5623,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, currentRequest = null, canEmitDebugInfo = !1, serializedSize = 0, @@ -5897,7 +5916,7 @@ { type: "bytes", pull: function (controller) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), closeWithError(controller, request.fatalError); else if ( 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 818bb2796eefd..913fe89bdc9c4 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 @@ -1107,7 +1107,7 @@ pingedTasks = [], hints = new Set(); this.type = type; - this.status = 10; + this.status = OPENING; this.flushScheduled = !1; this.destination = this.fatalError = null; this.bundlerConfig = bundlerConfig; @@ -1216,7 +1216,7 @@ ) { resetOwnerStackLimit(); return new RequestInstance( - 21, + PRERENDER, model, bundlerConfig, onError, @@ -1364,7 +1364,7 @@ if (request.status === ABORTING) return ( request.abortableTasks.delete(newTask), - 21 === request.type + request.type === PRERENDER ? (haltTask(newTask), finishHaltedTask(newTask, request)) : ((task = request.fatalError), abortTask(newTask), @@ -1392,7 +1392,7 @@ pingTask(request, newTask); }, function (reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && ((newTask.timed = !0), erroredTask(request, newTask, reason), enqueueFlush(request)); @@ -1402,9 +1402,9 @@ } function serializeReadableStream(request, task, stream) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) - (streamTask.status = 1), + (streamTask.status = COMPLETED), (entry = streamTask.id.toString(16) + ":C\n"), request.completedRegularChunks.push(entry), request.abortableTasks.delete(streamTask), @@ -1434,7 +1434,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortStream @@ -1444,11 +1444,11 @@ reader.cancel(reason).then(error, error)); } function abortStream() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortStream); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1487,9 +1487,9 @@ } function serializeAsyncIterable(request, task, iterable, iterator) { function progress(entry) { - if (0 === streamTask.status) + if (streamTask.status === PENDING$1) if (entry.done) { - streamTask.status = 1; + streamTask.status = COMPLETED; if (void 0 === entry.value) var endStreamRow = streamTask.id.toString(16) + ":C\n"; else @@ -1524,7 +1524,7 @@ } } function error(reason) { - 0 === streamTask.status && + streamTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortIterable @@ -1535,11 +1535,11 @@ iterator.throw(reason).then(error, error)); } function abortIterable() { - if (0 === streamTask.status) { + if (streamTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortIterable); var reason = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(streamTask), haltTask(streamTask), finishHaltedTask(streamTask, request)) @@ -1917,7 +1917,7 @@ task.debugTask ); retryTask(request, task); - return 1 === task.status + return task.status === COMPLETED ? serializeByValueID(task.id) : serializeLazyID(task.id); } @@ -2262,7 +2262,7 @@ pingedTasks.push(task); 1 === pingedTasks.length && ((request.flushScheduled = null !== request.destination), - 21 === request.type || 10 === request.status + request.type === PRERENDER || request.status === OPENING ? scheduleMicrotask(function () { return performWork(request); }) @@ -2291,7 +2291,7 @@ request.writtenObjects.set(model, serializeByValueID(id)); var task = { id: id, - status: 0, + status: PENDING$1, model: model, keyPath: keyPath, implicitSlot: implicitSlot, @@ -2551,7 +2551,7 @@ } function serializeBlob(request, blob) { function progress(entry) { - if (0 === newTask.status) + if (newTask.status === PENDING$1) if (entry.done) request.cacheController.signal.removeEventListener( "abort", @@ -2564,7 +2564,7 @@ ); } function error(reason) { - 0 === newTask.status && + newTask.status === PENDING$1 && (request.cacheController.signal.removeEventListener( "abort", abortBlob @@ -2574,11 +2574,11 @@ reader.cancel(reason).then(error, error)); } function abortBlob() { - if (0 === newTask.status) { + if (newTask.status === PENDING$1) { var signal = request.cacheController.signal; signal.removeEventListener("abort", abortBlob); signal = signal.reason; - 21 === request.type + request.type === PRERENDER ? (request.abortableTasks.delete(newTask), haltTask(newTask), finishHaltedTask(newTask, request)) @@ -2618,8 +2618,8 @@ (parent.$$typeof === REACT_ELEMENT_TYPE || parent.$$typeof === REACT_LAZY_TYPE); if (request.status === ABORTING) { - task.status = 3; - if (21 === request.type) + task.status = ABORTED; + if (request.type === PRERENDER) return ( (task = request.nextChunkId++), (task = parent @@ -2687,7 +2687,7 @@ value ) { task.model = value; - "__proto__" === parentPropertyName && + parentPropertyName === __PROTO__$1 && callWithDebugContextInDEV(request, task, function () { console.error( "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", @@ -3044,7 +3044,7 @@ onFatalError(error); null !== request.destination ? ((request.status = CLOSED), request.destination.destroy(error)) - : ((request.status = 13), (request.fatalError = error)); + : ((request.status = CLOSING), (request.fatalError = error)); request.cacheController.abort( Error("The render was aborted due to a fatal error.", { cause: error }) ); @@ -3063,19 +3063,16 @@ "An error occurred but serializing the error message failed."), (stack = []); } - return ( - "$Z" + - outlineModel(request, { - name: name, - message: message, - stack: stack, - env: env - }).toString(16) - ); + name = { name: name, message: message, stack: stack, env: env }; + "cause" in error && + ((error = outlineModel(request, error.cause)), + (name.cause = serializeByValueID(error))); + return "$Z" + outlineModel(request, name).toString(16); } function emitErrorChunk(request, id, digest, error, debug, owner) { var name = "Error", - env = (0, request.environmentName)(); + env = (0, request.environmentName)(), + causeReference = null; try { if (error instanceof Error) { name = error.name; @@ -3083,6 +3080,13 @@ var stack = filterStackTrace(request, parseStackTrace(error, 0)); var errorEnv = error.environmentName; "string" === typeof errorEnv && (env = errorEnv); + if ("cause" in error) { + var cause = error.cause, + causeId = debug + ? outlineDebugModel(request, { objectLimit: 5 }, cause) + : outlineModel(request, cause); + causeReference = serializeByValueID(causeId); + } } else (message = "object" === typeof error && null !== error @@ -3103,6 +3107,7 @@ env: env, owner: error }; + null !== causeReference && (digest.cause = causeReference); id = id.toString(16) + ":E" + stringify(digest) + "\n"; debug ? request.completedDebugChunks.push(id) @@ -3515,25 +3520,30 @@ ).toString(16) ); if (value instanceof Error) { - counter = "Error"; - var env = (0, request.environmentName)(); + var name = "Error"; + parent = (0, request.environmentName)(); try { - (counter = value.name), - (ref = String(value.message)), - (key = filterStackTrace(request, parseStackTrace(value, 0))), + (name = value.name), + (key = String(value.message)), + (ref = filterStackTrace(request, parseStackTrace(value, 0))), (entry = value.environmentName), - "string" === typeof entry && (env = entry); + "string" === typeof entry && (parent = entry); } catch (x) { - (ref = + (key = "An error occurred but serializing the error message failed."), - (key = []); + (ref = []); } + key = { name: name, message: key, stack: ref, env: parent }; + "cause" in value && + (counter.objectLimit--, + (value = outlineDebugModel(request, counter, value.cause)), + (key.cause = serializeByValueID(value))); request = "$Z" + outlineDebugModel( request, - { objectLimit: 2 * key.length + 1 }, - { name: counter, message: ref, stack: key, env: env } + { objectLimit: 2 * ref.length + 1 }, + key ).toString(16); return request; } @@ -3569,9 +3579,9 @@ request = getPrototypeOf(value); if (request !== ObjectPrototype$1 && null !== request) { counter = Object.create(null); - for (env in value) - if (hasOwnProperty.call(value, env) || isGetter(request, env)) - counter[env] = value[env]; + for (name in value) + if (hasOwnProperty.call(value, name) || isGetter(request, name)) + counter[name] = value[name]; ref = request.constructor; "function" !== typeof ref || ref.prototype !== request || @@ -3926,16 +3936,16 @@ } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); - task.status = 4; + task.status = ERRORED$1; var digest = logRecoverableError(request, error, task); emitErrorChunk(request, task.id, digest, error, !1, task.debugOwner); request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } function retryTask(request, task) { - if (0 === task.status) { + if (task.status === PENDING$1) { var prevCanEmitDebugInfo = canEmitDebugInfo; - task.status = 5; + task.status = RENDERING; var parentSerializedSize = serializedSize; try { modelRoot = task.model; @@ -3967,15 +3977,15 @@ processedChunk = task.id.toString(16) + ":" + json + "\n"; request.completedRegularChunks.push(processedChunk); } - task.status = 1; + task.status = COMPLETED; request.abortableTasks.delete(task); callOnAllReadyIfReady(request); } catch (thrownValue) { if (request.status === ABORTING) if ( (request.abortableTasks.delete(task), - (task.status = 0), - 21 === request.type) + (task.status = PENDING$1), + request.type === PRERENDER) ) haltTask(task), finishHaltedTask(task, request); else { @@ -3993,7 +4003,7 @@ null !== x && "function" === typeof x.then ) { - task.status = 0; + task.status = PENDING$1; task.thenableState = getThenableStateAfterSuspending(); var ping = task.ping; x.then(ping, ping); @@ -4037,10 +4047,10 @@ } } function abortTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishAbortedTask(task, request, errorId) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), task.timed && markOperationEndTime(request, task, request.abortTime), (errorId = serializeByValueID(errorId)), @@ -4048,10 +4058,10 @@ request.completedErrorChunks.push(task)); } function haltTask(task) { - 0 === task.status && (task.status = 3); + task.status === PENDING$1 && (task.status = ABORTED); } function finishHaltedTask(task, request) { - 3 === task.status && + task.status === ABORTED && (forwardDebugInfoFromAbortedTask(request, task), request.pendingChunks--); } @@ -4193,7 +4203,7 @@ requestStorage.run(request, performWork, request); }); setImmediate(function () { - 10 === request.status && (request.status = 11); + request.status === OPENING && (request.status = 11); }); } function enqueueFlush(request) { @@ -4211,7 +4221,7 @@ ((request = request.onAllReady), request()); } function startFlowing(request, destination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), destination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.destination) { request.destination = destination; @@ -4223,7 +4233,7 @@ } } function startFlowingDebug(request, debugDestination) { - if (13 === request.status) + if (request.status === CLOSING) (request.status = CLOSED), debugDestination.destroy(request.fatalError); else if (request.status !== CLOSED && null === request.debugDestination) { request.debugDestination = debugDestination; @@ -4266,7 +4276,7 @@ request.cacheController.abort(reason); var abortableTasks = request.abortableTasks; if (0 < abortableTasks.size) - if (21 === request.type) + if (request.type === PRERENDER) abortableTasks.forEach(function (task) { return haltTask(task, request); }), @@ -6306,8 +6316,17 @@ patchConsole(console, "warn")); var ObjectPrototype$1 = Object.prototype, stringify = JSON.stringify, + PENDING$1 = 0, + COMPLETED = 1, + ABORTED = 3, + ERRORED$1 = 4, + RENDERING = 5, + __PROTO__$1 = "__proto__", + OPENING = 10, ABORTING = 12, + CLOSING = 13, CLOSED = 14, + PRERENDER = 21, currentRequest = null, canEmitDebugInfo = !1, serializedSize = 0, @@ -6512,13 +6531,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_281 = []; + var JSCompiler_object_inline_chunks_284 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_281.push(chunk); + JSCompiler_object_inline_chunks_284.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_281, { + var blob = new Blob(JSCompiler_object_inline_chunks_284, { 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 10c43541066bc..19401bad6dbb4 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-4842fbea-20260217", - "react-dom": "19.3.0-canary-4842fbea-20260217", + "react": "19.3.0-canary-2ba30655-20260219", + "react-dom": "19.3.0-canary-2ba30655-20260219", "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 453b18deeb999..1946c5d466f74 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-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; "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 d46540a2cc524..2cb3502b5663e 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-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; 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 57e49cf83079f..607a50124113f 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-4842fbea-20260217"; + exports.version = "19.3.0-canary-2ba30655-20260219"; })(); 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 1f8abb6526e09..af9d7761a3fa5 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-4842fbea-20260217"; +exports.version = "19.3.0-canary-2ba30655-20260219"; diff --git a/packages/next/src/compiled/unistore/unistore.js b/packages/next/src/compiled/unistore/unistore.js index 9e52619e89e6a..160ef08f1b668 100644 --- a/packages/next/src/compiled/unistore/unistore.js +++ b/packages/next/src/compiled/unistore/unistore.js @@ -1 +1 @@ -(()=>{var t={305: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={830: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.10 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -2905,8 +2905,8 @@ packages: resolution: {integrity: sha512-9+uaWyF1o/PgXqHLJnC81IIG0HlV3o9eFCQ5hWZDMx5NHrFk0rrwqEFGQOB8lti/rnbxNPi+kYYw1D4e8xSn/Q==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 '@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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 '@floating-ui/react-dom@2.1.5': resolution: {integrity: sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 '@floating-ui/react@0.26.16': resolution: {integrity: sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 '@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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 '@mantine/hooks@7.11.2': resolution: {integrity: sha512-jhyVe/sbDEG2U8rr2lMecUPgQxcfr5hh9HazqGfkS7ZRIMDO7uJ947yAcTMGGkp5Lxtt5TBFt1Cb6tiB2/1agg==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 '@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-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 '@mdx-js/react@3.1.0': resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 '@modelcontextprotocol/sdk@1.18.1': resolution: {integrity: sha512-d//GE8/Yh7aC3e7p+kZG8JqqEAwwDUmAfvH1quogtbk+ksS6E0RR6toKKESPYYZVre0meqkJb27zb+dhqE9Sgw==} @@ -5016,8 +5016,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5029,8 +5029,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5042,8 +5042,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5055,8 +5055,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5068,8 +5068,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5081,8 +5081,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5094,8 +5094,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5106,7 +5106,7 @@ packages: resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5115,7 +5115,7 @@ packages: resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5124,7 +5124,7 @@ packages: resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5133,7 +5133,7 @@ packages: resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5142,7 +5142,7 @@ packages: resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5151,7 +5151,7 @@ packages: resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5161,8 +5161,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5174,8 +5174,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5186,7 +5186,7 @@ packages: resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5195,7 +5195,7 @@ packages: resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5205,8 +5205,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5218,8 +5218,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5231,8 +5231,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5243,7 +5243,7 @@ packages: resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5252,7 +5252,7 @@ packages: resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5262,8 +5262,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5275,8 +5275,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5287,7 +5287,7 @@ packages: resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5296,7 +5296,7 @@ packages: resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5306,8 +5306,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5319,8 +5319,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5332,8 +5332,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5345,8 +5345,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5358,8 +5358,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5371,8 +5371,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5384,8 +5384,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5397,8 +5397,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5410,8 +5410,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5423,8 +5423,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5436,8 +5436,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5449,8 +5449,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5462,8 +5462,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5475,8 +5475,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5488,8 +5488,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5501,8 +5501,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5514,8 +5514,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5527,8 +5527,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5540,8 +5540,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5552,7 +5552,7 @@ packages: resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5561,7 +5561,7 @@ packages: resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5570,7 +5570,7 @@ packages: resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5580,8 +5580,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5593,8 +5593,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5606,8 +5606,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5619,8 +5619,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5631,7 +5631,7 @@ packages: resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5640,7 +5640,7 @@ packages: resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5649,7 +5649,7 @@ packages: resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5658,7 +5658,7 @@ packages: resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5667,7 +5667,7 @@ packages: resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5676,7 +5676,7 @@ packages: resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5685,7 +5685,7 @@ packages: resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5694,7 +5694,7 @@ packages: resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5703,7 +5703,7 @@ packages: resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5712,7 +5712,7 @@ packages: resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5721,7 +5721,7 @@ packages: resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5730,7 +5730,7 @@ packages: resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5739,7 +5739,7 @@ packages: resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5748,7 +5748,7 @@ packages: resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5758,8 +5758,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -5771,8 +5771,8 @@ packages: peerDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 '@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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 storybook: ^8.6.0 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -6456,8 +6456,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -8386,8 +8386,8 @@ packages: cmdk@1.0.4: resolution: {integrity: sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -10056,8 +10056,8 @@ packages: peerDependencies: eslint: '>=8.0.0' - eslint-plugin-react-hooks@0.0.0-experimental-4842fbea-20260217: - resolution: {integrity: sha512-MZsfxUJj6nPurNbxCqicoakgT3huynBS0Q2yF5V/r5pZy7CAuc5Kk0k/3qzNgyGBmiNseLSLYqRN+MrF7vs2Ng==} + eslint-plugin-react-hooks@0.0.0-experimental-2ba30655-20260219: + resolution: {integrity: sha512-HTfJuf+z7NmYB5Hdsc64FZByiYmQI0yBQx4OVWZRLG2nTEq6M8ZJI8wGYYGDA1m2weCxFzFvZTg3YxaP0Zx9KA==} 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 || ^10.0.0 @@ -10706,8 +10706,8 @@ packages: '@types/react': 19.2.10 algoliasearch: 5.x.x next: 14.x.x || 15.x.x - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 react-router: 7.x.x waku: ^0.26.0 peerDependenciesMeta: @@ -10739,7 +10739,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-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 vite: 6.x.x || 7.x.x peerDependenciesMeta: '@fumadocs/mdx-remote': @@ -10756,8 +10756,8 @@ packages: peerDependencies: '@types/react': 19.2.10 next: 14.x.x || 15.x.x - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 tailwindcss: ^3.4.14 || ^4.0.0 peerDependenciesMeta: '@types/react': @@ -13086,12 +13086,12 @@ packages: lucide-react@0.383.0: resolution: {integrity: sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 lucide-react@0.554.0: resolution: {integrity: sha512-St+z29uthEJVx0Is7ellNkgTEhaeSoA42I7JjOCBCrc5X6LYMGSv0P/2uS5HDLTExP5tpiqRD2PyUEOS6s9UXA==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -13882,8 +13882,8 @@ packages: next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 next-tick@1.0.0: resolution: {integrity: sha512-mc/caHeUcdjnC/boPWJefDr4KUIWQNv+tlnFnJd38QMou86QtxQzBJfxgGRzvx8jazYRqrVlaHarfO72uNxPOg==} @@ -13897,8 +13897,8 @@ packages: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -13919,8 +13919,8 @@ packages: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -15812,23 +15812,23 @@ packages: resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} engines: {node: '>=16.14.0'} - react-dom@0.0.0-experimental-4842fbea-20260217: - resolution: {integrity: sha512-xdTN1K/aEUYHh5w4GEA6IKZWLWM2anYtG2y1MYVBIWQFBnj0diSg2DEfx4qdC2yB5lOWUKUKyYw4d5/v87IGEg==} + react-dom@0.0.0-experimental-2ba30655-20260219: + resolution: {integrity: sha512-ecUuBEPmAB8d6rvGAz3fs0sbK0u+XvP/xlRYsfvcpNHK9jT3cf4fqzp4lxXWsCaakCc3OHoYkzpRG0/KfEZgAQ==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 - react-dom@19.3.0-canary-4842fbea-20260217: - resolution: {integrity: sha512-9VkvmjGUJVHsyfFxDkX9G5blw+motuWUFAV59Biol+Oxz+l75Jsu4GLWHH1bHpODzuuwR8l1NG3m1WEjVKrEEw==} + react-dom@19.3.0-canary-2ba30655-20260219: + resolution: {integrity: sha512-BKNvRq/7rNumithT2pMMPDTWqGGDpn0nQ7BpnRkmOQ8xsFWzn8vplR8xqFUT/wYOHQzv3JgrJiCyyulQZFdyfA==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 react-dom@19.3.0-canary-fd524fe0-20251121: resolution: {integrity: sha512-+M3m+8ysDcPmt7ncitPOX5O71OOKF6lq6INFZFUMJjEGDxvl4CS2D41DJG5MnXcwiWTZLAp/uILZtt4sKTRSyQ==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 - react-is@19.3.0-canary-4842fbea-20260217: - resolution: {integrity: sha512-O0+fl+2yxvIfMKKnySmBQo01lFIQBEZx4dXQimRpAPxPoCyI2vv8VE6v0oPLNWayvFklAcQjolH+BVEvJf6eZQ==} + react-is@19.3.0-canary-2ba30655-20260219: + resolution: {integrity: sha512-WU1Gm1Y/HqPJ5WksjAs6/hZ6fmS4yg9jUQtFEkbHnFnqwwsEw9wOKAOBFGRUOw07WsGBXwwzBabv1S4gv9I+sQ==} react-is@19.3.0-canary-fd524fe0-20251121: resolution: {integrity: sha512-06VG41yCv5V7FPCLxo4hBaiLEoReJ35LK9VvEqveBJq5cbEhakZznJLnPU1oJ3CCrL4DyBsPXw9EiYlrOL8c3Q==} @@ -15839,14 +15839,14 @@ packages: react-medium-image-zoom@5.3.0: resolution: {integrity: sha512-RCIzVlsKqy3BYgGgYbolUfuvx0aSKC7YhX/IJGEp+WJxsqdIVYJHkBdj++FAj6VD7RiWj6VVmdCfa/9vJE9hZg==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 react-number-format@5.4.0: resolution: {integrity: sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 react-refresh@0.12.0: resolution: {integrity: sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A==} @@ -15857,7 +15857,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -15867,7 +15867,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -15877,7 +15877,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -15887,58 +15887,58 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true - react-server-dom-turbopack@0.0.0-experimental-4842fbea-20260217: - resolution: {integrity: sha512-+zvuEi7w1MzU7EIZyNuDuEpVxjy97hnV5e5aCP2wdZD2Hsl+in+wAG/Bfy7BWboW7A44TnmF+x+gWpippk6eOg==} + react-server-dom-turbopack@0.0.0-experimental-2ba30655-20260219: + resolution: {integrity: sha512-PjpFB0QtxHOS00HfMumSrQt2ojrV0X0kKKEG4y8JcpyS3zsXWaa72FwhRG/R51ZE1aklg1qvGmkVjS4Cw+Y8sg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 - react-server-dom-turbopack@19.3.0-canary-4842fbea-20260217: - resolution: {integrity: sha512-yfL4lx5zPSbuZwCC8hCdArcgHzJUaVk4c0UhjhyKHgKAv/uMOcTomExt7irm9TQJfH7+ytQanXBYATo56a+8Qg==} + react-server-dom-turbopack@19.3.0-canary-2ba30655-20260219: + resolution: {integrity: sha512-1SHTAZ4DRL5iKyPgnGuXQRi9tbBZ9GXphBcUiQhdzBzMJMJgJ0lSAyArgO9M9FnWetG8lbCLxLk29maRKWjbQg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 - react-server-dom-webpack@0.0.0-experimental-4842fbea-20260217: - resolution: {integrity: sha512-yM6uQLYV9JNW6lmIZjBPerKPQZpTeClWOE6sCULtHB8P3pHvQGsfGJD03ZqSBADjbwLEYQwxoW8+QnsprCiTZw==} + react-server-dom-webpack@0.0.0-experimental-2ba30655-20260219: + resolution: {integrity: sha512-Hk2lVAl/h5bm4/sYBPy8K1K/jjBbHtCI54hwHNmcb7LEtXHPw4w10a/wxhbM7UrLXRKf9l9PnJCan2qHlQLC7w==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 webpack: 5.98.0 - react-server-dom-webpack@19.3.0-canary-4842fbea-20260217: - resolution: {integrity: sha512-xW/tWONr1TJ6a7AGD+OVHmqtXqR1dFR80DxbDi8FmDwSNyr5Ioi7F9eABafzIomwG83GnNw4XZfNxLzALLAGnw==} + react-server-dom-webpack@19.3.0-canary-2ba30655-20260219: + resolution: {integrity: sha512-fqAppBvw/YfogHDUaecsf60SslM7rK0uK77aer/d+ubrcO3yXUtXTINogpQoz6y3QRXp/lP0afxYRK0t5y31BQ==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 webpack: 5.98.0 react-shallow-renderer@16.15.0: resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 react-ssr-prepass@1.0.8: resolution: {integrity: sha512-O0gfRA1SaK+9ITKxqfnXsej2jF+OHGP/+GxD4unROQaM/0/UczGF9fuF+wTboxaQoKdIf4FvS3h/OigWh704VA==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-is: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-is: 19.3.0-canary-2ba30655-20260219 react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -15948,7 +15948,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -15956,26 +15956,26 @@ packages: react-test-renderer@18.2.0: resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 react-textarea-autosize@8.5.3: resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 react-virtualized@9.22.3: resolution: {integrity: sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219 - react@0.0.0-experimental-4842fbea-20260217: - resolution: {integrity: sha512-XY6LVKG+WrbFBWz5YSb6tj54WtmDr1zPYy0p7rNFDremqp9kz1rGQxxtCEJtOtzcPRhcggL8wmOsZWC7SUecHQ==} + react@0.0.0-experimental-2ba30655-20260219: + resolution: {integrity: sha512-7YEWaTs4wEUcVZtQInY7cxuAwKxj+SVXifMPMk9jp0UFbl4GLUIcaJPS8AW/Dvvqh5QT99150pLYzGASGbIYKg==} engines: {node: '>=0.10.0'} - react@19.3.0-canary-4842fbea-20260217: - resolution: {integrity: sha512-xhwBGo5jwY5tEBzEbXG2J+dIBLH1teFWa2Eqt6akjoCwjUuxx8oFJcFlW870su/lfKn4Z+zVczM9PLawjG+BQg==} + react@19.3.0-canary-2ba30655-20260219: + resolution: {integrity: sha512-IdXwg3Tw+W4ucbuWP+Jn8vVIzDiQUtv6dK3QUpVjYbdxGPqDqgPzbR0UTlVB/txaKOZbQudKkWkNSuJpa4w0KA==} engines: {node: '>=0.10.0'} react@19.3.0-canary-fd524fe0-20251121: @@ -16577,11 +16577,11 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.0.0-experimental-4842fbea-20260217: - resolution: {integrity: sha512-TUAhQBaXV0k3E4zrTr1h6blIKNFfuaaXmhNhfI9NgjjUz0J3bOzYQyPLw/JmIWcGVK1ocQ8rAqSNe/CN4qWGOA==} + scheduler@0.0.0-experimental-2ba30655-20260219: + resolution: {integrity: sha512-FGrOe8AwQ8peVyO8hr604CvmgS9Bf4/LErCeNjRatYLSr6qRbnqkKudp60J26HUFI+P90tWtwKY0Cf9m50yLiw==} - scheduler@0.28.0-canary-4842fbea-20260217: - resolution: {integrity: sha512-QQzVRzeZFof8UG5XYkltAldkKn/PDPKMLj1l6wMYC0/dWE8teGaQJY0RB6qJGxZ6vmq5Uc3fn1wntdqGHv+d2g==} + scheduler@0.28.0-canary-2ba30655-20260219: + resolution: {integrity: sha512-co/S1aXbLfADGYZg7F7KwC6hxNFOtd2ZBiGgA5wDVUQhNq0ApMuMiMqjP/RjE4hKDlnsatZQfNh4iVz2brwJ+g==} schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -17266,7 +17266,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@babel/core': optional: true @@ -17353,7 +17353,7 @@ packages: swr@2.2.4: resolution: {integrity: sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 symbol-observable@1.0.1: resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==} @@ -18213,7 +18213,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -18223,7 +18223,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -18231,13 +18231,13 @@ packages: use-composed-ref@1.3.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 use-isomorphic-layout-effect@1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -18246,7 +18246,7 @@ packages: resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -18256,7 +18256,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -18266,7 +18266,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 peerDependenciesMeta: '@types/react': optional: true @@ -18274,7 +18274,7 @@ packages: use-sync-external-store@1.5.0: resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} peerDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -19889,28 +19889,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.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@base-ui-components/react@1.0.0-beta.2(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@babel/runtime': 7.27.6 - '@base-ui-components/utils': 0.1.0(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + '@base-ui-components/utils': 0.1.0(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) reselect: 5.1.1 tabbable: 6.2.0 - use-sync-external-store: 1.5.0(react@19.3.0-canary-4842fbea-20260217) + use-sync-external-store: 1.5.0(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 - '@base-ui-components/utils@0.1.0(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@base-ui-components/utils@0.1.0(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@babel/runtime': 7.27.6 '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) reselect: 5.1.1 - use-sync-external-store: 1.5.0(react@19.3.0-canary-4842fbea-20260217) + use-sync-external-store: 1.5.0(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 @@ -20083,17 +20083,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@emotion/react@11.11.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': 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-4842fbea-20260217) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.3.0-canary-2ba30655-20260219) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 transitivePeerDependencies: @@ -20111,9 +20111,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-4842fbea-20260217)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 '@emotion/utils@1.2.1': {} @@ -20536,11 +20536,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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@floating-ui/react-dom@2.1.5(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@floating-ui/dom': 1.7.3 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) '@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: @@ -21500,11 +21500,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@2.2.1(react@19.3.0-canary-4842fbea-20260217)': + '@mdx-js/react@2.2.1(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 '@mdx-js/react@2.2.1(react@19.3.0-canary-fd524fe0-20251121)': dependencies: @@ -21512,11 +21512,11 @@ snapshots: '@types/react': 19.2.10 react: 19.3.0-canary-fd524fe0-20251121 - '@mdx-js/react@3.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@mdx-js/react@3.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.10 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 '@modelcontextprotocol/sdk@1.18.1': dependencies: @@ -22286,749 +22286,749 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-context@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-context@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-context@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-context@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-context@1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) aria-hidden: 1.2.6 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) aria-hidden: 1.2.6 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-direction@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-direction@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-direction@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-id@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-id@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-id@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) aria-hidden: 1.2.6 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) aria-hidden: 1.2.6 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': 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.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': 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.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) aria-hidden: 1.2.6 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-slot@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-slot@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-slot@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-slot@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-slot@1.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-size@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@types/react': 19.2.10 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) @@ -23326,12 +23326,12 @@ snapshots: '@storybook/addon-docs@8.6.0(@types/react@19.2.10)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(storybook@8.6.0(prettier@3.6.2)) + '@mdx-js/react': 3.1.0(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(storybook@8.6.0(prettier@3.6.2)) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(storybook@8.6.0(prettier@3.6.2)) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -23396,14 +23396,14 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 optionalDependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) '@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: @@ -23482,10 +23482,10 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@storybook/icons@1.3.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) '@storybook/instrumenter@8.6.0(storybook@8.6.0(prettier@3.6.2))': dependencies: @@ -23497,17 +23497,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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 react-docgen: 7.1.0 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) resolve: 1.22.10 semver: 7.6.3 storybook: 8.6.0(prettier@3.6.2) @@ -23541,19 +23541,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(storybook@8.6.0(prettier@3.6.2))': dependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) 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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + '@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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: typescript: 5.9.2 @@ -23566,16 +23566,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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(storybook@8.6.0(prettier@3.6.2)) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: '@storybook/test': 8.6.0(storybook@8.6.0(prettier@3.6.2)) @@ -23853,13 +23853,13 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@15.0.7(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)': + '@testing-library/react@15.0.7(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)': dependencies: '@babel/runtime': 7.27.0 '@testing-library/dom': 10.1.0 '@types/react-dom': 19.2.3(@types/react@19.2.10) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 @@ -26083,14 +26083,14 @@ snapshots: cmd-shim@7.0.0: {} - cmdk@1.0.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217): + cmdk@1.0.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219): dependencies: - '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - use-sync-external-store: 1.5.0(react@19.3.0-canary-4842fbea-20260217) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + use-sync-external-store: 1.5.0(react@19.3.0-canary-2ba30655-20260219) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -28126,7 +28126,7 @@ snapshots: - bluebird - supports-color - eslint-plugin-react-hooks@0.0.0-experimental-4842fbea-20260217(eslint@9.37.0(jiti@2.5.1)): + eslint-plugin-react-hooks@0.0.0-experimental-2ba30655-20260219(eslint@9.37.0(jiti@2.5.1)): dependencies: '@babel/core': 7.26.10 '@babel/parser': 7.27.0 @@ -29084,7 +29084,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@15.7.12(@types/react@19.2.10)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8))(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217): + fumadocs-core@15.7.12(@types/react@19.2.10)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8))(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219): dependencies: '@formatjs/intl-localematcher': 0.6.1 '@orama/orama': 3.1.13 @@ -29096,7 +29096,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.10)(react@19.3.0-canary-4842fbea-20260217) + react-remove-scroll: 2.7.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) remark: 15.0.1 remark-gfm: 4.0.1 remark-rehype: 11.1.2 @@ -29105,20 +29105,20 @@ snapshots: unist-util-visit: 5.0.0 optionalDependencies: '@types/react': 19.2.10 - 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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8) - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + 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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) transitivePeerDependencies: - supports-color - fumadocs-mdx@11.10.0(fumadocs-core@15.7.12(@types/react@19.2.10)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8))(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217))(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8))(react@19.3.0-canary-4842fbea-20260217): + fumadocs-mdx@11.10.0(fumadocs-core@15.7.12(@types/react@19.2.10)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8))(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219))(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8))(react@19.3.0-canary-2ba30655-20260219): 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.10)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8))(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + fumadocs-core: 15.7.12(@types/react@19.2.10)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8))(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) js-yaml: 4.1.0 lru-cache: 11.2.1 picocolors: 1.1.1 @@ -29130,36 +29130,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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8) - react: 19.3.0-canary-4842fbea-20260217 + 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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8) + react: 19.3.0-canary-2ba30655-20260219 transitivePeerDependencies: - supports-color - fumadocs-ui@15.7.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8))(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(tailwindcss@4.1.13): - dependencies: - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + fumadocs-ui@15.7.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8))(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(tailwindcss@4.1.13): + dependencies: + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) class-variance-authority: 0.7.1 - fumadocs-core: 15.7.12(@types/react@19.2.10)(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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(sass@1.77.8))(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + fumadocs-core: 15.7.12(@types/react@19.2.10)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8))(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) lodash.merge: 4.6.2 - next-themes: 0.4.6(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + next-themes: 0.4.6(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) postcss-selector-parser: 7.1.0 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - react-medium-image-zoom: 5.3.0(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + react-medium-image-zoom: 5.3.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219) scroll-into-view-if-needed: 3.1.0 tailwind-merge: 3.3.1 optionalDependencies: '@types/react': 19.2.10 - 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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(sass@1.77.8) tailwindcss: 4.1.13 transitivePeerDependencies: - '@mixedbread/sdk' @@ -29831,7 +29831,7 @@ snapshots: hoist-non-react-statics@3.3.2: dependencies: - react-is: 19.3.0-canary-4842fbea-20260217 + react-is: 19.3.0-canary-2ba30655-20260219 homedir-polyfill@1.0.3: dependencies: @@ -32104,9 +32104,9 @@ snapshots: dependencies: react: 19.3.0-canary-fd524fe0-20251121 - lucide-react@0.554.0(react@19.3.0-canary-4842fbea-20260217): + lucide-react@0.554.0(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 lz-string@1.5.0: {} @@ -33461,22 +33461,22 @@ snapshots: dependencies: inherits: 2.0.4 - next-themes@0.4.6(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217): + next-themes@0.4.6(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) 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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@next/swc-darwin-arm64': 15.5.7 '@next/swc-darwin-x64': 15.5.7 @@ -33495,15 +33495,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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(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-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) - styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) + styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@next/swc-darwin-arm64': 16.0.8 '@next/swc-darwin-x64': 16.0.8 @@ -35339,31 +35339,31 @@ snapshots: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-4842fbea-20260217 + react-is: 19.3.0-canary-2ba30655-20260219 pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-4842fbea-20260217 + react-is: 19.3.0-canary-2ba30655-20260219 pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-4842fbea-20260217 + react-is: 19.3.0-canary-2ba30655-20260219 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-4842fbea-20260217 + react-is: 19.3.0-canary-2ba30655-20260219 pretty-format@30.2.0: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-4842fbea-20260217 + react-is: 19.3.0-canary-2ba30655-20260219 pretty-ms@7.0.0: dependencies: @@ -35427,7 +35427,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.3.0-canary-4842fbea-20260217 + react-is: 19.3.0-canary-2ba30655-20260219 property-information@5.6.0: dependencies: @@ -35639,31 +35639,31 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@0.0.0-experimental-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217): + react-dom@0.0.0-experimental-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 - scheduler: 0.28.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + scheduler: 0.28.0-canary-2ba30655-20260219 - react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217): + react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 - scheduler: 0.28.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + scheduler: 0.28.0-canary-2ba30655-20260219 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-4842fbea-20260217 + scheduler: 0.28.0-canary-2ba30655-20260219 - react-is@19.3.0-canary-4842fbea-20260217: {} + react-is@19.3.0-canary-2ba30655-20260219: {} 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-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217): + react-medium-image-zoom@5.3.0(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) 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: @@ -35681,10 +35681,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.10 - react-remove-scroll-bar@2.3.8(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217): + react-remove-scroll-bar@2.3.8(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-style-singleton: 2.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-style-singleton: 2.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.10 @@ -35700,59 +35700,59 @@ snapshots: optionalDependencies: '@types/react': 19.2.10 - react-remove-scroll@2.7.1(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217): + react-remove-scroll@2.7.1(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - react-style-singleton: 2.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + react-style-singleton: 2.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) - use-sidecar: 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217) + use-callback-ref: 1.3.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) + use-sidecar: 1.1.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219) optionalDependencies: '@types/react': 19.2.10 - react-server-dom-turbopack@0.0.0-experimental-4842fbea-20260217(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217): + react-server-dom-turbopack@0.0.0-experimental-2ba30655-20260219(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) - react-server-dom-turbopack@19.3.0-canary-4842fbea-20260217(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217): + react-server-dom-turbopack@19.3.0-canary-2ba30655-20260219(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) - react-server-dom-webpack@0.0.0-experimental-4842fbea-20260217(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))): + react-server-dom-webpack@0.0.0-experimental-2ba30655-20260219(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) 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-4842fbea-20260217(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))): + react-server-dom-webpack@19.3.0-canary-2ba30655-20260219(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219)(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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) 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-4842fbea-20260217): + react-shallow-renderer@16.15.0(react@19.3.0-canary-2ba30655-20260219): dependencies: object-assign: 4.1.1 - react: 19.3.0-canary-4842fbea-20260217 - react-is: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-is: 19.3.0-canary-2ba30655-20260219 - react-ssr-prepass@1.0.8(react-is@19.3.0-canary-fd524fe0-20251121)(react@19.3.0-canary-4842fbea-20260217): + react-ssr-prepass@1.0.8(react-is@19.3.0-canary-fd524fe0-20251121)(react@19.3.0-canary-2ba30655-20260219): dependencies: object-is: 1.0.2 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 react-is: 19.3.0-canary-fd524fe0-20251121 react-style-singleton@2.2.1(@types/react@19.2.10)(react@19.3.0-canary-fd524fe0-20251121): @@ -35764,10 +35764,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.10 - react-style-singleton@2.2.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217): + react-style-singleton@2.2.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219): dependencies: get-nonce: 1.0.1 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.10 @@ -35780,12 +35780,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.10 - react-test-renderer@18.2.0(react@19.3.0-canary-4842fbea-20260217): + react-test-renderer@18.2.0(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 - react-is: 19.3.0-canary-4842fbea-20260217 - react-shallow-renderer: 16.15.0(react@19.3.0-canary-4842fbea-20260217) - scheduler: 0.28.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 + react-is: 19.3.0-canary-2ba30655-20260219 + react-shallow-renderer: 16.15.0(react@19.3.0-canary-2ba30655-20260219) + scheduler: 0.28.0-canary-2ba30655-20260219 react-textarea-autosize@8.5.3(@types/react@19.2.10)(react@19.3.0-canary-fd524fe0-20251121): dependencies: @@ -35796,20 +35796,20 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-virtualized@9.22.3(react-dom@19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217))(react@19.3.0-canary-4842fbea-20260217): + react-virtualized@9.22.3(react-dom@19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219))(react@19.3.0-canary-2ba30655-20260219): 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-4842fbea-20260217 - react-dom: 19.3.0-canary-4842fbea-20260217(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + react-dom: 19.3.0-canary-2ba30655-20260219(react@19.3.0-canary-2ba30655-20260219) react-lifecycles-compat: 3.0.4 - react@0.0.0-experimental-4842fbea-20260217: {} + react@0.0.0-experimental-2ba30655-20260219: {} - react@19.3.0-canary-4842fbea-20260217: {} + react@19.3.0-canary-2ba30655-20260219: {} react@19.3.0-canary-fd524fe0-20251121: {} @@ -36633,9 +36633,9 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.0.0-experimental-4842fbea-20260217: {} + scheduler@0.0.0-experimental-2ba30655-20260219: {} - scheduler@0.28.0-canary-4842fbea-20260217: {} + scheduler@0.28.0-canary-2ba30655-20260219: {} schema-utils@2.7.1: dependencies: @@ -37528,10 +37528,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-4842fbea-20260217): + styled-jsx@5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-2ba30655-20260219): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 optionalDependencies: '@babel/core': 7.26.10 babel-plugin-macros: 3.1.0 @@ -37635,11 +37635,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-4842fbea-20260217): + swr@2.2.4(react@19.3.0-canary-2ba30655-20260219): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-4842fbea-20260217 - use-sync-external-store: 1.5.0(react@19.3.0-canary-4842fbea-20260217) + react: 19.3.0-canary-2ba30655-20260219 + use-sync-external-store: 1.5.0(react@19.3.0-canary-2ba30655-20260219) symbol-observable@1.0.1: {} @@ -38485,9 +38485,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unistore@3.4.1(react@19.3.0-canary-4842fbea-20260217): + unistore@3.4.1(react@19.3.0-canary-2ba30655-20260219): optionalDependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 universal-github-app-jwt@1.1.1: dependencies: @@ -38622,9 +38622,9 @@ snapshots: optionalDependencies: '@types/react': 19.2.10 - use-callback-ref@1.3.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217): + use-callback-ref@1.3.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.10 @@ -38654,17 +38654,17 @@ snapshots: optionalDependencies: '@types/react': 19.2.10 - use-sidecar@1.1.3(@types/react@19.2.10)(react@19.3.0-canary-4842fbea-20260217): + use-sidecar@1.1.3(@types/react@19.2.10)(react@19.3.0-canary-2ba30655-20260219): dependencies: detect-node-es: 1.1.0 - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.10 - use-sync-external-store@1.5.0(react@19.3.0-canary-4842fbea-20260217): + use-sync-external-store@1.5.0(react@19.3.0-canary-2ba30655-20260219): dependencies: - react: 19.3.0-canary-4842fbea-20260217 + react: 19.3.0-canary-2ba30655-20260219 util-deprecate@1.0.2: {} From 56adc02e86b6dcb23bf788bf8cda4d144ae7361c Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Thu, 19 Feb 2026 23:29:21 -0500 Subject: [PATCH 3/6] Use cookie as sole protocol for instant navigation testing (#89871) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Instant Navigation Testing API already uses a cookie to persist lock state across MPA navigations (page reloads, plain anchor links), since window globals don't survive navigation. Rather than maintaining two parallel mechanisms — a window global for SPA and a cookie for MPA — this makes the cookie the single source of truth for all cases. Playwright sets/clears the cookie directly via the browser context, and the client reacts to changes through the CookieStore API's change event. This removes the window.__EXPERIMENTAL_NEXT_TESTING__ global and the page.evaluate() calls that went with it. --- packages/next/src/build/templates/app-page.ts | 9 + packages/next/src/client/app-bootstrap.ts | 47 ++--- packages/next/src/client/app-globals.ts | 15 +- packages/next/src/client/app-index.tsx | 10 - .../segment-cache/navigation-testing-lock.ts | 180 +++++++----------- packages/next/src/server/config-shared.ts | 4 +- packages/next/types/global.d.ts | 2 + .../instant-navigation-testing-api.test.ts | 55 +++--- 8 files changed, 138 insertions(+), 184 deletions(-) diff --git a/packages/next/src/build/templates/app-page.ts b/packages/next/src/build/templates/app-page.ts index ee73afb484533..9f27fd207469f 100644 --- a/packages/next/src/build/templates/app-page.ts +++ b/packages/next/src/build/templates/app-page.ts @@ -1470,6 +1470,15 @@ export async function handler( body.push( new ReadableStream({ start(controller) { + if (isInstantNavigationTest) { + // Inject a global so the client can detect that this response + // is a partial static shell, independent of document.cookie + // (which may be empty on the new page in some browsers). + const encoder = new TextEncoder() + controller.enqueue( + encoder.encode('') + ) + } controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML) controller.close() }, diff --git a/packages/next/src/client/app-bootstrap.ts b/packages/next/src/client/app-bootstrap.ts index 0832a5b65ffdc..b48bd03d71e7b 100644 --- a/packages/next/src/client/app-bootstrap.ts +++ b/packages/next/src/client/app-bootstrap.ts @@ -76,29 +76,32 @@ export function appBootstrap(hydrate: (assetPrefix: string) => void) { } } - // Instant Navigation Testing API: If the page was loaded with the instant - // test cookie set (from an MPA navigation while locked), skip hydration - // and set up a minimal testing API. Hydration would fail because the - // static shell response doesn't include the full Flight data stream. - // When unlock() is called, we clear the cookie and reload the page. + // Instant Navigation Testing API: If the server returned a partial static + // shell (indicated by the __next_instant_test global injected into the + // HTML), skip hydration. The response doesn't include the full Flight data + // stream. When the test framework deletes the cookie, the CookieStore + // change event triggers a page reload. if (process.env.__NEXT_EXPOSE_TESTING_API) { - const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing' - if (document.cookie.includes(NEXT_INSTANT_TEST_COOKIE + '=')) { - // Set up minimal testing API for the static shell - window.__EXPERIMENTAL_NEXT_TESTING__ = { - navigation: { - lock: () => { - console.error( - 'Navigation lock already acquired. Concurrent locks are not allowed. ' + - 'Did you forget to release the previous lock?' - ) - }, - unlock: () => { - // Clear the cookie and reload to get the full page with dynamic data - document.cookie = `${NEXT_INSTANT_TEST_COOKIE}=;path=/;max-age=0` - window.location.reload() - }, - }, + if (self.__next_instant_test) { + const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing' + if ( + typeof cookieStore !== 'undefined' && + document.cookie.includes(NEXT_INSTANT_TEST_COOKIE + '=') + ) { + // Cookie is still set. Wait for the test framework to delete it, + // then reload to get the full response. + cookieStore.addEventListener('change', (event: CookieChangeEvent) => { + for (const cookie of event.deleted) { + if (cookie.name === NEXT_INSTANT_TEST_COOKIE) { + window.location.reload() + return + } + } + }) + } else { + // Cookie is already gone (or not accessible). Refresh immediately + // to get the full response. + window.location.reload() } return } diff --git a/packages/next/src/client/app-globals.ts b/packages/next/src/client/app-globals.ts index b223c50c546f5..d1834170f42d3 100644 --- a/packages/next/src/client/app-globals.ts +++ b/packages/next/src/client/app-globals.ts @@ -6,16 +6,11 @@ if (process.env.__NEXT_DEV_SERVER) { require('../next-devtools/userspace/app/app-dev-overlay-setup') as typeof import('../next-devtools/userspace/app/app-dev-overlay-setup') } -// Expose a testing API that allows e2e tests to assert on the prefetched UI -// state before dynamic data streams in. Browser-only. +// Start listening for the instant navigation test cookie. The test framework +// (e.g. Playwright) sets/clears this cookie to control the navigation lock. +// Browser-only. if (process.env.__NEXT_EXPOSE_TESTING_API && typeof window !== 'undefined') { - const { acquireNavigationLock, releaseNavigationLock } = + const { startListeningForInstantNavigationCookie } = require('./components/segment-cache/navigation-testing-lock') as typeof import('./components/segment-cache/navigation-testing-lock') - - window.__EXPERIMENTAL_NEXT_TESTING__ = { - navigation: { - lock: acquireNavigationLock, - unlock: releaseNavigationLock, - }, - } + startListeningForInstantNavigationCookie() } diff --git a/packages/next/src/client/app-index.tsx b/packages/next/src/client/app-index.tsx index e2a9979732af7..003a9313cb066 100644 --- a/packages/next/src/client/app-index.tsx +++ b/packages/next/src/client/app-index.tsx @@ -65,16 +65,6 @@ declare global { */ __next_r?: string __next_f: NextFlight - /** - * Testing API that allows e2e tests to assert on the prefetched UI state - * before dynamic data streams in. Dev-only. - */ - __EXPERIMENTAL_NEXT_TESTING__?: { - navigation: { - lock: () => void - unlock: () => void - } - } } } diff --git a/packages/next/src/client/components/segment-cache/navigation-testing-lock.ts b/packages/next/src/client/components/segment-cache/navigation-testing-lock.ts index 0f40d82537a80..73a45e388cb6b 100644 --- a/packages/next/src/client/components/segment-cache/navigation-testing-lock.ts +++ b/packages/next/src/client/components/segment-cache/navigation-testing-lock.ts @@ -1,16 +1,24 @@ /** * Navigation lock for the Instant Navigation Testing API. * - * This module is not meant to be used directly. It's exposed on the window - * object and intended to be called via a wrapper API integrated into an - * e2e testing framework like Playwright: + * This module is not meant to be used directly. It's exposed via a cookie-based + * protocol intended to be driven by an e2e testing framework like Playwright: * * async function instant(page, fn) { - * await page.evaluate(() => window.__EXPERIMENTAL_NEXT_TESTING__.navigation.lock()) + * const context = page.context() + * const domain = new URL(page.url()).hostname + * await context.addCookies([{ + * name: 'next-instant-navigation-testing', + * value: '1', + * domain, + * path: '/', + * }]) * try { * return await fn() * } finally { - * await page.evaluate(() => window.__EXPERIMENTAL_NEXT_TESTING__.navigation.unlock()) + * await context.clearCookies({ + * name: 'next-instant-navigation-testing', + * }) * } * } * @@ -20,6 +28,9 @@ * await expect(page.locator('[data-testid="loading"]')).toBeVisible() * }) * + * Next.js never writes to the cookie — it only reads and listens for changes + * via the CookieStore API's `change` event. + * * When the lock is acquired: * - Routes without a prefetch cache hit will wait for prefetch to complete * before navigating. @@ -27,12 +38,12 @@ * into the UI. * * For MPA navigations (page reload, full page load): - * - A cookie is set that tells the server to render only the static shell. - * - When the lock is released, the cookie is cleared and a refresh is - * triggered to fetch dynamic data. + * - The cookie tells the server to render only the static shell. + * - When the lock is released (cookie deleted), the page reloads to fetch + * dynamic data (handled in app-bootstrap.ts). * * This allows tests to assert on the prefetched UI state before dynamic - * content streams in. Network requests are not blocked - they proceed in + * content streams in. Network requests are not blocked — they proceed in * parallel while the lock is held. * * All functions in this module are wrapped in checks for the testing API, @@ -49,83 +60,65 @@ type NavigationLockState = { let lockState: NavigationLockState | null = null -// Tracks whether the page was loaded while the instant test cookie was set. -// When true, releasing the lock will trigger a refresh to fetch dynamic data. -let mpaLockedStateNeedsRefresh = false +function acquireLock(): void { + let resolve: () => void + const promise = new Promise((r) => { + resolve = r + }) + lockState = { promise, resolve: resolve! } +} /** - * Acquires the navigation lock. While locked, navigations will wait for - * prefetch tasks to complete before proceeding. - * - * Also sets a cookie so that MPA navigations (page reload, full page load) - * will render only the static shell. + * Starts listening for changes to the instant navigation test cookie via the + * CookieStore API. When the cookie is added (by the test framework), the + * in-memory lock is acquired. When the cookie is deleted, the lock is released. * - * Logs an error if the lock is already acquired (concurrent locks are not - * allowed). - * - * Not exposed in production builds by default. + * This should be called once during page initialization. */ -export function acquireNavigationLock(): void { +export function startListeningForInstantNavigationCookie(): void { if (process.env.__NEXT_EXPOSE_TESTING_API) { - if (lockState !== null) { - console.error( - 'Navigation lock already acquired. Concurrent locks are not allowed. ' + - 'Did you forget to release the previous lock?' - ) + if (typeof cookieStore === 'undefined') { return } - - let resolve: () => void - const promise = new Promise((r) => { - resolve = r + cookieStore.addEventListener('change', (event: CookieChangeEvent) => { + // Check if our cookie was added + for (const cookie of event.changed) { + if (cookie.name === NEXT_INSTANT_TEST_COOKIE) { + if (lockState !== null) { + console.error( + 'Navigation lock already acquired. Concurrent locks ' + + 'are not allowed. Did you forget to release the ' + + 'previous lock?' + ) + return + } + acquireLock() + return + } + } + + // Check if our cookie was deleted + for (const cookie of event.deleted) { + if (cookie.name === NEXT_INSTANT_TEST_COOKIE) { + if (lockState !== null) { + lockState.resolve() + lockState = null + } + return + } + } }) - lockState = { promise, resolve: resolve! } - - // Set cookie for MPA navigations - document.cookie = `${NEXT_INSTANT_TEST_COOKIE}=1;path=/` - } -} - -/** - * Releases the navigation lock. Any navigations that were waiting for - * prefetch completion will now proceed with dynamic data fetching. - * - * If the page was loaded while locked (MPA navigation), this also triggers - * a refresh to fetch the dynamic data that was blocked during the initial - * page load. - * - * No-op if the lock is not currently acquired. - * - * Not exposed in production builds by default. - */ -export function releaseNavigationLock(): void { - if (process.env.__NEXT_EXPOSE_TESTING_API) { - if (lockState !== null) { - lockState.resolve() - lockState = null - } - - // Clear the cookie - document.cookie = `${NEXT_INSTANT_TEST_COOKIE}=;path=/;max-age=0` - - // If the page was loaded with the cookie set (MPA navigation), trigger a - // refresh to fetch the dynamic data that was blocked during SSR. - if (mpaLockedStateNeedsRefresh) { - mpaLockedStateNeedsRefresh = false - triggerRefresh() - } } } /** - * Returns true if the navigation lock is currently acquired. - * - * Not exposed in production builds by default. Always returns false when the - * testing API is not available. + * Returns true if the navigation lock is currently active. Checks the cookie + * rather than in-memory lockState because the cookie survives across MPA + * navigations (page reloads). Returns false when the testing API is disabled. */ export function isNavigationLocked(): boolean { if (process.env.__NEXT_EXPOSE_TESTING_API) { - return lockState !== null + return document.cookie.includes(NEXT_INSTANT_TEST_COOKIE + '=') } return false } @@ -133,8 +126,6 @@ export function isNavigationLocked(): boolean { /** * Waits for the navigation lock to be released, if it's currently held. * No-op if the lock is not acquired. - * - * Not exposed in production builds by default. */ export async function waitForNavigationLockIfActive(): Promise { if (process.env.__NEXT_EXPOSE_TESTING_API) { @@ -143,46 +134,3 @@ export async function waitForNavigationLockIfActive(): Promise { } } } - -/** - * Called during page initialization when the instant test cookie is detected. - * Sets up the lock state so that: - * 1. Client-side navigations during the instant scope also block dynamic data - * 2. When the lock is released, a refresh is triggered to fetch dynamic data - * - * Not exposed in production builds by default. - */ -export function initializeMpaLockedState(): void { - if (process.env.__NEXT_EXPOSE_TESTING_API) { - // Set the MPA flag so we know to trigger a refresh when the lock is released - mpaLockedStateNeedsRefresh = true - - // Also acquire the in-memory lock so client-side navigations during the - // instant scope also block dynamic data - if (lockState === null) { - let resolve: () => void - const promise = new Promise((r) => { - resolve = r - }) - lockState = { promise, resolve: resolve! } - } - } -} - -/** - * Triggers a router refresh to fetch dynamic data. Used after releasing the - * navigation lock following an MPA navigation. - */ -function triggerRefresh(): void { - if (process.env.__NEXT_EXPOSE_TESTING_API) { - const { dispatchAppRouterAction } = - require('../use-action-queue') as typeof import('../use-action-queue') - const { ACTION_REFRESH } = - require('../router-reducer/router-reducer-types') as typeof import('../router-reducer/router-reducer-types') - - dispatchAppRouterAction({ - type: ACTION_REFRESH, - devBypassCacheInvalidation: true, - }) - } -} diff --git a/packages/next/src/server/config-shared.ts b/packages/next/src/server/config-shared.ts index 3e72f58aa0dc5..aaaef583f471e 100644 --- a/packages/next/src/server/config-shared.ts +++ b/packages/next/src/server/config-shared.ts @@ -383,8 +383,8 @@ export interface ExperimentalConfig { externalMiddlewareRewritesResolve?: boolean externalProxyRewritesResolve?: boolean /** - * Exposes the experimental testing API (`__EXPERIMENTAL_NEXT_TESTING__`) in - * production builds. This API is always available in development mode. + * Exposes the Instant Navigation Testing API in production builds. This + * API is always available in development mode. * * The testing API allows e2e tests to control navigation timing, enabling * deterministic assertions on prefetched/cached UI before dynamic data diff --git a/packages/next/types/global.d.ts b/packages/next/types/global.d.ts index 086ddfc4f63f1..d20ee1b846d7b 100644 --- a/packages/next/types/global.d.ts +++ b/packages/next/types/global.d.ts @@ -82,6 +82,8 @@ interface Window { | 'top-right' | 'bottom-left' | 'bottom-right' + /** @internal - Set by the server when serving a static shell for instant navigation tests */ + __next_instant_test?: 1 } interface NextFetchRequestConfig { diff --git a/test/e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts b/test/e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts index b5716c4064d5e..b2b49d0d392af 100644 --- a/test/e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts +++ b/test/e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts @@ -51,34 +51,37 @@ describe('instant-navigation-testing-api', () => { return page! } + const INSTANT_COOKIE = 'next-instant-navigation-testing' + /** * Runs a function with instant navigation enabled. Within this scope, * navigations render the prefetched UI immediately and wait for the * callback to complete before streaming in dynamic data. * - * This is the inline implementation of what will eventually be extracted - * to a Playwright helper package. + * Uses the cookie-based protocol: setting the cookie acquires the + * navigation lock (via CookieStore change event), and clearing it + * releases the lock. */ async function instant( page: Playwright.Page, fn: () => Promise ): Promise { - await page.evaluate(() => - (window as any).__EXPERIMENTAL_NEXT_TESTING__?.navigation.lock() - ) + // Acquire the lock by setting the cookie from within the page context. + // This triggers the CookieStore change event in navigation-testing-lock.ts, + // which acquires the in-memory navigation lock. + await page.evaluate((name) => { + document.cookie = name + '=1; path=/' + }, INSTANT_COOKIE) try { return await fn() } finally { - // Wait for the page to be ready before unlocking. This is only necessary - // when fn() triggers a full page navigation (e.g. page.reload() or - // clicking a plain anchor), since the new page needs time to initialize. - await page.waitForFunction( - () => - typeof (window as any).__EXPERIMENTAL_NEXT_TESTING__ !== 'undefined' - ) - await page.evaluate(() => - (window as any).__EXPERIMENTAL_NEXT_TESTING__?.navigation.unlock() - ) + // Release the lock by clearing the cookie. For SPA navigations, this + // triggers the CookieStore change event which resolves the in-memory + // lock. For MPA navigations (reload, plain anchor), the listener in + // app-bootstrap.ts triggers a page reload to fetch dynamic data. + await page.evaluate((name) => { + document.cookie = name + '=; path=/; max-age=0' + }, INSTANT_COOKIE) } } @@ -167,19 +170,23 @@ describe('instant-navigation-testing-api', () => { it('logs an error when attempting to nest instant scopes', async () => { const page = await openPage('/') - const errors: string[] = [] - page.on('console', (msg) => { - if (msg.type() === 'error') { - errors.push(msg.text()) - } + // Listen for the specific error message + const consolePromise = page.waitForEvent('console', { + predicate: (msg) => + msg.type() === 'error' && msg.text().includes('already acquired'), + timeout: 5000, }) await instant(page, async () => { - // Attempt to nest another instant scope - should log an error - await instant(page, async () => {}) + // Attempt to acquire the lock again by changing the cookie value. + // The CookieStore change event fires, and the handler detects that + // the lock is already held, logging an error. + await page.evaluate((name) => { + document.cookie = name + '=nested; path=/' + }, INSTANT_COOKIE) + const msg = await consolePromise + expect(msg.text()).toContain('already acquired') }) - - expect(errors.some((e) => e.includes('already acquired'))).toBe(true) }) it('renders static shell on page reload', async () => { From 2bf2c9c5f2e678cde27bba17ef31589325055c34 Mon Sep 17 00:00:00 2001 From: Josh Story Date: Thu, 19 Feb 2026 20:29:29 -0800 Subject: [PATCH 4/6] Simplify metadata tag rendering to flat imperative style (#90209) Replace the layered abstraction (Meta, MetaFilter, MultiMeta, ExtendMeta, and 12 category component functions across 5 files) with a single flat function that builds a tags array using explicit if-checks and for-loops. Every meta/link tag is now visible as literal JSX at the call site. OG image/video/audio properties and AppLinks fields are enumerated explicitly rather than iterated generically from object keys. Keys are assigned directly on each element at push time, eliminating the cloneElement keying pass. --- .../src/lib/metadata/generate/alternate.tsx | 58 - .../next/src/lib/metadata/generate/basic.tsx | 249 --- .../next/src/lib/metadata/generate/icons.tsx | 50 - .../next/src/lib/metadata/generate/meta.tsx | 133 -- .../src/lib/metadata/generate/opengraph.tsx | 303 --- packages/next/src/lib/metadata/metadata.tsx | 1689 ++++++++++++++++- .../next-server-nft/next-server-nft.test.ts | 5 - 7 files changed, 1634 insertions(+), 853 deletions(-) delete mode 100644 packages/next/src/lib/metadata/generate/alternate.tsx delete mode 100644 packages/next/src/lib/metadata/generate/basic.tsx delete mode 100644 packages/next/src/lib/metadata/generate/icons.tsx delete mode 100644 packages/next/src/lib/metadata/generate/meta.tsx delete mode 100644 packages/next/src/lib/metadata/generate/opengraph.tsx diff --git a/packages/next/src/lib/metadata/generate/alternate.tsx b/packages/next/src/lib/metadata/generate/alternate.tsx deleted file mode 100644 index cb4377b591036..0000000000000 --- a/packages/next/src/lib/metadata/generate/alternate.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import type { ResolvedMetadata } from '../types/metadata-interface' -import type { AlternateLinkDescriptor } from '../types/alternative-urls-types' - -import React from 'react' -import { MetaFilter } from './meta' - -function AlternateLink({ - descriptor, - ...props -}: { - descriptor: AlternateLinkDescriptor -} & React.LinkHTMLAttributes) { - if (!descriptor.url) return null - return ( - - ) -} - -export function AlternatesMetadata({ - alternates, -}: { - alternates: ResolvedMetadata['alternates'] -}) { - if (!alternates) return null - - const { canonical, languages, media, types } = alternates - - return MetaFilter([ - canonical - ? AlternateLink({ rel: 'canonical', descriptor: canonical }) - : null, - languages - ? Object.entries(languages).flatMap(([locale, descriptors]) => - descriptors?.map((descriptor) => - AlternateLink({ rel: 'alternate', hrefLang: locale, descriptor }) - ) - ) - : null, - media - ? Object.entries(media).flatMap(([mediaName, descriptors]) => - descriptors?.map((descriptor) => - AlternateLink({ rel: 'alternate', media: mediaName, descriptor }) - ) - ) - : null, - types - ? Object.entries(types).flatMap(([type, descriptors]) => - descriptors?.map((descriptor) => - AlternateLink({ rel: 'alternate', type, descriptor }) - ) - ) - : null, - ]) -} diff --git a/packages/next/src/lib/metadata/generate/basic.tsx b/packages/next/src/lib/metadata/generate/basic.tsx deleted file mode 100644 index ab0f8c11f9380..0000000000000 --- a/packages/next/src/lib/metadata/generate/basic.tsx +++ /dev/null @@ -1,249 +0,0 @@ -import type { - ResolvedMetadata, - ResolvedViewport, - Viewport, -} from '../types/metadata-interface' -import type { ViewportLayout } from '../types/extra-types' - -import { Meta, MetaFilter, MultiMeta } from './meta' -import { ViewportMetaKeys } from '../constants' -import { getOrigin } from './utils' - -// convert viewport object to string for viewport meta tag -function resolveViewportLayout(viewport: Viewport) { - let resolved: string | null = null - - if (viewport && typeof viewport === 'object') { - resolved = '' - for (const viewportKey_ in ViewportMetaKeys) { - const viewportKey = viewportKey_ as keyof ViewportLayout - if (viewportKey in viewport) { - let value = viewport[viewportKey] - if (typeof value === 'boolean') { - value = value ? 'yes' : 'no' - } else if (!value && viewportKey === 'initialScale') { - value = undefined - } - if (value) { - if (resolved) resolved += ', ' - resolved += `${ViewportMetaKeys[viewportKey]}=${value}` - } - } - } - } - return resolved -} - -export function ViewportMeta({ viewport }: { viewport: ResolvedViewport }) { - return MetaFilter([ - , - Meta({ name: 'viewport', content: resolveViewportLayout(viewport) }), - ...(viewport.themeColor - ? viewport.themeColor.map((themeColor) => - Meta({ - name: 'theme-color', - content: themeColor.color, - media: themeColor.media, - }) - ) - : []), - Meta({ name: 'color-scheme', content: viewport.colorScheme }), - ]) -} - -export function BasicMeta({ metadata }: { metadata: ResolvedMetadata }) { - const manifestOrigin = metadata.manifest - ? getOrigin(metadata.manifest) - : undefined - - return MetaFilter([ - metadata.title !== null && metadata.title.absolute ? ( - {metadata.title.absolute} - ) : null, - Meta({ name: 'description', content: metadata.description }), - Meta({ name: 'application-name', content: metadata.applicationName }), - ...(metadata.authors - ? metadata.authors.map((author) => [ - author.url ? ( - - ) : null, - Meta({ name: 'author', content: author.name }), - ]) - : []), - metadata.manifest ? ( - - ) : null, - Meta({ name: 'generator', content: metadata.generator }), - Meta({ name: 'keywords', content: metadata.keywords?.join(',') }), - Meta({ name: 'referrer', content: metadata.referrer }), - Meta({ name: 'creator', content: metadata.creator }), - Meta({ name: 'publisher', content: metadata.publisher }), - Meta({ name: 'robots', content: metadata.robots?.basic }), - Meta({ name: 'googlebot', content: metadata.robots?.googleBot }), - Meta({ name: 'abstract', content: metadata.abstract }), - ...(metadata.archives - ? metadata.archives.map((archive) => ( - - )) - : []), - ...(metadata.assets - ? metadata.assets.map((asset) => ) - : []), - ...(metadata.bookmarks - ? metadata.bookmarks.map((bookmark) => ( - - )) - : []), - ...(metadata.pagination - ? [ - metadata.pagination.previous ? ( - - ) : null, - metadata.pagination.next ? ( - - ) : null, - ] - : []), - Meta({ name: 'category', content: metadata.category }), - Meta({ name: 'classification', content: metadata.classification }), - ...(metadata.other - ? Object.entries(metadata.other).map(([name, content]) => { - if (Array.isArray(content)) { - return content.map((contentItem) => - Meta({ name, content: contentItem }) - ) - } else { - return Meta({ name, content }) - } - }) - : []), - ]) -} - -export function ItunesMeta({ itunes }: { itunes: ResolvedMetadata['itunes'] }) { - if (!itunes) return null - const { appId, appArgument } = itunes - let content = `app-id=${appId}` - if (appArgument) { - content += `, app-argument=${appArgument}` - } - return -} - -export function FacebookMeta({ - facebook, -}: { - facebook: ResolvedMetadata['facebook'] -}) { - if (!facebook) return null - - const { appId, admins } = facebook - - return MetaFilter([ - appId ? : null, - ...(admins - ? admins.map((admin) => ) - : []), - ]) -} - -export function PinterestMeta({ - pinterest, -}: { - pinterest: ResolvedMetadata['pinterest'] -}) { - if (!pinterest || pinterest.richPin === undefined) return null - - const { richPin } = pinterest - - return -} - -const formatDetectionKeys = [ - 'telephone', - 'date', - 'address', - 'email', - 'url', -] as const -export function FormatDetectionMeta({ - formatDetection, -}: { - formatDetection: ResolvedMetadata['formatDetection'] -}) { - if (!formatDetection) return null - let content = '' - for (const key of formatDetectionKeys) { - if (formatDetection[key] === false) { - if (content) content += ', ' - content += `${key}=no` - } - } - return content ? : null -} - -export function AppleWebAppMeta({ - appleWebApp, -}: { - appleWebApp: ResolvedMetadata['appleWebApp'] -}) { - if (!appleWebApp) return null - - const { capable, title, startupImage, statusBarStyle } = appleWebApp - - return MetaFilter([ - capable ? Meta({ name: 'mobile-web-app-capable', content: 'yes' }) : null, - Meta({ name: 'apple-mobile-web-app-title', content: title }), - startupImage - ? startupImage.map((image) => ( - - )) - : null, - statusBarStyle - ? Meta({ - name: 'apple-mobile-web-app-status-bar-style', - content: statusBarStyle, - }) - : null, - ]) -} - -export function VerificationMeta({ - verification, -}: { - verification: ResolvedMetadata['verification'] -}) { - if (!verification) return null - - return MetaFilter([ - MultiMeta({ - namePrefix: 'google-site-verification', - contents: verification.google, - }), - MultiMeta({ namePrefix: 'y_key', contents: verification.yahoo }), - MultiMeta({ - namePrefix: 'yandex-verification', - contents: verification.yandex, - }), - MultiMeta({ namePrefix: 'me', contents: verification.me }), - ...(verification.other - ? Object.entries(verification.other).map(([key, value]) => - MultiMeta({ namePrefix: key, contents: value }) - ) - : []), - ]) -} diff --git a/packages/next/src/lib/metadata/generate/icons.tsx b/packages/next/src/lib/metadata/generate/icons.tsx deleted file mode 100644 index 24d2efce4dc0b..0000000000000 --- a/packages/next/src/lib/metadata/generate/icons.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import type { ResolvedMetadata } from '../types/metadata-interface' -import type { Icon, IconDescriptor } from '../types/metadata-types' -import { IconMark } from './icon-mark' - -import { MetaFilter } from './meta' - -function IconDescriptorLink({ icon }: { icon: IconDescriptor }) { - const { url, rel = 'icon', ...props } = icon - - return -} - -function IconLink({ rel, icon }: { rel?: string; icon: Icon }) { - if (typeof icon === 'object' && !(icon instanceof URL)) { - if (!icon.rel && rel) icon.rel = rel - return IconDescriptorLink({ icon }) - } else { - const href = icon.toString() - return - } -} - -export function IconsMetadata({ icons }: { icons: ResolvedMetadata['icons'] }) { - if (!icons) return null - - const shortcutList = icons.shortcut - const iconList = icons.icon - const appleList = icons.apple - const otherList = icons.other - - const hasIcon = Boolean( - shortcutList?.length || - iconList?.length || - appleList?.length || - otherList?.length - ) - if (!hasIcon) return null - - return MetaFilter([ - shortcutList - ? shortcutList.map((icon) => IconLink({ rel: 'shortcut icon', icon })) - : null, - iconList ? iconList.map((icon) => IconLink({ rel: 'icon', icon })) : null, - appleList - ? appleList.map((icon) => IconLink({ rel: 'apple-touch-icon', icon })) - : null, - otherList ? otherList.map((icon) => IconDescriptorLink({ icon })) : null, - hasIcon ? : null, - ]) -} diff --git a/packages/next/src/lib/metadata/generate/meta.tsx b/packages/next/src/lib/metadata/generate/meta.tsx deleted file mode 100644 index 27cb2bedb37fa..0000000000000 --- a/packages/next/src/lib/metadata/generate/meta.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import React from 'react' -import { nonNullable } from '../../non-nullable' - -export function Meta({ - name, - property, - content, - media, -}: { - name?: string - property?: string - media?: string - content: string | number | URL | null | undefined -}): React.ReactElement | null { - if (typeof content !== 'undefined' && content !== null && content !== '') { - return ( - - ) - } - return null -} - -export function MetaFilter( - items: (T | null)[] -): NonNullable[] { - const acc: NonNullable[] = [] - for (const item of items) { - if (Array.isArray(item)) { - acc.push(...item.filter(nonNullable)) - } else if (nonNullable(item)) { - acc.push(item) - } - } - return acc -} - -type ExtendMetaContent = Record< - string, - undefined | string | URL | number | boolean | null | undefined -> -type MultiMetaContent = - | (ExtendMetaContent | string | URL | number)[] - | null - | undefined - -function camelToSnake(camelCaseStr: string) { - return camelCaseStr.replace(/([A-Z])/g, function (match) { - return '_' + match.toLowerCase() - }) -} - -const aliasPropPrefixes = new Set([ - 'og:image', - 'twitter:image', - 'og:video', - 'og:audio', -]) -function getMetaKey(prefix: string, key: string) { - // Use `twitter:image` and `og:image` instead of `twitter:image:url` and `og:image:url` - // to be more compatible as it's a more common format. - // `og:video` & `og:audio` do not have a `:url` suffix alias - if (aliasPropPrefixes.has(prefix) && key === 'url') { - return prefix - } - if (prefix.startsWith('og:') || prefix.startsWith('twitter:')) { - key = camelToSnake(key) - } - return prefix + ':' + key -} - -function ExtendMeta({ - content, - namePrefix, - propertyPrefix, -}: { - content?: ExtendMetaContent - namePrefix?: string - propertyPrefix?: string -}) { - if (!content) return null - return MetaFilter( - Object.entries(content).map(([k, v]) => { - return typeof v === 'undefined' - ? null - : Meta({ - ...(propertyPrefix && { property: getMetaKey(propertyPrefix, k) }), - ...(namePrefix && { name: getMetaKey(namePrefix, k) }), - content: typeof v === 'string' ? v : v?.toString(), - }) - }) - ) -} - -export function MultiMeta({ - propertyPrefix, - namePrefix, - contents, -}: { - propertyPrefix?: string - namePrefix?: string - contents?: MultiMetaContent | null -}) { - if (typeof contents === 'undefined' || contents === null) { - return null - } - - return MetaFilter( - contents.map((content) => { - if ( - typeof content === 'string' || - typeof content === 'number' || - content instanceof URL - ) { - return Meta({ - ...(propertyPrefix - ? { property: propertyPrefix } - : { name: namePrefix }), - content, - }) - } else { - return ExtendMeta({ - namePrefix, - propertyPrefix, - content, - }) - } - }) - ) -} diff --git a/packages/next/src/lib/metadata/generate/opengraph.tsx b/packages/next/src/lib/metadata/generate/opengraph.tsx deleted file mode 100644 index 41c276a69f9bf..0000000000000 --- a/packages/next/src/lib/metadata/generate/opengraph.tsx +++ /dev/null @@ -1,303 +0,0 @@ -import type { ResolvedMetadata } from '../types/metadata-interface' -import type { TwitterAppDescriptor } from '../types/twitter-types' - -import { Meta, MetaFilter, MultiMeta } from './meta' - -export function OpenGraphMetadata({ - openGraph, -}: { - openGraph: ResolvedMetadata['openGraph'] -}) { - if (!openGraph) { - return null - } - - let typedOpenGraph - if ('type' in openGraph) { - const openGraphType = openGraph.type - switch (openGraphType) { - case 'website': - typedOpenGraph = [Meta({ property: 'og:type', content: 'website' })] - break - case 'article': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'article' }), - Meta({ - property: 'article:published_time', - content: openGraph.publishedTime?.toString(), - }), - Meta({ - property: 'article:modified_time', - content: openGraph.modifiedTime?.toString(), - }), - Meta({ - property: 'article:expiration_time', - content: openGraph.expirationTime?.toString(), - }), - MultiMeta({ - propertyPrefix: 'article:author', - contents: openGraph.authors, - }), - Meta({ property: 'article:section', content: openGraph.section }), - MultiMeta({ - propertyPrefix: 'article:tag', - contents: openGraph.tags, - }), - ] - break - case 'book': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'book' }), - Meta({ property: 'book:isbn', content: openGraph.isbn }), - Meta({ - property: 'book:release_date', - content: openGraph.releaseDate, - }), - MultiMeta({ - propertyPrefix: 'book:author', - contents: openGraph.authors, - }), - MultiMeta({ propertyPrefix: 'book:tag', contents: openGraph.tags }), - ] - break - case 'profile': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'profile' }), - Meta({ - property: 'profile:first_name', - content: openGraph.firstName, - }), - Meta({ property: 'profile:last_name', content: openGraph.lastName }), - Meta({ property: 'profile:username', content: openGraph.username }), - Meta({ property: 'profile:gender', content: openGraph.gender }), - ] - break - case 'music.song': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'music.song' }), - Meta({ - property: 'music:duration', - content: openGraph.duration?.toString(), - }), - MultiMeta({ - propertyPrefix: 'music:album', - contents: openGraph.albums, - }), - MultiMeta({ - propertyPrefix: 'music:musician', - contents: openGraph.musicians, - }), - ] - break - case 'music.album': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'music.album' }), - MultiMeta({ - propertyPrefix: 'music:song', - contents: openGraph.songs, - }), - MultiMeta({ - propertyPrefix: 'music:musician', - contents: openGraph.musicians, - }), - Meta({ - property: 'music:release_date', - content: openGraph.releaseDate, - }), - ] - break - case 'music.playlist': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'music.playlist' }), - MultiMeta({ - propertyPrefix: 'music:song', - contents: openGraph.songs, - }), - MultiMeta({ - propertyPrefix: 'music:creator', - contents: openGraph.creators, - }), - ] - break - case 'music.radio_station': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'music.radio_station' }), - MultiMeta({ - propertyPrefix: 'music:creator', - contents: openGraph.creators, - }), - ] - break - - case 'video.movie': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'video.movie' }), - MultiMeta({ - propertyPrefix: 'video:actor', - contents: openGraph.actors, - }), - MultiMeta({ - propertyPrefix: 'video:director', - contents: openGraph.directors, - }), - MultiMeta({ - propertyPrefix: 'video:writer', - contents: openGraph.writers, - }), - Meta({ property: 'video:duration', content: openGraph.duration }), - Meta({ - property: 'video:release_date', - content: openGraph.releaseDate, - }), - MultiMeta({ propertyPrefix: 'video:tag', contents: openGraph.tags }), - ] - break - case 'video.episode': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'video.episode' }), - MultiMeta({ - propertyPrefix: 'video:actor', - contents: openGraph.actors, - }), - MultiMeta({ - propertyPrefix: 'video:director', - contents: openGraph.directors, - }), - MultiMeta({ - propertyPrefix: 'video:writer', - contents: openGraph.writers, - }), - Meta({ property: 'video:duration', content: openGraph.duration }), - Meta({ - property: 'video:release_date', - content: openGraph.releaseDate, - }), - MultiMeta({ propertyPrefix: 'video:tag', contents: openGraph.tags }), - Meta({ property: 'video:series', content: openGraph.series }), - ] - break - case 'video.tv_show': - typedOpenGraph = [ - Meta({ property: 'og:type', content: 'video.tv_show' }), - ] - break - case 'video.other': - typedOpenGraph = [Meta({ property: 'og:type', content: 'video.other' })] - break - - default: - const _exhaustiveCheck: never = openGraphType - throw new Error(`Invalid OpenGraph type: ${_exhaustiveCheck}`) - } - } - - return MetaFilter([ - Meta({ property: 'og:determiner', content: openGraph.determiner }), - Meta({ property: 'og:title', content: openGraph.title?.absolute }), - Meta({ property: 'og:description', content: openGraph.description }), - Meta({ property: 'og:url', content: openGraph.url?.toString() }), - Meta({ property: 'og:site_name', content: openGraph.siteName }), - Meta({ property: 'og:locale', content: openGraph.locale }), - Meta({ property: 'og:country_name', content: openGraph.countryName }), - Meta({ property: 'og:ttl', content: openGraph.ttl?.toString() }), - MultiMeta({ propertyPrefix: 'og:image', contents: openGraph.images }), - MultiMeta({ propertyPrefix: 'og:video', contents: openGraph.videos }), - MultiMeta({ propertyPrefix: 'og:audio', contents: openGraph.audio }), - MultiMeta({ propertyPrefix: 'og:email', contents: openGraph.emails }), - MultiMeta({ - propertyPrefix: 'og:phone_number', - contents: openGraph.phoneNumbers, - }), - MultiMeta({ - propertyPrefix: 'og:fax_number', - contents: openGraph.faxNumbers, - }), - MultiMeta({ - propertyPrefix: 'og:locale:alternate', - contents: openGraph.alternateLocale, - }), - ...(typedOpenGraph ? typedOpenGraph : []), - ]) -} - -function TwitterAppItem({ - app, - type, -}: { - app: TwitterAppDescriptor - type: 'iphone' | 'ipad' | 'googleplay' -}) { - return [ - Meta({ name: `twitter:app:name:${type}`, content: app.name }), - Meta({ name: `twitter:app:id:${type}`, content: app.id[type] }), - Meta({ - name: `twitter:app:url:${type}`, - content: app.url?.[type]?.toString(), - }), - ] -} - -export function TwitterMetadata({ - twitter, -}: { - twitter: ResolvedMetadata['twitter'] -}) { - if (!twitter) return null - const { card } = twitter - - return MetaFilter([ - Meta({ name: 'twitter:card', content: card }), - Meta({ name: 'twitter:site', content: twitter.site }), - Meta({ name: 'twitter:site:id', content: twitter.siteId }), - Meta({ name: 'twitter:creator', content: twitter.creator }), - Meta({ name: 'twitter:creator:id', content: twitter.creatorId }), - Meta({ name: 'twitter:title', content: twitter.title?.absolute }), - Meta({ name: 'twitter:description', content: twitter.description }), - MultiMeta({ namePrefix: 'twitter:image', contents: twitter.images }), - ...(card === 'player' - ? twitter.players.flatMap((player) => [ - Meta({ - name: 'twitter:player', - content: player.playerUrl.toString(), - }), - Meta({ - name: 'twitter:player:stream', - content: player.streamUrl.toString(), - }), - Meta({ name: 'twitter:player:width', content: player.width }), - Meta({ name: 'twitter:player:height', content: player.height }), - ]) - : []), - ...(card === 'app' - ? [ - TwitterAppItem({ app: twitter.app, type: 'iphone' }), - TwitterAppItem({ app: twitter.app, type: 'ipad' }), - TwitterAppItem({ app: twitter.app, type: 'googleplay' }), - ] - : []), - ]) -} - -export function AppLinksMeta({ - appLinks, -}: { - appLinks: ResolvedMetadata['appLinks'] -}) { - if (!appLinks) return null - return MetaFilter([ - MultiMeta({ propertyPrefix: 'al:ios', contents: appLinks.ios }), - MultiMeta({ propertyPrefix: 'al:iphone', contents: appLinks.iphone }), - MultiMeta({ propertyPrefix: 'al:ipad', contents: appLinks.ipad }), - MultiMeta({ propertyPrefix: 'al:android', contents: appLinks.android }), - MultiMeta({ - propertyPrefix: 'al:windows_phone', - contents: appLinks.windows_phone, - }), - MultiMeta({ propertyPrefix: 'al:windows', contents: appLinks.windows }), - MultiMeta({ - propertyPrefix: 'al:windows_universal', - contents: appLinks.windows_universal, - }), - MultiMeta({ propertyPrefix: 'al:web', contents: appLinks.web }), - ]) -} diff --git a/packages/next/src/lib/metadata/metadata.tsx b/packages/next/src/lib/metadata/metadata.tsx index 83ec9bb5127d4..affb9a96628f8 100644 --- a/packages/next/src/lib/metadata/metadata.tsx +++ b/packages/next/src/lib/metadata/metadata.tsx @@ -1,31 +1,13 @@ -import React, { Suspense, cache, cloneElement } from 'react' +import React, { Suspense, cache } from 'react' import type { ParsedUrlQuery } from 'querystring' import type { GetDynamicParamFromSegment } from '../../server/app-render/app-render' import type { LoaderTree } from '../../server/lib/app-dir-module' import type { SearchParams } from '../../server/request/search-params' -import { - AppleWebAppMeta, - FormatDetectionMeta, - ItunesMeta, - BasicMeta, - ViewportMeta, - VerificationMeta, - FacebookMeta, - PinterestMeta, -} from './generate/basic' -import { AlternatesMetadata } from './generate/alternate' -import { - OpenGraphMetadata, - TwitterMetadata, - AppLinksMeta, -} from './generate/opengraph' -import { IconsMetadata } from './generate/icons' import { type MetadataErrorType, resolveMetadata, resolveViewport, } from './resolve-metadata' -import { MetaFilter } from './generate/meta' import type { ResolvedMetadata, ResolvedViewport, @@ -43,6 +25,9 @@ import { OutletBoundary, } from '../framework/boundary-components' +import { getOrigin } from './generate/utils' +import { IconMark } from './generate/icon-mark' + // Use a promise to share the status of the metadata resolving, // returning two components `MetadataTree` and `MetadataOutlet` // `MetadataTree` is the one that will be rendered at first in the content sequence for metadata tags. @@ -312,15 +297,7 @@ async function renderMetadata( workStore, metadataContext ) - const elements: Array = - createMetadataElements(resolvedMetadata) - return ( - <> - {elements.map((el, index) => { - return cloneElement(el as React.ReactElement, { key: index }) - })} - - ) + return <>{createMetadataElements(resolvedMetadata)} } async function renderViewport( @@ -337,35 +314,1637 @@ async function renderViewport( getDynamicParamFromSegment, workStore ) - - const elements: Array = - createViewportElements(resolvedViewport) - return ( - <> - {elements.map((el, index) => { - return cloneElement(el as React.ReactElement, { key: index }) - })} - - ) + return <>{createViewportElements(resolvedViewport)} } -function createMetadataElements(metadata: ResolvedMetadata) { - return MetaFilter([ - BasicMeta({ metadata }), - AlternatesMetadata({ alternates: metadata.alternates }), - ItunesMeta({ itunes: metadata.itunes }), - FacebookMeta({ facebook: metadata.facebook }), - PinterestMeta({ pinterest: metadata.pinterest }), - FormatDetectionMeta({ formatDetection: metadata.formatDetection }), - VerificationMeta({ verification: metadata.verification }), - AppleWebAppMeta({ appleWebApp: metadata.appleWebApp }), - OpenGraphMetadata({ openGraph: metadata.openGraph }), - TwitterMetadata({ twitter: metadata.twitter }), - AppLinksMeta({ appLinks: metadata.appLinks }), - IconsMetadata({ icons: metadata.icons }), - ]) +// --------------------------------------------------------------------------- +// Viewport tag rendering +// --------------------------------------------------------------------------- + +function createViewportElements( + viewport: ResolvedViewport +): React.ReactElement[] { + const tags: React.ReactElement[] = [] + let i = 0 + + tags.push() + + // Build viewport content string from layout properties + const viewportParts: string[] = [] + if (viewport.width != null) { + viewportParts.push(`width=${viewport.width}`) + } + if (viewport.height != null) { + viewportParts.push(`height=${viewport.height}`) + } + if (viewport.initialScale != null) { + viewportParts.push(`initial-scale=${viewport.initialScale}`) + } + if (viewport.minimumScale != null) { + viewportParts.push(`minimum-scale=${viewport.minimumScale}`) + } + if (viewport.maximumScale != null) { + viewportParts.push(`maximum-scale=${viewport.maximumScale}`) + } + if (viewport.userScalable != null) { + viewportParts.push(`user-scalable=${viewport.userScalable ? 'yes' : 'no'}`) + } + if (viewport.viewportFit) { + viewportParts.push(`viewport-fit=${viewport.viewportFit}`) + } + if (viewport.interactiveWidget) { + viewportParts.push(`interactive-widget=${viewport.interactiveWidget}`) + } + if (viewportParts.length) { + tags.push( + + ) + } + + if (viewport.themeColor) { + for (const themeColor of viewport.themeColor) { + if (themeColor.media) { + tags.push( + + ) + } else { + tags.push( + + ) + } + } + } + + if (viewport.colorScheme) { + tags.push( + + ) + } + + return tags } -function createViewportElements(viewport: ResolvedViewport) { - return MetaFilter([ViewportMeta({ viewport: viewport })]) +// --------------------------------------------------------------------------- +// Metadata tag rendering +// --------------------------------------------------------------------------- + +function createMetadataElements( + metadata: ResolvedMetadata +): React.ReactElement[] { + const tags: React.ReactElement[] = [] + let i = 0 + + // --- Title --- + if (metadata.title !== null && metadata.title.absolute) { + tags.push({metadata.title.absolute}) + } + + // --- Basic meta tags --- + if (metadata.description) { + tags.push( + + ) + } + if (metadata.applicationName) { + tags.push( + + ) + } + + // --- Authors --- + if (metadata.authors) { + for (const author of metadata.authors) { + if (author.url) { + tags.push() + } + if (author.name) { + tags.push() + } + } + } + + // --- Manifest --- + if (metadata.manifest) { + const manifestOrigin = getOrigin(metadata.manifest) + tags.push( + + ) + } + + if (metadata.generator) { + tags.push() + } + if (metadata.keywords && metadata.keywords.length) { + tags.push( + + ) + } + if (metadata.referrer) { + tags.push() + } + if (metadata.creator) { + tags.push() + } + if (metadata.publisher) { + tags.push() + } + if (metadata.robots?.basic) { + tags.push() + } + if (metadata.robots?.googleBot) { + tags.push( + + ) + } + if (metadata.abstract) { + tags.push() + } + + // --- Link rel arrays --- + if (metadata.archives) { + for (const archive of metadata.archives) { + tags.push() + } + } + if (metadata.assets) { + for (const asset of metadata.assets) { + tags.push() + } + } + if (metadata.bookmarks) { + for (const bookmark of metadata.bookmarks) { + tags.push() + } + } + + // --- Pagination --- + if (metadata.pagination) { + if (metadata.pagination.previous) { + tags.push( + + ) + } + if (metadata.pagination.next) { + tags.push() + } + } + + if (metadata.category) { + tags.push() + } + if (metadata.classification) { + tags.push( + + ) + } + + // --- Other (arbitrary name/value pairs) --- + if (metadata.other) { + for (const [name, content] of Object.entries(metadata.other)) { + if (Array.isArray(content)) { + for (const contentItem of content) { + if (contentItem != null && contentItem !== '') { + tags.push( + + ) + } + } + } else if (content != null && content !== '') { + tags.push() + } + } + } + + // --- Alternates --- + if (metadata.alternates) { + const { canonical, languages, media, types } = metadata.alternates + + if (canonical && canonical.url) { + tags.push( + + ) + } + + if (languages) { + for (const [locale, descriptors] of Object.entries(languages)) { + if (descriptors) { + for (const descriptor of descriptors) { + if (descriptor.url) { + tags.push( + + ) + } + } + } + } + } + + if (media) { + for (const [mediaName, descriptors] of Object.entries(media)) { + if (descriptors) { + for (const descriptor of descriptors) { + if (descriptor.url) { + tags.push( + + ) + } + } + } + } + } + + if (types) { + for (const [type, descriptors] of Object.entries(types)) { + if (descriptors) { + for (const descriptor of descriptors) { + if (descriptor.url) { + tags.push( + + ) + } + } + } + } + } + } + + // --- iTunes --- + if (metadata.itunes) { + const { appId, appArgument } = metadata.itunes + let itunesContent = `app-id=${appId}` + if (appArgument) { + itunesContent += `, app-argument=${appArgument}` + } + tags.push( + + ) + } + + // --- Facebook --- + if (metadata.facebook) { + if (metadata.facebook.appId) { + tags.push( + + ) + } + if (metadata.facebook.admins) { + for (const admin of metadata.facebook.admins) { + tags.push() + } + } + } + + // --- Pinterest --- + if (metadata.pinterest && metadata.pinterest.richPin !== undefined) { + tags.push( + + ) + } + + // --- Format Detection --- + if (metadata.formatDetection) { + const formatDetectionKeys = [ + 'telephone', + 'date', + 'address', + 'email', + 'url', + ] as const + let formatContent = '' + for (const key of formatDetectionKeys) { + if (metadata.formatDetection[key] === false) { + if (formatContent) formatContent += ', ' + formatContent += `${key}=no` + } + } + if (formatContent) { + tags.push( + + ) + } + } + + // --- Verification --- + if (metadata.verification) { + const verification = metadata.verification + + if (verification.google) { + for (const value of verification.google) { + if (value != null && value !== '') { + tags.push( + + ) + } + } + } + if (verification.yahoo) { + for (const value of verification.yahoo) { + if (value != null && value !== '') { + tags.push() + } + } + } + if (verification.yandex) { + for (const value of verification.yandex) { + if (value != null && value !== '') { + tags.push( + + ) + } + } + } + if (verification.me) { + for (const value of verification.me) { + if (value != null && value !== '') { + tags.push() + } + } + } + if (verification.other) { + for (const [name, values] of Object.entries(verification.other)) { + for (const value of values) { + if (value != null && value !== '') { + tags.push() + } + } + } + } + } + + // --- Apple Web App --- + if (metadata.appleWebApp) { + const { capable, title, startupImage, statusBarStyle } = + metadata.appleWebApp + + if (capable) { + tags.push() + } + if (title) { + tags.push( + + ) + } + if (startupImage) { + for (const image of startupImage) { + if (image.media) { + tags.push( + + ) + } else { + tags.push( + + ) + } + } + } + if (statusBarStyle) { + tags.push( + + ) + } + } + + // --- Open Graph --- + if (metadata.openGraph) { + const og = metadata.openGraph + + if (og.determiner) { + tags.push( + + ) + } + if (og.title?.absolute) { + tags.push( + + ) + } + if (og.description) { + tags.push( + + ) + } + if (og.url) { + tags.push( + + ) + } + if (og.siteName) { + tags.push( + + ) + } + if (og.locale) { + tags.push() + } + if (og.countryName) { + tags.push( + + ) + } + if (og.ttl != null) { + tags.push( + + ) + } + + // OG images + if (og.images) { + for (const image of og.images) { + if (typeof image === 'string') { + tags.push() + } else { + if (image.url) { + tags.push( + + ) + } + if (image.secureUrl) { + tags.push( + + ) + } + if (image.type) { + tags.push( + + ) + } + if (image.width) { + tags.push( + + ) + } + if (image.height) { + tags.push( + + ) + } + if (image.alt) { + tags.push( + + ) + } + } + } + } + + // OG videos + if (og.videos) { + for (const video of og.videos) { + if (typeof video === 'string') { + tags.push() + } else { + if (video.url) { + tags.push( + + ) + } + if (video.secureUrl) { + tags.push( + + ) + } + if (video.type) { + tags.push( + + ) + } + if (video.width) { + tags.push( + + ) + } + if (video.height) { + tags.push( + + ) + } + } + } + } + + // OG audio + if (og.audio) { + for (const audio of og.audio) { + if (typeof audio === 'string') { + tags.push() + } else { + if (audio.url) { + tags.push( + + ) + } + if (audio.secureUrl) { + tags.push( + + ) + } + if (audio.type) { + tags.push( + + ) + } + } + } + } + + // OG simple array properties + if (og.emails) { + for (const email of og.emails) { + tags.push() + } + } + if (og.phoneNumbers) { + for (const phone of og.phoneNumbers) { + tags.push() + } + } + if (og.faxNumbers) { + for (const fax of og.faxNumbers) { + tags.push() + } + } + if (og.alternateLocale) { + for (const locale of og.alternateLocale) { + tags.push( + + ) + } + } + + // OG type-specific tags + if ('type' in og) { + const ogType = og.type + switch (ogType) { + case 'website': + tags.push() + break + + case 'article': + tags.push() + if (og.publishedTime) { + tags.push( + + ) + } + if (og.modifiedTime) { + tags.push( + + ) + } + if (og.expirationTime) { + tags.push( + + ) + } + if (og.authors) { + for (const author of og.authors) { + tags.push( + + ) + } + } + if (og.section) { + tags.push( + + ) + } + if (og.tags) { + for (const tag of og.tags) { + tags.push() + } + } + break + + case 'book': + tags.push() + if (og.isbn) { + tags.push() + } + if (og.releaseDate) { + tags.push( + + ) + } + if (og.authors) { + for (const author of og.authors) { + tags.push( + + ) + } + } + if (og.tags) { + for (const tag of og.tags) { + tags.push() + } + } + break + + case 'profile': + tags.push() + if (og.firstName) { + tags.push( + + ) + } + if (og.lastName) { + tags.push( + + ) + } + if (og.username) { + tags.push( + + ) + } + if (og.gender) { + tags.push( + + ) + } + break + + case 'music.song': + tags.push() + if (og.duration != null) { + tags.push( + + ) + } + if (og.albums) { + for (const album of og.albums) { + if (typeof album === 'string') { + tags.push( + + ) + } else { + if (album.url) { + tags.push( + + ) + } + if (album.disc != null) { + tags.push( + + ) + } + if (album.track != null) { + tags.push( + + ) + } + } + } + } + if (og.musicians) { + for (const musician of og.musicians) { + tags.push( + + ) + } + } + break + + case 'music.album': + tags.push() + if (og.songs) { + for (const song of og.songs) { + if (typeof song === 'string') { + tags.push( + + ) + } else { + if (song.url) { + tags.push( + + ) + } + if (song.disc != null) { + tags.push( + + ) + } + if (song.track != null) { + tags.push( + + ) + } + } + } + } + if (og.musicians) { + for (const musician of og.musicians) { + tags.push( + + ) + } + } + if (og.releaseDate) { + tags.push( + + ) + } + break + + case 'music.playlist': + tags.push( + + ) + if (og.songs) { + for (const song of og.songs) { + if (typeof song === 'string') { + tags.push( + + ) + } else { + if (song.url) { + tags.push( + + ) + } + if (song.disc != null) { + tags.push( + + ) + } + if (song.track != null) { + tags.push( + + ) + } + } + } + } + if (og.creators) { + for (const creator of og.creators) { + tags.push( + + ) + } + } + break + + case 'music.radio_station': + tags.push( + + ) + if (og.creators) { + for (const creator of og.creators) { + tags.push( + + ) + } + } + break + + case 'video.movie': + tags.push() + if (og.actors) { + for (const actor of og.actors) { + if (typeof actor === 'string') { + tags.push( + + ) + } else { + if (actor.url) { + tags.push( + + ) + } + if (actor.role) { + tags.push( + + ) + } + } + } + } + if (og.directors) { + for (const director of og.directors) { + tags.push( + + ) + } + } + if (og.writers) { + for (const writer of og.writers) { + tags.push( + + ) + } + } + if (og.duration != null) { + tags.push( + + ) + } + if (og.releaseDate) { + tags.push( + + ) + } + if (og.tags) { + for (const tag of og.tags) { + tags.push() + } + } + break + + case 'video.episode': + tags.push( + + ) + if (og.actors) { + for (const actor of og.actors) { + if (typeof actor === 'string') { + tags.push( + + ) + } else { + if (actor.url) { + tags.push( + + ) + } + if (actor.role) { + tags.push( + + ) + } + } + } + } + if (og.directors) { + for (const director of og.directors) { + tags.push( + + ) + } + } + if (og.writers) { + for (const writer of og.writers) { + tags.push( + + ) + } + } + if (og.duration != null) { + tags.push( + + ) + } + if (og.releaseDate) { + tags.push( + + ) + } + if (og.tags) { + for (const tag of og.tags) { + tags.push() + } + } + if (og.series) { + tags.push( + + ) + } + break + + case 'video.tv_show': + tags.push( + + ) + break + + case 'video.other': + tags.push() + break + + default: + const _exhaustiveCheck: never = ogType + throw new Error(`Invalid OpenGraph type: ${_exhaustiveCheck}`) + } + } + } + + // --- Twitter --- + if (metadata.twitter) { + const tw = metadata.twitter + const { card } = tw + + if (card) { + tags.push() + } + if (tw.site) { + tags.push() + } + if (tw.siteId) { + tags.push() + } + if (tw.creator) { + tags.push() + } + if (tw.creatorId) { + tags.push( + + ) + } + if (tw.title?.absolute) { + tags.push( + + ) + } + if (tw.description) { + tags.push( + + ) + } + + // Twitter images + if (tw.images) { + for (const image of tw.images) { + if (typeof image === 'string') { + tags.push() + } else { + if (image.url) { + tags.push( + + ) + } + if (image.alt) { + tags.push( + + ) + } + if (image.secureUrl) { + tags.push( + + ) + } + if (image.type) { + tags.push( + + ) + } + if (image.width) { + tags.push( + + ) + } + if (image.height) { + tags.push( + + ) + } + } + } + } + + // Twitter player cards + if (card === 'player') { + for (const player of tw.players) { + tags.push( + + ) + tags.push( + + ) + tags.push( + + ) + tags.push( + + ) + } + } + + // Twitter app cards + if (card === 'app') { + const { app } = tw + for (const platform of ['iphone', 'ipad', 'googleplay'] as const) { + if (app.name) { + tags.push( + + ) + } + if (app.id[platform]) { + tags.push( + + ) + } + if (app.url?.[platform]) { + tags.push( + + ) + } + } + } + } + + // --- App Links --- + if (metadata.appLinks) { + const appLinks = metadata.appLinks + + // iOS / iPhone / iPad (AppLinksApple: url, app_store_id, app_name) + if (appLinks.ios) { + for (const item of appLinks.ios) { + if (item.url) { + tags.push( + + ) + } + if (item.app_store_id) { + tags.push( + + ) + } + if (item.app_name) { + tags.push( + + ) + } + } + } + if (appLinks.iphone) { + for (const item of appLinks.iphone) { + if (item.url) { + tags.push( + + ) + } + if (item.app_store_id) { + tags.push( + + ) + } + if (item.app_name) { + tags.push( + + ) + } + } + } + if (appLinks.ipad) { + for (const item of appLinks.ipad) { + if (item.url) { + tags.push( + + ) + } + if (item.app_store_id) { + tags.push( + + ) + } + if (item.app_name) { + tags.push( + + ) + } + } + } + + // Android (AppLinksAndroid: package, url, class, app_name) + if (appLinks.android) { + for (const item of appLinks.android) { + if (item.package) { + tags.push( + + ) + } + if (item.url) { + tags.push( + + ) + } + if (item.class) { + tags.push( + + ) + } + if (item.app_name) { + tags.push( + + ) + } + } + } + + // Windows Phone (AppLinksWindows: url, app_id, app_name) + if (appLinks.windows_phone) { + for (const item of appLinks.windows_phone) { + if (item.url) { + tags.push( + + ) + } + if (item.app_id) { + tags.push( + + ) + } + if (item.app_name) { + tags.push( + + ) + } + } + } + + // Windows (AppLinksWindows: url, app_id, app_name) + if (appLinks.windows) { + for (const item of appLinks.windows) { + if (item.url) { + tags.push( + + ) + } + if (item.app_id) { + tags.push( + + ) + } + if (item.app_name) { + tags.push( + + ) + } + } + } + + // Windows Universal (AppLinksWindows: url, app_id, app_name) + if (appLinks.windows_universal) { + for (const item of appLinks.windows_universal) { + if (item.url) { + tags.push( + + ) + } + if (item.app_id) { + tags.push( + + ) + } + if (item.app_name) { + tags.push( + + ) + } + } + } + + // Web (AppLinksWeb: url, should_fallback) + if (appLinks.web) { + for (const item of appLinks.web) { + if (item.url) { + tags.push( + + ) + } + if (item.should_fallback != null) { + tags.push( + + ) + } + } + } + } + + // --- Icons --- + if (metadata.icons) { + const { shortcut, icon, apple, other } = metadata.icons + const hasIcon = Boolean( + shortcut?.length || icon?.length || apple?.length || other?.length + ) + + if (shortcut) { + for (const ic of shortcut) { + const { url, rel, ...props } = ic + tags.push( + + ) + } + } + if (icon) { + for (const ic of icon) { + const { url, rel, ...props } = ic + tags.push( + + ) + } + } + if (apple) { + for (const ic of apple) { + const { url, rel, ...props } = ic + tags.push( + + ) + } + } + if (other) { + for (const ic of other) { + const { url, rel, ...props } = ic + tags.push( + + ) + } + } + + if (hasIcon) { + tags.push() + } + } + + return tags } diff --git a/test/production/next-server-nft/next-server-nft.test.ts b/test/production/next-server-nft/next-server-nft.test.ts index d54128bfc66d8..4c12917014fbb 100644 --- a/test/production/next-server-nft/next-server-nft.test.ts +++ b/test/production/next-server-nft/next-server-nft.test.ts @@ -283,12 +283,7 @@ async function readNormalizedNFT(next, name) { "/node_modules/next/dist/lib/memory/trace.js", "/node_modules/next/dist/lib/metadata/constants.js", "/node_modules/next/dist/lib/metadata/default-metadata.js", - "/node_modules/next/dist/lib/metadata/generate/alternate.js", - "/node_modules/next/dist/lib/metadata/generate/basic.js", "/node_modules/next/dist/lib/metadata/generate/icon-mark.js", - "/node_modules/next/dist/lib/metadata/generate/icons.js", - "/node_modules/next/dist/lib/metadata/generate/meta.js", - "/node_modules/next/dist/lib/metadata/generate/opengraph.js", "/node_modules/next/dist/lib/metadata/generate/utils.js", "/node_modules/next/dist/lib/metadata/get-metadata-route.js", "/node_modules/next/dist/lib/metadata/is-metadata-route.js", From ca0957df545d2b7757bdf1a3a6343c65bffdbba9 Mon Sep 17 00:00:00 2001 From: Josh Story Date: Thu, 19 Feb 2026 20:48:45 -0800 Subject: [PATCH 5/6] Prevent unhandled rejection filter from being bundled into the server runtime (#90205) The unhandled-rejection module was being bundled into server.runtime.prod.js AND loaded as a standalone file, causing installUnhandledRejectionFilter() to run twice. Each instance captured the other's handler as an underlying listener, creating mutual recursion that overflowed the stack on any unhandled rejection. Fix: Rename to .external.tsx so the webpack config externalizes it from the server runtime bundle. It is now only loaded once from the standalone file by node-environment.ts. Also adds two defensive measures: - A global symbol guard that noops if a second installation is ever attempted from a separate module evaluation (e.g. Jest's module system re-evaluating an already-loaded module in the same process) - A reentrancy guard on the handler that noops if an underlying listener synchronously re-emits 'unhandledRejection' --- packages/next/errors.json | 3 +- ...s => unhandled-rejection.external.test.ts} | 44 +++++++++---------- ...n.tsx => unhandled-rejection.external.tsx} | 25 +++++++++-- packages/next/src/server/node-environment.ts | 2 +- .../next-server-nft/next-server-nft.test.ts | 1 + 5 files changed, 47 insertions(+), 28 deletions(-) rename packages/next/src/server/node-environment-extensions/{unhandled-rejection.test.ts => unhandled-rejection.external.test.ts} (98%) rename packages/next/src/server/node-environment-extensions/{unhandled-rejection.tsx => unhandled-rejection.external.tsx} (96%) diff --git a/packages/next/errors.json b/packages/next/errors.json index 7916e1aa32750..ae0f468a1d22d 100644 --- a/packages/next/errors.json +++ b/packages/next/errors.json @@ -1064,5 +1064,6 @@ "1063": "`connection` must not be used within a Client Component. Next.js should be preventing `connection` from being included in Client Components statically, but did not in this case.", "1064": "createServerParamsForRoute should not be called in client contexts.", "1065": "createServerPathnameForMetadata should not be called in client contexts.", - "1066": "createServerSearchParamsForServerPage should not be called in a client validation." + "1066": "createServerSearchParamsForServerPage should not be called in a client validation.", + "1067": "The Next.js unhandled rejection filter is being installed more than once. This is a bug in Next.js." } diff --git a/packages/next/src/server/node-environment-extensions/unhandled-rejection.test.ts b/packages/next/src/server/node-environment-extensions/unhandled-rejection.external.test.ts similarity index 98% rename from packages/next/src/server/node-environment-extensions/unhandled-rejection.test.ts rename to packages/next/src/server/node-environment-extensions/unhandled-rejection.external.test.ts index b8714accf6ddd..87ceb59494c56 100644 --- a/packages/next/src/server/node-environment-extensions/unhandled-rejection.test.ts +++ b/packages/next/src/server/node-environment-extensions/unhandled-rejection.external.test.ts @@ -148,7 +148,7 @@ describe('unhandled-rejection filter', () => { describe('environment variable configuration', () => { it('should install filter by default', async () => { async function testForWorker() { - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') reportResult({ type: 'count', @@ -167,7 +167,7 @@ describe('unhandled-rejection filter', () => { it('should not install filter when disabled', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'disabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') reportResult({ type: 'count', @@ -186,7 +186,7 @@ describe('unhandled-rejection filter', () => { it('should install filter rejections when environment variable is enabled', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') reportResult({ type: 'count', @@ -205,7 +205,7 @@ describe('unhandled-rejection filter', () => { it('should install filter rejections when environment variable is enabled in debug mode', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'debug' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') reportResult({ type: 'count', @@ -229,7 +229,7 @@ describe('unhandled-rejection filter', () => { originalWarn(...args) } - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const filterListener = process.listeners('unhandledRejection')[0] process.removeListener('unhandledRejection', filterListener) @@ -258,7 +258,7 @@ describe('unhandled-rejection filter', () => { originalWarn(...args) } - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const filterListener = process.listeners('unhandledRejection')[0] process.off('unhandledRejection', filterListener) @@ -287,7 +287,7 @@ describe('unhandled-rejection filter', () => { originalWarn(...args) } - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const filterListener = process.listeners('unhandledRejection')[0] process.removeAllListeners() @@ -317,7 +317,7 @@ describe('unhandled-rejection filter', () => { originalWarn(...args) } - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const filterListener = process.listeners('unhandledRejection')[0] process.removeAllListeners() @@ -335,7 +335,7 @@ describe('unhandled-rejection filter', () => { it('should suppress rejections from aborted prerender contexts', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = '1' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -403,7 +403,7 @@ describe('unhandled-rejection filter', () => { it('should suppress rejections from aborted prerender-client contexts', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = '1' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -471,7 +471,7 @@ describe('unhandled-rejection filter', () => { it('should suppress rejections from aborted prerender-runtime contexts', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = '1' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -539,7 +539,7 @@ describe('unhandled-rejection filter', () => { it('should pass through rejections from non-aborted prerender contexts', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = '1' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -582,7 +582,7 @@ describe('unhandled-rejection filter', () => { it('should call console.error when no handlers are present', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = '1' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') console.error = (...args: Array) => { reportResult({ type: 'error-log', message: args.join(' ') }) @@ -603,7 +603,7 @@ describe('unhandled-rejection filter', () => { it('should handle process.once listeners correctly', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') let callCount = 0 @@ -638,7 +638,7 @@ describe('unhandled-rejection filter', () => { it('should handle process.removeListener correctly', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const handler1 = (reason: unknown) => { reportResult({ type: 'uhr', reason: `[1]: ${String(reason)}` }) @@ -708,7 +708,7 @@ describe('unhandled-rejection filter', () => { it('should uninstall filter when removeAllListeners() is called without arguments', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -770,7 +770,7 @@ describe('unhandled-rejection filter', () => { it('should not uninstall filter when removeAllListeners("unhandledRejection") is called', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -829,7 +829,7 @@ describe('unhandled-rejection filter', () => { // during event handling. async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const onceHandler = (reason: unknown) => { reportResult({ type: 'uhr', reason: `once: ${String(reason)}` }) @@ -935,7 +935,7 @@ describe('unhandled-rejection filter', () => { const originalNames = originalMethods.map((m) => m.name) process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const patchedMethods = [ process.on, @@ -995,7 +995,7 @@ describe('unhandled-rejection filter', () => { it('should handle errors thrown by user handlers gracefully', async () => { async function testForWorker() { process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -1039,7 +1039,7 @@ describe('unhandled-rejection filter', () => { }) process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') const { workUnitAsyncStorage, @@ -1081,7 +1081,7 @@ describe('unhandled-rejection filter', () => { }) process.env.NEXT_UNHANDLED_REJECTION_FILTER = 'enabled' - require('next/dist/server/node-environment-extensions/unhandled-rejection') + require('next/dist/server/node-environment-extensions/unhandled-rejection.external') process.removeAllListeners('unhandledRejection') diff --git a/packages/next/src/server/node-environment-extensions/unhandled-rejection.tsx b/packages/next/src/server/node-environment-extensions/unhandled-rejection.external.tsx similarity index 96% rename from packages/next/src/server/node-environment-extensions/unhandled-rejection.tsx rename to packages/next/src/server/node-environment-extensions/unhandled-rejection.external.tsx index 246f39dbc1c15..a722eeb27dc6b 100644 --- a/packages/next/src/server/node-environment-extensions/unhandled-rejection.tsx +++ b/packages/next/src/server/node-environment-extensions/unhandled-rejection.external.tsx @@ -116,6 +116,11 @@ type ListenerMetadata = { once: boolean } +// We use a global symbol to detect if the filter has already been installed. +// If two instances of this module are loaded, each captures the other's handler +// as an underlying listener, creating mutual recursion that overflows the stack. +// We error defensively rather than silently degrading. +const FILTER_INSTALLED_KEY = Symbol.for('next.unhandledRejectionFilter') let filterInstalled = false // We store the proxied listeners for unhandled rejections here. @@ -194,10 +199,10 @@ const MACGUFFIN_EVENT = 'Next.UnhandledRejectionFilter.MacguffinEvent' * This should be called once during server startup to install the global filter. */ function installUnhandledRejectionFilter(): void { - if (filterInstalled) { - warnWithTrace?.( - 'Unexpected subsequent filter installation. This is a bug in Next.js' - ) + if ((globalThis as any)[FILTER_INSTALLED_KEY] || filterInstalled) { + // Already installed by another evaluation of this module in the same + // process (e.g., Jest's module system re-evaluating an already-loaded + // module). Safe to skip since the filter is already active. return } @@ -526,6 +531,7 @@ You can debug event listener operations by running Next.js with \`NEXT_UNHANDLED ) filterInstalled = true + ;(globalThis as any)[FILTER_INSTALLED_KEY] = true } /** @@ -578,10 +584,18 @@ function uninstallUnhandledRejectionFilter(): void { /** * The filtering handler that decides whether to suppress or delegate unhandled rejections. */ +let handlingRejection = false + function filteringUnhandledRejectionHandler( reason: any, promise: Promise ): void { + if (handlingRejection) { + // An underlying listener synchronously re-emitted 'unhandledRejection'. + // Re-entering the listener loop would overflow the stack. + return + } + const capturedListenerMetadata = Array.from(listenerMetadata) const workUnitStore = workUnitAsyncStorage.getStore() @@ -622,6 +636,7 @@ function filteringUnhandledRejectionHandler( // do not automatically terminate the process. console.error('Unhandled Rejection:', reason) } else { + handlingRejection = true try { for (const meta of capturedListenerMetadata) { if (meta.once) { @@ -640,6 +655,8 @@ function filteringUnhandledRejectionHandler( setImmediate(() => { throw error }) + } finally { + handlingRejection = false } } } diff --git a/packages/next/src/server/node-environment.ts b/packages/next/src/server/node-environment.ts index f0300cd4c9439..e197e6346025a 100644 --- a/packages/next/src/server/node-environment.ts +++ b/packages/next/src/server/node-environment.ts @@ -12,7 +12,7 @@ import './node-environment-extensions/console-file' import './node-environment-extensions/console-exit' import './node-environment-extensions/console-dim.external' -import './node-environment-extensions/unhandled-rejection' +import './node-environment-extensions/unhandled-rejection.external' import './node-environment-extensions/random' import './node-environment-extensions/date' import './node-environment-extensions/web-crypto' diff --git a/test/production/next-server-nft/next-server-nft.test.ts b/test/production/next-server-nft/next-server-nft.test.ts index 4c12917014fbb..71106b3add934 100644 --- a/test/production/next-server-nft/next-server-nft.test.ts +++ b/test/production/next-server-nft/next-server-nft.test.ts @@ -479,6 +479,7 @@ async function readNormalizedNFT(next, name) { "/node_modules/next/dist/server/load-manifest.external.js", "/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js", "/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js", + "/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js", "/node_modules/next/dist/server/response-cache/types.js", "/node_modules/next/dist/server/route-modules/app-page/module.compiled.js", "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js", From 415e0df7a15b91a46fb0b85af5501d2cd000c163 Mon Sep 17 00:00:00 2001 From: Janka Uryga Date: Thu, 19 Feb 2026 21:57:04 -0800 Subject: [PATCH 6/6] [Instant] speed up test instant-validation suite (#90214) This PR speeds up the `instant-validation` test suite from 450s down to ~100s. We were wasting a lot of time in `waitForNoErrorToast()`, which ends up waiting almost 15s by default. The trick is to add some debug logs inside app-render to track when instant validation started/ended. If we know that the validation is finished, we can just wait for a short time, because if there were errors, a toast would be displayed very quickly. Note that is a stopgap -- when we add a "Validating..." indicator, we won't have to emit the log and can just wait for the indicator instead. But in the meantime, waiting for the tests is pretty painful, so this is worth doing. --- .../next/src/server/app-render/app-render.tsx | 28 +++- .../page.tsx | 1 - .../instant-validation.test.ts | 145 +++++++++++++++--- test/lib/next-test-utils.ts | 7 +- 4 files changed, 156 insertions(+), 25 deletions(-) diff --git a/packages/next/src/server/app-render/app-render.tsx b/packages/next/src/server/app-render/app-render.tsx index b758ad5df1a60..62620de47d8a6 100644 --- a/packages/next/src/server/app-render/app-render.tsx +++ b/packages/next/src/server/app-render/app-render.tsx @@ -3615,13 +3615,39 @@ async function logMessagesAndSendErrorsToBrowser( } } +async function spawnStaticShellValidationInDev( + ...args: Parameters +) { + if (process.env.__NEXT_TEST_MODE && process.env.NEXT_TEST_LOG_VALIDATION) { + const ctx: AppRenderContext = args[5] + const requestId = ctx.requestId + const url = ctx.url.href + console.log( + '' + + JSON.stringify({ type: 'validation_start', requestId, url }) + + '' + ) + try { + return await spawnStaticShellValidationInDevImpl(...args) + } finally { + console.log( + '' + + JSON.stringify({ type: 'validation_end', requestId, url }) + + '' + ) + } + } else { + return await spawnStaticShellValidationInDevImpl(...args) + } +} + /** * This function is a fork of prerenderToStream cacheComponents branch. * While it doesn't return a stream we want it to have identical * prerender semantics to prerenderToStream and should update it * in conjunction with any changes to that function. */ -async function spawnStaticShellValidationInDev( +async function spawnStaticShellValidationInDevImpl( accumulatedChunksPromise: Promise, syncInterruptReason: Error | null, startTime: number, diff --git a/test/e2e/app-dir/instant-validation/app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx b/test/e2e/app-dir/instant-validation/app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx index 2a7203b05fbf2..9fbae8b59ca9b 100644 --- a/test/e2e/app-dir/instant-validation/app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx +++ b/test/e2e/app-dir/instant-validation/app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx @@ -28,7 +28,6 @@ async function Runtime() { } async function Dynamic() { - await new Promise((resolve) => setTimeout(resolve, 1000)) await connection() return
Dynamic content from page
} diff --git a/test/e2e/app-dir/instant-validation/instant-validation.test.ts b/test/e2e/app-dir/instant-validation/instant-validation.test.ts index e6208c300a8cd..472f7e9c72669 100644 --- a/test/e2e/app-dir/instant-validation/instant-validation.test.ts +++ b/test/e2e/app-dir/instant-validation/instant-validation.test.ts @@ -15,6 +15,9 @@ describe('instant validation', () => { const { next, skipped, isNextDev } = nextTestSetup({ files: __dirname, skipDeployment: true, + env: { + NEXT_TEST_LOG_VALIDATION: '1', + }, }) if (skipped) return if (!isNextDev) { @@ -22,6 +25,102 @@ describe('instant validation', () => { return } + let currentCliOutputIndex = 0 + beforeEach(() => { + currentCliOutputIndex = next.cliOutput.length + }) + + function getCliOutputSinceMark(): string { + if (next.cliOutput.length < currentCliOutputIndex) { + // cliOutput shrank since we started the test, so something (like a `sandbox`) reset the logs + currentCliOutputIndex = 0 + } + return next.cliOutput.slice(currentCliOutputIndex) + } + + type ValidationEvent = + | { type: 'validation_start'; requestId: string; url: string } + | { type: 'validation_end'; requestId: string; url: string } + + async function waitForValidationStart(targetUrl: string): Promise { + const parsedTargetUrl = new URL(targetUrl) + const relativeTargetUrl = + parsedTargetUrl.pathname + parsedTargetUrl.search + parsedTargetUrl.hash + + const requestId = await retry( + async () => { + const events = parseValidationMessages(getCliOutputSinceMark()) + const start = events.find( + (e) => + e.type === 'validation_start' && + normalizeValidationUrl(e.url) === relativeTargetUrl + ) + expect(start).toBeDefined() + return start!.requestId + }, + undefined, + undefined, + `wait for validation of '${relativeTargetUrl}' to start` + ) + return requestId + } + + async function waitForValidationEnd(requestId: string): Promise { + await retry( + async () => { + const events = parseValidationMessages(getCliOutputSinceMark()) + const end = events.find( + (e) => e.type === 'validation_end' && e.requestId === requestId + ) + expect(end).toBeDefined() + }, + undefined, + undefined, + 'wait for validation to end' + ) + } + + async function waitForValidation(url: string) { + const requestId = await waitForValidationStart(url) + await waitForValidationEnd(requestId) + } + + const NO_VALIDATION_ERRORS_WAIT: Parameters[1] = { + waitInMs: 500, + } + + async function expectNoValidationErrors( + browser: Awaited>, + url: string + ): Promise { + await waitForValidation(url) + await waitForNoErrorToast(browser, NO_VALIDATION_ERRORS_WAIT) + } + + function parseValidationMessages(output: string): ValidationEvent[] { + const messageRe = /(.*?)<\/VALIDATION_MESSAGE>/g + const events: ValidationEvent[] = [] + let match: RegExpExecArray | null + while ((match = messageRe.exec(output)) !== null) { + try { + events.push(JSON.parse(match[1])) + } catch (err) { + throw new Error(`Failed to parse message '${match[1]}'`, { + cause: err, + }) + } + } + return events + } + + function normalizeValidationUrl(url: string): string { + // RSC requests include ?_rsc=... in the URL. Strip it so the event URL + // matches what browser.url() returns (which has no _rsc param). + const parsed = new URL(url, 'http://n') + parsed.searchParams.delete('_rsc') + return parsed.pathname + parsed.search + parsed.hash + } + describe.each([ { isClientNav: false, description: 'initial load' }, { isClientNav: true, description: 'client navigation' }, @@ -56,7 +155,7 @@ describe('instant validation', () => { expect(await browser.url()).toContain(href) }, undefined, - undefined, + 100, 'wait for url to change' ) @@ -72,13 +171,13 @@ describe('instant validation', () => { const browser = await navigateTo( '/suspense-in-root/static/suspense-around-dynamic' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('valid - runtime prefetch - suspense only around dynamic', async () => { const browser = await navigateTo( '/suspense-in-root/runtime/suspense-around-dynamic' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('invalid - static prefetch - missing suspense around runtime', async () => { @@ -276,7 +375,7 @@ describe('instant validation', () => { const browser = await navigateTo( '/suspense-in-root/runtime/valid-no-suspense-around-params/123' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('invalid - static prefetch - missing suspense around search params', async () => { @@ -316,7 +415,7 @@ describe('instant validation', () => { const browser = await navigateTo( '/suspense-in-root/runtime/valid-no-suspense-around-search-params?foo=bar' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('valid - target segment not visible in all navigations', async () => { @@ -330,7 +429,7 @@ describe('instant validation', () => { // in all navigations (which would require that its parent layouts must never // block the children slots) const browser = await navigateTo('/default/static/valid-blocked-children') - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('invalid - static prefetch - suspense too high', async () => { @@ -479,7 +578,7 @@ describe('instant validation', () => { const browser = await navigateTo( '/suspense-in-root/runtime/valid-sync-io-in-static-parent' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('invalid - missing suspense around dynamic (with loading.js)', async () => { @@ -503,11 +602,11 @@ describe('instant validation', () => { Learn more: https://nextjs.org/docs/messages/blocking-route", "environmentLabel": "Server", "label": "Blocking Route", - "source": "app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx (32:19) @ Dynamic - > 32 | await connection() + "source": "app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx (31:19) @ Dynamic + > 31 | await connection() | ^", "stack": [ - "Dynamic app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx (32:19)", + "Dynamic app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx (31:19)", "Page app/suspense-in-root/static/invalid-only-loading-around-dynamic/page.tsx (19:9)", ], } @@ -519,7 +618,7 @@ describe('instant validation', () => { const browser = await navigateTo( '/suspense-in-root/static/blocking-layout' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('invalid - missing suspense inside blocking layout', async () => { const browser = await navigateTo( @@ -558,13 +657,13 @@ describe('instant validation', () => { const browser = await navigateTo( '/default/static/valid-blocking-inside-static' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('valid - blocking page inside a runtime layout is allowed if the layout has suspense', async () => { const browser = await navigateTo( '/suspense-in-root/runtime/valid-blocking-inside-runtime' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('invalid - blocking page inside a static layout is not allowed if the layout has no suspense', async () => { @@ -757,26 +856,26 @@ describe('instant validation', () => { const browser = await navigateTo( '/suspense-in-root/static/valid-client-data-does-not-block-validation' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('valid - parent uses sync IO in a client component', async () => { const browser = await navigateTo( '/suspense-in-root/static/valid-client-api-in-parent/sync-io' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('valid - parent uses dynamic usePathname() in a client component', async () => { const browser = await navigateTo( '/suspense-in-root/static/valid-client-api-in-parent/dynamic-params/123' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) it('valid - parent uses useSearchPatams() in a client component', async () => { const browser = await navigateTo( '/suspense-in-root/static/valid-client-api-in-parent/search-params' ) - await waitForNoErrorToast(browser) + await expectNoValidationErrors(browser, await browser.url()) }) }) @@ -910,9 +1009,10 @@ describe('instant validation', () => { const browser = await navigateTo( '/suspense-in-root/static/valid-client-error-in-parent-does-not-block-validation' ) + await waitForValidation(await browser.url()) if (isClientNav) { // In a client nav, no errors should be reported. - await waitForNoErrorToast(browser) + await waitForNoErrorToast(browser, NO_VALIDATION_ERRORS_WAIT) } else { // In SSR, we expect to only see the error coming from react. await expect(browser).toDisplayCollapsedRedbox(` @@ -935,23 +1035,26 @@ describe('instant validation', () => { }) describe('disabling validation', () => { + // We don't log any messages if validation is skipped, so the best we can do is wait. + const VALIDATION_SKIPPED_WAIT: Parameters[1] = + { waitInMs: 3000 } it('in a layout', async () => { const browser = await navigateTo( '/suspense-in-root/disable-validation/in-layout' ) - await waitForNoErrorToast(browser) + await waitForNoErrorToast(browser, VALIDATION_SKIPPED_WAIT) }) it('in a page', async () => { const browser = await navigateTo( '/suspense-in-root/disable-validation/in-page' ) - await waitForNoErrorToast(browser) + await waitForNoErrorToast(browser, VALIDATION_SKIPPED_WAIT) }) it('in a page with a parent that has a config', async () => { const browser = await navigateTo( '/suspense-in-root/disable-validation/in-page-with-outer' ) - await waitForNoErrorToast(browser) + await waitForNoErrorToast(browser, VALIDATION_SKIPPED_WAIT) }) }) }) diff --git a/test/lib/next-test-utils.ts b/test/lib/next-test-utils.ts index d633d984d34bd..00dcf89e5652e 100644 --- a/test/lib/next-test-utils.ts +++ b/test/lib/next-test-utils.ts @@ -896,11 +896,14 @@ export async function waitForNoRedbox( } } -export async function waitForNoErrorToast(browser: Playwright): Promise { +export async function waitForNoErrorToast( + browser: Playwright, + { waitInMs }: { waitInMs?: number } = {} +): Promise { let didOpenRedbox = false try { - await browser.waitForElementByCss('[data-issues]').click() + await browser.waitForElementByCss('[data-issues]', waitInMs).click() didOpenRedbox = true } catch { // We expect this to fail.