diff --git a/.vscode/settings.json b/.vscode/settings.json index 0f288b28648a1..aa533555923f1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -96,5 +96,6 @@ "--ignore-revs-file", "${workspaceRoot}/.git-blame-ignore-revs" ], - "astGrep.serverPath": "node_modules/@ast-grep/cli/ast-grep" + "astGrep.serverPath": "node_modules/@ast-grep/cli/ast-grep", + "rust-analyzer.imports.prefix": "crate" } diff --git a/Cargo.lock b/Cargo.lock index 5e0c19e4c6cb3..2c36d4aab63b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4226,6 +4226,7 @@ dependencies = [ "tracing-chrome", "tracing-subscriber", "turbo-tasks", + "turbo-tasks-backend", "turbo-tasks-build", "turbo-tasks-fs", "turbo-tasks-malloc", @@ -8568,6 +8569,33 @@ dependencies = [ "unsize", ] +[[package]] +name = "turbo-tasks-backend" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "auto-hash-map", + "dashmap", + "either", + "hashbrown 0.14.5", + "indexmap 1.9.3", + "once_cell", + "parking_lot", + "rand", + "rustc-hash", + "serde", + "smallvec", + "tokio", + "tracing", + "turbo-prehash", + "turbo-tasks", + "turbo-tasks-build", + "turbo-tasks-hash", + "turbo-tasks-malloc", + "turbo-tasks-testing", +] + [[package]] name = "turbo-tasks-build" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index d4a9d2675d31a..098e39e555720 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,6 +45,7 @@ swc-ast-explorer = { path = "turbopack/crates/turbopack-swc-ast-explorer" } turbo-prehash = { path = "turbopack/crates/turbo-prehash" } turbo-tasks-malloc = { path = "turbopack/crates/turbo-tasks-malloc", default-features = false } turbo-tasks = { path = "turbopack/crates/turbo-tasks" } +turbo-tasks-backend = { path = "turbopack/crates/turbo-tasks-backend" } turbo-tasks-build = { path = "turbopack/crates/turbo-tasks-build" } turbo-tasks-bytes = { path = "turbopack/crates/turbo-tasks-bytes" } turbo-tasks-env = { path = "turbopack/crates/turbo-tasks-env" } @@ -143,6 +144,7 @@ dunce = "1.0.3" either = "1.9.0" futures = "0.3.26" futures-retry = "0.6.0" +hashbrown = "0.14.5" httpmock = { version = "0.6.8", default-features = false } image = { version = "0.25.0", default-features = false } indexmap = "1.9.2" diff --git a/crates/napi/Cargo.toml b/crates/napi/Cargo.toml index e7d428bbeb4fb..604dd24188771 100644 --- a/crates/napi/Cargo.toml +++ b/crates/napi/Cargo.toml @@ -37,6 +37,8 @@ __internal_dhat-heap = ["dhat"] # effectively does nothing. __internal_dhat-ad-hoc = ["dhat"] +new-backend = ["dep:turbo-tasks-backend"] + # Enable specific tls features per-target. [target.'cfg(all(target_os = "windows", target_arch = "aarch64"))'.dependencies] next-core = { workspace = true, features = ["native-tls"] } @@ -105,6 +107,7 @@ lightningcss-napi = { workspace = true } tokio = { workspace = true, features = ["full"] } turbo-tasks = { workspace = true } turbo-tasks-memory = { workspace = true } +turbo-tasks-backend = { workspace = true, optional = true } turbo-tasks-fs = { workspace = true } next-api = { workspace = true } next-build = { workspace = true } diff --git a/crates/napi/src/next_api/project.rs b/crates/napi/src/next_api/project.rs index 65143fd3ff11c..df20d341d7094 100644 --- a/crates/napi/src/next_api/project.rs +++ b/crates/napi/src/next_api/project.rs @@ -1,4 +1,4 @@ -use std::{io::Write, path::PathBuf, sync::Arc, thread, time::Duration}; +use std::{path::PathBuf, sync::Arc, thread, time::Duration}; use anyhow::{anyhow, bail, Context, Result}; use napi::{ @@ -24,7 +24,6 @@ use tracing::Instrument; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry}; use turbo_tasks::{Completion, RcStr, ReadRef, TransientInstance, TurboTasks, UpdateInfo, Vc}; use turbo_tasks_fs::{DiskFileSystem, FileContent, FileSystem, FileSystemPath}; -use turbo_tasks_memory::MemoryBackend; use turbopack_core::{ diagnostics::PlainDiagnostic, error::PrettyPrintError, @@ -44,8 +43,8 @@ use url::Url; use super::{ endpoint::ExternalEndpoint, utils::{ - get_diagnostics, get_issues, subscribe, NapiDiagnostic, NapiIssue, RootTask, - TurbopackResult, VcArc, + create_turbo_tasks, get_diagnostics, get_issues, subscribe, NapiDiagnostic, NapiIssue, + NextBackend, RootTask, TurbopackResult, VcArc, }, }; use crate::register; @@ -99,7 +98,7 @@ pub struct NapiProjectOptions { /// next.config's distDir. Project initialization occurs eariler than /// deserializing next.config, so passing it as separate option. - pub dist_dir: Option, + pub dist_dir: String, /// Filesystem watcher options. pub watch: NapiWatchOptions, @@ -273,7 +272,7 @@ impl From for DefineEnv { } pub struct ProjectInstance { - turbo_tasks: Arc>, + turbo_tasks: Arc>, container: Vc, exit_receiver: tokio::sync::Mutex>, } @@ -309,10 +308,7 @@ pub async fn project_new( let subscriber = Registry::default(); let subscriber = subscriber.with(EnvFilter::builder().parse(trace).unwrap()); - let dist_dir = options - .dist_dir - .as_ref() - .map_or_else(|| ".next".to_string(), |d| d.to_string()); + let dist_dir = options.dist_dir.clone(); let internal_dir = PathBuf::from(&options.project_path).join(dist_dir); std::fs::create_dir_all(&internal_dir) @@ -338,27 +334,30 @@ pub async fn project_new( subscriber.init(); } - let turbo_tasks = TurboTasks::new(MemoryBackend::new( - turbo_engine_options - .memory_limit - .map(|m| m as usize) - .unwrap_or(usize::MAX), - )); - let stats_path = std::env::var_os("NEXT_TURBOPACK_TASK_STATISTICS"); - if let Some(stats_path) = stats_path { - let task_stats = turbo_tasks.backend().task_statistics().enable().clone(); - exit.on_exit(async move { - tokio::task::spawn_blocking(move || { - let mut file = std::fs::File::create(&stats_path) - .with_context(|| format!("failed to create or open {stats_path:?}"))?; - serde_json::to_writer(&file, &task_stats) - .context("failed to serialize or write task statistics")?; - file.flush().context("failed to flush file") - }) - .await - .unwrap() - .unwrap(); - }); + let memory_limit = turbo_engine_options + .memory_limit + .map(|m| m as usize) + .unwrap_or(usize::MAX); + let turbo_tasks = create_turbo_tasks(PathBuf::from(&options.dist_dir), memory_limit)?; + #[cfg(not(feature = "new-backend"))] + { + use std::io::Write; + let stats_path = std::env::var_os("NEXT_TURBOPACK_TASK_STATISTICS"); + if let Some(stats_path) = stats_path { + let task_stats = turbo_tasks.backend().task_statistics().enable().clone(); + exit.on_exit(async move { + tokio::task::spawn_blocking(move || { + let mut file = std::fs::File::create(&stats_path) + .with_context(|| format!("failed to create or open {stats_path:?}"))?; + serde_json::to_writer(&file, &task_stats) + .context("failed to serialize or write task statistics")?; + file.flush().context("failed to flush file") + }) + .await + .unwrap() + .unwrap(); + }); + } } let options: ProjectOptions = options.into(); let container = turbo_tasks @@ -502,7 +501,7 @@ impl NapiRoute { fn from_route( pathname: String, value: Route, - turbo_tasks: &Arc>, + turbo_tasks: &Arc>, ) -> Self { let convert_endpoint = |endpoint: Vc>| { Some(External::new(ExternalEndpoint(VcArc::new( @@ -569,7 +568,7 @@ struct NapiMiddleware { impl NapiMiddleware { fn from_middleware( value: &Middleware, - turbo_tasks: &Arc>, + turbo_tasks: &Arc>, ) -> Result { Ok(NapiMiddleware { endpoint: External::new(ExternalEndpoint(VcArc::new( @@ -589,7 +588,7 @@ struct NapiInstrumentation { impl NapiInstrumentation { fn from_instrumentation( value: &Instrumentation, - turbo_tasks: &Arc>, + turbo_tasks: &Arc>, ) -> Result { Ok(NapiInstrumentation { node_js: External::new(ExternalEndpoint(VcArc::new( diff --git a/crates/napi/src/next_api/utils.rs b/crates/napi/src/next_api/utils.rs index 62cefa34b7af5..a5c4284c73c66 100644 --- a/crates/napi/src/next_api/utils.rs +++ b/crates/napi/src/next_api/utils.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, future::Future, ops::Deref, sync::Arc}; +use std::{collections::HashMap, future::Future, ops::Deref, path::PathBuf, sync::Arc}; use anyhow::{anyhow, Context, Result}; use napi::{ @@ -9,7 +9,6 @@ use napi::{ use serde::Serialize; use turbo_tasks::{ReadRef, TaskId, TryJoinIterExt, TurboTasks, Vc}; use turbo_tasks_fs::FileContent; -use turbo_tasks_memory::MemoryBackend; use turbopack_core::{ diagnostics::{Diagnostic, DiagnosticContextExt, PlainDiagnostic}, error::PrettyPrintError, @@ -19,22 +18,41 @@ use turbopack_core::{ use crate::util::log_internal_error_and_inform; +#[cfg(not(feature = "new-backend"))] +pub type NextBackend = turbo_tasks_memory::MemoryBackend; +#[cfg(feature = "new-backend")] +pub type NextBackend = turbo_tasks_backend::TurboTasksBackend; + +#[allow(unused_variables, reason = "feature-gated")] +pub fn create_turbo_tasks( + output_path: PathBuf, + memory_limit: usize, +) -> Result>> { + #[cfg(not(feature = "new-backend"))] + let backend = TurboTasks::new(turbo_tasks_memory::MemoryBackend::new(memory_limit)); + #[cfg(feature = "new-backend")] + let backend = TurboTasks::new(turbo_tasks_backend::TurboTasksBackend::new(Arc::new( + turbo_tasks_backend::LmdbBackingStorage::new(&output_path.join("cache/turbopack"))?, + ))); + Ok(backend) +} + /// A helper type to hold both a Vc operation and the TurboTasks root process. /// Without this, we'd need to pass both individually all over the place #[derive(Clone)] pub struct VcArc { - turbo_tasks: Arc>, + turbo_tasks: Arc>, /// The Vc. Must be resolved, otherwise you are referencing an inactive /// operation. vc: T, } impl VcArc { - pub fn new(turbo_tasks: Arc>, vc: T) -> Self { + pub fn new(turbo_tasks: Arc>, vc: T) -> Self { Self { turbo_tasks, vc } } - pub fn turbo_tasks(&self) -> &Arc> { + pub fn turbo_tasks(&self) -> &Arc> { &self.turbo_tasks } } @@ -57,7 +75,7 @@ pub fn serde_enum_to_string(value: &T) -> Result { /// The root of our turbopack computation. pub struct RootTask { #[allow(dead_code)] - turbo_tasks: Arc>, + turbo_tasks: Arc>, #[allow(dead_code)] task_id: Option, } @@ -301,7 +319,7 @@ impl ToNapiValue for TurbopackResult { } pub fn subscribe> + Send, V: ToNapiValue>( - turbo_tasks: Arc>, + turbo_tasks: Arc>, func: JsFunction, handler: impl 'static + Sync + Send + Clone + Fn() -> F, mapper: impl 'static + Sync + Send + FnMut(ThreadSafeCallContext) -> napi::Result>, diff --git a/crates/napi/src/turbotrace.rs b/crates/napi/src/turbotrace.rs index faf0c63db3764..fef534c04b550 100644 --- a/crates/napi/src/turbotrace.rs +++ b/crates/napi/src/turbotrace.rs @@ -1,35 +1,35 @@ -use std::sync::Arc; +use std::{path::PathBuf, sync::Arc}; use napi::bindgen_prelude::*; use node_file_trace::{start, Args}; use turbo_tasks::TurboTasks; -use turbo_tasks_memory::MemoryBackend; use turbopack::{ module_options::{EcmascriptOptionsContext, ModuleOptionsContext}, resolve_options_context::ResolveOptionsContext, }; +use crate::next_api::utils::{self, NextBackend}; + #[napi] -pub fn create_turbo_tasks(memory_limit: Option) -> External>> { - let turbo_tasks = TurboTasks::new(MemoryBackend::new( - memory_limit.map(|m| m as usize).unwrap_or(usize::MAX), - )); - External::new_with_size_hint( - turbo_tasks, - memory_limit.map(|u| u as usize).unwrap_or(usize::MAX), - ) +pub fn create_turbo_tasks( + output_path: String, + memory_limit: Option, +) -> External>> { + let limit = memory_limit.map(|u| u as usize).unwrap_or(usize::MAX); + let turbo_tasks = utils::create_turbo_tasks(PathBuf::from(&output_path), limit) + .expect("Failed to create TurboTasks"); + External::new_with_size_hint(turbo_tasks, limit) } #[napi] pub async fn run_turbo_tracing( options: Buffer, - turbo_tasks: Option>>>, + turbo_tasks: External>>, ) -> napi::Result> { let args: Args = serde_json::from_slice(options.as_ref())?; - let turbo_tasks = turbo_tasks.map(|t| t.clone()); let files = start( Arc::new(args), - turbo_tasks.as_ref(), + turbo_tasks.clone(), Some(ModuleOptionsContext { ecmascript: EcmascriptOptionsContext { enable_types: true, diff --git a/crates/next-api/src/app.rs b/crates/next-api/src/app.rs index 8cafb6bb7dd9b..5772561ae4be6 100644 --- a/crates/next-api/src/app.rs +++ b/crates/next-api/src/app.rs @@ -1,5 +1,5 @@ use anyhow::{Context, Result}; -use indexmap::IndexSet; +use indexmap::{IndexMap, IndexSet}; use next_core::{ all_assets_from_entries, app_segment_config::NextSegmentConfig, @@ -18,9 +18,7 @@ use next_core::{ get_client_module_options_context, get_client_resolve_options_context, get_client_runtime_entries, ClientContextType, RuntimeEntries, }, - next_client_reference::{ - client_reference_graph, ClientReferenceType, NextEcmascriptClientReferenceTransition, - }, + next_client_reference::{client_reference_graph, NextEcmascriptClientReferenceTransition}, next_config::NextConfig, next_dynamic::NextDynamicTransition, next_edge::route_regex::get_named_middleware_regex, @@ -69,6 +67,7 @@ use turbopack_ecmascript::resolve::cjs_resolve; use crate::{ dynamic_imports::{ collect_chunk_group, collect_evaluated_chunk_group, collect_next_dynamic_imports, + VisitedDynamicImportModules, }, font::create_font_manifest, loadable_manifest::create_react_loadable_manifest, @@ -864,7 +863,6 @@ impl AppEndpoint { let client_shared_availability_info = client_shared_chunk_group.availability_info; let client_references = client_reference_graph(Vc::cell(vec![rsc_entry_asset])); - let client_reference_types = client_references.types(); let ssr_chunking_context = if process_ssr { Some(match runtime { @@ -880,21 +878,32 @@ impl AppEndpoint { None }; - let client_dynamic_imports = collect_next_dynamic_imports( - client_references + let client_dynamic_imports = { + let mut client_dynamic_imports = IndexMap::new(); + let mut visited_modules = VisitedDynamicImportModules::empty(); + + for refs in client_references .await? - .client_references - .iter() - .filter_map(|r| match r.ty() { - ClientReferenceType::EcmascriptClientReference(entry) => Some(entry), - ClientReferenceType::CssClientReference(_) => None, - }) - .map(|entry| async move { Ok(Vc::upcast(entry.await?.ssr_module)) }) - .try_join() - .await?, - Vc::upcast(this.app_project.client_module_context()), - ) - .await?; + .client_references_by_server_component + .values() + { + let result = collect_next_dynamic_imports( + refs.clone(), + Vc::upcast(this.app_project.client_module_context()), + visited_modules, + ) + .await?; + client_dynamic_imports.extend( + result + .client_dynamic_imports + .iter() + .map(|(k, v)| (*k, v.clone())), + ); + visited_modules = result.visited_modules; + } + + client_dynamic_imports + }; let client_references_chunks = get_app_client_references_chunks( client_references, @@ -1025,7 +1034,7 @@ impl AppEndpoint { } ( - Some(get_app_server_reference_modules(client_reference_types)), + Some(get_app_server_reference_modules(client_references.types())), Some(client_dynamic_imports), Some(client_references), ) @@ -1199,10 +1208,13 @@ impl AppEndpoint { // create react-loadable-manifest for next/dynamic let mut dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(app_entry.rsc_entry)], + vec![Vc::upcast(app_entry.rsc_entry)], Vc::upcast(this.app_project.client_module_context()), + VisitedDynamicImportModules::empty(), ) - .await?; + .await? + .client_dynamic_imports + .clone(); dynamic_import_modules.extend(client_dynamic_imports.into_iter().flatten()); let dynamic_import_entries = collect_evaluated_chunk_group( Vc::upcast(client_chunking_context), @@ -1351,10 +1363,13 @@ impl AppEndpoint { // create react-loadable-manifest for next/dynamic let availability_info = Value::new(AvailabilityInfo::Root); let mut dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(app_entry.rsc_entry)], + vec![Vc::upcast(app_entry.rsc_entry)], Vc::upcast(this.app_project.client_module_context()), + VisitedDynamicImportModules::empty(), ) - .await?; + .await? + .client_dynamic_imports + .clone(); dynamic_import_modules.extend(client_dynamic_imports.into_iter().flatten()); let dynamic_import_entries = collect_chunk_group( Vc::upcast(client_chunking_context), diff --git a/crates/next-api/src/dynamic_imports.rs b/crates/next-api/src/dynamic_imports.rs index 72c1d3d8bdaae..9d16f94c24bef 100644 --- a/crates/next-api/src/dynamic_imports.rs +++ b/crates/next-api/src/dynamic_imports.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use anyhow::{bail, Result}; use futures::Future; @@ -8,9 +8,9 @@ use swc_core::ecma::{ ast::{CallExpr, Callee, Expr, Ident, Lit}, visit::{Visit, VisitWith}, }; -use tracing::Level; +use tracing::{Instrument, Level}; use turbo_tasks::{ - graph::{GraphTraversal, NonDeterministic, VisitControlFlow}, + graph::{GraphTraversal, NonDeterministic, VisitControlFlow, VisitedNodes}, trace::TraceRawVcs, RcStr, ReadRef, TryJoinIterExt, Value, ValueToString, Vc, }; @@ -103,6 +103,23 @@ pub(crate) async fn collect_evaluated_chunk_group( .await } +#[turbo_tasks::value(shared)] +pub struct NextDynamicImportsResult { + pub client_dynamic_imports: IndexMap>, DynamicImportedModules>, + pub visited_modules: Vc, +} + +#[turbo_tasks::value(shared)] +pub struct VisitedDynamicImportModules(HashSet); + +#[turbo_tasks::value_impl] +impl VisitedDynamicImportModules { + #[turbo_tasks::function] + pub fn empty() -> Vc { + VisitedDynamicImportModules(Default::default()).cell() + } +} + /// Returns a mapping of the dynamic imports for each module, if the import is /// wrapped in `next/dynamic`'s `dynamic()`. Refer [documentation](https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#with-named-exports) for the usecases. /// @@ -125,40 +142,44 @@ pub(crate) async fn collect_evaluated_chunk_group( /// - Loadable runtime [injects preload fn](https://github.com/vercel/next.js/blob/ad42b610c25b72561ad367b82b1c7383fd2a5dd2/packages/next/src/shared/lib/loadable.shared-runtime.tsx#L281) /// to wait until all the dynamic components are being loaded, this ensures hydration mismatch /// won't occur -#[tracing::instrument(level = Level::INFO, name = "collecting next/dynamic imports", skip_all)] +#[turbo_tasks::function] pub(crate) async fn collect_next_dynamic_imports( - server_entries: impl IntoIterator>>, + // `server_entries` cannot be a `Vc>` because that would compare by cell identity and + // not by value, breaking memoization. + server_entries: Vec>>, client_asset_context: Vc>, -) -> Result>, DynamicImportedModules>> { - // Traverse referenced modules graph, collect all of the dynamic imports: - // - Read the Program AST of the Module, this is the origin (A) - // - If there's `dynamic(import(B))`, then B is the module that is being imported - // Returned import mappings are in the form of - // (Module, Vec<(B, Module)>) (where B is the raw import source string, - // and Module is the actual resolved Module) - let imported_modules_mapping = NonDeterministic::new() - .skip_duplicates() - .visit( - server_entries - .into_iter() - .map(|module| async move { - Ok(NextDynamicVisitEntry::Module( - module.resolve().await?, - module.ident().to_string().await?, - )) - }) - .try_join() - .await? - .into_iter(), - NextDynamicVisit { - client_asset_context: client_asset_context.resolve().await?, - }, - ) - .await - .completed()? - .into_inner() - .into_iter() - .filter_map(|entry| { + visited_modules: Vc, +) -> Result> { + async move { + // Traverse referenced modules graph, collect all of the dynamic imports: + // - Read the Program AST of the Module, this is the origin (A) + // - If there's `dynamic(import(B))`, then B is the module that is being imported + // Returned import mappings are in the form of + // (Module, Vec<(B, Module)>) (where B is the raw import source string, + // and Module is the actual resolved Module) + let (result, visited_modules) = NonDeterministic::new() + .skip_duplicates_with_visited_nodes(VisitedNodes(visited_modules.await?.0.clone())) + .visit( + server_entries + .iter() + .map(|module| async move { + Ok(NextDynamicVisitEntry::Module( + module.resolve().await?, + module.ident().to_string().await?, + )) + }) + .try_join() + .await? + .into_iter(), + NextDynamicVisit { + client_asset_context: client_asset_context.resolve().await?, + }, + ) + .await + .completed()? + .into_inner_with_visited(); + + let imported_modules_mapping = result.into_iter().filter_map(|entry| { if let NextDynamicVisitEntry::DynamicImportsMap(dynamic_imports_map) = entry { Some(dynamic_imports_map) } else { @@ -166,19 +187,26 @@ pub(crate) async fn collect_next_dynamic_imports( } }); - // Consolifate import mappings into a single indexmap - let mut import_mappings: IndexMap>, DynamicImportedModules> = - IndexMap::new(); + // Consolidate import mappings into a single indexmap + let mut import_mappings: IndexMap>, DynamicImportedModules> = + IndexMap::new(); - for module_mapping in imported_modules_mapping { - let (origin_module, dynamic_imports) = &*module_mapping.await?; - import_mappings - .entry(*origin_module) - .or_insert_with(Vec::new) - .append(&mut dynamic_imports.clone()) - } + for module_mapping in imported_modules_mapping { + let (origin_module, dynamic_imports) = &*module_mapping.await?; + import_mappings + .entry(*origin_module) + .or_insert_with(Vec::new) + .append(&mut dynamic_imports.clone()) + } - Ok(import_mappings) + Ok(NextDynamicImportsResult { + client_dynamic_imports: import_mappings, + visited_modules: VisitedDynamicImportModules(visited_modules.0).cell(), + } + .cell()) + } + .instrument(tracing::info_span!("collecting next/dynamic imports")) + .await } #[derive(Debug, PartialEq, Eq, Hash, Clone, TraceRawVcs, Serialize, Deserialize)] diff --git a/crates/next-api/src/pages.rs b/crates/next-api/src/pages.rs index 144a622427ff3..4fdfe4a86c79b 100644 --- a/crates/next-api/src/pages.rs +++ b/crates/next-api/src/pages.rs @@ -61,7 +61,7 @@ use turbopack_nodejs::NodeJsChunkingContext; use crate::{ dynamic_imports::{ collect_chunk_group, collect_evaluated_chunk_group, collect_next_dynamic_imports, - DynamicImportedChunks, + DynamicImportedChunks, VisitedDynamicImportModules, }, font::create_font_manifest, loadable_manifest::create_react_loadable_manifest, @@ -810,8 +810,16 @@ impl PageEndpoint { runtime, } = *self.internal_ssr_chunk_module().await?; - let is_edge = matches!(runtime, NextRuntime::Edge); + let dynamic_import_modules = collect_next_dynamic_imports( + vec![Vc::upcast(ssr_module)], + this.pages_project.client_module_context(), + VisitedDynamicImportModules::empty(), + ) + .await? + .client_dynamic_imports + .clone(); + let is_edge = matches!(runtime, NextRuntime::Edge); if is_edge { let mut evaluatable_assets = edge_runtime_entries.await?.clone_value(); let evaluatable = Vc::try_resolve_sidecast(ssr_module) @@ -825,11 +833,6 @@ impl PageEndpoint { Value::new(AvailabilityInfo::Root), ); - let dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(ssr_module)], - this.pages_project.client_module_context(), - ) - .await?; let client_chunking_context = this.pages_project.project().client_chunking_context(); let dynamic_import_entries = collect_evaluated_chunk_group( @@ -863,18 +866,12 @@ impl PageEndpoint { ) .await?; - let availability_info = Value::new(AvailabilityInfo::Root); - let dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(ssr_module)], - this.pages_project.client_module_context(), - ) - .await?; let client_chunking_context = this.pages_project.project().client_chunking_context(); let dynamic_import_entries = collect_chunk_group( Vc::upcast(client_chunking_context), dynamic_import_modules, - availability_info, + Value::new(AvailabilityInfo::Root), ) .await?; @@ -1180,8 +1177,14 @@ impl PageEndpoint { } #[turbo_tasks::function] - fn client_relative_path(&self) -> Vc { - Vc::cell(Some(self.pages_project.project().client_relative_path())) + async fn client_relative_path(&self) -> Result> { + Ok(Vc::cell(Some( + self.pages_project + .project() + .client_relative_path() + .to_resolved() + .await?, + ))) } } diff --git a/crates/next-core/src/app_structure.rs b/crates/next-core/src/app_structure.rs index c36b7a6f6ab54..46a3479824f61 100644 --- a/crates/next-core/src/app_structure.rs +++ b/crates/next-core/src/app_structure.rs @@ -1330,9 +1330,9 @@ pub async fn get_global_metadata( }; if dynamic { - *entry = Some(MetadataItem::Dynamic { path: file }); + *entry = Some(MetadataItem::Dynamic { path: *file }); } else { - *entry = Some(MetadataItem::Static { path: file }); + *entry = Some(MetadataItem::Static { path: *file }); } // TODO(WEB-952) handle symlinks in app dir } diff --git a/crates/next-core/src/next_client_reference/visit_client_reference.rs b/crates/next-core/src/next_client_reference/visit_client_reference.rs index d74d07db67441..ef463f415f743 100644 --- a/crates/next-core/src/next_client_reference/visit_client_reference.rs +++ b/crates/next-core/src/next_client_reference/visit_client_reference.rs @@ -1,7 +1,7 @@ use std::future::Future; use anyhow::Result; -use indexmap::IndexSet; +use indexmap::{IndexMap, IndexSet}; use serde::{Deserialize, Serialize}; use tracing::Instrument; use turbo_tasks::{ @@ -50,6 +50,10 @@ pub enum ClientReferenceType { #[derive(Debug)] pub struct ClientReferenceGraphResult { pub client_references: Vec, + /// Only the [`ClientReferenceType::EcmascriptClientReference`]s are listed in this map. + #[allow(clippy::type_complexity)] + pub client_references_by_server_component: + IndexMap>, Vec>>>, pub server_component_entries: Vec>, pub server_utils: Vec>>, } @@ -81,6 +85,11 @@ pub async fn client_reference_graph( let mut server_component_entries = vec![]; let mut server_utils = vec![]; + let mut client_references_by_server_component = IndexMap::new(); + // Make sure None (for the various internal next/dist/esm/client/components/*) is listed + // first + client_references_by_server_component.insert(None, Vec::new()); + let graph = AdjacencyMap::new() .skip_duplicates() .visit( @@ -115,6 +124,15 @@ pub async fn client_reference_graph( } VisitClientReferenceNodeType::ClientReference(client_reference, _) => { client_references.push(*client_reference); + + if let ClientReferenceType::EcmascriptClientReference(entry) = + client_reference.ty() + { + client_references_by_server_component + .entry(client_reference.server_component) + .or_insert_with(Vec::new) + .push(Vc::upcast::>(entry.await?.ssr_module)); + } } VisitClientReferenceNodeType::ServerUtilEntry(server_util, _) => { server_utils.push(*server_util); @@ -127,6 +145,7 @@ pub async fn client_reference_graph( Ok(ClientReferenceGraphResult { client_references, + client_references_by_server_component, server_component_entries, server_utils, } diff --git a/crates/next-core/src/page_loader.rs b/crates/next-core/src/page_loader.rs index f3e04516d6ff4..5a5955fc59abd 100644 --- a/crates/next-core/src/page_loader.rs +++ b/crates/next-core/src/page_loader.rs @@ -111,7 +111,7 @@ impl PageLoaderAsset { .map(|chunk| { Vc::upcast(ProxiedAsset::new( *chunk, - FileSystemPath::rebase(chunk.ident().path(), *rebase_path, root_path), + FileSystemPath::rebase(chunk.ident().path(), **rebase_path, root_path), )) }) .collect(); @@ -131,7 +131,10 @@ fn page_loader_chunk_reference_description() -> Vc { impl OutputAsset for PageLoaderAsset { #[turbo_tasks::function] async fn ident(&self) -> Result> { - let root = self.rebase_prefix_path.await?.unwrap_or(self.server_root); + let root = self + .rebase_prefix_path + .await? + .map_or(self.server_root, |path| *path); Ok(AssetIdent::from_path( root.join( format!( diff --git a/crates/next-core/src/pages_structure.rs b/crates/next-core/src/pages_structure.rs index d90fc5a97ec4c..87deebe96a959 100644 --- a/crates/next-core/src/pages_structure.rs +++ b/crates/next-core/src/pages_structure.rs @@ -117,33 +117,29 @@ pub async fn find_pages_structure( let pages_root = project_root .join("pages".into()) .realpath() - .resolve() + .to_resolved() .await?; - let pages_root = Vc::::cell( - if *pages_root.get_type().await? == FileSystemEntryType::Directory { - Some(pages_root) + let pages_root = if *pages_root.get_type().await? == FileSystemEntryType::Directory { + Some(pages_root) + } else { + let src_pages_root = project_root + .join("src/pages".into()) + .realpath() + .to_resolved() + .await?; + if *src_pages_root.get_type().await? == FileSystemEntryType::Directory { + Some(src_pages_root) } else { - let src_pages_root = project_root - .join("src/pages".into()) - .realpath() - .resolve() - .await?; - if *src_pages_root.get_type().await? == FileSystemEntryType::Directory { - Some(src_pages_root) - } else { - // If neither pages nor src/pages exists, we still want to generate - // the pages structure, but with no pages and default values for - // _app, _document and _error. - None - } - }, - ) - .resolve() - .await?; + // If neither pages nor src/pages exists, we still want to generate + // the pages structure, but with no pages and default values for + // _app, _document and _error. + None + } + }; Ok(get_pages_structure_for_root_directory( project_root, - pages_root, + Vc::cell(pages_root), next_router_root, page_extensions, )) @@ -202,7 +198,7 @@ async fn get_pages_structure_for_root_directory( DirectoryEntry::Directory(dir_project_path) => match name.as_str() { "api" => { api_directory = Some(get_pages_structure_for_directory( - dir_project_path, + *dir_project_path, next_router_path.join(name.clone()), 1, page_extensions, @@ -212,7 +208,7 @@ async fn get_pages_structure_for_root_directory( children.push(( name, get_pages_structure_for_directory( - dir_project_path, + *dir_project_path, next_router_path.join(name.clone()), 1, page_extensions, @@ -231,7 +227,7 @@ async fn get_pages_structure_for_root_directory( Some( PagesDirectoryStructure { - project_path: *project_path, + project_path: **project_path, next_router_path, items: items.into_iter().map(|(_, v)| v).collect(), children: children.into_iter().map(|(_, v)| v).collect(), @@ -243,7 +239,7 @@ async fn get_pages_structure_for_root_directory( }; let pages_path = if let Some(project_path) = *project_path { - project_path + *project_path } else { project_root.join("pages".into()) }; @@ -338,7 +334,7 @@ async fn get_pages_structure_for_directory( children.push(( name, get_pages_structure_for_directory( - *dir_project_path, + **dir_project_path, next_router_path.join(name.clone()), position + 1, page_extensions, diff --git a/crates/next-custom-transforms/src/transforms/server_actions.rs b/crates/next-custom-transforms/src/transforms/server_actions.rs index a4346b165070a..57557f430f875 100644 --- a/crates/next-custom-transforms/src/transforms/server_actions.rs +++ b/crates/next-custom-transforms/src/transforms/server_actions.rs @@ -105,7 +105,7 @@ struct ServerActions { should_track_names: bool, names: Vec, - declared_idents: Vec, + declared_idents: Vec, // This flag allows us to rewrite `function foo() {}` to `const foo = createProxy(...)`. rewrite_fn_decl_to_proxy_decl: Option, @@ -113,7 +113,7 @@ struct ServerActions { rewrite_expr_to_proxy_expr: Option>, // (ident, export name) - exported_idents: Vec<(Id, String)>, + exported_idents: Vec<(Ident, String)>, annotations: Vec, extra_items: Vec, @@ -193,7 +193,7 @@ impl ServerActions { self.has_action = true; self.export_actions.push(action_name.to_string()); - let action_ident = Ident::new(action_name.clone(), DUMMY_SP, self.private_ctxt); + let action_ident = Ident::new(action_name.clone(), arrow.span, self.private_ctxt); let register_action_expr = annotate_ident_as_server_reference( action_ident.clone(), @@ -347,7 +347,7 @@ impl ServerActions { self.has_action = true; self.export_actions.push(action_name.to_string()); - let action_ident = Ident::new(action_name.clone(), DUMMY_SP, self.private_ctxt); + let action_ident = Ident::new(action_name.clone(), function.span, self.private_ctxt); let register_action_expr = annotate_ident_as_server_reference( action_ident.clone(), @@ -1210,14 +1210,16 @@ impl VisitMut for ServerActions { Decl::Fn(f) => { // export function foo() {} self.exported_idents - .push((f.ident.to_id(), f.ident.sym.to_string())); + .push((f.ident.clone(), f.ident.sym.to_string())); } Decl::Var(var) => { // export const foo = 1 - let mut ids: Vec = Vec::new(); - collect_idents_in_var_decls(&var.decls, &mut ids); + let mut idents: Vec = Vec::new(); + collect_idents_in_var_decls(&var.decls, &mut idents); self.exported_idents.extend( - ids.into_iter().map(|id| (id.clone(), id.0.to_string())), + idents + .into_iter() + .map(|ident| (ident.clone(), ident.to_id().0.to_string())), ); for decl in &mut var.decls { @@ -1251,16 +1253,16 @@ impl VisitMut for ServerActions { { // export { foo as bar } self.exported_idents - .push((ident.to_id(), sym.to_string())); + .push((ident.clone(), sym.to_string())); } else if let ModuleExportName::Str(str) = export_name { // export { foo as "bar" } self.exported_idents - .push((ident.to_id(), str.value.to_string())); + .push((ident.clone(), str.value.to_string())); } } else { // export { foo } self.exported_idents - .push((ident.to_id(), ident.sym.to_string())); + .push((ident.clone(), ident.sym.to_string())); } } else { disallowed_export_span = named.span; @@ -1276,17 +1278,21 @@ impl VisitMut for ServerActions { DefaultDecl::Fn(f) => { if let Some(ident) = &f.ident { // export default function foo() {} - self.exported_idents.push((ident.to_id(), "default".into())); + self.exported_idents.push((ident.clone(), "default".into())); } else { // export default function() {} + // Use the span from the function expression + let span = f.function.span; + let new_ident = Ident::new( gen_action_ident(&mut self.reference_index), - DUMMY_SP, + span, self.private_ctxt, ); + f.ident = Some(new_ident.clone()); - self.exported_idents - .push((new_ident.to_id(), "default".into())); + + self.exported_idents.push((new_ident, "default".into())); } } _ => { @@ -1301,14 +1307,17 @@ impl VisitMut for ServerActions { disallowed_export_span = default_expr.span; } else { // export default async () => {} + // Use the span of the arrow function + let span = arrow.span; + let new_ident = Ident::new( gen_action_ident(&mut self.reference_index), - DUMMY_SP, + span, self.private_ctxt, ); self.exported_idents - .push((new_ident.to_id(), "default".into())); + .push((new_ident.clone(), "default".into())); *default_expr.expr = attach_name_to_expr( new_ident, @@ -1319,18 +1328,21 @@ impl VisitMut for ServerActions { } Expr::Ident(ident) => { // export default foo - self.exported_idents.push((ident.to_id(), "default".into())); + self.exported_idents.push((ident.clone(), "default".into())); } Expr::Call(call) => { // export default fn() + // Determining a useful span here is tricky. + let span = call.span; + let new_ident = Ident::new( gen_action_ident(&mut self.reference_index), - DUMMY_SP, + span, self.private_ctxt, ); self.exported_idents - .push((new_ident.to_id(), "default".into())); + .push((new_ident.clone(), "default".into())); *default_expr.expr = attach_name_to_expr( new_ident, @@ -1433,21 +1445,19 @@ impl VisitMut for ServerActions { new.rotate_right(1); } - for (id, export_name) in self.exported_idents.iter() { - let ident = Ident::new(id.0.clone(), DUMMY_SP, id.1); - + for (ident, export_name) in self.exported_idents.iter() { if !self.config.is_react_server_layer { let action_id = generate_action_id(&self.config.hash_salt, &self.file_name, export_name); - let span = Span::dummy_with_cmt(); - self.comments.add_pure_comment(span.lo); + let call_expr_span = Span::dummy_with_cmt(); + self.comments.add_pure_comment(call_expr_span.lo); if export_name == "default" { let export_expr = ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( ExportDefaultExpr { - span: DUMMY_SP, + span: ident.span, expr: Box::new(Expr::Call(CallExpr { - span, + span: call_expr_span, callee: Callee::Expr(Box::new(Expr::Ident( create_ref_ident.clone(), ))), @@ -1473,11 +1483,11 @@ impl VisitMut for ServerActions { decls: vec![VarDeclarator { span: DUMMY_SP, name: Pat::Ident( - IdentName::new(export_name.clone().into(), DUMMY_SP) + IdentName::new(export_name.clone().into(), ident.span) .into(), ), init: Some(Box::new(Expr::Call(CallExpr { - span, + span: call_expr_span, callee: Callee::Expr(Box::new(Expr::Ident( create_ref_ident.clone(), ))), @@ -1549,14 +1559,10 @@ impl VisitMut for ServerActions { elems: self .exported_idents .iter() - .map(|e| { + .map(|(ident, _span)| { Some(ExprOrSpread { spread: None, - expr: Box::new(Expr::Ident(Ident::new( - e.0 .0.clone(), - DUMMY_SP, - e.0 .1, - ))), + expr: Box::new(Expr::Ident(ident.clone())), }) }) .collect(), @@ -1626,7 +1632,6 @@ impl VisitMut for ServerActions { if (self.has_action || self.has_cache) && self.config.is_react_server_layer { // Inlined actions are only allowed on the server layer. // import { registerServerReference } from 'private-next-rsc-server-reference' - // registerServerReference("action_id") new.push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { span: DUMMY_SP, specifiers: vec![ImportSpecifier::Named(ImportNamedSpecifier { @@ -1702,7 +1707,10 @@ impl VisitMut for ServerActions { noop_visit_mut_type!(); } -fn retain_names_from_declared_idents(child_names: &mut Vec, current_declared_idents: &[Id]) { +fn retain_names_from_declared_idents( + child_names: &mut Vec, + current_declared_idents: &[Ident], +) { // Collect the names to retain in a separate vector let mut retained_names = Vec::new(); @@ -1734,7 +1742,9 @@ fn retain_names_from_declared_idents(child_names: &mut Vec, current_declar } if should_retain - && current_declared_idents.contains(&name.0) + && current_declared_idents + .iter() + .any(|ident| ident.to_id() == name.0) && !retained_names.contains(name) { retained_names.push(name.clone()); @@ -1825,21 +1835,22 @@ fn annotate_ident_as_server_reference( bound: Vec>, action_id: String, ) -> Expr { - // Add the proxy wrapper call `registerServerReference($$id, $$bound, myAction, - // maybe_orig_action)`. - + // registerServerReference(reference, id, null) let proxy_expr = Expr::Call(CallExpr { - span: DUMMY_SP, + span: ident.span, callee: quote_ident!("registerServerReference").as_callee(), args: vec![ - // $$id + ExprOrSpread { + spread: None, + expr: Box::new(Expr::Ident(ident)), + }, ExprOrSpread { spread: None, expr: Box::new(action_id.clone().into()), }, ExprOrSpread { spread: None, - expr: Box::new(Expr::Ident(ident)), + expr: Box::new(Expr::Lit(Lit::Null(Null { span: DUMMY_SP }))), }, ], ..Default::default() @@ -2198,96 +2209,100 @@ fn remove_server_directive_index_in_fn( }); } -fn collect_idents_in_array_pat(elems: &[Option], ids: &mut Vec) { +fn collect_idents_in_array_pat(elems: &[Option], idents: &mut Vec) { for elem in elems.iter().flatten() { match elem { Pat::Ident(ident) => { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } Pat::Array(array) => { - collect_idents_in_array_pat(&array.elems, ids); + collect_idents_in_array_pat(&array.elems, idents); } Pat::Object(object) => { - collect_idents_in_object_pat(&object.props, ids); + collect_idents_in_object_pat(&object.props, idents); } Pat::Rest(rest) => { if let Pat::Ident(ident) = &*rest.arg { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } } Pat::Assign(AssignPat { left, .. }) => { - collect_idents_in_pat(left, ids); + collect_idents_in_pat(left, idents); } Pat::Expr(..) | Pat::Invalid(..) => {} } } } -fn collect_idents_in_object_pat(props: &[ObjectPatProp], ids: &mut Vec) { +fn collect_idents_in_object_pat(props: &[ObjectPatProp], idents: &mut Vec) { for prop in props { match prop { ObjectPatProp::KeyValue(KeyValuePatProp { key, value }) => { if let PropName::Ident(ident) = key { - ids.push((ident.sym.clone(), SyntaxContext::empty())); + idents.push(Ident::new( + ident.sym.clone(), + ident.span, + SyntaxContext::empty(), + )); } match &**value { Pat::Ident(ident) => { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } Pat::Array(array) => { - collect_idents_in_array_pat(&array.elems, ids); + collect_idents_in_array_pat(&array.elems, idents); } Pat::Object(object) => { - collect_idents_in_object_pat(&object.props, ids); + collect_idents_in_object_pat(&object.props, idents); } _ => {} } } ObjectPatProp::Assign(AssignPatProp { key, .. }) => { - ids.push(key.to_id()); + idents.push(key.id.clone()); } ObjectPatProp::Rest(RestPat { arg, .. }) => { if let Pat::Ident(ident) = &**arg { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } } } } } -fn collect_idents_in_var_decls(decls: &[VarDeclarator], ids: &mut Vec) { +fn collect_idents_in_var_decls(decls: &[VarDeclarator], idents: &mut Vec) { for decl in decls { - collect_idents_in_pat(&decl.name, ids); + collect_idents_in_pat(&decl.name, idents); } } -fn collect_idents_in_pat(pat: &Pat, ids: &mut Vec) { +fn collect_idents_in_pat(pat: &Pat, idents: &mut Vec) { match pat { Pat::Ident(ident) => { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } Pat::Array(array) => { - collect_idents_in_array_pat(&array.elems, ids); + collect_idents_in_array_pat(&array.elems, idents); } Pat::Object(object) => { - collect_idents_in_object_pat(&object.props, ids); + collect_idents_in_object_pat(&object.props, idents); } Pat::Assign(AssignPat { left, .. }) => { - collect_idents_in_pat(left, ids); + collect_idents_in_pat(left, idents); } Pat::Rest(RestPat { arg, .. }) => { if let Pat::Ident(ident) = &**arg { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } } Pat::Expr(..) | Pat::Invalid(..) => {} } } -fn collect_decl_idents_in_stmt(stmt: &Stmt, ids: &mut Vec) { +fn collect_decl_idents_in_stmt(stmt: &Stmt, idents: &mut Vec) { if let Stmt::Decl(Decl::Var(var)) = &stmt { - collect_idents_in_var_decls(&var.decls, ids); + collect_idents_in_var_decls(&var.decls, idents); } } diff --git a/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js b/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js index e5d9d5a247959..0ad22420ae493 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js @@ -1,5 +1,5 @@ /* __next_internal_client_entry_do_not_use__ default auto */ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ export default function App() { - var fn = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); + var fn = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); return
App
; } export async function $$RSC_SERVER_ACTION_0() {} diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js index ecba6f9f39448..01b76c30cb1b6 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js index 1dd3034f34616..31450221dc7b6 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js @@ -6,4 +6,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ bar ]); -registerServerReference("ac840dcaf5e8197cb02b7f3a43c119b7a770b272", bar); +registerServerReference(bar, "ac840dcaf5e8197cb02b7f3a43c119b7a770b272", null); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js index 29d945f830519..720e5a317895c 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ x ]); -registerServerReference("b78c261f135a7a852508c2920bd7228020ff4bd7", x); +registerServerReference(x, "b78c261f135a7a852508c2920bd7228020ff4bd7", null); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js index 62c809ec82aff..99dc4369c7857 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export default registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +export default registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() {} import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([]); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js index d923f3a1e0e57..12e411109bf19 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js @@ -1,4 +1,4 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() {} diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js index d1378eab0bda2..c4b2b45a6996e 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() { 'use strict'; } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js index 0f40d8d97fdae..db3182526d9ef 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; import deleteFromDb from 'db'; export function Item({ id1, id2 }) { - var deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, id2 ])); @@ -18,7 +18,7 @@ export default function Home() { name: 'John', test: 'test' }; - const action = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + const action = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ info.name, info.test ])); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js index 871fdbb306f18..9f6837fc25e39 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js index 17f89f7ec80df..8136f99f6e750 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ $$RSC_SERVER_ACTION_0 ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", $$RSC_SERVER_ACTION_0); +registerServerReference($$RSC_SERVER_ACTION_0, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js index 9e5ece55cb20a..e26854b05431a 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js @@ -6,4 +6,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js index c958051367890..062de8df3b921 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js @@ -9,5 +9,5 @@ ensureServerEntryExports([ foo, bar ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); -registerServerReference("ac840dcaf5e8197cb02b7f3a43c119b7a770b272", bar); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); +registerServerReference(bar, "ac840dcaf5e8197cb02b7f3a43c119b7a770b272", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js index fa283adc6262e..d0e615e2a5f00 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js @@ -7,4 +7,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js index fe58be462a819..805de1fbcea41 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"90b5db271335765a4b0eab01f044b381b5ebd5cd":"$$RSC_SERVER_ACTION_1","c18c215a6b7cdc64bf709f3a714ffdef1bf9651d":"default"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export default $$RSC_SERVER_ACTION_0 = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1); +export default $$RSC_SERVER_ACTION_0 = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null); var $$RSC_SERVER_ACTION_0; export async function $$RSC_SERVER_ACTION_1(a, b) { console.log(a, b); @@ -9,4 +9,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ $$RSC_SERVER_ACTION_0 ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", $$RSC_SERVER_ACTION_0); +registerServerReference($$RSC_SERVER_ACTION_0, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js index 2120d3e3a01f5..7a4b446a6b6c7 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js @@ -4,7 +4,7 @@ import deleteFromDb from 'db'; const v1 = 'v1'; export function Item({ id1, id2 }) { const v2 = id2; - const deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + const deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, v2 ])); @@ -17,7 +17,7 @@ export async function $$RSC_SERVER_ACTION_0($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_1); } const f = (x)=>{ - var g = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + var g = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ x ])); }; @@ -26,7 +26,7 @@ export async function $$RSC_SERVER_ACTION_1($$ACTION_CLOSURE_BOUND, y, ...z) { return $$ACTION_ARG_0 + y + z[0]; } const g = (x)=>{ - f = registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ + f = registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ x ])); }; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js index 4a51123215120..dd77088277017 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","ab21efdafbe611287bc25c0462b1e0510d13e48b":"foo","ac840dcaf5e8197cb02b7f3a43c119b7a770b272":"bar"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +export const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() {} const bar = async ()=>{}; export { bar }; @@ -9,5 +9,5 @@ ensureServerEntryExports([ foo, bar ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); -registerServerReference("ac840dcaf5e8197cb02b7f3a43c119b7a770b272", bar); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); +registerServerReference(bar, "ac840dcaf5e8197cb02b7f3a43c119b7a770b272", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js index 5bed1099b5052..b3083ea4e8eb1 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js @@ -5,13 +5,13 @@ const v1 = 'v1'; export function Item({ id1, id2 }) { const v2 = id2; return <> - - ; } -export const action = withValidate(registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1)); +export const action = withValidate(registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null)); export async function $$RSC_SERVER_ACTION_1() {} diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js index c12b50b3bd560..7d761f618f36c 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js @@ -8,4 +8,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js index b62e7541fba26..9f53ba95b064f 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js @@ -4,7 +4,7 @@ import { validator, another } from 'auth'; const x = 1; export default function Page() { const y = 1; - return ; } @@ -12,7 +12,7 @@ export async function $$RSC_SERVER_ACTION_1($$ACTION_CLOSURE_BOUND, z) { var [$$ACTION_ARG_0] = await decryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$ACTION_CLOSURE_BOUND); return x + $$ACTION_ARG_0 + z; } -validator(registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2)); +validator(registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null)); export async function $$RSC_SERVER_ACTION_2() {} -another(validator(registerServerReference("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", $$RSC_SERVER_ACTION_3))); +another(validator(registerServerReference($$RSC_SERVER_ACTION_3, "9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", null))); export async function $$RSC_SERVER_ACTION_3() {} diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js index 93f4eab209ffc..55c9df4878f4e 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js @@ -1,9 +1,9 @@ /* __next_internal_action_entry_do_not_use__ {"1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91":"$$RSC_SERVER_ACTION_2","6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","c18c215a6b7cdc64bf709f3a714ffdef1bf9651d":"default","f14702b5a021dd117f7ec7a3c838f397c2046d3b":"action"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; import { validator } from 'auth'; -export const action = validator(registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0)); +export const action = validator(registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null)); export async function $$RSC_SERVER_ACTION_0() {} -export default $$RSC_SERVER_ACTION_1 = validator(registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2)); +export default $$RSC_SERVER_ACTION_1 = validator(registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null)); var $$RSC_SERVER_ACTION_1; export async function $$RSC_SERVER_ACTION_2() {} import { ensureServerEntryExports } from "private-next-rsc-action-validate"; @@ -11,5 +11,5 @@ ensureServerEntryExports([ action, $$RSC_SERVER_ACTION_1 ]); -registerServerReference("f14702b5a021dd117f7ec7a3c838f397c2046d3b", action); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", $$RSC_SERVER_ACTION_1); +registerServerReference(action, "f14702b5a021dd117f7ec7a3c838f397c2046d3b", null); +registerServerReference($$RSC_SERVER_ACTION_1, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js index f73a284625cf8..41a6df665af0c 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js @@ -1,11 +1,11 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","90b5db271335765a4b0eab01f044b381b5ebd5cd":"$$RSC_SERVER_ACTION_1"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; export default function Page({ foo, x, y }) { - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ x ])); action.bind(null, foo[0], foo[1], foo.x, foo[y]); - const action2 = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + const action2 = registerServerReference($$RSC_SERVER_ACTION_1,"90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ x ])); action2.bind(null, foo[0], foo[1], foo.x, foo[y]); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js index 90bfd42b0bd06..4f9cc41dc2e07 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js @@ -1,7 +1,7 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; export default function Page({ foo, x, y }) { - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ foo ])); } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js index ce89937de185a..9573b61ddf9c3 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js @@ -7,7 +7,7 @@ export function Item({ id1, id2 }) { id1++; return ; })(); - var deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, id2 ])); @@ -26,7 +26,7 @@ export function Item2({ id1, id2 }) { id1++; temp.push(); return temp; - var deleteItem = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ id1, id2 ])); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js index f49071af4a4ef..93fb9da457e42 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js @@ -1,7 +1,7 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; const noop = (action)=>action; -export const log = noop(registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0)); +export const log = noop(registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null)); export async function $$RSC_SERVER_ACTION_0(data) { console.log(data); } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js index af4b630208586..d60eb618c1027 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js @@ -3,24 +3,24 @@ // 2. Actual action functions should be renamed to `$$ACTION_...` and got exported. /* __next_internal_action_entry_do_not_use__ {"1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91":"$$RSC_SERVER_ACTION_2","6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","90b5db271335765a4b0eab01f044b381b5ebd5cd":"$$RSC_SERVER_ACTION_1","9ed0cc47abc4e1c64320cf42b74ae60b58c40f00":"$$RSC_SERVER_ACTION_3","a9b2939c1f39073a6bed227fd20233064c8b7869":"$$RSC_SERVER_ACTION_4"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -var foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +var foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() { console.log(1); } export { foo }; -export var bar = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1); +export var bar = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null); export async function $$RSC_SERVER_ACTION_1() { console.log(2); } -export default registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2); +export default registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null); export async function $$RSC_SERVER_ACTION_2() { console.log(3); } -export const qux = registerServerReference("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", $$RSC_SERVER_ACTION_3); +export const qux = registerServerReference($$RSC_SERVER_ACTION_3, "9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", null); export async function $$RSC_SERVER_ACTION_3() { console.log(4); } -export const quux = registerServerReference("a9b2939c1f39073a6bed227fd20233064c8b7869", $$RSC_SERVER_ACTION_4); +export const quux = registerServerReference($$RSC_SERVER_ACTION_4, "a9b2939c1f39073a6bed227fd20233064c8b7869", null); export async function $$RSC_SERVER_ACTION_4() { console.log(5); } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js index ddc41f54db012..f2ef81a4cecf0 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; let a, f; function Comp(b, c, ...g) { - return registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ + return registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ b, c, g @@ -24,7 +24,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { window }); console.log(a, $$ACTION_ARG_0, action2); - var action2 = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action2 = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ $$ACTION_ARG_1, d, f, @@ -32,7 +32,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { ])); return [ action2, - registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ action2, $$ACTION_ARG_1, d diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js index 64600d3ab41c6..29265f8485ba7 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"28baf972d345b86b747ad0df73d75a0088a42214":"dec","6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","c18c215a6b7cdc64bf709f3a714ffdef1bf9651d":"default"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export const dec = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +export const dec = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0(value) { return value - 1; } @@ -11,5 +11,5 @@ ensureServerEntryExports([ dec, dec ]); -registerServerReference("28baf972d345b86b747ad0df73d75a0088a42214", dec); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", dec); +registerServerReference(dec, "28baf972d345b86b747ad0df73d75a0088a42214", null); +registerServerReference(dec, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js index 6062a67476b01..443d04812d7e1 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js @@ -8,4 +8,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ myAction ]); -registerServerReference("e10665baac148856374b2789aceb970f66fec33e", myAction); +registerServerReference(myAction, "e10665baac148856374b2789aceb970f66fec33e", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js index 165126a4beca4..ffc86c3419dd8 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; let a, f; export async function action0(b, c, ...g) { - return registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ + return registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ b, c, g @@ -24,7 +24,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { window }); console.log(a, $$ACTION_ARG_0, action2); - var action2 = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action2 = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ $$ACTION_ARG_1, d, f, @@ -32,7 +32,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { ])); return [ action2, - registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ action2, $$ACTION_ARG_1, d @@ -43,4 +43,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ action0 ]); -registerServerReference("0090eaf4e1f08a2d94f6be401e54a2ded399b87c", action0); +registerServerReference(action0, "0090eaf4e1f08a2d94f6be401e54a2ded399b87c", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js index 80696045aad85..e4c3902986354 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js @@ -21,5 +21,5 @@ ensureServerEntryExports([ action, action2 ]); -registerServerReference("f14702b5a021dd117f7ec7a3c838f397c2046d3b", action); -registerServerReference("abf760c735ba66c4c26a2913864dd7e28fb88a91", action2); \ No newline at end of file +registerServerReference(action, "f14702b5a021dd117f7ec7a3c838f397c2046d3b", null); +registerServerReference(action2, "abf760c735ba66c4c26a2913864dd7e28fb88a91", null); \ No newline at end of file diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js index c52017e565570..3d03a4fcc3855 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js @@ -16,7 +16,7 @@ export function Component() { current: 1 } }; - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ data, baz.value, foo diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js index 746ab409954c7..d946877ad2236 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js @@ -5,7 +5,7 @@ const v = 'world'; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function fn() { return 'hello, ' + v; }); -var fn = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +var fn = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); export async function Component() { const data = await fn(); return
{data}
; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js index f3b72b54f2074..dd2c15cd89a78 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js @@ -4,4 +4,4 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function foo() { return 'data'; }); -export var foo = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export var foo = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js index 19215b7828c63..c8abbfed26710 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js @@ -4,4 +4,4 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function() { return 'data'; }); -export const my_fn = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export const my_fn = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js index 3bef6468a5e06..46263566f62ed 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js @@ -4,8 +4,8 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function foo() { return 'data A'; }); -export var foo = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export var foo = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); export var $$RSC_SERVER_CACHE_1 = $$cache__("default", "951c375b4a6a6e89d67b743ec5808127cfde405d", async function bar() { return 'data B'; }); -export var bar = registerServerReference("951c375b4a6a6e89d67b743ec5808127cfde405d", $$RSC_SERVER_CACHE_1); +export var bar = registerServerReference($$RSC_SERVER_CACHE_1, "951c375b4a6a6e89d67b743ec5808127cfde405d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js index 2dc9d2c4832c0..cd308c806a2bc 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js @@ -4,7 +4,7 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function fn() { return 'foo'; }); -var fn = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +var fn = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); async function Component() { const data = await fn(); return
{data}
; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js index 9f5015d001045..b0b725ebaa0b0 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js @@ -4,4 +4,4 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("x", "3128060c414d59f8552e4788b846c0d2b7f74743", async function foo() { return 'data'; }); -export var foo = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export var foo = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js index 5090febe8d7f5..1ca03b07bec91 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js @@ -5,7 +5,7 @@ export async function b() {} export async function c() {} function d() {} function Foo() { - var e = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); + var e = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); } export async function $$RSC_SERVER_ACTION_0() {} import { ensureServerEntryExports } from "private-next-rsc-action-validate"; @@ -14,6 +14,6 @@ ensureServerEntryExports([ b, c ]); -registerServerReference("6e7bc104e4d6e7fda190c4a51be969cfd0be6d6d", a); -registerServerReference("d1f7eb64271d7c601dfef7d4d7053de1c2ca4338", b); -registerServerReference("1ab723c80dcca470e0410b4b2a2fc2bf21f41476", c); +registerServerReference(a, "6e7bc104e4d6e7fda190c4a51be969cfd0be6d6d", null); +registerServerReference(b, "d1f7eb64271d7c601dfef7d4d7053de1c2ca4338", null); +registerServerReference(c, "1ab723c80dcca470e0410b4b2a2fc2bf21f41476", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js index 490d75c78c75f..df3c005f70cc3 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js @@ -4,7 +4,7 @@ import deleteFromDb from 'db'; const v1 = 'v1'; export function Item({ id1, id2, id3, id4 }) { const v2 = id2; - var deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, v2, id3, diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js index b9e4ca71cad96..d25de0bface7c 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js @@ -19,7 +19,7 @@ export function y(p, [p1, { p2 }], ...p3) { if (true) { const f8 = 1; } - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ f2, f11, p, diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js index 50556a98092c0..754dacb16650a 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; import deleteFromDb from 'db'; export function Item1(product, foo, bar) { - const a = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + const a = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ product, foo, bar @@ -14,7 +14,7 @@ export async function $$RSC_SERVER_ACTION_0($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_0.id, $$ACTION_ARG_0?.foo, $$ACTION_ARG_0.bar.baz, $$ACTION_ARG_0[$$ACTION_ARG_1, $$ACTION_ARG_2]); } export function Item2(product, foo, bar) { - var deleteItem2 = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + var deleteItem2 = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ product, foo, bar @@ -26,7 +26,7 @@ export async function $$RSC_SERVER_ACTION_1($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_0.id, $$ACTION_ARG_0?.foo, $$ACTION_ARG_0.bar.baz, $$ACTION_ARG_0[$$ACTION_ARG_1, $$ACTION_ARG_2]); } export function Item3(product, foo, bar) { - const deleteItem3 = registerServerReference("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", $$RSC_SERVER_ACTION_3).bind(null, encryptActionBoundArgs("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", [ + const deleteItem3 = registerServerReference($$RSC_SERVER_ACTION_3, "9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", null).bind(null, encryptActionBoundArgs("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", [ product, foo, bar @@ -38,7 +38,7 @@ export async function $$RSC_SERVER_ACTION_3($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_0.id, $$ACTION_ARG_0?.foo, $$ACTION_ARG_0.bar.baz, $$ACTION_ARG_0[$$ACTION_ARG_1, $$ACTION_ARG_2]); } export function Item4(product, foo, bar) { - const deleteItem4 = registerServerReference("a9b2939c1f39073a6bed227fd20233064c8b7869", $$RSC_SERVER_ACTION_4).bind(null, encryptActionBoundArgs("a9b2939c1f39073a6bed227fd20233064c8b7869", [ + const deleteItem4 = registerServerReference($$RSC_SERVER_ACTION_4, "a9b2939c1f39073a6bed227fd20233064c8b7869", null).bind(null, encryptActionBoundArgs("a9b2939c1f39073a6bed227fd20233064c8b7869", [ product, foo, bar diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js index b3875434a874c..4a80bff6cc40e 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -var myAction = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +var myAction = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0(a, b, c) { // comment 'use strict'; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js index f9bf82a68ed6f..b64224de832ca 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js @@ -13,6 +13,6 @@ ensureServerEntryExports([ bar, qux ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); -registerServerReference("050e3854b72b19e3c7e3966a67535543a90bf7e0", bar); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", qux); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); +registerServerReference(bar, "050e3854b72b19e3c7e3966a67535543a90bf7e0", null); +registerServerReference(qux, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/lerna.json b/lerna.json index 63e98d6a1b728..e6496bf8d6d28 100644 --- a/lerna.json +++ b/lerna.json @@ -16,5 +16,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "15.0.0-canary.177" + "version": "15.0.0-canary.178" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index bc2ca3cad0c1a..e4bf4964eb866 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index 03a486094a9dc..0d9323e08bfcf 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "ESLint configuration used by Next.js.", "main": "index.js", "license": "MIT", @@ -10,7 +10,7 @@ }, "homepage": "https://nextjs.org/docs/app/building-your-application/configuring/eslint#eslint-config", "dependencies": { - "@next/eslint-plugin-next": "15.0.0-canary.177", + "@next/eslint-plugin-next": "15.0.0-canary.178", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index 07113c24513d7..7c0d01e8f5713 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "license": "MIT", diff --git a/packages/font/package.json b/packages/font/package.json index 68896a7359655..afa6098711d0c 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index e7cabfd8e9178..491ce81f50a79 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 51b0bf84d356f..aaa07f8c13cff 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.input.tsx b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.input.tsx new file mode 100644 index 0000000000000..82796fa7ecf09 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.input.tsx @@ -0,0 +1,6 @@ +import { cookies } from 'next/headers' + +export type Cookie = ReturnType +export function foo(c: ReturnType) { + return c +} diff --git a/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.output.tsx b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.output.tsx new file mode 100644 index 0000000000000..b77bd963c1c11 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.output.tsx @@ -0,0 +1,7 @@ +import { cookies } from 'next/headers' + +export type Cookie = Awaited> +export function foo(c: Awaited>) { + return c +} + diff --git a/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts b/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts index 64c910fc5402b..9c1ad6feab2cd 100644 --- a/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts +++ b/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts @@ -205,6 +205,42 @@ export function transformDynamicAPI( } } }) + + // Handle type usage of async API, e.g. `type Cookie = ReturnType` + // convert it to `type Cookie = Awaited>` + root + .find(j.TSTypeReference, { + typeName: { + type: 'Identifier', + name: 'ReturnType', + }, + }) + .forEach((path) => { + const typeParam = path.node.typeParameters?.params[0] + + // Check if the ReturnType is for 'cookies' + if ( + typeParam && + j.TSTypeQuery.check(typeParam) && + j.Identifier.check(typeParam.exprName) && + typeParam.exprName.name === asyncRequestApiName + ) { + // Replace ReturnType with Awaited> + const awaitedTypeReference = j.tsTypeReference( + j.identifier('Awaited'), + j.tsTypeParameterInstantiation([ + j.tsTypeReference( + j.identifier('ReturnType'), + j.tsTypeParameterInstantiation([typeParam]) + ), + ]) + ) + + j(path).replaceWith(awaitedTypeReference) + + modified = true + } + }) } const isClientComponent = determineClientDirective(root, j) diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 04cd5692c0409..c8e90b6237d95 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 57f863ce69b47..7975b4c0554bf 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index 33b8323206b3d..c7734267a3501 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 2d7b80389af03..35ab237abea9b 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index af227f1ae802b..2cc73f7efe83d 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 58d1e7eb0dcda..d552ba71435ec 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "private": true, "scripts": { "clean": "node ../../scripts/rm.mjs native", diff --git a/packages/next/package.json b/packages/next/package.json index d0552565830e6..eab33dd9618d7 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -95,7 +95,7 @@ ] }, "dependencies": { - "@next/env": "15.0.0-canary.177", + "@next/env": "15.0.0-canary.178", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.13", "busboy": "1.6.0", @@ -159,11 +159,11 @@ "@jest/types": "29.5.0", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "15.0.0-canary.177", - "@next/polyfill-module": "15.0.0-canary.177", - "@next/polyfill-nomodule": "15.0.0-canary.177", - "@next/react-refresh-utils": "15.0.0-canary.177", - "@next/swc": "15.0.0-canary.177", + "@next/font": "15.0.0-canary.178", + "@next/polyfill-module": "15.0.0-canary.178", + "@next/polyfill-nomodule": "15.0.0-canary.178", + "@next/react-refresh-utils": "15.0.0-canary.178", + "@next/swc": "15.0.0-canary.178", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.41.2", "@swc/core": "1.7.0-nightly-20240714.1", diff --git a/packages/next/src/build/collect-build-traces.ts b/packages/next/src/build/collect-build-traces.ts index 498aced6a9922..75639427ed0cf 100644 --- a/packages/next/src/build/collect-build-traces.ts +++ b/packages/next/src/build/collect-build-traces.ts @@ -119,6 +119,7 @@ export async function collectBuildTraces({ let turbotraceOutputPath: string | undefined let turbotraceFiles: string[] | undefined turboTasksForTrace = bindings.turbo.createTurboTasks( + distDir, (config.experimental.turbotrace?.memoryLimit ?? TURBO_TRACE_DEFAULT_MEMORY_LIMIT) * 1024 * diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index 1f2ab770fea3f..5eba2e12fde4f 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -1379,6 +1379,7 @@ export default async function build( config.experimental?.turbo?.root || config.outputFileTracingRoot || dir, + distDir, nextConfig: config, jsConfig: await getTurbopackJsConfig(dir, config), watch: { diff --git a/packages/next/src/build/swc/generated-native.d.ts b/packages/next/src/build/swc/generated-native.d.ts index 0921b0b0c2e2a..2c9def68d3b7b 100644 --- a/packages/next/src/build/swc/generated-native.d.ts +++ b/packages/next/src/build/swc/generated-native.d.ts @@ -103,7 +103,7 @@ export interface NapiProjectOptions { * next.config's distDir. Project initialization occurs eariler than * deserializing next.config, so passing it as separate option. */ - distDir?: string + distDir: string /** Filesystem watcher options. */ watch: NapiWatchOptions /** The contents of next.config.js, serialized to JSON. */ @@ -363,11 +363,12 @@ export interface NapiRewrite { missing?: Array } export function createTurboTasks( + outputPath: string, memoryLimit?: number | undefined | null ): ExternalObject export function runTurboTracing( options: Buffer, - turboTasks?: ExternalObject | undefined | null + turboTasks: ExternalObject ): Promise> export function getTargetTriple(): string export function initHeapProfiler(): ExternalObject diff --git a/packages/next/src/build/swc/index.ts b/packages/next/src/build/swc/index.ts index 06eb571c85afd..0b35aee09bd5c 100644 --- a/packages/next/src/build/swc/index.ts +++ b/packages/next/src/build/swc/index.ts @@ -1054,6 +1054,7 @@ async function loadWasm(importPath = '') { Log.error('Wasm binding does not support trace yet') }, createTurboTasks: function ( + _outputPath: string, _memoryLimit?: number | undefined ): ExternalObject { throw new Error( @@ -1234,8 +1235,11 @@ function loadNative(importPath?: string) { turboTasks ) }, - createTurboTasks(memoryLimit?: number): ExternalObject { - return bindings.createTurboTasks(memoryLimit) + createTurboTasks( + outputPath: string, + memoryLimit?: number + ): ExternalObject { + return bindings.createTurboTasks(outputPath, memoryLimit) }, createProject: bindingToApi(customBindings ?? bindings, false), startTurbopackTraceServer(traceFilePath) { diff --git a/packages/next/src/build/swc/types.ts b/packages/next/src/build/swc/types.ts index 69d99816e1645..76eaf9a02e112 100644 --- a/packages/next/src/build/swc/types.ts +++ b/packages/next/src/build/swc/types.ts @@ -6,7 +6,10 @@ export interface Binding { isWasm: boolean turbo: { startTrace(options: any, turboTasks: ExternalObject): any - createTurboTasks(memoryLimit?: number): ExternalObject + createTurboTasks( + outputPath: string, + memoryLimit?: number + ): ExternalObject createProject( options: ProjectOptions, turboEngineOptions?: TurboEngineOptions @@ -320,6 +323,11 @@ export interface ProjectOptions { */ projectPath: string + /** + * The path to the .next directory. + */ + distDir: string + /** * The next.config.js contents. */ diff --git a/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts b/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts index 38e54b9effa5b..6adc513bd1c90 100644 --- a/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts +++ b/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts @@ -2,6 +2,7 @@ // imported by the server. export { callServer } from 'next/dist/client/app-call-server' +export { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' // A noop wrapper to let the Flight client create the server reference. // See also: https://github.com/facebook/react/pull/26632 @@ -16,5 +17,3 @@ export const createServerReference = ( : // eslint-disable-next-line import/no-extraneous-dependencies require('react-server-dom-webpack/client')) as typeof import('react-server-dom-webpack/client') ).createServerReference - -export const findSourceMapURL = undefined diff --git a/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts b/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts index 642d0293568bd..e8140f2ffac04 100644 --- a/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts +++ b/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts @@ -1,6 +1,2 @@ /* eslint-disable import/no-extraneous-dependencies */ -import { registerServerReference as flightRegisterServerReference } from 'react-server-dom-webpack/server.edge' - -export function registerServerReference(id: string, action: any) { - return flightRegisterServerReference(action, id, null) -} +export { registerServerReference } from 'react-server-dom-webpack/server.edge' diff --git a/packages/next/src/client/app-find-source-map-url.ts b/packages/next/src/client/app-find-source-map-url.ts new file mode 100644 index 0000000000000..de3c4a1792ccd --- /dev/null +++ b/packages/next/src/client/app-find-source-map-url.ts @@ -0,0 +1,4 @@ +// TODO: Will be implemented later. +export function findSourceMapURL(_filename: string): string | null { + return null +} diff --git a/packages/next/src/client/app-index.tsx b/packages/next/src/client/app-index.tsx index bd5f0a789174b..eb8964d70a705 100644 --- a/packages/next/src/client/app-index.tsx +++ b/packages/next/src/client/app-index.tsx @@ -20,6 +20,9 @@ import type { InitialRSCPayload } from '../server/app-render/types' import { createInitialRouterState } from './components/router-reducer/create-initial-router-state' import { MissingSlotContext } from '../shared/lib/app-router-context.shared-runtime' +// Importing from dist so that we can define an alias if needed. +import { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' + /// const appElement: HTMLElement | Document | null = document @@ -140,6 +143,7 @@ const readable = new ReadableStream({ const initialServerResponse = createFromReadableStream(readable, { callServer, + findSourceMapURL, }) // React overrides `.then` and doesn't return a new promise chain, diff --git a/packages/next/src/client/components/request-async-storage.external.ts b/packages/next/src/client/components/request-async-storage.external.ts index c84d87eb142bd..d7a8852b1c315 100644 --- a/packages/next/src/client/components/request-async-storage.external.ts +++ b/packages/next/src/client/components/request-async-storage.external.ts @@ -6,11 +6,11 @@ import type { ReadonlyRequestCookies } from '../../server/web/spec-extension/ada // Share the instance module in the next-shared layer import { requestAsyncStorage } from './request-async-storage-instance' with { 'turbopack-transition': 'next-shared' } -import type { DeepReadonly } from '../../shared/lib/deep-readonly' import type { AfterContext } from '../../server/after/after-context' import type { ServerComponentsHmrCache } from '../../server/response-cache' import { cacheAsyncStorage } from '../../server/app-render/cache-async-storage.external' +import { prerenderAsyncStorage } from '../../server/app-render/prerender-async-storage.external' export interface RequestStore { /** @@ -34,10 +34,6 @@ export interface RequestStore { readonly cookies: ReadonlyRequestCookies readonly mutableCookies: ResponseCookies readonly draftMode: DraftModeProvider - readonly reactLoadableManifest: DeepReadonly< - Record - > - readonly assetPrefix: string readonly afterContext: AfterContext | undefined readonly isHmrRefresh?: boolean readonly serverComponentsHmrCache?: ServerComponentsHmrCache @@ -48,6 +44,13 @@ export type RequestAsyncStorage = AsyncLocalStorage export { requestAsyncStorage } export function getExpectedRequestStore(callingExpression: string) { + const prerenderStore = prerenderAsyncStorage.getStore() + if (prerenderStore) { + // This should not happen because we should have checked it already. + throw new Error( + `\`${callingExpression}\` cannot be called inside a prerender. This is a bug in Next.js.` + ) + } const store = requestAsyncStorage.getStore() if (store) return store const cacheStore = cacheAsyncStorage.getStore() diff --git a/packages/next/src/client/components/router-reducer/fetch-server-response.ts b/packages/next/src/client/components/router-reducer/fetch-server-response.ts index 4fa93362a23ee..53b508544a06f 100644 --- a/packages/next/src/client/components/router-reducer/fetch-server-response.ts +++ b/packages/next/src/client/components/router-reducer/fetch-server-response.ts @@ -33,6 +33,9 @@ import { type NormalizedFlightData, } from '../../flight-data-helpers' +// Importing from dist so that we can define an alias if needed. +import { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' + export interface FetchServerResponseOptions { readonly flightRouterState: FlightRouterState readonly nextUrl: string | null @@ -208,9 +211,7 @@ export async function fetchServerResponse( // Handle the `fetch` readable stream that can be unwrapped by `React.use`. const response: NavigationFlightResponse = await createFromFetch( Promise.resolve(res), - { - callServer, - } + { callServer, findSourceMapURL } ) if (buildId !== response.b) { diff --git a/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts b/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts index 5d599c49c6265..13fb34bfdce09 100644 --- a/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts +++ b/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts @@ -10,6 +10,10 @@ import { NEXT_URL, RSC_CONTENT_TYPE_HEADER, } from '../../app-router-headers' + +// Importing from dist so that we can define an alias if needed. +import { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' + // // eslint-disable-next-line import/no-extraneous-dependencies // import { createFromFetch } from 'react-server-dom-webpack/client' // // eslint-disable-next-line import/no-extraneous-dependencies @@ -138,9 +142,7 @@ async function fetchServerAction( if (contentType?.startsWith(RSC_CONTENT_TYPE_HEADER)) { const response: ActionFlightResponse = await createFromFetch( Promise.resolve(res), - { - callServer, - } + { callServer, findSourceMapURL } ) if (location) { @@ -216,6 +218,7 @@ export function serverActionReducer( redirectLocation, redirectType, isPrerender, + revalidatedParts, }) => { // honor the redirect type instead of defaulting to push in case of server actions. if (redirectLocation) { @@ -253,44 +256,10 @@ export function serverActionReducer( ) } - if (redirectLocation) { - const newHref = createHrefFromUrl(redirectLocation, false) - - // Because the RedirectBoundary will trigger a navigation, we need to seed the prefetch cache - // with the FlightData that we got from the server action for the target page, so that it's - // available when the page is navigated to and doesn't need to be re-fetched. - createSeededPrefetchCacheEntry({ - url: redirectLocation, - data: { - flightData, - canonicalUrl: undefined, - couldBeIntercepted: false, - prerendered: false, - postponed: false, - }, - tree: state.tree, - prefetchCache: state.prefetchCache, - nextUrl: state.nextUrl, - kind: isPrerender ? PrefetchKind.FULL : PrefetchKind.AUTO, - }) - - mutable.prefetchCache = state.prefetchCache - // If the action triggered a redirect, we reject the action promise with a redirect - // so that it's handled by RedirectBoundary as we won't have a valid - // action result to resolve the promise with. This will effectively reset the state of - // the component that called the action as the error boundary will remount the tree. - // The status code doesn't matter here as the action handler will have already sent - // a response with the correct status code. - - reject( - getRedirectError( - hasBasePath(newHref) ? removeBasePath(newHref) : newHref, - redirectType || RedirectType.push - ) - ) - - return handleMutable(state, mutable) - } + const actionRevalidated = + revalidatedParts.paths.length > 0 || + revalidatedParts.tag || + revalidatedParts.cookie for (const normalizedFlightData of flightData) { const { @@ -330,7 +299,7 @@ export function serverActionReducer( ) } - // Handles case where prefetch only returns the router tree patch without rendered components. + // The server sent back RSC data for the server action, so we need to apply it to the cache. if (cacheNodeSeedData !== null) { const rsc = cacheNodeSeedData[1] const cache: CacheNode = createEmptyCacheNode() @@ -339,30 +308,73 @@ export function serverActionReducer( cache.loading = cacheNodeSeedData[3] fillLazyItemsTillLeafWithHead( cache, - // Existing cache is not passed in as `router.refresh()` has to invalidate the entire cache. + // Existing cache is not passed in as server actions have to invalidate the entire cache. undefined, treePatch, cacheNodeSeedData, head ) - await refreshInactiveParallelSegments({ - state, - updatedTree: newTree, - updatedCache: cache, - includeNextUrl: Boolean(nextUrl), - canonicalUrl: mutable.canonicalUrl || state.canonicalUrl, - }) - mutable.cache = cache mutable.prefetchCache = new Map() + + if (actionRevalidated) { + await refreshInactiveParallelSegments({ + state, + updatedTree: newTree, + updatedCache: cache, + includeNextUrl: Boolean(nextUrl), + canonicalUrl: mutable.canonicalUrl || state.canonicalUrl, + }) + } } mutable.patchedTree = newTree currentTree = newTree } - resolve(actionResult) + if (redirectLocation) { + const newHref = createHrefFromUrl(redirectLocation, false) + mutable.canonicalUrl = newHref + + // Because the RedirectBoundary will trigger a navigation, we need to seed the prefetch cache + // with the FlightData that we got from the server action for the target page, so that it's + // available when the page is navigated to and doesn't need to be re-fetched. + // We only do this if the server action didn't revalidate any data, as in that case the + // client cache will be cleared and the data will be re-fetched anyway. + if (!actionRevalidated) { + createSeededPrefetchCacheEntry({ + url: redirectLocation, + data: { + flightData, + canonicalUrl: undefined, + couldBeIntercepted: false, + prerendered: false, + postponed: false, + }, + tree: state.tree, + prefetchCache: state.prefetchCache, + nextUrl: state.nextUrl, + kind: isPrerender ? PrefetchKind.FULL : PrefetchKind.AUTO, + }) + mutable.prefetchCache = state.prefetchCache + } + + // If the action triggered a redirect, the action promise promise will be rejected with + // a redirect so that it's handled by RedirectBoundary as we won't have a valid + // action result to resolve the promise with. This will effectively reset the state of + // the component that called the action as the error boundary will remount the tree. + // The status code doesn't matter here as the action handler will have already sent + // a response with the correct status code. + reject( + getRedirectError( + hasBasePath(newHref) ? removeBasePath(newHref) : newHref, + redirectType || RedirectType.push + ) + ) + } else { + resolve(actionResult) + } return handleMutable(state, mutable) }, diff --git a/packages/next/src/client/components/work-async-storage.external.ts b/packages/next/src/client/components/work-async-storage.external.ts index c35b683abd5f7..1cef37bf04f7f 100644 --- a/packages/next/src/client/components/work-async-storage.external.ts +++ b/packages/next/src/client/components/work-async-storage.external.ts @@ -4,6 +4,7 @@ import type { DynamicServerError } from './hooks-server-context' import type { FetchMetrics } from '../../server/base-http' import type { Revalidate } from '../../server/lib/revalidate' import type { FallbackRouteParams } from '../../server/request/fallback-params' +import type { DeepReadonly } from '../../shared/lib/deep-readonly' // Share the instance module in the next-shared layer import { workAsyncStorage } from './work-async-storage-instance' with { 'turbopack-transition': 'next-shared' } @@ -62,6 +63,11 @@ export interface WorkStore { requestEndedState?: { ended?: boolean } buildId: string + + readonly reactLoadableManifest?: DeepReadonly< + Record + > + readonly assetPrefix?: string } export type WorkAsyncStorage = AsyncLocalStorage diff --git a/packages/next/src/lib/metadata/metadata-boundary.tsx b/packages/next/src/lib/metadata/metadata-boundary.tsx new file mode 100644 index 0000000000000..483d7c72f8a76 --- /dev/null +++ b/packages/next/src/lib/metadata/metadata-boundary.tsx @@ -0,0 +1,48 @@ +'use client' + +import { + METADATA_BOUNDARY_NAME, + VIEWPORT_BOUNDARY_NAME, + OUTLET_BOUNDARY_NAME, +} from './metadata-constants' + +// We use a namespace object to allow us to recover the name of the function +// at runtime even when production bundling/minification is used. +const NameSpace = { + [METADATA_BOUNDARY_NAME]: function ({ + children, + }: { + children: React.ReactNode + }) { + return children + }, + [VIEWPORT_BOUNDARY_NAME]: function ({ + children, + }: { + children: React.ReactNode + }) { + return children + }, + [OUTLET_BOUNDARY_NAME]: function ({ + children, + }: { + children: React.ReactNode + }) { + return children + }, +} + +export const MetadataBoundary = + // We use slice(0) to trick the bundler into not inlining/minifying the function + // so it retains the name inferred from the namespace object + NameSpace[METADATA_BOUNDARY_NAME.slice(0) as typeof METADATA_BOUNDARY_NAME] + +export const ViewportBoundary = + // We use slice(0) to trick the bundler into not inlining/minifying the function + // so it retains the name inferred from the namespace object + NameSpace[VIEWPORT_BOUNDARY_NAME.slice(0) as typeof VIEWPORT_BOUNDARY_NAME] + +export const OutletBoundary = + // We use slice(0) to trick the bundler into not inlining/minifying the function + // so it retains the name inferred from the namespace object + NameSpace[OUTLET_BOUNDARY_NAME.slice(0) as typeof OUTLET_BOUNDARY_NAME] diff --git a/packages/next/src/lib/metadata/metadata-constants.tsx b/packages/next/src/lib/metadata/metadata-constants.tsx new file mode 100644 index 0000000000000..4e973215f282e --- /dev/null +++ b/packages/next/src/lib/metadata/metadata-constants.tsx @@ -0,0 +1,3 @@ +export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__' +export const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__' +export const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__' diff --git a/packages/next/src/lib/metadata/metadata.tsx b/packages/next/src/lib/metadata/metadata.tsx index 79ecb120f4bd1..fd998daf1651c 100644 --- a/packages/next/src/lib/metadata/metadata.tsx +++ b/packages/next/src/lib/metadata/metadata.tsx @@ -49,6 +49,8 @@ export function createMetadataComponents({ errorType, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }: { tree: LoaderTree searchParams: Promise @@ -58,12 +60,18 @@ export function createMetadataComponents({ errorType?: 'not-found' | 'redirect' createServerParamsForMetadata: CreateServerParamsForMetadata workStore: WorkStore + MetadataBoundary: (props: { children: React.ReactNode }) => React.ReactNode + ViewportBoundary: (props: { children: React.ReactNode }) => React.ReactNode }): [React.ComponentType, () => Promise] { function MetadataRoot() { return ( <> - - + + + + + + {appUsingSizeAdjustment ? : null} ) diff --git a/packages/next/src/lib/metadata/resolve-metadata.ts b/packages/next/src/lib/metadata/resolve-metadata.ts index cddf197813380..2d9af13106b9b 100644 --- a/packages/next/src/lib/metadata/resolve-metadata.ts +++ b/packages/next/src/lib/metadata/resolve-metadata.ts @@ -32,7 +32,6 @@ import { import { resolveOpenGraph, resolveTwitter } from './resolvers/resolve-opengraph' import { resolveTitle } from './resolvers/resolve-title' import { resolveAsArrayOrUndefined } from './generate/utils' -import { isClientReference } from '../client-reference' import { getComponentTypeModule, getLayoutOrPageModule, @@ -331,9 +330,6 @@ async function getDefinedViewport( props: any, tracingProps: { route: string } ): Promise { - if (isClientReference(mod)) { - return null - } if (typeof mod.generateViewport === 'function') { const { route } = tracingProps return (parent: ResolvingViewport) => @@ -356,11 +352,6 @@ async function getDefinedMetadata( props: any, tracingProps: { route: string } ): Promise { - // Layer is a client component, we just skip it. It can't have metadata exported. - // Return early to avoid accessing properties error for client references. - if (isClientReference(mod)) { - return null - } if (typeof mod.generateMetadata === 'function') { const { route } = tracingProps return (parent: ResolvingMetadata) => diff --git a/packages/next/src/server/after/after-context.test.ts b/packages/next/src/server/after/after-context.test.ts index c2d93e992440f..df4508f9307e2 100644 --- a/packages/next/src/server/after/after-context.test.ts +++ b/packages/next/src/server/after/after-context.test.ts @@ -498,8 +498,6 @@ const createMockRequestStore = (afterContext: AfterContext): RequestStore => { const partialStore: Partial = { url: { pathname: '/', search: '' }, afterContext: afterContext, - assetPrefix: '', - reactLoadableManifest: {}, draftMode: undefined, isHmrRefresh: false, serverComponentsHmrCache: undefined, diff --git a/packages/next/src/server/after/after-context.ts b/packages/next/src/server/after/after-context.ts index 300423aa3344a..d2816b03c5053 100644 --- a/packages/next/src/server/after/after-context.ts +++ b/packages/next/src/server/after/after-context.ts @@ -141,8 +141,6 @@ function wrapRequestStoreForAfterCallbacks( }, // TODO(after): calling a `cookies.set()` in an after() that's in an action doesn't currently error. mutableCookies: new ResponseCookies(new Headers()), - assetPrefix: requestStore.assetPrefix, - reactLoadableManifest: requestStore.reactLoadableManifest, afterContext: requestStore.afterContext, isHmrRefresh: requestStore.isHmrRefresh, serverComponentsHmrCache: requestStore.serverComponentsHmrCache, diff --git a/packages/next/src/server/after/after.ts b/packages/next/src/server/after/after.ts index 7d24c94c80a12..4e648d021f2c4 100644 --- a/packages/next/src/server/after/after.ts +++ b/packages/next/src/server/after/after.ts @@ -1,4 +1,4 @@ -import { getExpectedRequestStore } from '../../client/components/request-async-storage.external' +import { requestAsyncStorage } from '../../client/components/request-async-storage.external' import { workAsyncStorage } from '../../client/components/work-async-storage.external' import { cacheAsyncStorage } from '../../server/app-render/cache-async-storage.external' import { StaticGenBailoutError } from '../../client/components/static-generation-bailout' @@ -14,7 +14,13 @@ export type AfterCallback = () => T | Promise export function unstable_after(task: AfterTask) { const callingExpression = 'unstable_after' - const requestStore = getExpectedRequestStore(callingExpression) + // TODO: This is not safe. afterContext should move to WorkStore. + const requestStore = requestAsyncStorage.getStore() + if (!requestStore) { + throw new Error( + `\`${callingExpression}\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context` + ) + } const { afterContext } = requestStore if (!afterContext) { diff --git a/packages/next/src/server/app-render/app-render.tsx b/packages/next/src/server/app-render/app-render.tsx index 47578c41893d6..faa23f668ca92 100644 --- a/packages/next/src/server/app-render/app-render.tsx +++ b/packages/next/src/server/app-render/app-render.tsx @@ -118,6 +118,8 @@ import { isRenderInterruptedReason, createDynamicTrackingState, getFirstDynamicReason, + trackAllowedDynamicAccess, + throwIfDisallowedDynamic, type DynamicTrackingState, } from './dynamic-rendering' import { @@ -389,6 +391,8 @@ async function generateDynamicRSCPayload( createServerSearchParamsForMetadata, createServerParamsForMetadata, createMetadataComponents, + MetadataBoundary, + ViewportBoundary, }, getDynamicParamFromSegment, appUsingSizeAdjustment, @@ -415,6 +419,8 @@ async function generateDynamicRSCPayload( appUsingSizeAdjustment, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }) flightData = ( await walkTreeWithFlightRouterState({ @@ -569,6 +575,8 @@ async function getRSCPayload( createServerSearchParamsForMetadata, createServerParamsForMetadata, createMetadataComponents, + MetadataBoundary, + ViewportBoundary, }, requestStore: { url }, workStore, @@ -593,6 +601,8 @@ async function getRSCPayload( appUsingSizeAdjustment, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }) const preloadCallbacks: PreloadCallbacks = [] @@ -668,6 +678,8 @@ async function getErrorRSCPayload( createServerSearchParamsForMetadata, createServerParamsForMetadata, createMetadataComponents, + MetadataBoundary, + ViewportBoundary, }, requestStore: { url }, requestId, @@ -686,6 +698,8 @@ async function getErrorRSCPayload( appUsingSizeAdjustment, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }) const initialHead = ( @@ -1813,7 +1827,6 @@ async function prerenderToStream( onHTMLRenderSSRError ) - let dynamicTracking: null | DynamicTrackingState = null let reactServerPrerenderResult: null | ReactServerPrerenderResult = null const setHeader = (name: string, value: string | string[]) => { res.setHeader(name, value) @@ -1932,7 +1945,7 @@ async function prerenderToStream( // Reset the dynamic IO state for the final render reactServerIsDynamic = false flightController = new AbortController() - dynamicTracking = createDynamicTrackingState( + let dynamicTracking = createDynamicTrackingState( renderOpts.isDebugDynamicAccesses ) @@ -2003,9 +2016,23 @@ async function prerenderToStream( dynamicTracking, } let SSRIsDynamic = false - function SSROnError(err: unknown, errorInfo?: ErrorInfo) { - if (err === abortReason || isPrerenderInterruptedError(err)) { + function SSROnError(err: unknown, errorInfo: ErrorInfo) { + if ( + isAbortReason(err, abortReason) || + isPrerenderInterruptedError(err) + ) { SSRIsDynamic = true + + const componentStack: string | undefined = (errorInfo as any) + .componentStack + if (typeof componentStack === 'string') { + trackAllowedDynamicAccess( + workStore.route, + err, + componentStack, + dynamicTracking + ) + } return } @@ -2057,6 +2084,8 @@ async function prerenderToStream( } ) + throwIfDisallowedDynamic(workStore, dynamicTracking) + const getServerInsertedHTML = makeGetServerInsertedHTML({ polyfills, renderServerInsertedHTML, @@ -2174,7 +2203,7 @@ async function prerenderToStream( // details between the prospective render and the final render let flightController = new AbortController() - dynamicTracking = createDynamicTrackingState( + let dynamicTracking = createDynamicTrackingState( renderOpts.isDebugDynamicAccesses ) @@ -2287,12 +2316,22 @@ async function prerenderToStream( ) function SSROnError(err: unknown, errorInfo?: ErrorInfo) { - if (err === abortReason) { - SSRIsDynamic = true - return PRERENDER_COMPLETE - } else if (isPrerenderInterruptedError(err)) { + if ( + isAbortReason(err, abortReason) || + isPrerenderInterruptedError(err) + ) { SSRIsDynamic = true - return err.digest + const componentStack: string | undefined = (errorInfo as any) + .componentStack + if (typeof componentStack === 'string') { + trackAllowedDynamicAccess( + workStore.route, + err, + componentStack, + dynamicTracking + ) + } + return } return htmlRendererErrorHandler(err, errorInfo) @@ -2362,6 +2401,8 @@ async function prerenderToStream( } } + throwIfDisallowedDynamic(workStore, dynamicTracking) + if (SSRIsDynamic) { // Something dynamic happened in the SSR phase of the render. This could be IO or it could be // a dynamic API like accessing searchParams in a client Page @@ -2431,7 +2472,7 @@ async function prerenderToStream( } } else if (renderOpts.experimental.isRoutePPREnabled) { // We're statically generating with PPR and need to do dynamic tracking - dynamicTracking = createDynamicTrackingState( + let dynamicTracking = createDynamicTrackingState( renderOpts.isDebugDynamicAccesses ) const reactServerPrerenderStore: PrerenderStore = { @@ -2835,7 +2876,7 @@ async function prerenderToStream( serverInsertedHTMLToHead: true, validateRootLayout, }), - dynamicTracking, + dynamicTracking: null, } } catch (finalErr: any) { if (process.env.NODE_ENV === 'development' && isNotFoundError(finalErr)) { @@ -2902,3 +2943,7 @@ export async function warmFlightResponse( chunkListeners.push(r) }) } + +function isAbortReason(err: unknown, abortReason: Error): err is Error { + return err === abortReason +} diff --git a/packages/next/src/server/app-render/create-component-tree.tsx b/packages/next/src/server/app-render/create-component-tree.tsx index 93e1f49d07850..545e421f249f0 100644 --- a/packages/next/src/server/app-render/create-component-tree.tsx +++ b/packages/next/src/server/app-render/create-component-tree.tsx @@ -92,6 +92,7 @@ async function createComponentTreeInternal({ NotFoundBoundary, LayoutRouter, RenderFromTemplateContext, + OutletBoundary, ClientPageRoot, ClientSegmentRoot, createServerSearchParamsForServerPage, @@ -460,15 +461,10 @@ async function createComponentTreeInternal({ if (!MaybeComponent) { return [ actualSegment, - + {layerAssets} {parallelRouteProps.children} - , + , parallelRouteCacheNodeSeedData, loadingData, ] @@ -494,18 +490,13 @@ async function createComponentTreeInternal({ ) { return [ actualSegment, - + {layerAssets} - , + , parallelRouteCacheNodeSeedData, loadingData, ] @@ -570,15 +561,11 @@ async function createComponentTreeInternal({ return [ actualSegment, - - - {pageElement} - {layerAssets} - + {pageElement} + {layerAssets} + + + , parallelRouteCacheNodeSeedData, loadingData, @@ -644,11 +631,7 @@ async function createComponentTreeInternal({ ) segmentNode = ( - + <> @@ -660,33 +643,24 @@ async function createComponentTreeInternal({ {layerAssets} {clientSegment} - + ) } else { segmentNode = ( - + <> {layerAssets} {clientSegment} - + ) } } else { segmentNode = ( - + {layerAssets} {clientSegment} - + ) } } else { @@ -706,11 +680,7 @@ async function createComponentTreeInternal({ // We should instead look into handling the fallback behavior differently in development mode so that it doesn't // rely on the `NotFound` behavior. segmentNode = ( - + <> - + ) } else { segmentNode = ( - + {layerAssets} {serverSegment} - + ) } } @@ -767,28 +732,3 @@ async function MetadataOutlet({ } return null } - -async function Segment({ - isDynamicIO, - isStaticGeneration, - ready, - children, -}: { - isDynamicIO: boolean - isStaticGeneration: boolean - ready?: () => Promise - children: React.ReactNode -}) { - if (isDynamicIO && isStaticGeneration && ready) { - // During static generation we wait for metadata to complete before rendering segments. - // This is slower but it allows us to ensure that metadata is finished before we start - // rendering the segment which can synchronously abort the render in certain circumstances - try { - await ready() - } catch { - // we'll let the MetadataOutlet component render with the page error to let the right - // error boundary catch this error - } - } - return children -} diff --git a/packages/next/src/server/app-render/dynamic-rendering.ts b/packages/next/src/server/app-render/dynamic-rendering.ts index 286751f8a16fa..9e5cf7d2647f7 100644 --- a/packages/next/src/server/app-render/dynamic-rendering.ts +++ b/packages/next/src/server/app-render/dynamic-rendering.ts @@ -36,6 +36,11 @@ import { import { cacheAsyncStorage } from './cache-async-storage.external' import { workAsyncStorage } from '../../client/components/work-async-storage.external' import { makeHangingPromise } from '../dynamic-rendering-utils' +import { + METADATA_BOUNDARY_NAME, + VIEWPORT_BOUNDARY_NAME, + OUTLET_BOUNDARY_NAME, +} from '../../lib/metadata/metadata-constants' const hasPostpone = typeof React.unstable_postpone === 'function' @@ -64,6 +69,20 @@ export type DynamicTrackingState = { * The dynamic accesses that occurred during the render. */ readonly dynamicAccesses: Array + + /** + * disallowedDynamic tracks information about what dynamic accesses + * were not properly scoped. These are prerender failures both at build + * and revalidate time. + */ + readonly disallowedDynamic: { + hasSuspendedDynamic: boolean + hasDynamicMetadata: boolean + hasDynamicViewport: boolean + syncDynamicExpression: string + syncDynamicErrors: Array + dynamicErrors: Array + } } export function createDynamicTrackingState( @@ -72,6 +91,14 @@ export function createDynamicTrackingState( return { isDebugDynamicAccesses, dynamicAccesses: [], + disallowedDynamic: { + hasSuspendedDynamic: false, + hasDynamicMetadata: false, + hasDynamicViewport: false, + syncDynamicExpression: '', + syncDynamicErrors: [], + dynamicErrors: [], + }, } } @@ -115,18 +142,16 @@ export function markCurrentScopeAsDynamic( const prerenderStore = prerenderAsyncStorage.getStore() if (prerenderStore && prerenderStore.type === 'prerender') { - if (prerenderStore.controller) { + if (isDynamicIOPrerender(prerenderStore)) { // We're prerendering the RSC stream with dynamicIO enabled and we need to abort the // current render because something dynamic is being used. // This won't throw so we still need to fall through to determine if/how we handle // this specific dynamic request. - abortRender(prerenderStore.controller, store.route, expression) - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) - } else if (prerenderStore.cacheSignal) { - // we're prerendering with dynamicIO but we don't want to eagerly abort this - // prospective render. We error here to avoid returning anything from whatever - // is trying to access dynamic data. - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) + abortAndThrowOnSynchronousDynamicDataAccess( + store.route, + expression, + prerenderStore + ) } else { postponeWithTracking( store.route, @@ -201,18 +226,16 @@ export function trackDynamicDataAccessed( const prerenderStore = prerenderAsyncStorage.getStore() if (prerenderStore && prerenderStore.type === 'prerender') { - if (prerenderStore.controller) { + if (isDynamicIOPrerender(prerenderStore)) { // We're prerendering the RSC stream with dynamicIO enabled and we need to abort the // current render because something dynamic is being used. // This won't throw so we still need to fall through to determine if/how we handle // this specific dynamic request. - abortRender(prerenderStore.controller, store.route, expression) - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) - } else if (prerenderStore.cacheSignal) { - // we're prerendering with dynamicIO but we don't want to eagerly abort this - // prospective render. We error here to avoid returning anything from whatever - // is trying to access dynamic data. - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) + abortAndThrowOnSynchronousDynamicDataAccess( + store.route, + expression, + prerenderStore + ) } else { postponeWithTracking( store.route, @@ -336,6 +359,12 @@ export function abortAndThrowOnSynchronousDynamicDataAccess( expression: string, prerenderStore: PrerenderStoreModern ): never { + if (prerenderStore.dynamicTracking) { + const disallowedDynamic = prerenderStore.dynamicTracking.disallowedDynamic + if (disallowedDynamic.syncDynamicExpression === '') { + disallowedDynamic.syncDynamicExpression = expression + } + } abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) throw createPrerenderInterruptedError( `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.` @@ -358,29 +387,6 @@ export function Postpone({ reason, route }: PostponeProps): never { postponeWithTracking(route, reason, dynamicTracking) } -function errorWithTracking( - dynamicTracking: null | DynamicTrackingState, - route: string, - expression: string -): never { - if (dynamicTracking) { - dynamicTracking.dynamicAccesses.push({ - // When we aren't debugging, we don't need to create another error for the - // stack trace. - stack: dynamicTracking.isDebugDynamicAccesses - ? new Error().stack - : undefined, - expression, - }) - } - const reason = - `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + - `React throws this special object to indicate where. It should not be caught by ` + - `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error` - - throw createPrerenderInterruptedError(reason) -} - export function postponeWithTracking( route: string, expression: string, @@ -455,25 +461,13 @@ export function isPrerenderInterruptedError( return ( typeof error === 'object' && error !== null && - (error as any).digest === NEXT_PRERENDER_INTERRUPTED + (error as any).digest === NEXT_PRERENDER_INTERRUPTED && + 'name' in error && + 'message' in error && + error instanceof Error ) } -function abortRender( - controller: AbortController, - route: string, - expression: string -): void { - // TODO improve the error message to communicate what it means to have a complete - // prerender that was interrupted - const reason = - `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + - `React throws this special object to indicate where. It should not be caught by ` + - `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error` - - controller.abort(createPrerenderInterruptedError(reason)) -} - export function isRenderInterruptedReason(reason: string) { return reason === NEXT_PRERENDER_INTERRUPTED } @@ -597,3 +591,115 @@ export function useDynamicRouteParams(expression: string) { } } } + +const hasSuspenseRegex = /\n\s+at Suspense \(\)/ +const hasMetadataRegex = new RegExp( + `\\n\\s+at ${METADATA_BOUNDARY_NAME}[\\n\\s]` +) +const hasViewportRegex = new RegExp( + `\\n\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\n\\s]` +) +const hasOutletRegex = new RegExp(`\\n\\s+at ${OUTLET_BOUNDARY_NAME}[\\n\\s]`) + +export function trackAllowedDynamicAccess( + route: string, + thrownValue: Error, + componentStack: string, + dynamicTracking: DynamicTrackingState +) { + const disallowedDynamic = dynamicTracking.disallowedDynamic + if (hasSuspenseRegex.test(componentStack)) { + disallowedDynamic.hasSuspendedDynamic = true + return + } else if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return + } else if (hasMetadataRegex.test(componentStack)) { + // + disallowedDynamic.hasDynamicMetadata = true + return + } else if (hasViewportRegex.test(componentStack)) { + disallowedDynamic.hasDynamicViewport = true + return + } else if (isPrerenderInterruptedError(thrownValue)) { + const syncDynamicExpression = disallowedDynamic.syncDynamicExpression + let message: string + if (syncDynamicExpression) { + message = `Route ${route} used a synchronous Dynamic API: ${syncDynamicExpression}, which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.` + } else { + message = `Route ${route} used a synchronous Dynamic API which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.` + } + const error = createErrorWithComponentStack(message, componentStack) + disallowedDynamic.syncDynamicErrors.push(error) + return + } else if (disallowedDynamic.syncDynamicExpression) { + const message = `Route ${route} used a synchronous Dynamic API: ${disallowedDynamic.syncDynamicExpression}. This particular component may have been dynamic anyway or it may have just not finished before the synchronous Dynamic API was invoked.` + const error = createErrorWithComponentStack(message, componentStack) + disallowedDynamic.syncDynamicErrors.push(error) + return + } else { + // The thrownValue must have been the RENDER_COMPLETE abortReason because the only kinds of errors tracked here are + // interrupts or render completes + const message = `Route ${route} performed an IO operation that was not cached and no Suspense boundary was found to define a fallback UI.` + const error = createErrorWithComponentStack(message, componentStack) + disallowedDynamic.dynamicErrors.push(error) + return + } +} + +function createErrorWithComponentStack( + message: string, + componentStack: string +) { + const error = new Error(message) + error.stack = 'Error: ' + message + componentStack + return error +} + +export function throwIfDisallowedDynamic( + workStore: WorkStore, + dynamicTracking: DynamicTrackingState +): void { + const disallowedDynamic = dynamicTracking.disallowedDynamic + const syncDynamicErrors = disallowedDynamic.syncDynamicErrors + if (syncDynamicErrors.length) { + for (let i = 0; i < syncDynamicErrors.length; i++) { + console.error(syncDynamicErrors[i]) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI. It is best to avoid synchronous Dynamic API access during prerendering.` + ) + } + + const dynamicErrors = disallowedDynamic.dynamicErrors + if (dynamicErrors.length) { + for (let i = 0; i < dynamicErrors.length; i++) { + console.error(dynamicErrors[i]) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} has one or more dynamic components without a defined fallback UI. Render dynamic components inside a Suspense boundary to indicate what the appropriate fallback UI should be.` + ) + } + + if (!disallowedDynamic.hasSuspendedDynamic) { + if (disallowedDynamic.hasDynamicMetadata) { + if (disallowedDynamic.syncDynamicExpression) { + throw new StaticGenBailoutError( + `Route ${workStore.route} used ${disallowedDynamic.syncDynamicExpression} before Next.js could finish rendering metadata.` + ) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} has a dynamic \`generateMetadata\` but nothing else is dynamic. Try updating your \`generateMetadata\` to use cached data or ensure your route has at least one dynamic component in the a Page or Layout.` + ) + } else if (disallowedDynamic.hasDynamicViewport) { + if (disallowedDynamic.syncDynamicExpression) { + throw new StaticGenBailoutError( + `Route ${workStore.route} used ${disallowedDynamic.syncDynamicExpression} before Next.js could finish rendering viewport.` + ) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} has a dynamic \`generateViewport\` but nothing else is dynamic. Try updating your \`generateViewport\` to use cached data or ensure your route has at least one dynamic component in the a Page or Layout.` + ) + } + } +} diff --git a/packages/next/src/server/app-render/entry-base.ts b/packages/next/src/server/app-render/entry-base.ts index 323101d02822b..a048a9b03f9d9 100644 --- a/packages/next/src/server/app-render/entry-base.ts +++ b/packages/next/src/server/app-render/entry-base.ts @@ -33,6 +33,11 @@ import { createMetadataComponents } from '../../lib/metadata/metadata' import { patchFetch as _patchFetch } from '../lib/patch-fetch' // not being used but needs to be included in the client manifest for /_not-found import '../../client/components/error-boundary' +import { + MetadataBoundary, + ViewportBoundary, + OutletBoundary, +} from '../../lib/metadata/metadata-boundary' import { preloadStyle, preloadFont, preconnect } from './rsc/preloads' import { Postpone } from './rsc/postpone' @@ -65,6 +70,9 @@ export { preloadFont, preconnect, Postpone, + MetadataBoundary, + ViewportBoundary, + OutletBoundary, taintObjectReference, ClientPageRoot, ClientSegmentRoot, diff --git a/packages/next/src/server/async-storage/with-request-store.ts b/packages/next/src/server/async-storage/with-request-store.ts index e8f52205e4310..0dd70bad2eba1 100644 --- a/packages/next/src/server/async-storage/with-request-store.ts +++ b/packages/next/src/server/async-storage/with-request-store.ts @@ -42,15 +42,7 @@ function getMutableCookies( } export type WrapperRenderOpts = RequestLifecycleOpts & - Partial< - Pick< - RenderOpts, - | 'ComponentMod' - | 'onUpdateCookies' - | 'assetPrefix' - | 'reactLoadableManifest' - > - > & { + Partial> & { experimental: Pick previewProps?: __ApiPreviewProps } @@ -196,8 +188,6 @@ export const withRequestStore: WithStore = < return cache.draftMode }, - reactLoadableManifest: renderOpts?.reactLoadableManifest || {}, - assetPrefix: renderOpts?.assetPrefix || '', afterContext: createAfterContext(renderOpts), isHmrRefresh, serverComponentsHmrCache: diff --git a/packages/next/src/server/async-storage/with-work-store.ts b/packages/next/src/server/async-storage/with-work-store.ts index 80376a7b77b1a..bdf44074a8dde 100644 --- a/packages/next/src/server/async-storage/with-work-store.ts +++ b/packages/next/src/server/async-storage/with-work-store.ts @@ -2,7 +2,7 @@ import type { WithStore } from './with-store' import type { WorkStore } from '../../client/components/work-async-storage.external' import type { AsyncLocalStorage } from 'async_hooks' import type { IncrementalCache } from '../lib/incremental-cache' -import type { RenderOptsPartial } from '../app-render/types' +import type { RenderOpts } from '../app-render/types' import type { FetchMetric } from '../base-http' import type { RequestLifecycleOpts } from '../base-server' import type { FallbackRouteParams } from '../request/fallback-params' @@ -30,7 +30,7 @@ export type WorkStoreContext = { isServerAction?: boolean pendingWaitUntil?: Promise experimental: Pick< - RenderOptsPartial['experimental'], + RenderOpts['experimental'], 'isRoutePPREnabled' | 'after' | 'dynamicIO' > @@ -49,9 +49,10 @@ export type WorkStoreContext = { // TODO: remove this when we resolve accessing the store outside the execution context store?: WorkStore } & Pick< - // Pull some properties from RenderOptsPartial so that the docs are also + // Pull some properties from RenderOpts so that the docs are also // mirrored. - RenderOptsPartial, + RenderOpts, + | 'assetPrefix' | 'supportsDynamicResponse' | 'isRevalidate' | 'nextExport' @@ -59,7 +60,8 @@ export type WorkStoreContext = { | 'isDebugDynamicAccesses' | 'buildId' > & - Partial + Partial & + Partial> } export const withWorkStore: WithStore = ( @@ -114,6 +116,8 @@ export const withWorkStore: WithStore = ( requestEndedState, isPrefetchRequest, buildId: renderOpts.buildId, + reactLoadableManifest: renderOpts?.reactLoadableManifest || {}, + assetPrefix: renderOpts?.assetPrefix || '', } // TODO: remove this when we resolve accessing the store outside the execution context diff --git a/packages/next/src/server/dev/hot-reloader-turbopack.ts b/packages/next/src/server/dev/hot-reloader-turbopack.ts index 56068bb00d2ab..f35251289c010 100644 --- a/packages/next/src/server/dev/hot-reloader-turbopack.ts +++ b/packages/next/src/server/dev/hot-reloader-turbopack.ts @@ -150,6 +150,7 @@ export async function createHotReloaderTurbopack( opts.nextConfig.experimental.turbo?.root || opts.nextConfig.outputFileTracingRoot || dir, + distDir, nextConfig: opts.nextConfig, jsConfig: await getTurbopackJsConfig(dir, nextConfig), watch: { diff --git a/packages/next/src/server/lib/incremental-cache/index.ts b/packages/next/src/server/lib/incremental-cache/index.ts index 6a44cee910440..62050023c23b8 100644 --- a/packages/next/src/server/lib/incremental-cache/index.ts +++ b/packages/next/src/server/lib/incremental-cache/index.ts @@ -80,7 +80,6 @@ export class IncrementalCache implements IncrementalCacheType { readonly hasDynamicIO?: boolean private readonly locks = new Map>() - private readonly unlocks = new Map Promise>() /** * The revalidate timings for routes. This will source the timings from the @@ -223,28 +222,22 @@ export class IncrementalCache implements IncrementalCacheType { this.cacheHandler?.resetRequestCache?.() } - /** - * @TODO this implementation of locking is brokne. Once a lock is created it - * will always be reused and all future locks will end up being granted - * non-exclusively which is sort of the opposite of what we want with a lock. - */ async lock(cacheKey: string) { let unlockNext: () => Promise = () => Promise.resolve() const existingLock = this.locks.get(cacheKey) if (existingLock) { await existingLock - } else { - const newLock = new Promise((resolve) => { - unlockNext = async () => { - resolve() - } - }) - - this.locks.set(cacheKey, newLock) - this.unlocks.set(cacheKey, unlockNext) } + const newLock = new Promise((resolve) => { + unlockNext = async () => { + resolve() + this.locks.delete(cacheKey) // Remove the lock upon release + } + }) + + this.locks.set(cacheKey, newLock) return unlockNext } diff --git a/packages/next/src/server/lib/patch-fetch.ts b/packages/next/src/server/lib/patch-fetch.ts index 8ae3f84acfb73..7aa84e30b06ce 100644 --- a/packages/next/src/server/lib/patch-fetch.ts +++ b/packages/next/src/server/lib/patch-fetch.ts @@ -729,6 +729,10 @@ export function createPatchedFetcher( } } + // we had response that we determined shouldn't be cached so we return it + // and don't cache it. This also needs to unlock the cache lock we acquired. + await handleUnlock() + return res }) } diff --git a/packages/next/src/server/request/cookies.ts b/packages/next/src/server/request/cookies.ts index 33ffccff98171..c6c0daef43d9b 100644 --- a/packages/next/src/server/request/cookies.ts +++ b/packages/next/src/server/request/cookies.ts @@ -52,7 +52,6 @@ export type UnsafeUnwrappedCookies = ReadonlyRequestCookies export function cookies(): Promise { const callingExpression = 'cookies' - const requestStore = getExpectedRequestStore(callingExpression) const workStore = workAsyncStorage.getStore() const prerenderStore = prerenderAsyncStorage.getStore() const cacheStore = cacheAsyncStorage.getStore() @@ -82,35 +81,41 @@ export function cookies(): Promise { ) } - if (prerenderStore && prerenderStore.type === 'prerender') { - // We are in PPR and/or dynamicIO mode and prerendering - - if (isDynamicIOPrerender(prerenderStore)) { - // We use the controller and cacheSignal as an indication we are in dynamicIO mode. - // When resolving cookies for a prerender with dynamic IO we return a forever promise - // along with property access tracked synchronous cookies. - - // We don't track dynamic access here because access will be tracked when you access - // one of the properties of the cookies object. - return makeDynamicallyTrackedExoticCookies( - workStore.route, - prerenderStore - ) - } else { - // We are prerendering with PPR. We need track dynamic access here eagerly - // to keep continuity with how cookies has worked in PPR without dynamicIO. - // TODO consider switching the semantic to throw on property access instead - postponeWithTracking( - workStore.route, + if (prerenderStore) { + if (prerenderStore.type === 'prerender') { + // We are in PPR and/or dynamicIO mode and prerendering + + if (isDynamicIOPrerender(prerenderStore)) { + // We use the controller and cacheSignal as an indication we are in dynamicIO mode. + // When resolving cookies for a prerender with dynamic IO we return a forever promise + // along with property access tracked synchronous cookies. + + // We don't track dynamic access here because access will be tracked when you access + // one of the properties of the cookies object. + return makeDynamicallyTrackedExoticCookies( + workStore.route, + prerenderStore + ) + } else { + // We are prerendering with PPR. We need track dynamic access here eagerly + // to keep continuity with how cookies has worked in PPR without dynamicIO. + // TODO consider switching the semantic to throw on property access instead + postponeWithTracking( + workStore.route, + callingExpression, + prerenderStore.dynamicTracking + ) + } + } else if (prerenderStore.type === 'prerender-legacy') { + // We are in a legacy static generation mode while prerendering + // We track dynamic access here so we don't need to wrap the cookies in + // individual property access tracking. + throwToInterruptStaticGeneration( callingExpression, - prerenderStore.dynamicTracking + workStore, + cacheStore ) } - } else if (workStore.isStaticGeneration) { - // We are in a legacy static generation mode while prerendering - // We track dynamic access here so we don't need to wrap the cookies in - // individual property access tracking. - throwToInterruptStaticGeneration(callingExpression, workStore, cacheStore) } // We fall through to the dynamic context below but we still track dynamic access // because in dev we can still error for things like using cookies inside a cache context @@ -120,6 +125,8 @@ export function cookies(): Promise { // cookies is being called in a dynamic context const actionStore = actionAsyncStorage.getStore() + const requestStore = getExpectedRequestStore(callingExpression) + let underlyingCookies: ReadonlyRequestCookies // The current implementation of cookies will return Response cookies diff --git a/packages/next/src/server/request/draft-mode.ts b/packages/next/src/server/request/draft-mode.ts index b60e36910cbc9..50864ac1dc0c1 100644 --- a/packages/next/src/server/request/draft-mode.ts +++ b/packages/next/src/server/request/draft-mode.ts @@ -4,6 +4,7 @@ import type { DraftModeProvider } from '../../server/async-storage/draft-mode-pr import { workAsyncStorage } from '../../client/components/work-async-storage.external' import { cacheAsyncStorage } from '../../server/app-render/cache-async-storage.external' +import { prerenderAsyncStorage } from '../../server/app-render/prerender-async-storage.external' import { trackDynamicDataAccessed } from '../app-render/dynamic-rendering' import { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-loger' @@ -35,31 +36,58 @@ export type UnsafeUnwrappedDraftMode = DraftMode export function draftMode(): Promise { const callingExpression = 'draftMode' - const requestStore = getExpectedRequestStore(callingExpression) const workStore = workAsyncStorage.getStore() + const prerenderStore = prerenderAsyncStorage.getStore() + const cacheStore = cacheAsyncStorage.getStore() + + if ( + (cacheStore && + (cacheStore.type === 'cache' || cacheStore.type === 'unstable-cache')) || + (prerenderStore && + (prerenderStore.type === 'prerender' || + prerenderStore.type === 'prerender-legacy')) + ) { + // Return empty draft mode + if ( + process.env.NODE_ENV === 'development' && + !workStore?.isPrefetchRequest + ) { + const route = workStore?.route + return createExoticDraftModeWithDevWarnings(null, route) + } else { + return createExoticDraftMode(null) + } + } + + const requestStore = getExpectedRequestStore(callingExpression) + const cachedDraftMode = CachedDraftModes.get(requestStore.draftMode) + if (cachedDraftMode) { + return cachedDraftMode + } + + let promise if (process.env.NODE_ENV === 'development' && !workStore?.isPrefetchRequest) { const route = workStore?.route - return createExoticDraftModeWithDevWarnings(requestStore.draftMode, route) + promise = createExoticDraftModeWithDevWarnings( + requestStore.draftMode, + route + ) } else { - return createExoticDraftMode(requestStore.draftMode) + promise = createExoticDraftMode(requestStore.draftMode) } + CachedDraftModes.set(requestStore.draftMode, promise) + return promise } interface CacheLifetime {} const CachedDraftModes = new WeakMap>() function createExoticDraftMode( - underlyingProvider: DraftModeProvider + underlyingProvider: null | DraftModeProvider ): Promise { - const cachedDraftMode = CachedDraftModes.get(underlyingProvider) - if (cachedDraftMode) { - return cachedDraftMode - } - const instance = new DraftMode(underlyingProvider) const promise = Promise.resolve(instance) - CachedDraftModes.set(underlyingProvider, promise) Object.defineProperty(promise, 'isEnabled', { get() { @@ -82,17 +110,11 @@ function createExoticDraftMode( } function createExoticDraftModeWithDevWarnings( - underlyingProvider: DraftModeProvider, + underlyingProvider: null | DraftModeProvider, route: undefined | string ): Promise { - const cachedDraftMode = CachedDraftModes.get(underlyingProvider) - if (cachedDraftMode) { - return cachedDraftMode - } - const instance = new DraftMode(underlyingProvider) const promise = Promise.resolve(instance) - CachedDraftModes.set(underlyingProvider, promise) Object.defineProperty(promise, 'isEnabled', { get() { @@ -134,13 +156,16 @@ class DraftMode { /** * @internal - this declaration is stripped via `tsc --stripInternal` */ - private readonly _provider: DraftModeProvider + private readonly _provider: null | DraftModeProvider - constructor(provider: DraftModeProvider) { + constructor(provider: null | DraftModeProvider) { this._provider = provider } get isEnabled() { - return this._provider.isEnabled + if (this._provider !== null) { + return this._provider.isEnabled + } + return false } public enable() { const store = workAsyncStorage.getStore() @@ -150,7 +175,9 @@ class DraftMode { // don't statically generate routes that manipulate draft mode. trackDynamicDataAccessed(store, cacheStore, 'draftMode().enable()') } - return this._provider.enable() + if (this._provider !== null) { + this._provider.enable() + } } public disable() { const store = workAsyncStorage.getStore() @@ -160,7 +187,9 @@ class DraftMode { // don't statically generate routes that manipulate draft mode. trackDynamicDataAccessed(store, cacheStore, 'draftMode().disable()') } - return this._provider.disable() + if (this._provider !== null) { + this._provider.disable() + } } } diff --git a/packages/next/src/server/request/headers.ts b/packages/next/src/server/request/headers.ts index 8a94313be211e..c27dc53d5aecb 100644 --- a/packages/next/src/server/request/headers.ts +++ b/packages/next/src/server/request/headers.ts @@ -57,7 +57,6 @@ export type UnsafeUnwrappedHeaders = ReadonlyHeaders * Read more: [Next.js Docs: `headers`](https://nextjs.org/docs/app/api-reference/functions/headers) */ export function headers(): Promise { - const requestStore = getExpectedRequestStore('headers') const workStore = workAsyncStorage.getStore() const prerenderStore = prerenderAsyncStorage.getStore() const cacheStore = cacheAsyncStorage.getStore() @@ -87,41 +86,44 @@ export function headers(): Promise { ) } - if (prerenderStore && prerenderStore.type === 'prerender') { - // We are in PPR and/or dynamicIO mode and prerendering + if (prerenderStore) { + if (prerenderStore.type === 'prerender') { + // We are in PPR and/or dynamicIO mode and prerendering - if (isDynamicIOPrerender(prerenderStore)) { - // We use the controller and cacheSignal as an indication we are in dynamicIO mode. - // When resolving headers for a prerender with dynamic IO we return a forever promise - // along with property access tracked synchronous headers. + if (isDynamicIOPrerender(prerenderStore)) { + // We use the controller and cacheSignal as an indication we are in dynamicIO mode. + // When resolving headers for a prerender with dynamic IO we return a forever promise + // along with property access tracked synchronous headers. - // We don't track dynamic access here because access will be tracked when you access - // one of the properties of the headers object. - return makeDynamicallyTrackedExoticHeaders( - workStore.route, - prerenderStore - ) - } else { - // We are prerendering with PPR. We need track dynamic access here eagerly - // to keep continuity with how headers has worked in PPR without dynamicIO. - // TODO consider switching the semantic to throw on property access instead - postponeWithTracking( - workStore.route, - 'headers', - prerenderStore.dynamicTracking - ) + // We don't track dynamic access here because access will be tracked when you access + // one of the properties of the headers object. + return makeDynamicallyTrackedExoticHeaders( + workStore.route, + prerenderStore + ) + } else { + // We are prerendering with PPR. We need track dynamic access here eagerly + // to keep continuity with how headers has worked in PPR without dynamicIO. + // TODO consider switching the semantic to throw on property access instead + postponeWithTracking( + workStore.route, + 'headers', + prerenderStore.dynamicTracking + ) + } + } else if (prerenderStore.type === 'prerender-legacy') { + // We are in a legacy static generation mode while prerendering + // We track dynamic access here so we don't need to wrap the headers in + // individual property access tracking. + throwToInterruptStaticGeneration('headers', workStore, cacheStore) } - } else if (workStore.isStaticGeneration) { - // We are in a legacy static generation mode while prerendering - // We track dynamic access here so we don't need to wrap the headers in - // individual property access tracking. - throwToInterruptStaticGeneration('headers', workStore, cacheStore) } // We fall through to the dynamic context below but we still track dynamic access // because in dev we can still error for things like using headers inside a cache context trackDynamicDataInDynamicRender(workStore, cacheStore) } + const requestStore = getExpectedRequestStore('headers') if (process.env.NODE_ENV === 'development' && !workStore?.isPrefetchRequest) { return makeUntrackedExoticHeadersWithDevWarnings( requestStore.headers, diff --git a/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx b/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx index 32eea7fb1c65e..5c6dd47e21359 100644 --- a/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx +++ b/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx @@ -2,7 +2,7 @@ import { preload } from 'react-dom' -import { getExpectedRequestStore } from '../../../client/components/request-async-storage.external' +import { workAsyncStorage } from '../../../client/components/work-async-storage.external' import { encodeURIPath } from '../encode-uri-path' export function PreloadChunks({ @@ -15,13 +15,17 @@ export function PreloadChunks({ return null } - const requestStore = getExpectedRequestStore('next/dynamic preload') + const workStore = workAsyncStorage.getStore() + if (workStore === undefined) { + return null + } + const allFiles = [] // Search the current dynamic call unique key id in react loadable manifest, // and find the corresponding CSS files to preload - if (requestStore.reactLoadableManifest && moduleIds) { - const manifest = requestStore.reactLoadableManifest + if (workStore.reactLoadableManifest && moduleIds) { + const manifest = workStore.reactLoadableManifest for (const key of moduleIds) { if (!manifest[key]) continue const chunks = manifest[key].files @@ -36,7 +40,7 @@ export function PreloadChunks({ return ( <> {allFiles.map((chunk) => { - const href = `${requestStore.assetPrefix}/_next/${encodeURIPath(chunk)}` + const href = `${workStore.assetPrefix}/_next/${encodeURIPath(chunk)}` const isCss = chunk.endsWith('.css') // If it's stylesheet we use `precedence` o help hoist with React Float. // For stylesheets we actually need to render the CSS because nothing else is going to do it so it needs to be part of the component tree. diff --git a/packages/next/types/$$compiled.internal.d.ts b/packages/next/types/$$compiled.internal.d.ts index 7b629c14609f9..c26ba711b7e40 100644 --- a/packages/next/types/$$compiled.internal.d.ts +++ b/packages/next/types/$$compiled.internal.d.ts @@ -21,7 +21,15 @@ declare module 'next/dist/compiled/react-server-dom-turbopack/client.browser' declare module 'next/dist/compiled/react-server-dom-turbopack/server.browser' declare module 'next/dist/compiled/react-server-dom-turbopack/server.edge' declare module 'next/dist/compiled/react-server-dom-turbopack/static.edge' -declare module 'next/dist/client/app-call-server' +declare module 'next/dist/client/app-call-server' { + export function callServer( + actionId: string, + actionArgs: unknown[] + ): Promise +} +declare module 'next/dist/client/app-find-source-map-url' { + export function findSourceMapURL(filename: string): string | null +} declare module 'next/dist/compiled/react-dom/server' declare module 'next/dist/compiled/react-dom/server.edge' declare module 'next/dist/compiled/browserslist' diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index ef5baa6904567..b39a7fbf37f75 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index 257b5e8815b9c..39e7714b348c6 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "15.0.0-canary.177", + "next": "15.0.0-canary.178", "outdent": "0.8.0", "prettier": "2.5.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c2b902067842..fe51b9e4b0b28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -792,7 +792,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../eslint-plugin-next '@rushstack/eslint-patch': specifier: ^1.3.3 @@ -853,7 +853,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-env '@swc/counter': specifier: 0.1.3 @@ -863,7 +863,7 @@ importers: version: 0.5.13 babel-plugin-react-compiler: specifier: '*' - version: 0.0.0-experimental-b4db8c3-20241001 + version: 0.0.0-experimental-27e0f40-20241002 busboy: specifier: 1.6.0 version: 1.6.0 @@ -981,19 +981,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../font '@next/polyfill-module': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../react-refresh-utils '@next/swc': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1612,7 +1612,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next outdent: specifier: 0.8.0 @@ -5953,8 +5953,8 @@ packages: peerDependencies: '@babel/core': 7.22.5 - babel-plugin-react-compiler@0.0.0-experimental-b4db8c3-20241001: - resolution: {integrity: sha512-2qiuysJU65kKm4CznEMxpjvGV4FOlreXlpJwfJrOIqVxyQYL156614vzXFzuPObCsiwJrA5agXoAI9EP8zuvBw==} + babel-plugin-react-compiler@0.0.0-experimental-27e0f40-20241002: + resolution: {integrity: sha512-hMOwSqoI0gxyjgGVhsMqPsVV4bjCqJ2WTUFsQyrk+KAkDqK/o7Th9XRl/xhVApPbE4VzQeiutC60rbBGqNebHQ==} babel-plugin-react-compiler@0.0.0-experimental-c23de8d-20240515: resolution: {integrity: sha512-0XN2gmpT55QtAz5n7d5g91y1AuO9tRhWBaLgCRyc4ExHrlr7+LfxW+YTb3mOwxngkkiggwM8HyYsaEK9MqhnlQ==} @@ -20682,7 +20682,7 @@ snapshots: - supports-color optional: true - babel-plugin-react-compiler@0.0.0-experimental-b4db8c3-20241001: + babel-plugin-react-compiler@0.0.0-experimental-27e0f40-20241002: dependencies: '@babel/generator': 7.2.0 '@babel/types': 7.22.5 diff --git a/test/development/acceptance-app/hydration-error.test.ts b/test/development/acceptance-app/hydration-error.test.ts index 62cba0745e591..1a82c5aa0a5e5 100644 --- a/test/development/acceptance-app/hydration-error.test.ts +++ b/test/development/acceptance-app/hydration-error.test.ts @@ -168,6 +168,7 @@ describe('Error overlay for hydration errors in App router', () => { expect(pseudoHtml).toMatchInlineSnapshot(` "...
+ ... +
" `) } @@ -374,6 +375,7 @@ describe('Error overlay for hydration errors in App router', () => { } else { expect(pseudoHtml).toEqual(outdent` ... + ... + - test }`) @@ -871,10 +873,10 @@ describe('Error overlay for hydration errors in App router', () => { if (isTurbopack) { expect(fullPseudoHtml).toMatchInlineSnapshot(` "... - - - - + + + +
@@ -891,10 +893,10 @@ describe('Error overlay for hydration errors in App router', () => { } else { expect(fullPseudoHtml).toMatchInlineSnapshot(` "... - - - - + + + +
diff --git a/test/development/basic/next-rs-api.test.ts b/test/development/basic/next-rs-api.test.ts index 71e084d64080d..8d57bbc23b95f 100644 --- a/test/development/basic/next-rs-api.test.ts +++ b/test/development/basic/next-rs-api.test.ts @@ -190,6 +190,12 @@ describe('next.rs api', () => { console.log(next.testDir) const nextConfig = await loadConfig(PHASE_DEVELOPMENT_SERVER, next.testDir) const bindings = await loadBindings() + const distDir = path.join( + process.env.NEXT_SKIP_ISOLATE + ? path.resolve(__dirname, '../../..') + : next.testDir, + '.next' + ) project = await bindings.turbo.createProject({ env: {}, jsConfig: { @@ -197,6 +203,7 @@ describe('next.rs api', () => { }, nextConfig: nextConfig, projectPath: next.testDir, + distDir, rootPath: process.env.NEXT_SKIP_ISOLATE ? path.resolve(__dirname, '../../..') : next.testDir, @@ -209,12 +216,7 @@ describe('next.rs api', () => { clientRouterFilters: undefined, config: nextConfig, dev: true, - distDir: path.join( - process.env.NEXT_SKIP_ISOLATE - ? path.resolve(__dirname, '../../..') - : next.testDir, - '.next' - ), + distDir: distDir, fetchCacheKeyPrefix: undefined, hasRewrites: false, middlewareMatchers: undefined, diff --git a/test/e2e/app-dir/actions-simple/README.md b/test/e2e/app-dir/actions-simple/README.md new file mode 100644 index 0000000000000..48ef4c869b7bb --- /dev/null +++ b/test/e2e/app-dir/actions-simple/README.md @@ -0,0 +1,22 @@ +The main purpose of this end-to-end test app is to allow manual testing of +server action source mapping within the React DevTools. + +Until we have properly implemented `findSourceMapURL` in Next.js, this demo only +works with Turbopack. This is because we can mock `findSourceMapURL` for the +test app, as Turbopack generates source map files, whereas Webpack uses +`eval-source-map`. + +For client bundles, the source map files are served directly through +`/_next/static/chunks`, and for server bundles, the source map files are read +from disk and served through the `/source-maps-turbopack` route handler. + +To check the source mapping of server actions, follow these steps: + +1. Run `pnpm next dev --turbo test/e2e/app-dir/actions-simple`. +2. Go to [http://localhost:3000]() or [http://localhost:3000/client](). +3. Open the Components panel of the React DevTools. +4. Select the `Form` element. +5. In the props section, right-click on the `action` prop and select "Go to + definition" (sometimes it needs two tries). +6. You should end up in the Chrome DevTools Sources panel with the `actions.ts` + file open and the cursor at `foo()`. diff --git a/test/e2e/app-dir/actions-simple/actions-simple.test.ts b/test/e2e/app-dir/actions-simple/actions-simple.test.ts new file mode 100644 index 0000000000000..309b4d96eb2a9 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/actions-simple.test.ts @@ -0,0 +1,28 @@ +import { nextTestSetup } from 'e2e-utils' +import { retry } from 'next-test-utils' + +describe('actions-simple', () => { + const { next } = nextTestSetup({ + files: __dirname, + }) + + it('should work with server actions passed to client components', async () => { + const browser = await next.browser('/') + expect(await browser.elementByCss('p').text()).toBe('initial') + await browser.elementByCss('button').click() + + await retry(async () => { + expect(await browser.elementByCss('p').text()).toBe('result') + }) + }) + + it('should work with server actions imported from client components', async () => { + const browser = await next.browser('/client') + expect(await browser.elementByCss('p').text()).toBe('initial') + await browser.elementByCss('button').click() + + await retry(async () => { + expect(await browser.elementByCss('p').text()).toBe('result') + }) + }) +}) diff --git a/test/e2e/app-dir/actions-simple/app/actions.ts b/test/e2e/app-dir/actions-simple/app/actions.ts new file mode 100644 index 0000000000000..d26fc49045e51 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/actions.ts @@ -0,0 +1,5 @@ +'use server' + +export async function foo() { + return 'result' +} diff --git a/test/e2e/app-dir/actions-simple/app/client/page.tsx b/test/e2e/app-dir/actions-simple/app/client/page.tsx new file mode 100644 index 0000000000000..f7f3fb549ed9c --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/client/page.tsx @@ -0,0 +1,15 @@ +'use client' + +import { Form } from '../form' +import { foo } from '../actions' +import Link from 'next/link' + +export default function Page() { + return ( +
+

client component page

+
+ server component page +
+ ) +} diff --git a/test/e2e/app-dir/actions-simple/app/form.tsx b/test/e2e/app-dir/actions-simple/app/form.tsx new file mode 100644 index 0000000000000..0247e612542e0 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/form.tsx @@ -0,0 +1,14 @@ +'use client' + +import { useActionState } from 'react' + +export function Form({ action }: { action: () => Promise }) { + const [result, formAction] = useActionState(action, 'initial') + + return ( + + +

{result}

+ + ) +} diff --git a/test/e2e/app-dir/actions-simple/app/layout.tsx b/test/e2e/app-dir/actions-simple/app/layout.tsx new file mode 100644 index 0000000000000..888614deda3ba --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/layout.tsx @@ -0,0 +1,8 @@ +import { ReactNode } from 'react' +export default function Root({ children }: { children: ReactNode }) { + return ( + + {children} + + ) +} diff --git a/test/e2e/app-dir/actions-simple/app/page.tsx b/test/e2e/app-dir/actions-simple/app/page.tsx new file mode 100644 index 0000000000000..001ad7d42b7d8 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/page.tsx @@ -0,0 +1,13 @@ +import { Form } from './form' +import { foo } from './actions' +import Link from 'next/link' + +export default function Page() { + return ( +
+

server component page

+
+ client component page +
+ ) +} diff --git a/test/e2e/app-dir/actions-simple/app/source-maps-turbopack/route.ts b/test/e2e/app-dir/actions-simple/app/source-maps-turbopack/route.ts new file mode 100644 index 0000000000000..f4d6ef2f0c379 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/source-maps-turbopack/route.ts @@ -0,0 +1,18 @@ +import { readFile } from 'fs/promises' +import { NextRequest } from 'next/server' + +// This is for mocking findSourceMapURL until we've implemented it properly. +export async function GET(request: NextRequest): Promise { + const filename = request.nextUrl.searchParams.get('filename') + + try { + // It's not safe not to sanitize the query param, but it's just for a test. + const sourceMapContents = await readFile(`${filename}.map`) + + return new Response(sourceMapContents) + } catch (error) { + console.error(error) + } + + return new Response(null, { status: 404 }) +} diff --git a/test/e2e/app-dir/actions-simple/find-source-map-url-turbopack-mock.ts b/test/e2e/app-dir/actions-simple/find-source-map-url-turbopack-mock.ts new file mode 100644 index 0000000000000..429300b9e3003 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/find-source-map-url-turbopack-mock.ts @@ -0,0 +1,10 @@ +export function findSourceMapURL(filename: string): string | null { + if (filename.startsWith(`${document.location.origin}/_next/static`)) { + return `${filename}.map` + } + + const url = new URL('/source-maps-turbopack', document.location.origin) + url.searchParams.set('filename', filename) + + return url.href +} diff --git a/test/e2e/app-dir/actions-simple/find-source-map-url-webpack-mock.ts b/test/e2e/app-dir/actions-simple/find-source-map-url-webpack-mock.ts new file mode 100644 index 0000000000000..77d6ec64fa28d --- /dev/null +++ b/test/e2e/app-dir/actions-simple/find-source-map-url-webpack-mock.ts @@ -0,0 +1,4 @@ +export function findSourceMapURL(_filename: string): string | null { + // TODO + return null +} diff --git a/test/e2e/app-dir/actions-simple/next.config.js b/test/e2e/app-dir/actions-simple/next.config.js new file mode 100644 index 0000000000000..a288abc41898b --- /dev/null +++ b/test/e2e/app-dir/actions-simple/next.config.js @@ -0,0 +1,22 @@ +/** + * @type {import('next').NextConfig} + */ + +const nextConfig = { + webpack(config) { + config.resolve.alias['next/dist/client/app-find-source-map-url'] = + require.resolve('./find-source-map-url-webpack-mock.ts') + + return config + }, + experimental: { + turbo: { + resolveAlias: { + 'next/dist/client/app-find-source-map-url': + './find-source-map-url-turbopack-mock.ts', + }, + }, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/actions/app-action.test.ts b/test/e2e/app-dir/actions/app-action.test.ts index 154c7670501c9..36406fcf2c612 100644 --- a/test/e2e/app-dir/actions/app-action.test.ts +++ b/test/e2e/app-dir/actions/app-action.test.ts @@ -659,8 +659,49 @@ describe('app-dir action handling', () => { }) }) + it('should invalidate the client router cache if the redirect action triggers a revalidation', async () => { + const browser = await next.browser('/redirect') + const input = await browser.elementByCss('input[name="name"]') + const revalidateCheckbox = await browser.elementByCss( + 'input[name="revalidate"]' + ) + const submit = await browser.elementByCss('button') + const initialRandom = await browser.elementById('random-number').text() + expect(initialRandom).toMatch(/\d+/) + + expect(await browser.hasElementByCssSelector('#error')).toBe(false) + + await input.fill('justputit') + await revalidateCheckbox.check() + await submit.click() + + await retry(async () => { + expect(await browser.hasElementByCssSelector('#error')).toBe(false) + }) + + // go back to the page that was revalidated + await browser.elementByCss('[href="/redirect"]').click() + + await browser.waitForElementByCss('#main-page') + + const newRandom = await browser.elementById('random-number').text() + expect(newRandom).not.toBe(initialRandom) + }) + it('should reset the form state when the action redirects to itself', async () => { const browser = await next.browser('/self-redirect') + const requests = [] + browser.on('request', async (req: Request) => { + const url = new URL(req.url()) + + if (url.pathname === '/self-redirect') { + const headers = await req.allHeaders() + if (headers['rsc']) { + requests.push(req) + } + } + }) + const input = await browser.elementByCss('input[name="name"]') const submit = await browser.elementByCss('button') @@ -686,6 +727,13 @@ describe('app-dir action handling', () => { await retry(async () => { expect(await browser.hasElementByCssSelector('#error')).toBe(false) }) + + // This verifies the redirect & server response happens in a single roundtrip, + // if the redirect resource was static. In development, these responses are always + // dynamically generated, so we only expect a single request for build/deploy. + if (!isNextDev) { + expect(requests.length).toBe(0) + } }) // This is disabled when deployed because the 404 page will be served as a static route diff --git a/test/e2e/app-dir/actions/app/redirect/actions.ts b/test/e2e/app-dir/actions/app/redirect/actions.ts index f47a8d45da1ac..e067e07fcb4f2 100644 --- a/test/e2e/app-dir/actions/app/redirect/actions.ts +++ b/test/e2e/app-dir/actions/app/redirect/actions.ts @@ -1,6 +1,7 @@ 'use server' import { redirect } from 'next/navigation' +import { revalidatePath } from 'next/cache' type State = { errors: Record @@ -8,10 +9,15 @@ type State = { export async function action(previousState: State, formData: FormData) { const name = formData.get('name') + const revalidate = formData.get('revalidate') if (name !== 'justputit') { return { errors: { name: "Only 'justputit' is accepted." } } } + if (revalidate === 'on') { + revalidatePath('/redirect') + } + redirect('/redirect/other') } diff --git a/test/e2e/app-dir/actions/app/redirect/layout.tsx b/test/e2e/app-dir/actions/app/redirect/layout.tsx index ad419941eebc7..60604c27082f9 100644 --- a/test/e2e/app-dir/actions/app/redirect/layout.tsx +++ b/test/e2e/app-dir/actions/app/redirect/layout.tsx @@ -12,6 +12,7 @@ export default function Page({ children }) {
+ Revalidate {errors.name &&

{errors.name}

} diff --git a/test/e2e/app-dir/actions/app/redirect/other/page.tsx b/test/e2e/app-dir/actions/app/redirect/other/page.tsx index 187b865111066..9e82ab1ff0903 100644 --- a/test/e2e/app-dir/actions/app/redirect/other/page.tsx +++ b/test/e2e/app-dir/actions/app/redirect/other/page.tsx @@ -1,3 +1,9 @@ +import Link from 'next/link' + export default function Page() { - return
Other Page
+ return ( +
+ Other Page Back to Redirect Page +
+ ) } diff --git a/test/e2e/app-dir/actions/app/redirect/page.tsx b/test/e2e/app-dir/actions/app/redirect/page.tsx index b2bb7da42de65..98c9ca83b1ff6 100644 --- a/test/e2e/app-dir/actions/app/redirect/page.tsx +++ b/test/e2e/app-dir/actions/app/redirect/page.tsx @@ -1,3 +1,7 @@ export default function Page() { - return
Main Page
+ return ( +
+ Main Page
{Math.random()}
+
+ ) } diff --git a/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts b/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts index 56f6d066ef720..e3a5355b7b2f0 100644 --- a/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts +++ b/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts @@ -1,5 +1,6 @@ import { findPort, waitFor } from 'next-test-utils' import http from 'http' +import url from 'url' import { outdent } from 'outdent' import { isNextDev, isNextStart, nextTestSetup } from 'e2e-utils' @@ -9,12 +10,21 @@ describe('app-fetch-deduping', () => { const { next } = nextTestSetup({ files: __dirname, skipStart: true }) let externalServerPort: number let externalServer: http.Server - let requests = [] + let successfulRequests = [] beforeAll(async () => { externalServerPort = await findPort() externalServer = http.createServer((req, res) => { - requests.push(req.url) + const parsedUrl = url.parse(req.url, true) + const overrideStatus = parsedUrl.query.status + + // if the requested url has a "status" search param, override the response status + if (overrideStatus) { + res.statusCode = Number(overrideStatus) + } else { + successfulRequests.push(req.url) + } + res.end(`Request ${req.url} received at ${Date.now()}`) }) @@ -30,7 +40,7 @@ describe('app-fetch-deduping', () => { }) beforeEach(() => { - requests = [] + successfulRequests = [] }) afterAll(() => externalServer.close()) @@ -43,7 +53,7 @@ describe('app-fetch-deduping', () => { }` ) await next.build() - expect(requests.length).toBe(1) + expect(successfulRequests.length).toBe(1) }) }) } else if (isNextDev) { diff --git a/test/e2e/app-dir/app-fetch-deduping/app/bad-response-page/[slug]/page.js b/test/e2e/app-dir/app-fetch-deduping/app/bad-response-page/[slug]/page.js new file mode 100644 index 0000000000000..6b900ddbc6a7e --- /dev/null +++ b/test/e2e/app-dir/app-fetch-deduping/app/bad-response-page/[slug]/page.js @@ -0,0 +1,37 @@ +// This page is validating that despite multiple unsuccessful responses to the same, potentially cached URLs, +// the build locks are resolved and the page is still built successfully. +export async function generateStaticParams() { + return [ + { + slug: 'slug-0', + }, + { + slug: 'slug-1', + }, + { + slug: 'slug-2', + }, + { + slug: 'slug-3', + }, + { + slug: 'slug-4', + }, + ] +} + +export default async function Page({ params }) { + const data = await fetch( + `http://localhost:${process.env.TEST_SERVER_PORT}?status=404` + ).then((res) => res.text()) + await fetch( + `http://localhost:${process.env.TEST_SERVER_PORT}?status=404` + ).then((res) => res.text()) + + return ( + <> +

hello world

+

{data}

+ + ) +} diff --git a/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts b/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts index 8ba6ec4a9a7f2..ad216acfd848e 100644 --- a/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts +++ b/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts @@ -101,8 +101,6 @@ describe('dynamic-data', () => { // in dev we expect the entire page to be rendered at runtime expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') - // we expect there to be no suspense boundary in fallback state - expect($('#boundary').html()).toBeNull() } else if (process.env.__NEXT_EXPERIMENTAL_PPR) { // in PPR we expect the shell to be rendered at build and the page to be rendered at runtime expect($('#layout').text()).toBe('at buildtime') diff --git a/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js b/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js index c45ca779f1200..79beaf4c4059b 100644 --- a/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js +++ b/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js @@ -1,6 +1,4 @@ -import Server, { connection } from 'next/server' - -console.log('Server', Server) +import { connection } from 'next/server' export const dynamic = 'error' diff --git a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.ts b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.ts new file mode 100644 index 0000000000000..a4adf480e884e --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.ts @@ -0,0 +1,340 @@ +import { nextTestSetup } from 'e2e-utils' + +const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR + +const stackStart = /\s+at / + +function createExpectError(cliOutput: string) { + let cliIndex = 0 + return function expectError( + containing: string, + withStackContaining?: string + ) { + const initialCliIndex = cliIndex + let lines = cliOutput.slice(cliIndex).split('\n') + + let i = 0 + while (i < lines.length) { + let line = lines[i++] + '\n' + cliIndex += line.length + if (line.includes(containing)) { + if (typeof withStackContaining !== 'string') { + return + } else { + while (i < lines.length) { + let stackLine = lines[i++] + '\n' + if (!stackStart.test(stackLine)) { + expect(stackLine).toContain(withStackContaining) + } + if (stackLine.includes(withStackContaining)) { + return + } + } + } + } + } + + expect(cliOutput.slice(initialCliIndex)).toContain(containing) + } +} + +function runTests(options: { withMinification: boolean }) { + const isTurbopack = !!process.env.TURBOPACK + const { withMinification } = options + describe(`Dynamic IO Errors - ${withMinification ? 'With Minification' : 'Without Minification'}`, () => { + describe('Sync Dynamic - With Fallback - client searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-client-search-with-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when synchronously reading search params in a client component if all dynamic access is inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + if (WITH_PPR) { + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } else { + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } + }) + }) + + describe('Sync Dynamic - Without Fallback - client searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-client-search-without-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError( + 'Error: Route / used a synchronous Dynamic API: `searchParams.foo`, which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI.' + ) + expectError('exiting the build.') + }) + }) + + describe('Sync Dynamic - With Fallback - server searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-server-search-with-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when synchronously reading search params in a client component if all dynamic access is inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + if (WITH_PPR) { + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } else { + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(0) + } + }) + }) + + describe('Sync Dynamic - Without Fallback - server searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-server-search-without-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + if (WITH_PPR) { + expectError( + 'Error: Route / used a synchronous Dynamic API: `searchParams.foo`. This particular component may have been dynamic anyway or it may have just not finished before the synchronous Dynamic API was invoked.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } else { + expectError( + 'Error: Route / used a synchronous Dynamic API: `searchParams.foo`, which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI.' + ) + expectError('exiting the build.') + }) + }) + + describe('Sync Dynamic - With Fallback - cookies', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-cookies-with-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when synchronously reading search params in a client component if all dynamic access is inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + if (WITH_PPR) { + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } else { + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(0) + } + }) + }) + + describe('Sync Dynamic - Without Fallback - cookies', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-cookies-without-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + if (WITH_PPR) { + expectError( + "Error: Route / used a synchronous Dynamic API: cookies().get('token'). This particular component may have been dynamic anyway or it may have just not finished before the synchronous Dynamic API was invoked.", + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } else { + expectError( + "Error: Route / used a synchronous Dynamic API: cookies().get('token'), which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.", + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI.' + ) + expectError('exiting the build.') + }) + }) + }) +} + +runTests({ withMinification: true }) +runTests({ withMinification: false }) diff --git a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts new file mode 100644 index 0000000000000..83f4ae3d95678 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts @@ -0,0 +1,361 @@ +import { nextTestSetup } from 'e2e-utils' + +const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR + +const stackStart = /\s+at / + +function createExpectError(cliOutput: string) { + let cliIndex = 0 + return function expectError( + containing: string, + withStackContaining?: string + ): Array { + const initialCliIndex = cliIndex + let lines = cliOutput.slice(cliIndex).split('\n') + + let i = 0 + while (i < lines.length) { + let line = lines[i++] + '\n' + cliIndex += line.length + if (line.includes(containing)) { + if (typeof withStackContaining !== 'string') { + return + } else { + while (i < lines.length) { + let stackLine = lines[i++] + '\n' + if (!stackStart.test(stackLine)) { + expect(stackLine).toContain(withStackContaining) + } + if (stackLine.includes(withStackContaining)) { + return + } + } + } + } + } + + expect(cliOutput.slice(initialCliIndex)).toContain(containing) + } +} + +function runTests(options: { withMinification: boolean }) { + const isTurbopack = !!process.env.TURBOPACK + const { withMinification } = options + describe(`Dynamic IO Errors - ${withMinification ? 'With Minification' : 'Without Minification'}`, () => { + describe('Dynamic Metadata - Static Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-metadata-static-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if generateMetadata is dynamic', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / has a dynamic `generateMetadata` but nothing else is dynamic.' + ) + }) + }) + + describe('Dynamic Metadata - Dynamic Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-metadata-dynamic-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('#dynamic').text()).toBe('Dynamic') + expect($('[data-fallback]').length).toBe(0) + }) + }) + + describe('Dynamic Viewport - Static Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-viewport-static-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if generateViewport is dynamic', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / has a dynamic `generateViewport` but nothing else is dynamic.' + ) + }) + }) + + describe('Dynamic Viewport - Dynamic Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-viewport-dynamic-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('#dynamic').text()).toBe('Dynamic') + expect($('[data-fallback]').length).toBe(0) + }) + }) + + describe('Static Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/static', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when all routes are static', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + throw new Error('expected build not to fail for fully static project') + } + }) + }) + + describe('Dynamic Root', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-root', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError( + 'Error: Route / performed an IO operation that was not cached and no Suspense boundary was found to define a fallback UI.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + if (WITH_PPR) { + // React currently fatals the render in canary because we don't have access to the prerender API there. with a fatal only + // one task actually reports and error at the moment. We should fix upstream but for now we exclude the second error when PPR is off + // because we are using canary React and renderToReadableStream rather than experimental React and prerender + expectError( + 'Error: Route / performed an IO operation that was not cached and no Suspense boundary was found to define a fallback UI.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionThree' + ) + } + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / has one or more dynamic components without a defined fallback UI.' + ) + expectError('exiting the build.') + }) + }) + + describe('Dynamic Boundary', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-boundary', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + if (WITH_PPR) { + it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error( + 'expected build not to fail for fully static project' + ) + // we expect the build to fail + } + + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + }) + } else { + it('should not error the build when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error( + 'expected build not to fail for fully static project' + ) + } + + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + }) + } + }) + }) +} + +runTests({ withMinification: true }) +runTests({ withMinification: false }) diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/page.tsx new file mode 100644 index 0000000000000..9b9db2186b117 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/page.tsx @@ -0,0 +1,64 @@ +import { Suspense } from 'react' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page calls fetch three times. One is cached and outside of a + Suspense boundary. The other two are uncached but inside Suspense + boundaries. We expect this page to be dynamic but not produce a build + error. If PPR is enabled we expect this page to be partially static. + uncached. +

+ + + + + }> + + + + + }> + + + + + ) +} + +async function FetchingComponent({ + nonce, + cached, +}: { + nonce: string + cached?: boolean +}) { + return ( +
+ message:{' '} + {cached ? await fetchRandomCached(nonce) : await fetchRandom(nonce)} +
+ ) +} + +const fetchRandomCached = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy, + { cache: 'force-cache' } + ) + return response.text() +} + +const fetchRandom = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy + ) + return response.text() +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/page.tsx new file mode 100644 index 0000000000000..63ac6c94ead04 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/page.tsx @@ -0,0 +1,31 @@ +import { Suspense } from 'react' + +export async function generateMetadata() { + await new Promise((r) => setTimeout(r, 0)) + return { title: 'Dynamic Metadata' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateMetadata which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ }> + + + + ) +} + +function Fallback() { + return
loading...
+} + +async function Dynamic() { + await new Promise((r) => setTimeout(r)) + return

Dynamic

+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/page.tsx new file mode 100644 index 0000000000000..7683f646fc518 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/page.tsx @@ -0,0 +1,17 @@ +export async function generateMetadata() { + await new Promise((r) => setTimeout(r, 0)) + return { title: 'Dynamic Metadata' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateMetadata which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/page.tsx new file mode 100644 index 0000000000000..dbfa973f4cfed --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/page.tsx @@ -0,0 +1,65 @@ +import { Suspense } from 'react' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page calls fetches eight times. Four are cached and Four are not. + In each set of Four, two are wrapped in Suspense. This leaves two + fetches that are uncached and not wrapped in Suspense which is + considered an error when dynamicIO is enabled. We expect the build to + fail with two component stacks that point to the offending IO +

+ + + + + + + + + + + + + + + + + + + + ) +} + +async function FetchingComponent({ + nonce, + cached, +}: { + nonce: string + cached?: boolean +}) { + return ( +
+ message 1:{' '} + {cached ? await fetchRandomCached(nonce) : await fetchRandom(nonce)} +
+ ) +} + +const fetchRandomCached = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy, + { cache: 'force-cache' } + ) + return response.text() +} + +const fetchRandom = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy + ) + return response.text() +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js new file mode 100644 index 0000000000000..f91d543c0e266 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: false, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/page.tsx new file mode 100644 index 0000000000000..a621880d2bc24 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/page.tsx @@ -0,0 +1,31 @@ +import { Suspense } from 'react' + +export async function generateViewport() { + await new Promise((r) => setTimeout(r, 0)) + return { themeColor: 'black' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateViewport which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ }> + + + + ) +} + +function Fallback() { + return
loading...
+} + +async function Dynamic() { + await new Promise((r) => setTimeout(r)) + return

Dynamic

+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/page.tsx new file mode 100644 index 0000000000000..8f6065b55d3c3 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/page.tsx @@ -0,0 +1,17 @@ +export async function generateViewport() { + await new Promise((r) => setTimeout(r, 0)) + return { themeColor: 'black' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateViewport which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/page.tsx new file mode 100644 index 0000000000000..54f32172cf7d7 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/page.tsx @@ -0,0 +1,3 @@ +export default async function Page() { + return
hello world
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/page.tsx new file mode 100644 index 0000000000000..377ea07feadcf --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/page.tsx @@ -0,0 +1,84 @@ +'use client' + +import { Suspense, use } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + }> + + + + + + + + + ) +} + +function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + if (typeof window === 'undefined') { + use(new Promise((r) => process.nextTick(r))) + } + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +function LongRunningComponent() { + if (typeof window === 'undefined') { + use( + new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + ) + } + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/page.tsx new file mode 100644 index 0000000000000..7bbced3751bee --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/page.tsx @@ -0,0 +1,82 @@ +'use client' + +import { Suspense, use } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + + + + + + + + ) +} + +function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + if (typeof window === 'undefined') { + use(new Promise((r) => process.nextTick(r))) + } + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +function LongRunningComponent() { + if (typeof window === 'undefined') { + use( + new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + ) + } + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/page.tsx new file mode 100644 index 0000000000000..4abb91d8ecce7 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/page.tsx @@ -0,0 +1,64 @@ +import { Suspense } from 'react' +import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page access cookies synchronously and it triggers dynamic before + another component is finished which doesn't define a fallback UI with + Suspense. This is considered a build error and the message should + clearly indicate that it was caused by a synchronous dynamic API usage. +

+ }> + + + + + }> + + + + + + + + + ) +} + +async function CookiesReadingComponent() { + await new Promise((r) => process.nextTick(r)) + const _token = (cookies() as unknown as UnsafeUnwrappedCookies).get('token') + return
this component read the `token` cookie synchronously
+} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync cookies call happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync cookies call is triggered. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/page.tsx new file mode 100644 index 0000000000000..390e62e8f89e0 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/page.tsx @@ -0,0 +1,62 @@ +import { Suspense } from 'react' +import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page access cookies synchronously and it triggers dynamic before + another component is finished which doesn't define a fallback UI with + Suspense. This is considered a build error and the message should + clearly indicate that it was caused by a synchronous dynamic API usage. +

+ }> + + + + + + + + + + + + ) +} + +async function CookiesReadingComponent() { + await new Promise((r) => process.nextTick(r)) + const _token = (cookies() as unknown as UnsafeUnwrappedCookies).get('token') + return
this component read the `token` cookie synchronously
+} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync cookies call happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync cookies call is triggered. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/page.tsx new file mode 100644 index 0000000000000..703053937dbb0 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/page.tsx @@ -0,0 +1,76 @@ +import { Suspense } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + }> + + + + + + + + + ) +} + +async function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + await new Promise((r) => process.nextTick(r)) + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/page.tsx new file mode 100644 index 0000000000000..47f77115ffdbb --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/page.tsx @@ -0,0 +1,74 @@ +import { Suspense } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + + + + + + + + ) +} + +async function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + await new Promise((r) => process.nextTick(r)) + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_async/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_async/page.tsx deleted file mode 100644 index 6cda978c99068..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_async/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { cookies } from 'next/headers' - -export default async function Page() { - await 1 - return ( - <> -

- This page calls `cookies()` in a child component. Even though the page - doesn't do any IO it should still bail out of static generation. -

- - - - ) -} - -async function ComponentOne() { - try { - ;(await cookies()).get('test') - } catch (e) { - // swallow any throw. We should still not be static - } - return
This component read cookies
-} - -async function ComponentTwo() { - return
This component didn't read cookies
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_root/page.tsx deleted file mode 100644 index 180c9cbcefa9d..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_root/page.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { cookies } from 'next/headers' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - return ( - <> -

- This page calls `cookies()` in a child component without a parent - Suspense boundary -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentThatReadsCookies() { - let sentinelCookie - try { - const cookie = (await cookies()).get('x-sentinel') - if (cookie) { - sentinelCookie = cookie.value - } else { - sentinelCookie = '~not-found~' - } - } catch (e) { - sentinelCookie = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component read cookies: "{sentinelCookie}" -
- ) -} -async function OtherComponent() { - return
This component didn't read cookies
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_root/page.tsx deleted file mode 100644 index 8842f34697f0c..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_root/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { headers } from 'next/headers' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - return ( - <> -

- This page calls `headers()` in a child component without a parent - Suspense boundary -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentThatReadsHeaders() { - let sentinelHeader - try { - sentinelHeader = (await headers()).get('x-sentinel') - if (!sentinelHeader) { - sentinelHeader = '~not-found~' - } - } catch (e) { - sentinelHeader = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component read headers: "{sentinelHeader}" -
- ) -} - -async function OtherComponent() { - return
This component didn't read headers
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store/page.tsx similarity index 88% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store/page.tsx index 844fc08d3fe6a..1fad25096426c 100644 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store/page.tsx @@ -5,6 +5,9 @@ import { unstable_noStore as noStore } from 'next/cache' import { getSentinelValue } from '../../getSentinelValue' export default async function Page() { + // We wait for metadata to finish before rendering this component which will trigger + // a synchronous abort + await new Promise((r) => process.nextTick(r)) return ( <>

diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_root/page.tsx deleted file mode 100644 index ca5bd49c4df78..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_root/page.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { unstable_noStore as noStore } from 'next/cache' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - return ( - <> -

- This page calls `unstable_noStore()` in a child component without a - parent Suspense boundary -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentThatCallsNoStore() { - try { - noStore() - } catch (e) { - // swallow any throw. We still want to ensure this is dynamic - } - return
This component called unstable_noStore()
-} - -async function OtherComponent() { - return
This component didn't call unstable_noStore()
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_root/page.tsx deleted file mode 100644 index eb0fe324b3acc..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_root/page.tsx +++ /dev/null @@ -1,55 +0,0 @@ -'use client' - -import { getSentinelValue } from '../../getSentinelValue' -import { use } from 'react' - -export default function Page({ searchParams }: { searchParams: Promise }) { - return ( - <> -

- This page reads `searchParams.foo` in a client component without a - parent Suspense boundary. -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -function ComponentOne({ searchParams }: { searchParams: Promise }) { - let sentinelSearch - const sp = use(searchParams) - try { - if (sp.sentinel) { - sentinelSearch = sp.sentinel - } else { - sentinelSearch = '~not-found~' - } - } catch (e) { - sentinelSearch = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component accessed `searchParams.sentinel`: " - {sentinelSearch}" -
- ) -} - -function ComponentTwo() { - return ( - <> -
This component didn't access any searchParams properties
-
{getSentinelValue()}
- - ) -} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_root/page.tsx deleted file mode 100644 index 1a1ecc6ea4670..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_root/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { getSentinelValue } from '../../getSentinelValue' - -export default function Page({ searchParams }: { searchParams: Promise }) { - return ( - <> -

- This page reads `searchParams.foo` in a client component without a - parent Suspense boundary. -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentOne({ searchParams }: { searchParams: Promise }) { - let sentinelSearch - const sp = await searchParams - try { - if (sp.sentinel) { - sentinelSearch = sp.sentinel - } else { - sentinelSearch = '~not-found~' - } - } catch (e) { - sentinelSearch = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component accessed `searchParams.sentinel`: " - {sentinelSearch}" -
- ) -} - -function ComponentTwo() { - return ( - <> -
This component didn't access any searchParams properties
-
{getSentinelValue()}
- - ) -} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_root/page.tsx deleted file mode 100644 index 83c68a30e4215..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_root/page.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - await 1 - return ( - <> -

- This page fetches using cache inside one component and without cache - inside another component. -

-

Niether component is wrapped in a Suspense boundary.

-

- With PPR this page should have an empty shell because the uncached fetch - does not have a parent Suspense boundary. -

-

Without PPR this page should be dynamic.

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentOne() { - return
message 1: {await fetchRandomCached('a')}
-} - -async function ComponentTwo() { - return ( - <> -
message 2: {await fetchRandom('b')}
-
message 2: {await fetchRandomCached('c')}
- - ) -} - -const fetchRandomCached = async (entropy: string) => { - const response = await fetch( - 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy, - { cache: 'force-cache' } - ) - return response.text() -} - -const fetchRandom = async (entropy: string) => { - const response = await fetch( - 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy - ) - return response.text() -} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/io_mixed/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/io_mixed_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/io_mixed/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_root/page.tsx deleted file mode 100644 index 56b235096aef6..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_root/page.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { unstable_cache as cache } from 'next/cache' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - await 1 - return ( - <> -

- This page renders two components. The first calls a simulated IO - function wrapped in `unstable_cache`. The second calls the simulated IO - function without being wrapped in `unstable_cache`. -

-

Niether component is wrapped in a Suspense boundary

-

- With PPR this page should have an empty shell because the uncached IO - function does not have a parent Suspense boundary. -

-

Without PPR this page should be dynamic.

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentOne() { - return
message 1: {await getCachedMessage('hello cached fast', 2)}
-} - -async function ComponentTwo() { - return ( - <> -
message 2: {await getMessage('hello uncached fast', 0)}
-
message 3: {await getCachedMessage('hello cached slow', 20)}
- - ) -} - -async function getMessage(echo, delay) { - await new Promise((r) => setTimeout(r, delay)) - return echo -} - -const getCachedMessage = cache(getMessage) diff --git a/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx index dbdf1fa30e110..0f4a6c15f6cad 100644 --- a/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx @@ -3,6 +3,8 @@ import { unstable_noStore as noStore } from 'next/cache' import { getSentinelValue } from '../../../../getSentinelValue' export default async function Page() { + // We wait for metadata to finish before calling noStore + await new Promise((r) => process.nextTick(r)) noStore() return ( <> diff --git a/test/e2e/app-dir/dynamic-io/app/cases/task_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/task/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/task_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/task/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/task_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/task_root/page.tsx deleted file mode 100644 index 1fabaee140e15..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/task_root/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - await 1 - return ( - <> -

- This page renders a component that requires async IO. It is simulated - using setTimeout(f, 1000). -

-

- This simulated IO component does not have a parent suspense boundary -

-

- With PPR this page should have an empty static shell because uncached - "IO" was used without a parent Suspense boundary. -

-

Without PPR this page should be dynamic.

- -
{getSentinelValue()}
- - ) -} - -async function ComponentWithIO() { - await new Promise((r) => setTimeout(r, 1000)) - return

hello IO

-} diff --git a/test/e2e/app-dir/dynamic-io/app/client-utils.ts b/test/e2e/app-dir/dynamic-io/app/client-utils.ts new file mode 100644 index 0000000000000..3caba62f6c3de --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/client-utils.ts @@ -0,0 +1,23 @@ +export function createWaiter() { + let cached = null + function wait() { + if (typeof window === 'undefined') { + if (cached) { + return cached + } + cached = new Promise((r) => process.nextTick(r)) + return cached + } else { + if (cached) { + return cached + } + cached = Promise.resolve() + return cached + } + } + + function cleanup() { + cached = null + } + return { wait, cleanup } +} diff --git a/test/e2e/app-dir/dynamic-io/app/connection/static-behavior/root/page.tsx b/test/e2e/app-dir/dynamic-io/app/connection/static-behavior/root/page.tsx deleted file mode 100644 index f5ad949a2e3d3..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/connection/static-behavior/root/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { connection } from 'next/server' - -import { getSentinelValue } from '../../../getSentinelValue' -/** - * This test case is constructed to demonstrate how using the async form of cookies can lead to a better - * prerender with dynamic IO when PPR is on. There is no difference when PPR is off. When PPR is on the second component - * can finish rendering before the prerender completes and so we can produce a static shell where the Fallback closest - * to Cookies access is read - */ -export default async function Page() { - return ( - <> - - -
{getSentinelValue()}
- - ) -} - -async function Component() { - await connection() - return ( -
- cookie foo -
- ) -} - -function ComponentTwo() { - return

footer

-} diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/exercise/layout.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/exercise/layout.tsx new file mode 100644 index 0000000000000..b550c55e3d770 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/cookies/exercise/layout.tsx @@ -0,0 +1,5 @@ +import { Suspense } from 'react' + +export default function Layout({ children }: { children: React.ReactNode }) { + return {children} +} diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async/page.tsx similarity index 91% rename from test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async/page.tsx index fef4e3a78bfda..68157fc221e99 100644 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async/page.tsx @@ -10,13 +10,13 @@ import { getSentinelValue } from '../../../getSentinelValue' */ export default async function Page() { return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_root/page.tsx deleted file mode 100644 index 0027e215a0ecd..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_root/page.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { cookies } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -async function Component() { - const cookie = (await cookies()).get('x-sentinel') - if (cookie && cookie.value) { - return ( -
- cookie {cookie.value} -
- ) - } else { - return
no cookie found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync/page.tsx similarity index 63% rename from test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync/page.tsx index c4a5e2a63dda6..65879d4635a05 100644 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync/page.tsx @@ -2,21 +2,18 @@ import { Suspense } from 'react' import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' import { getSentinelValue } from '../../../getSentinelValue' -/** - * This test case is constructed to demonstrate the deopting behavior of synchronously - * accesing dynamic data like cookies. won't be able to render before we abort - * to it will bubble up to the root and mark the whoe page as dynamic when PPR is one. There - * is no real change in behavior when PPR is off. - */ + export default async function Page() { + // We delay rendering so that metadata can be resolved first + await new Promise((r) => process.nextTick(r)) return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_root/page.tsx deleted file mode 100644 index 910a25fd39a08..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_root/page.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -function Component() { - const cookie = (cookies() as unknown as UnsafeUnwrappedCookies).get( - 'x-sentinel' - ) - if (cookie && cookie.value) { - return ( -
- cookie {cookie.value} -
- ) - } else { - return
no cookie found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx index 482027458ba38..d709194ffce94 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx @@ -1,7 +1,7 @@ import { headers } from 'next/headers' import { getSentinelValue } from '../../../getSentinelValue' -import { AllComponents } from '../commponents' +import { AllComponents } from '../components' export default async function Page() { const allHeaders = await headers() diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/commponents.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/components.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/headers/exercise/commponents.tsx rename to test/e2e/app-dir/dynamic-io/app/headers/exercise/components.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/layout.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/layout.tsx new file mode 100644 index 0000000000000..2eeff2adc3998 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/headers/exercise/layout.tsx @@ -0,0 +1,5 @@ +import { Suspense } from 'react' + +export default function Layout({ children }) { + return {children} +} diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx index 56e783bd96816..1ca4de30424a9 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx @@ -1,7 +1,7 @@ import { headers, type UnsafeUnwrappedHeaders } from 'next/headers' import { getSentinelValue } from '../../../getSentinelValue' -import { AllComponents } from '../commponents' +import { AllComponents } from '../components' export default async function Page() { const xSentinelValues = new Set() diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async/page.tsx similarity index 91% rename from test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async/page.tsx index 0d43fc61f315d..07842812ee913 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async/page.tsx @@ -10,13 +10,13 @@ import { getSentinelValue } from '../../../getSentinelValue' */ export default async function Page() { return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_root/page.tsx deleted file mode 100644 index 39a354a81d4e8..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_root/page.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { headers } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -async function Component() { - const hasHeader = (await headers()).has('x-sentinel') - if (hasHeader) { - return ( -
- header{' '} - {(await headers()).get('x-sentinel')} -
- ) - } else { - return
no header found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync/page.tsx similarity index 81% rename from test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync/page.tsx index 272c5a791200d..cb8d4b3bd2796 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync/page.tsx @@ -5,18 +5,18 @@ import { getSentinelValue } from '../../../getSentinelValue' /** * This test case is constructed to demonstrate the deopting behavior of synchronously * accesing dynamic data like headers. won't be able to render before we abort - * to it will bubble up to the root and mark the whoe page as dynamic when PPR is one. There - * is no real change in behavior when PPR is off. */ export default async function Page() { + // We introduce a delay to allow metadata to resolve fully + await new Promise((r) => process.nextTick(r)) return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_root/page.tsx deleted file mode 100644 index b0e4a1ab1c2c0..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_root/page.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { headers, type UnsafeUnwrappedHeaders } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -function Component() { - const _headers = headers() as unknown as UnsafeUnwrappedHeaders - const hasHeader = _headers.has('x-sentinel') - if (hasHeader) { - return ( -
- header {_headers.get('x-sentinel')} -
- ) - } else { - return
no header found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx index 8a1e8873cdfbc..8de3ac40b1f86 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx @@ -1,3 +1,5 @@ +import { Suspense } from 'react' + // TODO once we make fetchCache inert with dynamicIO this test is expected // to start failing. Right now the force cache causes the fetches to be identical // and we get only one prebuilt route. once we remove the caching behavior of fetchCache @@ -19,6 +21,14 @@ export async function generateStaticParams() { } export default async function Layout({ children, params }) { + return ( + + {children} + + ) +} + +async function Inner({ children, params }) { return ( <>

{await params.slug}

diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx index dd188f38d293e..39e5d2479b228 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx @@ -1,20 +1,23 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, children, }: { params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx index 2d28608d7fe48..64a4443c04c0a 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx @@ -9,6 +9,7 @@ export default async function Page({ params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx index 7c1fbbed0bb59..bf6dd140c695c 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx @@ -1,20 +1,23 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, children, }: { params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx index 937b756bcde76..07debf876948f 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx @@ -9,6 +9,7 @@ export default async function Page({ params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx index a93ab56886680..e8541a0485f7f 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx @@ -1,20 +1,23 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, children, }: { params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx index 8724b1001e121..d9b79ec049e0b 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx @@ -10,6 +10,7 @@ export default async function Page({ params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx index 19aae1c3a25e4..a7dcebb8db2af 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx @@ -1,18 +1,21 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, }: { params: Promise<{ lowcard: string; highcard: string }> }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx index 18d6ebbb61dbd..0268de2b1d0c3 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ lowcard: string; highcard: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx index 89bc9544063aa..dc0f0b88f7b88 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx @@ -1,18 +1,21 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, }: { params: Promise<{ lowcard: string; highcard: string }> }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx index fcee9c7be7383..e7272343e10ec 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ lowcard: string; highcard: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx index de695d9c8a682..570d3e85e901b 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx @@ -1,18 +1,21 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, }: { params: Promise<{ lowcard: string; highcard: string }> }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx index 505873d1a6dc4..fb623ca42fcd4 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ lowcard: string; highcard: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx index 071abe498e76d..e5c9280989418 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx @@ -1,9 +1,14 @@ 'use client' +import { use } from 'react' + import type { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../../../getSentinelValue' +import { createWaiter } from '../../../../../../../../../client-utils' +const waiter = createWaiter() + export default function Layout({ params, children, @@ -11,6 +16,8 @@ export default function Layout({ params: Promise<{ dyn: string; then: string; value: string; status: string }> children: React.ReactNode }) { + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx index eb3ff00c4cab3..dbb3fdacf9a86 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx @@ -9,6 +9,7 @@ export default async function Page({ params: Promise<{ dyn: string; then: string; value: string; status: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx index a041d143a81b2..3da7091d3e063 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx @@ -1,14 +1,21 @@ 'use client' +import { use } from 'react' + import type { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../../../getSentinelValue' +import { createWaiter } from '../../../../../../../../../client-utils' +const waiter = createWaiter() + export default function Page({ params, }: { params: Promise<{ dyn: string; then: string; value: string; status: string }> }) { + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx index b4f46edffaffb..9c0fdaaf36e43 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ dyn: string; then: string; value: string; status: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/layout.tsx new file mode 100644 index 0000000000000..df33304d18dec --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/layout.tsx @@ -0,0 +1,5 @@ +import { Suspense } from 'react' + +export default function Layout({ children }) { + return {children} +} diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/client/use_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/client/use/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/search/async/client/use_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/async/client/use/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/client/use_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/client/use_root/page.tsx deleted file mode 100644 index e119d05d89067..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/async/client/use_root/page.tsx +++ /dev/null @@ -1,48 +0,0 @@ -'use client' - -import { use } from 'react' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - return ( - <> -

- This page `use`'s the searchParams promise before accessing a property - on it. -

-

There use is not wrapped in a Suspense boundary

-

With PPR we expect the page to have an empty shell

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ - searchParams, -}: { - searchParams: Promise -}) { - const params = use(searchParams) - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {params.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/await_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/await/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/search/async/server/await_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/async/server/await/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/await_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/await_root/page.tsx deleted file mode 100644 index 2242f56e05bb8..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/async/server/await_root/page.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - return ( - <> -

- This page awaits the searchParams promise before accessing a property on - it. -

-

There use is not wrapped in a Suspense boundary

-

With PPR we expect the page to have an empty shell

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -async function Component({ - searchParams, -}: { - searchParams: Promise -}) { - const params = await searchParams - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {params.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/use_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/use/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/search/async/server/use_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/async/server/use/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/use_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/use_root/page.tsx deleted file mode 100644 index 0a597159e79f9..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/async/server/use_root/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { getSentinelValue } from '../../../../getSentinelValue' - -import { use } from 'react' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - return ( - <> -

- This page `use`'s the searchParams promise before accessing a property - on it. -

-

There use is not wrapped in a Suspense boundary

-

With PPR we expect the page to have an empty shell

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ - searchParams, -}: { - searchParams: Promise -}) { - const params = use(searchParams) - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {params.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/access/page.tsx similarity index 84% rename from test/e2e/app-dir/dynamic-io/app/search/sync/client/access_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/client/access/page.tsx index 8eec267109b2f..036166e059af6 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/client/access/page.tsx @@ -1,11 +1,14 @@ 'use client' -import { Suspense } from 'react' +import { Suspense, use } from 'react' import type { UnsafeUnwrappedSearchParams } from 'next/server' import { getSentinelValue } from '../../../../getSentinelValue' +import { createWaiter } from '../../../../client-utils' +const waiter = createWaiter() + type AnySearchParams = { [key: string]: string | string[] | undefined } export default function Page({ @@ -13,11 +16,13 @@ export default function Page({ }: { searchParams: Promise }) { + use(waiter.wait()) + waiter.cleanup() const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_root/page.tsx deleted file mode 100644 index a9d13573c12bc..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_root/page.tsx +++ /dev/null @@ -1,42 +0,0 @@ -'use client' - -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {searchParams.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/has/page.tsx similarity index 85% rename from test/e2e/app-dir/dynamic-io/app/search/sync/client/has_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/client/has/page.tsx index 0f61a1d082d6f..a7cb275bcdb51 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/client/has/page.tsx @@ -1,11 +1,14 @@ 'use client' -import { Suspense } from 'react' +import { Suspense, use } from 'react' import type { UnsafeUnwrappedSearchParams } from 'next/server' import { getSentinelValue } from '../../../../getSentinelValue' +import { createWaiter } from '../../../../client-utils' +const waiter = createWaiter() + type AnySearchParams = { [key: string]: string | string[] | undefined } export default function Page({ @@ -13,11 +16,13 @@ export default function Page({ }: { searchParams: Promise }) { + use(waiter.wait()) + waiter.cleanup() const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_root/page.tsx deleted file mode 100644 index 16a4545347fdc..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_root/page.tsx +++ /dev/null @@ -1,48 +0,0 @@ -'use client' - -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component checks if the sentinel search param is defined -

- sentinel:{' '} - {String('sentinel' in searchParams)} -

-

- foo: {String('foo' in searchParams)} -

-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread/page.tsx similarity index 86% rename from test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/client/spread/page.tsx index 7a766a0204e09..0405e824c3b44 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread/page.tsx @@ -1,11 +1,14 @@ 'use client' -import { Suspense } from 'react' +import { Suspense, use } from 'react' import type { UnsafeUnwrappedSearchParams } from 'next/server' import { getSentinelValue } from '../../../../getSentinelValue' +import { createWaiter } from '../../../../client-utils' +const waiter = createWaiter() + type AnySearchParams = { [key: string]: string | string[] | undefined } export default function Page({ @@ -13,11 +16,13 @@ export default function Page({ }: { searchParams: Promise }) { + use(waiter.wait()) + waiter.cleanup() const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_root/page.tsx deleted file mode 100644 index adbaf90a219c1..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_root/page.tsx +++ /dev/null @@ -1,54 +0,0 @@ -'use client' - -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - const copied = { ...searchParams } - return ( - <> -
-

This component clones search params and then prints

-
    - {Object.keys(copied).map((k) => { - return ( -
  • - {k}:{' '} - - {copied[k]} - -
  • - ) - })} -
-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/access/page.tsx similarity index 91% rename from test/e2e/app-dir/dynamic-io/app/search/sync/server/access_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/server/access/page.tsx index 10390951a4bdb..b8f663697cfd8 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/server/access/page.tsx @@ -11,11 +11,12 @@ export default async function Page({ }: { searchParams: Promise }) { + await new Promise((r) => process.nextTick(r)) const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_root/page.tsx deleted file mode 100644 index 0d7f2ff0173d7..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_root/page.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {searchParams.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/has/page.tsx similarity index 92% rename from test/e2e/app-dir/dynamic-io/app/search/sync/server/has_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/server/has/page.tsx index df1f18aa137f2..8d5b18ed85cd2 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/server/has/page.tsx @@ -11,11 +11,12 @@ export default async function Page({ }: { searchParams: Promise }) { + await new Promise((r) => process.nextTick(r)) const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_root/page.tsx deleted file mode 100644 index d8f296b9b3690..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_root/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component checks if the sentinel search param is defined -

- sentinel:{' '} - {String('sentinel' in searchParams)} -

-

- foo: {String('foo' in searchParams)} -

-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread/page.tsx similarity index 93% rename from test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/server/spread/page.tsx index 796d66a1b35c6..14ce5eb0b7002 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread/page.tsx @@ -11,11 +11,12 @@ export default async function Page({ }: { searchParams: Promise }) { + await new Promise((r) => process.nextTick(r)) const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_root/page.tsx deleted file mode 100644 index 5aa663c8677e8..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_root/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - const copied = { ...searchParams } - return ( - <> -
-

This component clones search params and then prints

-
    - {Object.keys(copied).map((k) => { - return ( -
  • - {k}:{' '} - - {copied[k]} - -
  • - ) - })} -
-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts index b859bf8eedf41..94570682a7e19 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts @@ -24,17 +24,6 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#foo').text()).toBe('foo') } - - $ = await next.render$('/connection/static-behavior/root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } }) } else { it('should produce dynamic pages when using connection', async () => { @@ -48,17 +37,6 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#foo').text()).toBe('foo') } - - $ = await next.render$('/connection/static-behavior/root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } }) } diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts index 4b57942ffc805..595344433264e 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts @@ -14,7 +14,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that use async cookies', async () => { - let $ = await next.render$('/cookies/static-behavior/async_boundary', {}) + let $ = await next.render$('/cookies/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -24,67 +24,23 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } - - $ = await next.render$('/cookies/static-behavior/async_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } }) it('should partially prerender pages that use sync cookies', async () => { - let $ = await next.render$('/cookies/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/cookies/static-behavior/sync_root', {}) + let $ = await next.render$('/cookies/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') expect($('#x-sentinel').text()).toBe('hello') } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') + expect($('#layout').text()).toBe('at buildtime') + expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } }) } else { it('should produce dynamic pages when using async or sync cookies', async () => { - let $ = await next.render$('/cookies/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/cookies/static-behavior/sync_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/cookies/static-behavior/async_boundary', {}) + let $ = await next.render$('/cookies/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -95,7 +51,7 @@ describe('dynamic-io', () => { expect($('#x-sentinel').text()).toBe('hello') } - $ = await next.render$('/cookies/static-behavior/async_root', {}) + $ = await next.render$('/cookies/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts index ccdca14ad8833..f64009d0b2204 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts @@ -14,7 +14,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that use async headers', async () => { - let $ = await next.render$('/headers/static-behavior/async_boundary', {}) + let $ = await next.render$('/headers/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -24,67 +24,23 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } - - $ = await next.render$('/headers/static-behavior/async_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } }) it('should partially prerender pages that use sync headers', async () => { - let $ = await next.render$('/headers/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/headers/static-behavior/sync_root', {}) + let $ = await next.render$('/headers/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') expect($('#x-sentinel').text()).toBe('hello') } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') + expect($('#layout').text()).toBe('at buildtime') + expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } }) } else { it('should produce dynamic pages when using async or sync headers', async () => { - let $ = await next.render$('/headers/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/headers/static-behavior/sync_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/headers/static-behavior/async_boundary', {}) + let $ = await next.render$('/headers/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -95,7 +51,7 @@ describe('dynamic-io', () => { expect($('#x-sentinel').text()).toBe('hello') } - $ = await next.render$('/headers/static-behavior/async_root', {}) + $ = await next.render$('/headers/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts index 64a31d27967d1..8e5f42a79b6ba 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts @@ -2227,7 +2227,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2248,7 +2252,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2272,7 +2280,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2293,7 +2305,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2325,7 +2341,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( @@ -2356,7 +2376,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( @@ -2392,7 +2416,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( @@ -2425,7 +2453,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts index cfad2443702a7..f72125e44f9ab 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts @@ -28,9 +28,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that await searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/await_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/async/server/await?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -42,23 +40,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/async/server/await_root?sentinel=hello') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that `use` searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/use_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/async/server/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -70,23 +55,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/async/server/use_root?sentinel=hello') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that `use` searchParams in a client component', async () => { - let $ = await next.render$( - '/search/async/client/use_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/async/client/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -98,34 +70,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/async/client/use_root?sentinel=hello') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that await searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/await_boundary?sentinel=hello' - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } - - $ = await next.render$('/search/async/server/await_root?sentinel=hello') + let $ = await next.render$('/search/async/server/await?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -138,20 +86,7 @@ describe('dynamic-io', () => { }) it('should not prerender pages that `use` searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/use_boundary?sentinel=hello' - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } - - $ = await next.render$('/search/async/server/use_root?sentinel=hello') + let $ = await next.render$('/search/async/server/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -164,20 +99,7 @@ describe('dynamic-io', () => { }) it('should not prerender pages that `use` searchParams in a client component', async () => { - let $ = await next.render$( - '/search/async/client/use_boundary?sentinel=hello' - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } - - $ = await next.render$('/search/async/client/use_root?sentinel=hello') + let $ = await next.render$('/search/async/client/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -192,9 +114,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that access a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -215,29 +135,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that access a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -256,29 +157,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -304,35 +186,10 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar' - ), - expect.stringContaining( - '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -356,34 +213,11 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar' - ), - expect.stringContaining( - '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that spreads ...searchParam synchronously in a server component', async () => { let $ = await next.render$( - '/search/sync/server/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/server/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -411,33 +245,11 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/server/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that spreads ...searchParam synchronously in a client component', async () => { let $ = await next.render$( - '/search/sync/client/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/client/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -470,38 +282,10 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/client/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - expect.stringContaining( - 'accessed directly with `searchParams.sentinel`' - ), - expect.stringContaining('accessed directly with `searchParams.foo`'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender a page that accesses a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -518,30 +302,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that accesses a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -558,30 +322,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that checks for the existence of a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -603,35 +347,10 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar.' - ), - expect.stringContaining( - 'Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar.' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that checks for the existence of a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -653,34 +372,11 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar.' - ), - expect.stringContaining( - 'Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar.' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that spreads ...searchParam synchronously in a server component', async () => { let $ = await next.render$( - '/search/sync/server/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/server/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -704,33 +400,11 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/server/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that spreads ...searchParam synchronously in a client component', async () => { let $ = await next.render$( - '/search/sync/client/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/client/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -761,32 +435,6 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/client/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - expect.stringContaining( - 'accessed directly with `searchParams.sentinel`' - ), - expect.stringContaining('accessed directly with `searchParams.foo`'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) } }) diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts index a06d80877a7b6..4ba284cf9c380 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts @@ -71,7 +71,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that take longer than a task to render', async () => { - let $ = await next.render$('/cases/task_boundary', {}) + let $ = await next.render$('/cases/task', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -83,19 +83,10 @@ describe('dynamic-io', () => { // it gets revealed when the resume happens expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/task_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that take longer than a single task to render', async () => { - let $ = await next.render$('/cases/task_boundary', {}) + let $ = await next.render$('/cases/task', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -107,15 +98,6 @@ describe('dynamic-io', () => { // it gets revealed when the resume happens expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/task_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } @@ -132,7 +114,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that use at least one fetch without cache', async () => { - let $ = await next.render$('/cases/fetch_mixed_boundary', {}) + let $ = await next.render$('/cases/fetch_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -142,19 +124,10 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/fetch_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that use at least one fetch without cache', async () => { - let $ = await next.render$('/cases/fetch_mixed_boundary', {}) + let $ = await next.render$('/cases/fetch_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -164,15 +137,6 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/fetch_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } @@ -189,7 +153,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that do any uncached IO', async () => { - let $ = await next.render$('/cases/io_mixed_boundary', {}) + let $ = await next.render$('/cases/io_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -199,19 +163,10 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/io_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that do any uncached IO', async () => { - let $ = await next.render$('/cases/io_mixed_boundary', {}) + let $ = await next.render$('/cases/io_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -221,21 +176,12 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/io_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `cookies()`', async () => { - let $ = await next.render$('/cases/dynamic_api_cookies_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_cookies', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -247,21 +193,10 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_cookies_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } else { it('should not prerender pages that use `cookies()`', async () => { - let $ = await next.render$('/cases/dynamic_api_cookies_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_cookies', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -273,23 +208,12 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_cookies_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `headers()`', async () => { - let $ = await next.render$('/cases/dynamic_api_headers_boundary') + let $ = await next.render$('/cases/dynamic_api_headers') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -301,21 +225,10 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_headers_root') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } else { it('should not prerender pages that use `headers()`', async () => { - let $ = await next.render$('/cases/dynamic_api_headers_boundary') + let $ = await next.render$('/cases/dynamic_api_headers') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -327,23 +240,12 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_headers_root') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `unstable_noStore()`', async () => { - let $ = await next.render$('/cases/dynamic_api_no_store_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_no_store', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -353,19 +255,10 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/dynamic_api_no_store_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that use `unstable_noStore()`', async () => { - let $ = await next.render$('/cases/dynamic_api_no_store_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_no_store', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -375,22 +268,13 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/dynamic_api_no_store_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `searchParams` in Server Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_server_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_server?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -404,25 +288,11 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_server_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } else { it('should not prerender pages that use `searchParams` in Server Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_server_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_server?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -436,27 +306,13 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_server_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `searchParams` in Client Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_client_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_client?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -472,25 +328,11 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_client_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } else { it('should not prerender pages that use `searchParams` in Client Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_client_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_client?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -504,20 +346,6 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_client_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } @@ -578,11 +406,9 @@ describe('dynamic-io', () => { expect($('#page-children').text()).toBe('at runtime') } else { if (WITH_PPR) { - // When using a sync dynamic API like noStore the prerender aborts - // before the shell can complete - expect($('#layout').text()).toBe('at runtime') + expect($('#layout').text()).toBe('at buildtime') expect($('#page-slot').text()).toBe('at runtime') - expect($('#page-children').text()).toBe('at runtime') + expect($('#page-children').text()).toBe('at buildtime') } else { expect($('#layout').text()).toBe('at runtime') expect($('#page-slot').text()).toBe('at runtime') diff --git a/test/e2e/app-dir/dynamic-io/next.config.js b/test/e2e/app-dir/dynamic-io/next.config.js index 650be7f1ecb99..f91d543c0e266 100644 --- a/test/e2e/app-dir/dynamic-io/next.config.js +++ b/test/e2e/app-dir/dynamic-io/next.config.js @@ -6,6 +6,7 @@ const nextConfig = { ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', dynamicIO: true, + serverMinification: false, }, } diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/layout.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/layout.tsx new file mode 100644 index 0000000000000..624edf9c7c09a --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/layout.tsx @@ -0,0 +1,12 @@ +export default function Layout({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ) +} + +export const metadata = { + title: 'Root Layout', + description: 'Root Description', +} diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page-content.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page-content.tsx new file mode 100644 index 0000000000000..2914d0dd0518e --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page-content.tsx @@ -0,0 +1,5 @@ +'use client' + +export default function PageContent() { + return

Page 2 Content

+} diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page.tsx new file mode 100644 index 0000000000000..daf1494d98c48 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page.tsx @@ -0,0 +1,3 @@ +import PageContent from './page-content' + +export default PageContent diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/override/page-content.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page-content.tsx new file mode 100644 index 0000000000000..6bd93409da909 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page-content.tsx @@ -0,0 +1,5 @@ +'use client' + +export default function PageContent() { + return

Page 1 Content

+} diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/override/page.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page.tsx new file mode 100644 index 0000000000000..ead6009eae1a6 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page.tsx @@ -0,0 +1,8 @@ +import PageContent from './page-content' + +export const metadata = { + title: 'Page 1', + description: 'Page 1 Description', +} + +export default PageContent diff --git a/test/e2e/app-dir/reexport-client-component-metadata/reexport-client-component-metadata.test.ts b/test/e2e/app-dir/reexport-client-component-metadata/reexport-client-component-metadata.test.ts new file mode 100644 index 0000000000000..f80c170677da5 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/reexport-client-component-metadata.test.ts @@ -0,0 +1,39 @@ +import { nextTestSetup } from 'e2e-utils' + +describe('app-dir - reexport-client-component-metadata', () => { + const { next } = nextTestSetup({ + files: __dirname, + }) + + it('should render the page metadata if override', async () => { + const $ = await next.render$('/override') + expect($('title').text()).toBe('Page 1') + expect($('meta[name="description"]').attr('content')).toBe( + 'Page 1 Description' + ) + + const browser = await next.browser('/override') + expect(await browser.elementByCss('title').text()).toBe('Page 1') + expect( + await browser + .elementByCss('meta[name="description"]') + .getAttribute('content') + ).toBe('Page 1 Description') + }) + + it('should render the layout metadata if not override', async () => { + const $ = await next.render$('/no-override') + expect($('title').text()).toBe('Root Layout') + expect($('meta[name="description"]').attr('content')).toBe( + 'Root Description' + ) + + const browser = await next.browser('/no-override') + expect(await browser.elementByCss('title').text()).toBe('Root Layout') + expect( + await browser + .elementByCss('meta[name="description"]') + .getAttribute('content') + ).toBe('Root Description') + }) +}) diff --git a/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx b/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx index 93472e5662b11..2b05725c7baba 100644 --- a/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx +++ b/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx @@ -1,6 +1,6 @@ 'use client' -import { Component } from 'react' +import { Component, Suspense } from 'react' export default class ErrorBoundary extends Component< { id: string; children: React.ReactNode }, @@ -11,9 +11,16 @@ export default class ErrorBoundary extends Component< return { message: error.message } } render() { + let content if (this.state.message !== null) { - return

{this.state.message}

+ content = this.state.message + } else { + content = this.props.children } - return this.props.children + return ( +

+ {content} +

+ ) } } diff --git a/test/e2e/app-dir/use-cache/app/errors/util.ts b/test/e2e/app-dir/use-cache/app/errors/util.ts index 923e84f6a4838..42257e2e1c1f2 100644 --- a/test/e2e/app-dir/use-cache/app/errors/util.ts +++ b/test/e2e/app-dir/use-cache/app/errors/util.ts @@ -9,5 +9,5 @@ export async function currentReferer() { } export async function isEditing() { - return (await draftMode()).isEnabled + return String((await draftMode()).isEnabled) } diff --git a/test/e2e/app-dir/use-cache/use-cache.test.ts b/test/e2e/app-dir/use-cache/use-cache.test.ts index a11b76d26726b..5d018664d0359 100644 --- a/test/e2e/app-dir/use-cache/use-cache.test.ts +++ b/test/e2e/app-dir/use-cache/use-cache.test.ts @@ -52,30 +52,25 @@ describe('use-cache', () => { const browser = await next.browser('/errors') expect(await browser.waitForElementByCss('#cookies').text()).toContain( isNextDev - ? '`cookies` cannot be called inside "use cache".' + ? 'Route /errors used "cookies" inside "use cache".' : GENERIC_RSC_ERROR ) expect(await browser.waitForElementByCss('#headers').text()).toContain( isNextDev - ? '`headers` cannot be called inside "use cache".' + ? 'Route /errors used "headers" inside "use cache".' : GENERIC_RSC_ERROR ) expect(await browser.waitForElementByCss('#draft-mode').text()).toContain( - isNextDev - ? '`draftMode` cannot be called inside "use cache".' - : GENERIC_RSC_ERROR + 'Editing: false' ) // CLI assertions are skipped in deploy mode because `next.cliOutput` will only contain build-time logs. if (!isNextDeploy) { expect(next.cliOutput).toContain( - '`cookies` cannot be called inside "use cache".' - ) - expect(next.cliOutput).toContain( - '`headers` cannot be called inside "use cache".' + 'Route /errors used "cookies" inside "use cache". ' ) expect(next.cliOutput).toContain( - '`draftMode` cannot be called inside "use cache".' + 'Route /errors used "headers" inside "use cache". ' ) } }) diff --git a/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts b/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts index 136c95ba43bd1..08be5ac2b07b4 100644 --- a/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts +++ b/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts @@ -168,7 +168,7 @@ describe('opentelemetry', () => { }, { attributes: { - 'next.clientComponentLoadCount': 3, + 'next.clientComponentLoadCount': 6, 'next.span_type': 'NextNodeServer.clientComponentLoading', }, diff --git a/test/integration/telemetry/pages/warning.skip b/test/integration/telemetry/pages/warning.skip index 1d3d67cd64707..a6555bee4a49c 100644 --- a/test/integration/telemetry/pages/warning.skip +++ b/test/integration/telemetry/pages/warning.skip @@ -1,8 +1,8 @@ function a(v) { return v } -;['index.js'].forEach(f => { - require(a('./dynamic-file-imports/' + f)) +;['index.js'].forEach(async f => { + await import(a('./dynamic-file-imports/' + f)) }) export default () => 'Warn' diff --git a/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts b/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts index b7bbaf4e082dc..2fa21f66008e1 100644 --- a/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts +++ b/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts @@ -36,7 +36,8 @@ import { retry } from 'next-test-utils' rsc: process.env.TURBOPACK ? 1 : 3, }, 'app/named-reexport/client/page': { - 'action-browser': 3, + // Turbopack supports tree-shaking these re-exports + 'action-browser': process.env.TURBOPACK ? 1 : 3, }, }) }) diff --git a/turbopack/crates/node-file-trace/src/lib.rs b/turbopack/crates/node-file-trace/src/lib.rs index 71b2f4e505267..387c95240ac2b 100644 --- a/turbopack/crates/node-file-trace/src/lib.rs +++ b/turbopack/crates/node-file-trace/src/lib.rs @@ -28,7 +28,6 @@ use turbo_tasks::{ use turbo_tasks_fs::{ glob::Glob, DirectoryEntry, DiskFileSystem, FileSystem, FileSystemPath, ReadGlobResult, }; -use turbo_tasks_memory::MemoryBackend; use turbopack::{ emit_asset, emit_with_completion, module_options::ModuleOptionsContext, rebase::RebasedAsset, ModuleAssetContext, @@ -177,7 +176,7 @@ fn default_output_directory() -> String { } impl Args { - fn common(&self) -> &CommonArgs { + pub fn common(&self) -> &CommonArgs { match self { Args::Print { common, .. } | Args::Annotate { common, .. } @@ -205,7 +204,7 @@ async fn add_glob_results( let result = result.await?; for entry in result.results.values() { if let DirectoryEntry::File(path) = entry { - let source = Vc::upcast(FileSource::new(*path)); + let source = Vc::upcast(FileSource::new(**path)); let module = asset_context .process( source, @@ -224,7 +223,7 @@ async fn add_glob_results( Box::pin(add_glob_results(asset_context, result, list)) } // Boxing for async recursion - recurse(asset_context, *result, list).await?; + recurse(asset_context, **result, list).await?; } Ok(()) } @@ -310,78 +309,16 @@ fn process_input(dir: &Path, context_directory: &str, input: &[String]) -> Resul .collect() } -pub async fn start( +pub async fn start( args: Arc, - turbo_tasks: Option<&Arc>>, + turbo_tasks: Arc>, module_options: Option, resolve_options: Option, ) -> Result> { register(); - let &CommonArgs { - memory_limit, - #[cfg(feature = "persistent_cache")] - cache: CacheArgs { - ref cache, - ref cache_fully, - }, - .. - } = args.common(); - #[cfg(feature = "persistent_cache")] - if let Some(cache) = cache { - use tokio::time::timeout; - use turbo_tasks_memory::MemoryBackendWithPersistedGraph; - use turbo_tasks_rocksdb::RocksDbPersistedGraph; - - run( - &args, - || { - let start = Instant::now(); - let backend = MemoryBackendWithPersistedGraph::new( - RocksDbPersistedGraph::new(cache).unwrap(), - ); - let tt = TurboTasks::new(backend); - let elapsed = start.elapsed(); - println!("restored cache {}", FormatDuration(elapsed)); - tt - }, - |tt, _, duration| async move { - let mut start = Instant::now(); - if *cache_fully { - tt.wait_background_done().await; - tt.stop_and_wait().await; - let elapsed = start.elapsed(); - println!("flushed cache {}", FormatDuration(elapsed)); - } else { - let background_timeout = - std::cmp::max(duration / 5, Duration::from_millis(100)); - let timed_out = timeout(background_timeout, tt.wait_background_done()) - .await - .is_err(); - tt.stop_and_wait().await; - let elapsed = start.elapsed(); - if timed_out { - println!("flushed cache partially {}", FormatDuration(elapsed)); - } else { - println!("flushed cache completely {}", FormatDuration(elapsed)); - } - } - start = Instant::now(); - drop(tt); - let elapsed = start.elapsed(); - println!("writing cache {}", FormatDuration(elapsed)); - }, - ) - .await; - return; - } - run( - args.clone(), - || { - turbo_tasks.cloned().unwrap_or_else(|| { - TurboTasks::new(MemoryBackend::new(memory_limit.unwrap_or(usize::MAX))) - }) - }, + args, + turbo_tasks, |_, _, _| async move {}, module_options, resolve_options, @@ -391,7 +328,7 @@ pub async fn start( async fn run>( args: Arc, - create_tt: impl Fn() -> Arc>, + tt: Arc>, final_finish: impl FnOnce(Arc>, TaskId, Duration) -> F, module_options: Option, resolve_options: Option, @@ -459,7 +396,6 @@ async fn run>( matches!(&*args, Args::Annotate { .. }) || matches!(&*args, Args::Print { .. }); let (sender, mut receiver) = channel(1); let dir = current_dir().unwrap(); - let tt = create_tt(); let module_options = TransientInstance::new(module_options.unwrap_or_default()); let resolve_options = TransientInstance::new(resolve_options.unwrap_or_default()); let log_options = TransientInstance::new(LogOptions { diff --git a/turbopack/crates/node-file-trace/src/main.rs b/turbopack/crates/node-file-trace/src/main.rs index 2e435166363da..77767706c2df9 100644 --- a/turbopack/crates/node-file-trace/src/main.rs +++ b/turbopack/crates/node-file-trace/src/main.rs @@ -5,6 +5,8 @@ use std::sync::Arc; use anyhow::Result; use clap::Parser; use node_file_trace::{start, Args}; +use turbo_tasks::TurboTasks; +use turbo_tasks_memory::MemoryBackend; #[global_allocator] static ALLOC: turbo_tasks_malloc::TurboMalloc = turbo_tasks_malloc::TurboMalloc; @@ -15,7 +17,10 @@ async fn main() -> Result<()> { console_subscriber::init(); let args = Arc::new(Args::parse()); let should_print = matches!(&*args, Args::Print { .. }); - let result = start(args, None, None, None).await?; + let turbo_tasks = TurboTasks::new(MemoryBackend::new( + args.common().memory_limit.unwrap_or(usize::MAX), + )); + let result = start(args, turbo_tasks, None, None).await?; if should_print { for file in result.iter() { println!("{}", file); diff --git a/turbopack/crates/turbo-tasks-backend/Cargo.toml b/turbopack/crates/turbo-tasks-backend/Cargo.toml new file mode 100644 index 0000000000000..f51271f10f948 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "turbo-tasks-backend" +version = "0.1.0" +description = "TBD" +license = "MPL-2.0" +edition = "2021" +autobenches = false + +[lib] +bench = false + +[lints] +workspace = true + +[dependencies] +anyhow = { workspace = true } +async-trait = { workspace = true } +auto-hash-map = { workspace = true } +dashmap = { workspace = true, features = ["raw-api"]} +either = { workspace = true } +hashbrown = { workspace = true } +indexmap = { workspace = true } +once_cell = { workspace = true } +parking_lot = { workspace = true } +rand = { workspace = true } +rustc-hash = { workspace = true } +serde = { workspace = true } +smallvec = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } +turbo-prehash = { workspace = true } +turbo-tasks = { workspace = true } +turbo-tasks-hash = { workspace = true } +turbo-tasks-malloc = { workspace = true, default-features = false } +turbo-tasks-testing = { workspace = true } + +[build-dependencies] +turbo-tasks-build = { workspace = true } diff --git a/turbopack/crates/turbo-tasks-backend/build.rs b/turbopack/crates/turbo-tasks-backend/build.rs new file mode 100644 index 0000000000000..1673efed59cce --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/build.rs @@ -0,0 +1,5 @@ +use turbo_tasks_build::generate_register; + +fn main() { + generate_register(); +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/indexed.rs b/turbopack/crates/turbo-tasks-backend/src/backend/indexed.rs new file mode 100644 index 0000000000000..b5598224c2eef --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/indexed.rs @@ -0,0 +1,4 @@ +pub trait Indexed { + type Index: Clone + PartialEq + Eq + std::hash::Hash; + fn index(&self) -> Self::Index; +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs new file mode 100644 index 0000000000000..c8a9697a52d58 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs @@ -0,0 +1,1088 @@ +pub mod indexed; +mod operation; +mod storage; + +use std::{ + borrow::Cow, + collections::{HashMap, HashSet}, + future::Future, + hash::BuildHasherDefault, + mem::take, + pin::Pin, + sync::{ + atomic::{AtomicUsize, Ordering}, + Arc, + }, + time::Duration, +}; + +use anyhow::{bail, Result}; +use auto_hash_map::{AutoMap, AutoSet}; +use dashmap::DashMap; +use parking_lot::{Condvar, Mutex}; +use rustc_hash::FxHasher; +use smallvec::smallvec; +use turbo_tasks::{ + backend::{ + Backend, BackendJobId, CachedTaskType, CellContent, TaskExecutionSpec, TransientTaskRoot, + TransientTaskType, TypedCellContent, + }, + event::EventListener, + registry, + util::IdFactoryWithReuse, + CellId, FunctionId, RawVc, ReadConsistency, TaskId, TraitTypeId, TurboTasksBackendApi, + ValueTypeId, TRANSIENT_TASK_BIT, +}; + +pub use self::operation::AnyOperation; +use crate::{ + backend::{ + operation::{ + get_aggregation_number, is_root_node, AggregatedDataUpdate, AggregationUpdateJob, + AggregationUpdateQueue, CleanupOldEdgesOperation, ConnectChildOperation, + ExecuteContext, OutdatedEdge, + }, + storage::{get, get_many, remove, Storage}, + }, + data::{ + ActiveType, AggregationNumber, CachedDataItem, CachedDataItemIndex, CachedDataItemKey, + CachedDataItemValue, CachedDataUpdate, CellRef, InProgressCellState, InProgressState, + OutputValue, RootState, + }, + utils::{bi_map::BiMap, chunked_vec::ChunkedVec, ptr_eq_arc::PtrEqArc}, +}; + +const SNAPSHOT_REQUESTED_BIT: usize = 1 << (usize::BITS - 1); + +struct SnapshotRequest { + snapshot_requested: bool, + suspended_operations: HashSet>, +} + +impl SnapshotRequest { + fn new() -> Self { + Self { + snapshot_requested: false, + suspended_operations: HashSet::new(), + } + } +} + +type TransientTaskOnce = + Mutex> + Send + 'static>>>>; + +pub enum TransientTask { + /// A root task that will track dependencies and re-execute when + /// dependencies change. Task will eventually settle to the correct + /// execution. + /// + /// Always active. Automatically scheduled. + Root(TransientTaskRoot), + + // TODO implement these strongly consistency + /// A single root task execution. It won't track dependencies. + /// Task will definitely include all invalidations that happened before the + /// start of the task. It may or may not include invalidations that + /// happened after that. It may see these invalidations partially + /// applied. + /// + /// Active until done. Automatically scheduled. + Once(TransientTaskOnce), +} + +pub struct TurboTasksBackend { + persisted_task_id_factory: IdFactoryWithReuse, + transient_task_id_factory: IdFactoryWithReuse, + + persisted_task_cache_log: Mutex, TaskId)>>, + task_cache: BiMap, TaskId>, + transient_tasks: DashMap>, + + persisted_storage_log: Mutex>, + storage: Storage, + + /// Number of executing operations + Highest bit is set when snapshot is + /// requested. When that bit is set, operations should pause until the + /// snapshot is completed. When the bit is set and in progress counter + /// reaches zero, `operations_completed_when_snapshot_requested` is + /// triggered. + in_progress_operations: AtomicUsize, + + snapshot_request: Mutex, + /// Condition Variable that is triggered when `in_progress_operations` + /// reaches zero while snapshot is requested. All operations are either + /// completed or suspended. + operations_suspended: Condvar, + /// Condition Variable that is triggered when a snapshot is completed and + /// operations can continue. + snapshot_completed: Condvar, +} + +impl Default for TurboTasksBackend { + fn default() -> Self { + Self::new() + } +} + +impl TurboTasksBackend { + pub fn new() -> Self { + Self { + persisted_task_id_factory: IdFactoryWithReuse::new(1, (TRANSIENT_TASK_BIT - 1) as u64), + transient_task_id_factory: IdFactoryWithReuse::new( + TRANSIENT_TASK_BIT as u64, + u32::MAX as u64, + ), + persisted_task_cache_log: Mutex::new(ChunkedVec::new()), + task_cache: BiMap::new(), + transient_tasks: DashMap::new(), + persisted_storage_log: Mutex::new(ChunkedVec::new()), + storage: Storage::new(), + in_progress_operations: AtomicUsize::new(0), + snapshot_request: Mutex::new(SnapshotRequest::new()), + operations_suspended: Condvar::new(), + snapshot_completed: Condvar::new(), + } + } + + fn execute_context<'a>( + &'a self, + turbo_tasks: &'a dyn TurboTasksBackendApi, + ) -> ExecuteContext<'a> { + ExecuteContext::new(self, turbo_tasks) + } + + fn suspending_requested(&self) -> bool { + (self.in_progress_operations.load(Ordering::Relaxed) & SNAPSHOT_REQUESTED_BIT) != 0 + } + + fn operation_suspend_point(&self, suspend: impl FnOnce() -> AnyOperation) { + if self.suspending_requested() { + let operation = Arc::new(suspend()); + let mut snapshot_request = self.snapshot_request.lock(); + if snapshot_request.snapshot_requested { + snapshot_request + .suspended_operations + .insert(operation.clone().into()); + let value = self.in_progress_operations.fetch_sub(1, Ordering::AcqRel) - 1; + assert!((value & SNAPSHOT_REQUESTED_BIT) != 0); + if value == SNAPSHOT_REQUESTED_BIT { + self.operations_suspended.notify_all(); + } + self.snapshot_completed + .wait_while(&mut snapshot_request, |snapshot_request| { + snapshot_request.snapshot_requested + }); + self.in_progress_operations.fetch_add(1, Ordering::AcqRel); + snapshot_request + .suspended_operations + .remove(&operation.into()); + } + } + } + + pub(crate) fn start_operation(&self) -> OperationGuard<'_> { + let fetch_add = self.in_progress_operations.fetch_add(1, Ordering::AcqRel); + if (fetch_add & SNAPSHOT_REQUESTED_BIT) != 0 { + let mut snapshot_request = self.snapshot_request.lock(); + if snapshot_request.snapshot_requested { + let value = self.in_progress_operations.fetch_sub(1, Ordering::AcqRel) - 1; + if value == SNAPSHOT_REQUESTED_BIT { + self.operations_suspended.notify_all(); + } + self.snapshot_completed + .wait_while(&mut snapshot_request, |snapshot_request| { + snapshot_request.snapshot_requested + }); + self.in_progress_operations.fetch_add(1, Ordering::AcqRel); + } + } + OperationGuard { backend: self } + } +} + +pub(crate) struct OperationGuard<'a> { + backend: &'a TurboTasksBackend, +} + +impl<'a> Drop for OperationGuard<'a> { + fn drop(&mut self) { + let fetch_sub = self + .backend + .in_progress_operations + .fetch_sub(1, Ordering::AcqRel); + if fetch_sub - 1 == SNAPSHOT_REQUESTED_BIT { + self.backend.operations_suspended.notify_all(); + } + } +} + +// Operations +impl TurboTasksBackend { + fn connect_child( + &self, + parent_task: TaskId, + child_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::ConnectChildOperation::run( + parent_task, + child_task, + self.execute_context(turbo_tasks), + ); + } + + fn try_read_task_output( + &self, + task_id: TaskId, + reader: Option, + consistency: ReadConsistency, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + + if let Some(in_progress) = get!(task, InProgress) { + match in_progress { + InProgressState::Scheduled { done_event, .. } + | InProgressState::InProgress { done_event, .. } => { + let reader_desc = reader.map(|r| self.get_task_desc_fn(r)); + let listener = done_event.listen_with_note(move || { + if let Some(reader_desc) = reader_desc.as_ref() { + format!("try_read_task_output from {}", reader_desc()) + } else { + "try_read_task_output (untracked)".to_string() + } + }); + return Ok(Err(listener)); + } + } + } + + if matches!(consistency, ReadConsistency::Strong) { + // Ensure it's an root node + loop { + let aggregation_number = get_aggregation_number(&task); + if is_root_node(aggregation_number) { + break; + } + drop(task); + AggregationUpdateQueue::run( + AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number: u32::MAX, + distance: None, + }, + &ctx, + ); + task = ctx.task(task_id); + } + + // Check the dirty count of the root node + let dirty_tasks = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or_default(); + let root = get!(task, AggregateRoot); + if dirty_tasks > 0 { + // When there are dirty task, subscribe to the all_clean_event + let root = if let Some(root) = root { + root + } else { + // If we don't have a root state, add one. This also makes sure all tasks stay + // active and this task won't stale. CachedActiveUntilClean + // is automatically removed when this task is clean. + task.add_new(CachedDataItem::AggregateRoot { + value: RootState::new(ActiveType::CachedActiveUntilClean), + }); + get!(task, AggregateRoot).unwrap() + }; + let listener = root.all_clean_event.listen_with_note(move || { + format!( + "try_read_task_output (strongly consistent) from {:?}", + reader + ) + }); + return Ok(Err(listener)); + } + } + + if let Some(output) = get!(task, Output) { + let result = match output { + OutputValue::Cell(cell) => Some(Ok(Ok(RawVc::TaskCell(cell.task, cell.cell)))), + OutputValue::Output(task) => Some(Ok(Ok(RawVc::TaskOutput(*task)))), + OutputValue::Error | OutputValue::Panic => { + get!(task, Error).map(|error| Err(error.clone().into())) + } + }; + if let Some(result) = result { + if let Some(reader) = reader { + let _ = task.add(CachedDataItem::OutputDependent { + task: reader, + value: (), + }); + drop(task); + + let mut reader_task = ctx.task(reader); + if reader_task + .remove(&CachedDataItemKey::OutdatedOutputDependency { target: task_id }) + .is_none() + { + let _ = reader_task.add(CachedDataItem::OutputDependency { + target: task_id, + value: (), + }); + } + } + + return result; + } + } + + let reader_desc = reader.map(|r| self.get_task_desc_fn(r)); + let note = move || { + if let Some(reader_desc) = reader_desc.as_ref() { + format!("try_read_task_output (recompute) from {}", reader_desc()) + } else { + "try_read_task_output (recompute, untracked)".to_string() + } + }; + + // Output doesn't exist. We need to schedule the task to compute it. + let (item, listener) = + CachedDataItem::new_scheduled_with_listener(self.get_task_desc_fn(task_id), note); + task.add_new(item); + turbo_tasks.schedule(task_id); + + Ok(Err(listener)) + } + + fn try_read_task_cell( + &self, + task_id: TaskId, + reader: Option, + cell: CellId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + if let Some(content) = get!(task, CellData { cell }) { + let content = content.clone(); + if let Some(reader) = reader { + let _ = task.add(CachedDataItem::CellDependent { + cell, + task: reader, + value: (), + }); + drop(task); + + let mut reader_task = ctx.task(reader); + let target = CellRef { + task: task_id, + cell, + }; + if reader_task + .remove(&CachedDataItemKey::OutdatedCellDependency { target }) + .is_none() + { + let _ = reader_task.add(CachedDataItem::CellDependency { target, value: () }); + } + } + return Ok(Ok(CellContent(Some(content)).into_typed(cell.type_id))); + } + + // Check cell index range (cell might not exist at all) + let Some(max_id) = get!( + task, + CellTypeMaxIndex { + cell_type: cell.type_id + } + ) else { + bail!( + "Cell {cell:?} no longer exists in task {task_id:?} (no cell of this type exists)" + ); + }; + if cell.index > *max_id { + bail!("Cell {cell:?} no longer exists in task {task_id:?} (index out of bounds)"); + } + + // Cell should exist, but data was dropped or is not serializable. We need to recompute the + // task the get the cell content. + + let reader_desc = reader.map(|r| self.get_task_desc_fn(r)); + let note = move || { + if let Some(reader_desc) = reader_desc.as_ref() { + format!("try_read_task_cell from {}", reader_desc()) + } else { + "try_read_task_cell (untracked)".to_string() + } + }; + + // Register event listener for cell computation + if let Some(in_progress) = get!(task, InProgressCell { cell }) { + // Someone else is already computing the cell + let listener = in_progress.event.listen_with_note(note); + return Ok(Err(listener)); + } + + // We create the event and potentially schedule the task + let in_progress = InProgressCellState::new(task_id, cell); + + let listener = in_progress.event.listen_with_note(note); + task.add_new(CachedDataItem::InProgressCell { + cell, + value: in_progress, + }); + + // Schedule the task, if not already scheduled + if task.add(CachedDataItem::new_scheduled( + self.get_task_desc_fn(task_id), + )) { + turbo_tasks.schedule(task_id); + } + + Ok(Err(listener)) + } + + fn lookup_task_type(&self, task_id: TaskId) -> Option> { + if let Some(task_type) = self.task_cache.lookup_reverse(&task_id) { + return Some(task_type); + } + None + } + + // TODO feature flag that for hanging detection only + fn get_task_desc_fn(&self, task_id: TaskId) -> impl Fn() -> String + Send + Sync + 'static { + let task_type = self.lookup_task_type(task_id); + move || { + task_type.as_ref().map_or_else( + || format!("{task_id:?} transient"), + |task_type| format!("{task_id:?} {task_type}"), + ) + } + } +} + +impl Backend for TurboTasksBackend { + fn get_or_create_persistent_task( + &self, + task_type: CachedTaskType, + parent_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> TaskId { + if let Some(task_id) = self.task_cache.lookup_forward(&task_type) { + self.connect_child(parent_task, task_id, turbo_tasks); + return task_id; + } + + let task_type = Arc::new(task_type); + let task_id = self.persisted_task_id_factory.get(); + if let Err(existing_task_id) = self.task_cache.try_insert(task_type.clone(), task_id) { + // Safety: We just created the id and failed to insert it. + unsafe { + self.persisted_task_id_factory.reuse(task_id); + } + self.connect_child(parent_task, existing_task_id, turbo_tasks); + return existing_task_id; + } + self.persisted_task_cache_log + .lock() + .push((task_type, task_id)); + + self.connect_child(parent_task, task_id, turbo_tasks); + + task_id + } + + fn get_or_create_transient_task( + &self, + task_type: CachedTaskType, + parent_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> TaskId { + if let Some(task_id) = self.task_cache.lookup_forward(&task_type) { + self.connect_child(parent_task, task_id, turbo_tasks); + return task_id; + } + + let task_type = Arc::new(task_type); + let task_id = self.transient_task_id_factory.get(); + if let Err(existing_task_id) = self.task_cache.try_insert(task_type, task_id) { + // Safety: We just created the id and failed to insert it. + unsafe { + self.transient_task_id_factory.reuse(task_id); + } + self.connect_child(parent_task, existing_task_id, turbo_tasks); + return existing_task_id; + } + + self.connect_child(parent_task, task_id, turbo_tasks); + + task_id + } + + fn invalidate_task(&self, task_id: TaskId, turbo_tasks: &dyn TurboTasksBackendApi) { + operation::InvalidateOperation::run(smallvec![task_id], self.execute_context(turbo_tasks)); + } + + fn invalidate_tasks(&self, tasks: &[TaskId], turbo_tasks: &dyn TurboTasksBackendApi) { + operation::InvalidateOperation::run( + tasks.iter().copied().collect(), + self.execute_context(turbo_tasks), + ); + } + + fn invalidate_tasks_set( + &self, + tasks: &AutoSet, 2>, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::InvalidateOperation::run( + tasks.iter().copied().collect(), + self.execute_context(turbo_tasks), + ); + } + + fn get_task_description(&self, task: TaskId) -> std::string::String { + let task_type = self.lookup_task_type(task).expect("Task not found"); + task_type.to_string() + } + + fn try_get_function_id(&self, task_id: TaskId) -> Option { + self.lookup_task_type(task_id) + .and_then(|task_type| match &*task_type { + CachedTaskType::Native { fn_type, .. } => Some(*fn_type), + _ => None, + }) + } + + type TaskState = (); + fn new_task_state(&self, _task: TaskId) -> Self::TaskState {} + + fn try_start_task_execution( + &self, + task_id: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Option> { + enum TaskType { + Cached(Arc), + Transient(Arc), + } + let (task_type, once_task) = if let Some(task_type) = self.lookup_task_type(task_id) { + (TaskType::Cached(task_type), false) + } else if let Some(task_type) = self.transient_tasks.get(&task_id) { + ( + TaskType::Transient(task_type.clone()), + matches!(**task_type, TransientTask::Once(_)), + ) + } else { + return None; + }; + { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + let in_progress = remove!(task, InProgress)?; + let InProgressState::Scheduled { done_event } = in_progress else { + task.add_new(CachedDataItem::InProgress { value: in_progress }); + return None; + }; + task.add_new(CachedDataItem::InProgress { + value: InProgressState::InProgress { + stale: false, + once_task, + done_event, + }, + }); + + // Make all current children outdated (remove left-over outdated children) + enum Child { + Current(TaskId), + Outdated(TaskId), + } + let children = task + .iter(CachedDataItemIndex::Children) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::Child { task } => Some(Child::Current(task)), + CachedDataItemKey::OutdatedChild { task } => Some(Child::Outdated(task)), + _ => None, + }) + .collect::>(); + for child in children { + match child { + Child::Current(child) => { + let _ = task.add(CachedDataItem::OutdatedChild { + task: child, + value: (), + }); + } + Child::Outdated(child) => { + if !task.has_key(&CachedDataItemKey::Child { task: child }) { + task.remove(&CachedDataItemKey::OutdatedChild { task: child }); + } + } + } + } + + // Make all dependencies outdated + enum Dep { + CurrentCell(CellRef), + CurrentOutput(TaskId), + OutdatedCell(CellRef), + OutdatedOutput(TaskId), + } + let dependencies = task + .iter(CachedDataItemIndex::Dependencies) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::CellDependency { target } => Some(Dep::CurrentCell(target)), + CachedDataItemKey::OutputDependency { target } => { + Some(Dep::CurrentOutput(target)) + } + CachedDataItemKey::OutdatedCellDependency { target } => { + Some(Dep::OutdatedCell(target)) + } + CachedDataItemKey::OutdatedOutputDependency { target } => { + Some(Dep::OutdatedOutput(target)) + } + _ => None, + }) + .collect::>(); + for dep in dependencies { + match dep { + Dep::CurrentCell(cell) => { + let _ = task.add(CachedDataItem::OutdatedCellDependency { + target: cell, + value: (), + }); + } + Dep::CurrentOutput(output) => { + let _ = task.add(CachedDataItem::OutdatedOutputDependency { + target: output, + value: (), + }); + } + Dep::OutdatedCell(cell) => { + if !task.has_key(&CachedDataItemKey::CellDependency { target: cell }) { + task.remove(&CachedDataItemKey::OutdatedCellDependency { + target: cell, + }); + } + } + Dep::OutdatedOutput(output) => { + if !task.has_key(&CachedDataItemKey::OutputDependency { target: output }) { + task.remove(&CachedDataItemKey::OutdatedOutputDependency { + target: output, + }); + } + } + } + } + + // TODO: Make all collectibles outdated + } + + let (span, future) = match task_type { + TaskType::Cached(task_type) => match &*task_type { + CachedTaskType::Native { fn_type, this, arg } => ( + registry::get_function(*fn_type).span(), + registry::get_function(*fn_type).execute(*this, &**arg), + ), + CachedTaskType::ResolveNative { fn_type, .. } => { + let span = registry::get_function(*fn_type).resolve_span(); + let turbo_tasks = turbo_tasks.pin(); + ( + span, + Box::pin(async move { + let CachedTaskType::ResolveNative { fn_type, this, arg } = &*task_type + else { + unreachable!() + }; + CachedTaskType::run_resolve_native( + *fn_type, + *this, + &**arg, + task_id.persistence(), + turbo_tasks, + ) + .await + }) as Pin + Send + '_>>, + ) + } + CachedTaskType::ResolveTrait { + trait_type, + method_name, + .. + } => { + let span = registry::get_trait(*trait_type).resolve_span(method_name); + let turbo_tasks = turbo_tasks.pin(); + ( + span, + Box::pin(async move { + let CachedTaskType::ResolveTrait { + trait_type, + method_name, + this, + arg, + } = &*task_type + else { + unreachable!() + }; + CachedTaskType::run_resolve_trait( + *trait_type, + method_name.clone(), + *this, + &**arg, + task_id.persistence(), + turbo_tasks, + ) + .await + }) as Pin + Send + '_>>, + ) + } + }, + TaskType::Transient(task_type) => { + let task_type = task_type.clone(); + let span = tracing::trace_span!("turbo_tasks::root_task"); + let future = match &*task_type { + TransientTask::Root(f) => f(), + TransientTask::Once(future_mutex) => take(&mut *future_mutex.lock())?, + }; + (span, future) + } + }; + Some(TaskExecutionSpec { future, span }) + } + + fn task_execution_result( + &self, + task_id: TaskId, + result: Result, Option>>, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::UpdateOutputOperation::run(task_id, result, self.execute_context(turbo_tasks)); + } + + fn task_execution_completed( + &self, + task_id: TaskId, + _duration: Duration, + _memory_usage: usize, + cell_counters: &AutoMap, 8>, + stateful: bool, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> bool { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + let Some(CachedDataItemValue::InProgress { value: in_progress }) = + task.remove(&CachedDataItemKey::InProgress {}) + else { + panic!("Task execution completed, but task is not in progress: {task:#?}"); + }; + let InProgressState::InProgress { + done_event, + once_task: _, + stale, + } = in_progress + else { + panic!("Task execution completed, but task is not in progress: {task:#?}"); + }; + + // TODO handle stateful + let _ = stateful; + + if stale { + task.add_new(CachedDataItem::InProgress { + value: InProgressState::Scheduled { done_event }, + }); + drop(task); + drop(ctx); + } else { + // handle cell counters: update max index and remove cells that are no longer used + let mut removed_cells = HashMap::new(); + let mut old_counters: HashMap<_, _> = + get_many!(task, CellTypeMaxIndex { cell_type } max_index => (cell_type, max_index)); + for (&cell_type, &max_index) in cell_counters.iter() { + if let Some(old_max_index) = old_counters.remove(&cell_type) { + if old_max_index != max_index { + task.insert(CachedDataItem::CellTypeMaxIndex { + cell_type, + value: max_index, + }); + if old_max_index > max_index { + removed_cells.insert(cell_type, max_index + 1..=old_max_index); + } + } + } else { + task.add_new(CachedDataItem::CellTypeMaxIndex { + cell_type, + value: max_index, + }); + } + } + for (cell_type, old_max_index) in old_counters { + task.remove(&CachedDataItemKey::CellTypeMaxIndex { cell_type }); + removed_cells.insert(cell_type, 0..=old_max_index); + } + let mut removed_data = Vec::new(); + for (&cell_type, range) in removed_cells.iter() { + for index in range.clone() { + removed_data.extend( + task.remove(&CachedDataItemKey::CellData { + cell: CellId { + type_id: cell_type, + index, + }, + }) + .into_iter(), + ); + } + } + + // find all outdated data items (removed cells, outdated edges) + let old_edges = if task.is_indexed() { + task.iter(CachedDataItemIndex::Children) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::OutdatedChild { task } => { + Some(OutdatedEdge::Child(task)) + } + _ => None, + }) + .chain( + task.iter(CachedDataItemIndex::Dependencies) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::OutdatedCellDependency { target } => { + Some(OutdatedEdge::CellDependency(target)) + } + CachedDataItemKey::OutdatedOutputDependency { target } => { + Some(OutdatedEdge::OutputDependency(target)) + } + _ => None, + }), + ) + .chain( + task.iter(CachedDataItemIndex::CellDependent) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::CellDependent { cell, task } + if removed_cells + .get(&cell.type_id) + .map_or(false, |range| range.contains(&cell.index)) => + { + Some(OutdatedEdge::RemovedCellDependent(task)) + } + _ => None, + }), + ) + .collect::>() + } else { + task.iter_all() + .filter_map(|(key, _)| match *key { + CachedDataItemKey::OutdatedChild { task } => { + Some(OutdatedEdge::Child(task)) + } + CachedDataItemKey::OutdatedCellDependency { target } => { + Some(OutdatedEdge::CellDependency(target)) + } + CachedDataItemKey::OutdatedOutputDependency { target } => { + Some(OutdatedEdge::OutputDependency(target)) + } + CachedDataItemKey::CellDependent { cell, task } + if removed_cells + .get(&cell.type_id) + .map_or(false, |range| range.contains(&cell.index)) => + { + Some(OutdatedEdge::RemovedCellDependent(task)) + } + _ => None, + }) + .collect::>() + }; + + let was_dirty = task.remove(&CachedDataItemKey::Dirty {}).is_some(); + let data_update = if was_dirty { + let dirty_containers = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or_default(); + if dirty_containers == 0 { + if let Some(root_state) = get!(task, AggregateRoot) { + root_state.all_clean_event.notify(usize::MAX); + if matches!(root_state.ty, ActiveType::CachedActiveUntilClean) { + task.remove(&CachedDataItemKey::AggregateRoot {}); + } + } + AggregationUpdateJob::data_update( + &mut task, + AggregatedDataUpdate::no_longer_dirty_container(task_id), + ) + } else { + None + } + } else { + None + }; + + drop(task); + + done_event.notify(usize::MAX); + + CleanupOldEdgesOperation::run(task_id, old_edges, data_update, ctx); + + drop(removed_data) + } + + stale + } + + fn run_backend_job( + &self, + _: BackendJobId, + _: &dyn TurboTasksBackendApi, + ) -> Pin + Send + 'static)>> { + todo!() + } + + fn try_read_task_output( + &self, + task_id: TaskId, + reader: TaskId, + consistency: ReadConsistency, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_output(task_id, Some(reader), consistency, turbo_tasks) + } + + fn try_read_task_output_untracked( + &self, + task_id: TaskId, + consistency: ReadConsistency, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_output(task_id, None, consistency, turbo_tasks) + } + + fn try_read_task_cell( + &self, + task_id: TaskId, + cell: CellId, + reader: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_cell(task_id, Some(reader), cell, turbo_tasks) + } + + fn try_read_task_cell_untracked( + &self, + task_id: TaskId, + cell: CellId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_cell(task_id, None, cell, turbo_tasks) + } + + fn try_read_own_task_cell_untracked( + &self, + task_id: TaskId, + cell: CellId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result { + let ctx = self.execute_context(turbo_tasks); + let task = ctx.task(task_id); + if let Some(content) = get!(task, CellData { cell }) { + Ok(CellContent(Some(content.clone())).into_typed(cell.type_id)) + } else { + Ok(CellContent(None).into_typed(cell.type_id)) + } + } + + fn read_task_collectibles( + &self, + _: TaskId, + _: TraitTypeId, + _: TaskId, + _: &dyn TurboTasksBackendApi, + ) -> AutoMap, 1> { + todo!() + } + + fn emit_collectible( + &self, + _: TraitTypeId, + _: RawVc, + _: TaskId, + _: &dyn TurboTasksBackendApi, + ) { + todo!() + } + + fn unemit_collectible( + &self, + _: TraitTypeId, + _: RawVc, + _: u32, + _: TaskId, + _: &dyn TurboTasksBackendApi, + ) { + todo!() + } + + fn update_task_cell( + &self, + task_id: TaskId, + cell: CellId, + content: CellContent, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::UpdateCellOperation::run( + task_id, + cell, + content, + self.execute_context(turbo_tasks), + ); + } + + fn connect_task( + &self, + task: TaskId, + parent_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + ConnectChildOperation::run(parent_task, task, self.execute_context(turbo_tasks)); + } + + fn create_transient_task( + &self, + task_type: TransientTaskType, + _turbo_tasks: &dyn TurboTasksBackendApi, + ) -> TaskId { + let task_id = self.transient_task_id_factory.get(); + let root_type = match task_type { + TransientTaskType::Root(_) => ActiveType::RootTask, + TransientTaskType::Once(_) => ActiveType::OnceTask, + }; + self.transient_tasks.insert( + task_id, + Arc::new(match task_type { + TransientTaskType::Root(f) => TransientTask::Root(f), + TransientTaskType::Once(f) => TransientTask::Once(Mutex::new(Some(f))), + }), + ); + { + let mut task = self.storage.access_mut(task_id); + task.add(CachedDataItem::AggregationNumber { + value: AggregationNumber { + base: u32::MAX, + distance: 0, + effective: u32::MAX, + }, + }); + task.add(CachedDataItem::AggregateRoot { + value: RootState::new(root_type), + }); + task.add(CachedDataItem::new_scheduled(move || match root_type { + ActiveType::RootTask => "Root Task".to_string(), + ActiveType::OnceTask => "Once Task".to_string(), + _ => unreachable!(), + })); + } + task_id + } + fn dispose_root_task(&self, _: TaskId, _: &dyn TurboTasksBackendApi) { + todo!() + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs new file mode 100644 index 0000000000000..b019caf3090e8 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs @@ -0,0 +1,882 @@ +use std::{cmp::max, collections::VecDeque, num::NonZeroU32}; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::TaskId; + +use crate::{ + backend::{ + operation::{ExecuteContext, Operation, TaskGuard}, + storage::{get, get_many, iter_many, remove, update, update_count}, + }, + data::{ActiveType, AggregationNumber, CachedDataItem, CachedDataItemKey, RootState}, +}; + +const LEAF_NUMBER: u32 = 16; + +pub fn is_aggregating_node(aggregation_number: u32) -> bool { + aggregation_number >= LEAF_NUMBER +} + +pub fn is_root_node(aggregation_number: u32) -> bool { + aggregation_number == u32::MAX +} + +fn get_followers_with_aggregation_number( + task: &TaskGuard<'_>, + aggregation_number: u32, +) -> Vec { + if is_aggregating_node(aggregation_number) { + get_many!(task, Follower { task } count if count > 0 => task) + } else { + get_many!(task, Child { task } => task) + } +} + +fn get_followers(task: &TaskGuard<'_>) -> Vec { + get_followers_with_aggregation_number(task, get_aggregation_number(task)) +} + +pub fn get_uppers(task: &TaskGuard<'_>) -> Vec { + get_many!(task, Upper { task } count if count > 0 => task) +} + +fn iter_uppers<'a>(task: &'a TaskGuard<'a>) -> impl Iterator + 'a { + iter_many!(task, Upper { task } count if count > 0 => task) +} + +pub fn get_aggregation_number(task: &TaskGuard<'_>) -> u32 { + get!(task, AggregationNumber) + .map(|a| a.effective) + .unwrap_or_default() +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub enum AggregationUpdateJob { + UpdateAggregationNumber { + task_id: TaskId, + base_aggregation_number: u32, + distance: Option, + }, + InnerOfUppersHasNewFollower { + upper_ids: Vec, + new_follower_id: TaskId, + }, + InnerOfUpperHasNewFollowers { + upper_id: TaskId, + new_follower_ids: Vec, + }, + InnerOfUppersHasNewFollowers { + upper_ids: Vec, + new_follower_ids: Vec, + }, + InnerLostFollower { + upper_ids: Vec, + lost_follower_id: TaskId, + }, + InnerLostFollowers { + upper_ids: Vec, + lost_follower_ids: Vec, + }, + AggregatedDataUpdate { + upper_ids: Vec, + update: AggregatedDataUpdate, + }, + FindAndScheduleDirty { + task_ids: Vec, + }, + BalanceEdge { + upper_id: TaskId, + task_id: TaskId, + }, +} + +impl AggregationUpdateJob { + pub fn data_update( + task: &mut TaskGuard<'_>, + update: AggregatedDataUpdate, + ) -> Option { + let upper_ids: Vec<_> = get_uppers(task); + if !upper_ids.is_empty() { + Some(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: update.clone(), + }) + } else { + None + } + } +} + +#[derive(Default, Serialize, Deserialize, Clone, Debug)] +pub struct AggregatedDataUpdate { + dirty_container_update: Option<(TaskId, i32)>, + // TODO collectibles +} + +impl AggregatedDataUpdate { + fn from_task(task: &mut TaskGuard<'_>) -> Self { + let aggregation = get_aggregation_number(task); + let mut dirty = get!(task, Dirty).is_some(); + if is_aggregating_node(aggregation) { + let dirty_container_count = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or(0); + if dirty_container_count > 0 { + dirty = true; + } + } + if dirty { + Self::dirty_container(task.id()) + } else { + Self::default() + } + } + + fn invert(mut self) -> Self { + if let Some((_, value)) = self.dirty_container_update.as_mut() { + *value = -*value; + } + self + } + + fn apply( + &self, + task: &mut TaskGuard<'_>, + queue: &mut AggregationUpdateQueue, + ) -> AggregatedDataUpdate { + let Self { + dirty_container_update, + } = self; + let mut result = Self::default(); + if let Some((dirty_container_id, count)) = dirty_container_update { + let mut added = false; + let mut removed = false; + update!( + task, + AggregatedDirtyContainer { + task: *dirty_container_id + }, + |old: Option| { + let old = old.unwrap_or(0); + let new = old + *count; + if old <= 0 && new > 0 { + added = true; + } else if old > 0 && new <= 0 { + removed = true; + } + (new != 0).then_some(new) + } + ); + let mut count_update = 0; + if added { + if task.has_key(&CachedDataItemKey::AggregateRoot {}) { + queue.push(AggregationUpdateJob::FindAndScheduleDirty { + task_ids: vec![*dirty_container_id], + }) + } + count_update += 1; + } else if removed { + count_update -= 1; + } + let dirty = task.has_key(&CachedDataItemKey::Dirty {}); + let task_id = task.id(); + update!(task, AggregatedDirtyContainerCount, |old: Option| { + let old = old.unwrap_or(0); + let new = old + count_update; + if !dirty { + if old <= 0 && new > 0 { + result.dirty_container_update = Some((task_id, 1)); + } else if old > 0 && new <= 0 { + result.dirty_container_update = Some((task_id, -1)); + } + } + (new != 0).then_some(new) + }); + if let Some((_, count)) = result.dirty_container_update.as_ref() { + if let Some(root_state) = get!(task, AggregateRoot) { + if *count < 0 { + root_state.all_clean_event.notify(usize::MAX); + if matches!(root_state.ty, ActiveType::CachedActiveUntilClean) { + task.remove(&CachedDataItemKey::AggregateRoot {}); + } + } + } + } + } + result + } + + fn is_empty(&self) -> bool { + let Self { + dirty_container_update, + } = self; + dirty_container_update.is_none() + } + + pub fn dirty_container(task_id: TaskId) -> Self { + Self { + dirty_container_update: Some((task_id, 1)), + } + } + + pub fn no_longer_dirty_container(task_id: TaskId) -> Self { + Self { + dirty_container_update: Some((task_id, -1)), + } + } +} + +#[derive(Default, Serialize, Deserialize, Clone)] +pub struct AggregationUpdateQueue { + jobs: VecDeque, +} + +impl AggregationUpdateQueue { + pub fn new() -> Self { + Self { + jobs: VecDeque::with_capacity(8), + } + } + + pub fn is_empty(&self) -> bool { + self.jobs.is_empty() + } + + pub fn push(&mut self, job: AggregationUpdateJob) { + self.jobs.push_back(job); + } + + pub fn extend(&mut self, jobs: impl IntoIterator) { + self.jobs.extend(jobs); + } + + pub fn run(job: AggregationUpdateJob, ctx: &ExecuteContext<'_>) { + let mut queue = Self::new(); + queue.push(job); + queue.execute(ctx); + } + + pub fn process(&mut self, ctx: &ExecuteContext<'_>) -> bool { + if let Some(job) = self.jobs.pop_front() { + match job { + AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number, + distance: base_effective_distance, + } => { + self.update_aggregation_number( + ctx, + task_id, + base_effective_distance, + base_aggregation_number, + ); + } + AggregationUpdateJob::InnerOfUppersHasNewFollowers { + mut upper_ids, + mut new_follower_ids, + } => { + if upper_ids.len() > new_follower_ids.len() { + if let Some(new_follower_id) = new_follower_ids.pop() { + if new_follower_ids.is_empty() { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id, + }, + ); + } else { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollowers { + upper_ids: upper_ids.clone(), + new_follower_ids, + }, + ); + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id, + }, + ); + } + } + } else { + #[allow(clippy::collapsible_if, reason = "readablility")] + if let Some(upper_id) = upper_ids.pop() { + if upper_ids.is_empty() { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids, + }, + ); + } else { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollowers { + upper_ids, + new_follower_ids: new_follower_ids.clone(), + }, + ); + self.jobs.push_front( + AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids, + }, + ); + } + } + } + } + AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id, + } => { + self.inner_of_uppers_has_new_follower(ctx, new_follower_id, upper_ids); + } + AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids, + } => { + self.inner_of_upper_has_new_followers(ctx, new_follower_ids, upper_id); + } + AggregationUpdateJob::InnerLostFollowers { + upper_ids, + mut lost_follower_ids, + } => { + if let Some(lost_follower_id) = lost_follower_ids.pop() { + if lost_follower_ids.is_empty() { + self.jobs + .push_front(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + }); + } else { + self.jobs + .push_front(AggregationUpdateJob::InnerLostFollowers { + upper_ids: upper_ids.clone(), + lost_follower_ids, + }); + self.jobs + .push_front(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + }); + } + } + } + AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + } => { + self.inner_lost_follower(ctx, lost_follower_id, upper_ids); + } + AggregationUpdateJob::AggregatedDataUpdate { upper_ids, update } => { + self.aggregated_data_update(upper_ids, ctx, update); + } + AggregationUpdateJob::FindAndScheduleDirty { task_ids } => { + self.find_and_schedule_dirty(task_ids, ctx); + } + AggregationUpdateJob::BalanceEdge { upper_id, task_id } => { + self.balance_edge(ctx, upper_id, task_id); + } + } + } + + self.jobs.is_empty() + } + + fn balance_edge(&mut self, ctx: &ExecuteContext, upper_id: TaskId, task_id: TaskId) { + let (mut upper, mut task) = ctx.task_pair(upper_id, task_id); + let upper_aggregation_number = get_aggregation_number(&upper); + let task_aggregation_number = get_aggregation_number(&task); + + let should_be_inner = is_root_node(upper_aggregation_number) + || upper_aggregation_number > task_aggregation_number; + let should_be_follower = task_aggregation_number > upper_aggregation_number; + + if should_be_inner { + // remove all follower edges + let count = remove!(upper, Follower { task: task_id }).unwrap_or_default(); + match count.cmp(&0) { + std::cmp::Ordering::Less => upper.add_new(CachedDataItem::Follower { + task: task_id, + value: count, + }), + std::cmp::Ordering::Greater => { + let upper_ids = get_uppers(&upper); + + // Add the same amount of upper edges + if update_count!(task, Upper { task: upper_id }, count) { + // When this is a new inner node, update aggregated data and + // followers + let data = AggregatedDataUpdate::from_task(&mut task); + let followers = get_followers(&task); + let diff = data.apply(&mut upper, self); + + if !upper_ids.is_empty() && !diff.is_empty() { + // Notify uppers about changed aggregated data + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids: upper_ids.clone(), + update: diff, + }); + } + if !followers.is_empty() { + self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids: followers, + }); + } + } + + // notify uppers about lost follower + if !upper_ids.is_empty() { + self.push(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id: task_id, + }); + } + } + std::cmp::Ordering::Equal => {} + } + } else if should_be_follower { + // Remove the upper edge + let count = remove!(task, Upper { task: upper_id }).unwrap_or_default(); + if count > 0 { + let upper_ids: Vec<_> = get_uppers(&upper); + + // Add the same amount of follower edges + if update_count!(upper, Follower { task: task_id }, count) { + // notify uppers about new follower + if !upper_ids.is_empty() { + self.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids: upper_ids.clone(), + new_follower_id: task_id, + }); + } + } + + // Since this is no longer an inner node, update the aggregated data and + // followers + let data = AggregatedDataUpdate::from_task(&mut task).invert(); + let followers = get_followers(&task); + let diff = data.apply(&mut upper, self); + if !upper_ids.is_empty() && !diff.is_empty() { + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids: upper_ids.clone(), + update: diff, + }); + } + if !followers.is_empty() { + self.push(AggregationUpdateJob::InnerLostFollowers { + upper_ids: vec![upper_id], + lost_follower_ids: followers, + }); + } + } + } else { + // both nodes have the same aggregation number + // We need to change the aggregation number of the task + let current = get!(task, AggregationNumber).copied().unwrap_or_default(); + self.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number: current.base + 1, + distance: None, + }); + } + } + + fn find_and_schedule_dirty(&mut self, mut task_ids: Vec, ctx: &ExecuteContext) { + let popped = task_ids.pop(); + if !task_ids.is_empty() { + self.push(AggregationUpdateJob::FindAndScheduleDirty { task_ids }); + } + if let Some(task_id) = popped { + let mut task = ctx.task(task_id); + #[allow(clippy::collapsible_if, reason = "readablility")] + if task.has_key(&CachedDataItemKey::Dirty {}) { + let description = ctx.backend.get_task_desc_fn(task_id); + if task.add(CachedDataItem::new_scheduled(description)) { + ctx.turbo_tasks.schedule(task_id); + } + } + if is_aggregating_node(get_aggregation_number(&task)) { + if !task.has_key(&CachedDataItemKey::AggregateRoot {}) { + task.insert(CachedDataItem::AggregateRoot { + value: RootState::new(ActiveType::CachedActiveUntilClean), + }); + } + let dirty_containers: Vec<_> = + get_many!(task, AggregatedDirtyContainer { task } count if count > 0 => task); + if !dirty_containers.is_empty() { + self.push(AggregationUpdateJob::FindAndScheduleDirty { + task_ids: dirty_containers, + }); + } + } + } + } + + fn aggregated_data_update( + &mut self, + upper_ids: Vec, + ctx: &ExecuteContext, + update: AggregatedDataUpdate, + ) { + for upper_id in upper_ids { + let mut upper = ctx.task(upper_id); + let diff = update.apply(&mut upper, self); + if !diff.is_empty() { + let upper_ids = get_uppers(&upper); + if !upper_ids.is_empty() { + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }); + } + } + } + } + + fn inner_lost_follower( + &mut self, + ctx: &ExecuteContext, + lost_follower_id: TaskId, + mut upper_ids: Vec, + ) { + let mut follower = ctx.task(lost_follower_id); + let mut follower_in_upper_ids = Vec::new(); + upper_ids.retain(|&upper_id| { + let mut keep_upper = false; + update!(follower, Upper { task: upper_id }, |old| { + let Some(old) = old else { + follower_in_upper_ids.push(upper_id); + return None; + }; + if old < 0 { + follower_in_upper_ids.push(upper_id); + return Some(old); + } + if old == 1 { + keep_upper = true; + return None; + } + Some(old - 1) + }); + keep_upper + }); + if !upper_ids.is_empty() { + let data = AggregatedDataUpdate::from_task(&mut follower).invert(); + let followers: Vec<_> = get_followers(&follower); + drop(follower); + + if !data.is_empty() { + for upper_id in upper_ids.iter() { + // remove data from upper + let mut upper = ctx.task(*upper_id); + let diff = data.apply(&mut upper, self); + if !diff.is_empty() { + let upper_ids = get_uppers(&upper); + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }) + } + } + } + if !followers.is_empty() { + self.push(AggregationUpdateJob::InnerLostFollowers { + upper_ids: upper_ids.clone(), + lost_follower_ids: followers, + }); + } + } else { + drop(follower); + } + + for upper_id in follower_in_upper_ids { + let mut upper = ctx.task(upper_id); + if update_count!( + upper, + Follower { + task: lost_follower_id + }, + -1 + ) { + let upper_ids = get_uppers(&upper); + self.push(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + }) + } + } + } + + fn inner_of_uppers_has_new_follower( + &mut self, + ctx: &ExecuteContext, + new_follower_id: TaskId, + mut upper_ids: Vec, + ) { + let follower_aggregation_number = { + let follower = ctx.task(new_follower_id); + get_aggregation_number(&follower) + }; + let mut upper_ids_as_follower = Vec::new(); + upper_ids.retain(|&upper_id| { + let upper = ctx.task(upper_id); + // decide if it should be an inner or follower + let upper_aggregation_number = get_aggregation_number(&upper); + + if !is_root_node(upper_aggregation_number) + && upper_aggregation_number <= follower_aggregation_number + { + // It's a follower of the upper node + upper_ids_as_follower.push(upper_id); + false + } else { + // It's an inner node, continue with the list + true + } + }); + if !upper_ids.is_empty() { + let mut follower = ctx.task(new_follower_id); + upper_ids.retain(|&upper_id| { + if update_count!(follower, Upper { task: upper_id }, 1) { + // It's a new upper + true + } else { + // It's already an upper + false + } + }); + if !upper_ids.is_empty() { + let data = AggregatedDataUpdate::from_task(&mut follower); + let children: Vec<_> = get_followers(&follower); + drop(follower); + + if !data.is_empty() { + for upper_id in upper_ids.iter() { + // add data to upper + let mut upper = ctx.task(*upper_id); + let diff = data.apply(&mut upper, self); + if !diff.is_empty() { + let upper_ids = get_uppers(&upper); + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }) + } + } + } + if !children.is_empty() { + self.push(AggregationUpdateJob::InnerOfUppersHasNewFollowers { + upper_ids: upper_ids.clone(), + new_follower_ids: children, + }); + } + } else { + drop(follower); + } + } + upper_ids_as_follower.retain(|&upper_id| { + let mut upper = ctx.task(upper_id); + update_count!( + upper, + Follower { + task: new_follower_id + }, + 1 + ) + }); + if !upper_ids_as_follower.is_empty() { + self.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids: upper_ids_as_follower, + new_follower_id, + }); + } + } + + fn inner_of_upper_has_new_followers( + &mut self, + ctx: &ExecuteContext, + new_follower_ids: Vec, + upper_id: TaskId, + ) { + let mut followers_with_aggregation_number = new_follower_ids + .into_iter() + .map(|new_follower_id| { + let follower = ctx.task(new_follower_id); + (new_follower_id, get_aggregation_number(&follower)) + }) + .collect::>(); + + let mut followers_of_upper = Vec::new(); + { + let upper = ctx.task(upper_id); + // decide if it should be an inner or follower + let upper_aggregation_number = get_aggregation_number(&upper); + + if !is_root_node(upper_aggregation_number) { + followers_with_aggregation_number.retain( + |(follower_id, follower_aggregation_number)| { + if upper_aggregation_number <= *follower_aggregation_number { + // It's a follower of the upper node + followers_of_upper.push(*follower_id); + false + } else { + // It's an inner node, continue with the list + true + } + }, + ); + } + } + + let mut upper_data_updates = Vec::new(); + let mut upper_new_followers = Vec::new(); + for (follower_id, _) in followers_with_aggregation_number { + let mut follower = ctx.task(follower_id); + if update_count!(follower, Upper { task: upper_id }, 1) { + // It's a new upper + let data = AggregatedDataUpdate::from_task(&mut follower); + let children: Vec<_> = get_followers(&follower); + drop(follower); + + if !data.is_empty() { + upper_data_updates.push(data); + } + upper_new_followers.extend(children); + } + } + if !upper_new_followers.is_empty() { + self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids: upper_new_followers, + }); + } + if !upper_data_updates.is_empty() { + // add data to upper + let mut upper = ctx.task(upper_id); + let diffs = upper_data_updates + .into_iter() + .filter_map(|data| { + let diff = data.apply(&mut upper, self); + (!diff.is_empty()).then_some(diff) + }) + .collect::>(); + let mut iter = diffs.into_iter(); + if let Some(mut diff) = iter.next() { + let upper_ids = get_uppers(&upper); + drop(upper); + // TODO merge AggregatedDataUpdate + for next_diff in iter { + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids: upper_ids.clone(), + update: diff, + }); + diff = next_diff; + } + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }); + } + } + if !followers_of_upper.is_empty() { + let mut upper = ctx.task(upper_id); + followers_of_upper + .retain(|follower_id| update_count!(upper, Follower { task: *follower_id }, 1)); + if !followers_of_upper.is_empty() { + self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids: followers_of_upper, + }); + } + } + } + + fn update_aggregation_number( + &mut self, + ctx: &ExecuteContext, + task_id: TaskId, + base_effective_distance: Option>, + base_aggregation_number: u32, + ) { + let mut task = ctx.task(task_id); + let current = get!(task, AggregationNumber).copied().unwrap_or_default(); + // The wanted new distance is either the provided one or the old distance + let distance = base_effective_distance.map_or(current.distance, |d| d.get()); + // The base aggregation number can only increase + let base_aggregation_number = max(current.base, base_aggregation_number); + let old = current.effective; + // The new target effecive aggregation number is base + distance + let aggregation_number = base_aggregation_number.saturating_add(distance); + if old >= aggregation_number { + if base_aggregation_number != current.base && distance != current.distance { + task.insert(CachedDataItem::AggregationNumber { + value: AggregationNumber { + base: base_aggregation_number, + distance, + effective: old, + }, + }); + } + } else { + task.insert(CachedDataItem::AggregationNumber { + value: AggregationNumber { + base: base_aggregation_number, + distance, + effective: aggregation_number, + }, + }); + + if !is_aggregating_node(old) && is_aggregating_node(aggregation_number) { + // When converted from leaf to aggregating node, all children become + // followers + let children: Vec<_> = get_many!(task, Child { task } => task); + for child_id in children { + task.add_new(CachedDataItem::Follower { + task: child_id, + value: 1, + }); + } + } + + if is_aggregating_node(aggregation_number) { + // followers might become inner nodes when the aggregation number is + // increased + let followers = iter_many!(task, Follower { task } count if count > 0 => task); + for follower_id in followers { + self.push(AggregationUpdateJob::BalanceEdge { + upper_id: task_id, + task_id: follower_id, + }); + } + let uppers = iter_uppers(&task); + for upper_id in uppers { + self.push(AggregationUpdateJob::BalanceEdge { upper_id, task_id }); + } + } else { + let children = iter_many!(task, Child { task } => task); + for child_id in children { + self.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: child_id, + base_aggregation_number: aggregation_number + 1, + distance: None, + }); + } + } + } + } +} + +impl Operation for AggregationUpdateQueue { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + let _span = tracing::trace_span!("aggregation update queue").entered(); + loop { + ctx.operation_suspend_point(&self); + if self.process(ctx) { + return; + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs new file mode 100644 index 0000000000000..66a65ea95acb4 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs @@ -0,0 +1,143 @@ +use std::mem::take; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::TaskId; + +use crate::{ + backend::operation::{ + aggregation_update::{ + get_aggregation_number, get_uppers, is_aggregating_node, AggregationUpdateJob, + AggregationUpdateQueue, + }, + invalidate::make_task_dirty, + ExecuteContext, Operation, + }, + data::{CachedDataItemKey, CellRef}, +}; + +#[derive(Serialize, Deserialize, Clone, Default)] +pub enum CleanupOldEdgesOperation { + RemoveEdges { + task_id: TaskId, + outdated: Vec, + queue: AggregationUpdateQueue, + }, + AggregationUpdate { + queue: AggregationUpdateQueue, + }, + #[default] + Done, + // TODO Add aggregated edge +} + +#[derive(Serialize, Deserialize, Clone)] +pub enum OutdatedEdge { + Child(TaskId), + CellDependency(CellRef), + OutputDependency(TaskId), + RemovedCellDependent(TaskId), +} + +impl CleanupOldEdgesOperation { + pub fn run( + task_id: TaskId, + outdated: Vec, + data_update: Option, + ctx: ExecuteContext<'_>, + ) { + let mut queue = AggregationUpdateQueue::new(); + queue.extend(data_update); + CleanupOldEdgesOperation::RemoveEdges { + task_id, + outdated, + queue, + } + .execute(&ctx); + } +} + +impl Operation for CleanupOldEdgesOperation { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + loop { + ctx.operation_suspend_point(&self); + match self { + CleanupOldEdgesOperation::RemoveEdges { + task_id, + ref mut outdated, + ref mut queue, + } => { + if let Some(edge) = outdated.pop() { + match edge { + OutdatedEdge::Child(child_id) => { + let mut task = ctx.task(task_id); + task.remove(&CachedDataItemKey::Child { task: child_id }); + if is_aggregating_node(get_aggregation_number(&task)) { + queue.push(AggregationUpdateJob::InnerLostFollower { + upper_ids: vec![task_id], + lost_follower_id: child_id, + }); + } else { + let upper_ids = get_uppers(&task); + queue.push(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id: child_id, + }); + } + } + OutdatedEdge::CellDependency(CellRef { + task: cell_task_id, + cell, + }) => { + { + let mut task = ctx.task(cell_task_id); + task.remove(&CachedDataItemKey::CellDependent { + cell, + task: task_id, + }); + } + { + let mut task = ctx.task(task_id); + task.remove(&CachedDataItemKey::CellDependency { + target: CellRef { + task: cell_task_id, + cell, + }, + }); + } + } + OutdatedEdge::OutputDependency(output_task_id) => { + { + let mut task = ctx.task(output_task_id); + task.remove(&CachedDataItemKey::OutputDependent { + task: task_id, + }); + } + { + let mut task = ctx.task(task_id); + task.remove(&CachedDataItemKey::OutputDependency { + target: output_task_id, + }); + } + } + OutdatedEdge::RemovedCellDependent(task_id) => { + make_task_dirty(task_id, queue, ctx); + } + } + } + + if outdated.is_empty() { + self = CleanupOldEdgesOperation::AggregationUpdate { queue: take(queue) }; + } + } + CleanupOldEdgesOperation::AggregationUpdate { ref mut queue } => { + if queue.process(ctx) { + self = CleanupOldEdgesOperation::Done; + } + } + CleanupOldEdgesOperation::Done => { + return; + } + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs new file mode 100644 index 0000000000000..98b07e9978cdf --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs @@ -0,0 +1,149 @@ +use std::{cmp::max, num::NonZeroU32}; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::TaskId; + +use crate::{ + backend::{ + operation::{ + aggregation_update::{ + get_uppers, is_aggregating_node, AggregationUpdateJob, AggregationUpdateQueue, + }, + is_root_node, ExecuteContext, Operation, + }, + storage::get, + }, + data::{CachedDataItem, CachedDataItemIndex, CachedDataItemKey}, +}; + +const AGGREGATION_NUMBER_BUFFER_SPACE: u32 = 2; + +#[derive(Serialize, Deserialize, Clone, Default)] +pub enum ConnectChildOperation { + UpdateAggregation { + aggregation_update: AggregationUpdateQueue, + }, + #[default] + Done, +} + +impl ConnectChildOperation { + pub fn run(parent_task_id: TaskId, child_task_id: TaskId, ctx: ExecuteContext<'_>) { + let mut parent_task = ctx.task(parent_task_id); + parent_task.remove(&CachedDataItemKey::OutdatedChild { + task: child_task_id, + }); + if parent_task.add(CachedDataItem::Child { + task: child_task_id, + value: (), + }) { + // When task is added to a AggregateRoot is need to be scheduled, + // indirect connections are handled by the aggregation update. + let mut should_schedule = false; + if parent_task.has_key(&CachedDataItemKey::AggregateRoot {}) { + should_schedule = true; + } + // Update the task aggregation + let mut queue = AggregationUpdateQueue::new(); + + // Compute new parent aggregation number based on the number of children + let current_parent_aggregation = get!(parent_task, AggregationNumber) + .copied() + .unwrap_or_default(); + let parent_aggregation = if is_root_node(current_parent_aggregation.base) { + u32::MAX + } else { + let children_count = parent_task + .iter(CachedDataItemIndex::Children) + .filter(|(k, _)| { + matches!( + *k, + CachedDataItemKey::Child { .. } + | CachedDataItemKey::OutdatedChild { .. } + ) + }) + .count(); + let target_distance = children_count.ilog2() * 2; + let parent_aggregation = current_parent_aggregation + .base + .saturating_add(target_distance); + if target_distance != current_parent_aggregation.distance { + queue.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: parent_task_id, + base_aggregation_number: 0, + distance: NonZeroU32::new(target_distance), + }) + } + max(current_parent_aggregation.effective, parent_aggregation) + }; + + // Update child aggregation number based on parent aggregation number + let is_aggregating_node = is_aggregating_node(parent_aggregation); + if parent_task_id.is_transient() && !child_task_id.is_transient() { + queue.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: child_task_id, + base_aggregation_number: u32::MAX, + distance: None, + }); + } else if !is_aggregating_node { + queue.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: child_task_id, + base_aggregation_number: parent_aggregation + .saturating_add(AGGREGATION_NUMBER_BUFFER_SPACE), + distance: None, + }); + } + if is_aggregating_node { + queue.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids: vec![parent_task_id], + new_follower_id: child_task_id, + }); + } else { + let upper_ids = get_uppers(&parent_task); + queue.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id: child_task_id, + }); + } + drop(parent_task); + + { + let mut task = ctx.task(child_task_id); + should_schedule = should_schedule || !task.has_key(&CachedDataItemKey::Output {}); + if should_schedule { + let description = ctx.backend.get_task_desc_fn(child_task_id); + should_schedule = task.add(CachedDataItem::new_scheduled(description)); + } + } + if should_schedule { + ctx.schedule(child_task_id); + } + + ConnectChildOperation::UpdateAggregation { + aggregation_update: queue, + } + .execute(&ctx); + } + } +} + +impl Operation for ConnectChildOperation { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + loop { + ctx.operation_suspend_point(&self); + match self { + ConnectChildOperation::UpdateAggregation { + ref mut aggregation_update, + } => { + if aggregation_update.process(ctx) { + self = ConnectChildOperation::Done + } + } + + ConnectChildOperation::Done => { + return; + } + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs new file mode 100644 index 0000000000000..71c58a97ec92d --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs @@ -0,0 +1,93 @@ +use serde::{Deserialize, Serialize}; +use smallvec::SmallVec; +use turbo_tasks::TaskId; + +use crate::{ + backend::{ + operation::{ + aggregation_update::{ + AggregatedDataUpdate, AggregationUpdateJob, AggregationUpdateQueue, + }, + ExecuteContext, Operation, + }, + storage::get, + }, + data::{CachedDataItem, CachedDataItemKey}, +}; + +#[derive(Serialize, Deserialize, Clone, Default)] +pub enum InvalidateOperation { + // TODO DetermineActiveness + MakeDirty { + task_ids: SmallVec<[TaskId; 4]>, + }, + AggregationUpdate { + queue: AggregationUpdateQueue, + }, + // TODO Add to dirty tasks list + #[default] + Done, +} + +impl InvalidateOperation { + pub fn run(task_ids: SmallVec<[TaskId; 4]>, ctx: ExecuteContext<'_>) { + InvalidateOperation::MakeDirty { task_ids }.execute(&ctx) + } +} + +impl Operation for InvalidateOperation { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + loop { + ctx.operation_suspend_point(&self); + match self { + InvalidateOperation::MakeDirty { task_ids } => { + let mut queue = AggregationUpdateQueue::new(); + for task_id in task_ids { + make_task_dirty(task_id, &mut queue, ctx); + } + if queue.is_empty() { + self = InvalidateOperation::Done + } else { + self = InvalidateOperation::AggregationUpdate { queue } + } + continue; + } + InvalidateOperation::AggregationUpdate { ref mut queue } => { + if queue.process(ctx) { + self = InvalidateOperation::Done + } + } + InvalidateOperation::Done => { + return; + } + } + } + } +} + +pub fn make_task_dirty(task_id: TaskId, queue: &mut AggregationUpdateQueue, ctx: &ExecuteContext) { + if ctx.is_once_task(task_id) { + return; + } + + let mut task = ctx.task(task_id); + + if task.add(CachedDataItem::Dirty { value: () }) { + let dirty_container = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or_default(); + if dirty_container == 0 { + queue.extend(AggregationUpdateJob::data_update( + &mut task, + AggregatedDataUpdate::dirty_container(task_id), + )); + } + let root = task.has_key(&CachedDataItemKey::AggregateRoot {}); + if root { + let description = ctx.backend.get_task_desc_fn(task_id); + if task.add(CachedDataItem::new_scheduled(description)) { + ctx.schedule(task_id); + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs new file mode 100644 index 0000000000000..f1f0952861d8a --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs @@ -0,0 +1,360 @@ +mod aggregation_update; +mod cleanup_old_edges; +mod connect_child; +mod invalidate; +mod update_cell; +mod update_output; + +use std::{ + fmt::{Debug, Formatter}, + mem::take, +}; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::{KeyValuePair, TaskId, TurboTasksBackendApi}; + +use crate::{ + backend::{storage::StorageWriteGuard, OperationGuard, TransientTask, TurboTasksBackend}, + data::{ + CachedDataItem, CachedDataItemIndex, CachedDataItemKey, CachedDataItemValue, + CachedDataUpdate, + }, +}; + +pub trait Operation: + Serialize + + for<'de> Deserialize<'de> + + Default + + TryFrom + + Into +{ + fn execute(self, ctx: &ExecuteContext<'_>); +} + +pub struct ExecuteContext<'a> { + backend: &'a TurboTasksBackend, + turbo_tasks: &'a dyn TurboTasksBackendApi, + _operation_guard: Option>, + parent: Option<(&'a AnyOperation, &'a ExecuteContext<'a>)>, +} + +impl<'a> ExecuteContext<'a> { + pub fn new( + backend: &'a TurboTasksBackend, + turbo_tasks: &'a dyn TurboTasksBackendApi, + ) -> Self { + Self { + backend, + turbo_tasks, + _operation_guard: Some(backend.start_operation()), + parent: None, + } + } + + pub fn task(&self, task_id: TaskId) -> TaskGuard<'a> { + TaskGuard { + task: self.backend.storage.access_mut(task_id), + task_id, + backend: self.backend, + } + } + + pub fn is_once_task(&self, task_id: TaskId) -> bool { + if !task_id.is_transient() { + return false; + } + if let Some(ty) = self.backend.transient_tasks.get(&task_id) { + matches!(**ty, TransientTask::Once(_)) + } else { + false + } + } + + pub fn task_pair(&self, task_id1: TaskId, task_id2: TaskId) -> (TaskGuard<'a>, TaskGuard<'a>) { + let (task1, task2) = self.backend.storage.access_pair_mut(task_id1, task_id2); + ( + TaskGuard { + task: task1, + task_id: task_id1, + backend: self.backend, + }, + TaskGuard { + task: task2, + task_id: task_id2, + backend: self.backend, + }, + ) + } + + pub fn schedule(&self, task_id: TaskId) { + self.turbo_tasks.schedule(task_id); + } + + pub fn operation_suspend_point>(&self, op: &T) { + if self.parent.is_some() { + self.backend.operation_suspend_point(|| { + let mut nested = Vec::new(); + nested.push(op.clone().into()); + let mut cur = self; + while let Some((op, parent_ctx)) = cur.parent { + nested.push(op.clone()); + cur = parent_ctx; + } + AnyOperation::Nested(nested) + }); + } else { + self.backend.operation_suspend_point(|| op.clone().into()); + } + } + + pub fn suspending_requested(&self) -> bool { + self.backend.suspending_requested() + } + + pub fn run_operation( + &self, + parent_op_ref: &mut impl Operation, + run: impl FnOnce(ExecuteContext<'_>), + ) { + let parent_op = take(parent_op_ref); + let parent_op: AnyOperation = parent_op.into(); + let inner_ctx = ExecuteContext { + backend: self.backend, + turbo_tasks: self.turbo_tasks, + _operation_guard: None, + parent: Some((&parent_op, self)), + }; + run(inner_ctx); + *parent_op_ref = parent_op.try_into().unwrap(); + } +} + +pub struct TaskGuard<'a> { + task_id: TaskId, + task: StorageWriteGuard<'a, TaskId, CachedDataItem>, + backend: &'a TurboTasksBackend, +} + +impl<'a> Debug for TaskGuard<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let mut d = f.debug_struct("TaskGuard"); + d.field("task_id", &self.task_id); + if let Some(task_type) = self.backend.task_cache.lookup_reverse(&self.task_id) { + d.field("task_type", &task_type); + }; + for (key, value) in self.task.iter_all() { + d.field(&format!("{:?}", key), &value); + } + d.finish() + } +} + +impl<'a> TaskGuard<'a> { + pub fn id(&self) -> TaskId { + self.task_id + } + + #[must_use] + pub fn add(&mut self, item: CachedDataItem) -> bool { + if !item.is_persistent() { + self.task.add(item) + } else if self.task.add(item.clone()) { + let (key, value) = item.into_key_and_value(); + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: Some(value), + }); + true + } else { + false + } + } + + pub fn add_new(&mut self, item: CachedDataItem) { + let added = self.add(item); + assert!(added, "Item already exists"); + } + + pub fn insert(&mut self, item: CachedDataItem) -> Option { + let (key, value) = item.into_key_and_value(); + if !key.is_persistent() { + self.task + .insert(CachedDataItem::from_key_and_value(key, value)) + } else if value.is_persistent() { + let old = self.task.insert(CachedDataItem::from_key_and_value( + key.clone(), + value.clone(), + )); + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: Some(value), + }); + old + } else { + let item = CachedDataItem::from_key_and_value(key.clone(), value); + if let Some(old) = self.task.insert(item) { + if old.is_persistent() { + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: None, + }); + } + Some(old) + } else { + None + } + } + } + + pub fn update( + &mut self, + key: &CachedDataItemKey, + update: impl FnOnce(Option) -> Option, + ) { + if !key.is_persistent() { + self.task.update(key, update); + return; + } + let Self { + task, + task_id, + backend, + } = self; + let mut add_persisting_item = false; + task.update(key, |old| { + let old_persistent = old.as_ref().map(|old| old.is_persistent()).unwrap_or(false); + let new = update(old); + let new_persistent = new.as_ref().map(|new| new.is_persistent()).unwrap_or(false); + + match (old_persistent, new_persistent) { + (false, false) => {} + (true, false) => { + add_persisting_item = true; + backend.persisted_storage_log.lock().push(CachedDataUpdate { + key: key.clone(), + task: *task_id, + value: None, + }); + } + (_, true) => { + add_persisting_item = true; + backend.persisted_storage_log.lock().push(CachedDataUpdate { + key: key.clone(), + task: *task_id, + value: new.clone(), + }); + } + } + + new + }); + if add_persisting_item { + // TODO task.persistance_state.add_persisting_item(); + } + } + + pub fn remove(&mut self, key: &CachedDataItemKey) -> Option { + let old_value = self.task.remove(key); + if let Some(value) = old_value { + if key.is_persistent() && value.is_persistent() { + let key = key.clone(); + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: None, + }); + } + Some(value) + } else { + None + } + } + + pub fn get(&self, key: &CachedDataItemKey) -> Option<&CachedDataItemValue> { + self.task.get(key) + } + + pub fn has_key(&self, key: &CachedDataItemKey) -> bool { + self.task.has_key(key) + } + + pub fn is_indexed(&self) -> bool { + self.task.is_indexed() + } + + pub fn iter( + &self, + index: CachedDataItemIndex, + ) -> impl Iterator { + self.task.iter(Some(index)) + } + + pub fn iter_all(&self) -> impl Iterator { + self.task.iter_all() + } +} + +macro_rules! impl_operation { + ($name:ident $type_path:path) => { + impl From<$type_path> for AnyOperation { + fn from(op: $type_path) -> Self { + AnyOperation::$name(op) + } + } + + impl TryFrom for $type_path { + type Error = (); + + fn try_from(op: AnyOperation) -> Result { + match op { + AnyOperation::$name(op) => Ok(op), + _ => Err(()), + } + } + } + + pub use $type_path; + }; +} + +#[derive(Serialize, Deserialize, Clone)] +pub enum AnyOperation { + ConnectChild(connect_child::ConnectChildOperation), + Invalidate(invalidate::InvalidateOperation), + CleanupOldEdges(cleanup_old_edges::CleanupOldEdgesOperation), + AggregationUpdate(aggregation_update::AggregationUpdateQueue), + Nested(Vec), +} + +impl_operation!(ConnectChild connect_child::ConnectChildOperation); +impl_operation!(Invalidate invalidate::InvalidateOperation); +impl_operation!(CleanupOldEdges cleanup_old_edges::CleanupOldEdgesOperation); +impl_operation!(AggregationUpdate aggregation_update::AggregationUpdateQueue); + +pub use self::{ + aggregation_update::{ + get_aggregation_number, is_root_node, AggregatedDataUpdate, AggregationUpdateJob, + }, + cleanup_old_edges::OutdatedEdge, + update_cell::UpdateCellOperation, + update_output::UpdateOutputOperation, +}; diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs new file mode 100644 index 0000000000000..b7b4e185839bc --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs @@ -0,0 +1,52 @@ +use turbo_tasks::{backend::CellContent, CellId, TaskId}; + +use crate::{ + backend::{ + operation::{ExecuteContext, InvalidateOperation}, + storage::{get_many, remove}, + }, + data::{CachedDataItem, CachedDataItemKey}, +}; + +pub struct UpdateCellOperation; + +impl UpdateCellOperation { + pub fn run(task: TaskId, cell: CellId, content: CellContent, ctx: ExecuteContext<'_>) { + let mut task = ctx.task(task); + let old_content = if let CellContent(Some(new_content)) = content { + task.insert(CachedDataItem::CellData { + cell, + value: new_content, + }) + } else { + task.remove(&CachedDataItemKey::CellData { cell }) + }; + + if let Some(in_progress) = remove!(task, InProgressCell { cell }) { + in_progress.event.notify(usize::MAX); + } + + let recomputed = old_content.is_none() && !task.has_key(&CachedDataItemKey::Dirty {}); + + if recomputed { + // Task wasn't invalidated, so we just recompute, so the content has not actually + // changed (At least we have to assume that tasks are deterministic and + // pure). + drop(task); + drop(old_content); + return; + } + + let dependent = get_many!( + task, + CellDependent { cell: dependent_cell, task } _value + if dependent_cell == cell + => task + ); + + drop(task); + drop(old_content); + + InvalidateOperation::run(dependent, ctx); + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_output.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_output.rs new file mode 100644 index 0000000000000..efcee8546d8f5 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_output.rs @@ -0,0 +1,86 @@ +use std::borrow::Cow; + +use anyhow::{anyhow, Result}; +use turbo_tasks::{util::SharedError, RawVc, TaskId}; + +use crate::{ + backend::{ + operation::{ExecuteContext, InvalidateOperation}, + storage::get_many, + }, + data::{CachedDataItem, CachedDataItemKey, CachedDataItemValue, CellRef, OutputValue}, +}; + +pub struct UpdateOutputOperation; + +impl UpdateOutputOperation { + pub fn run( + task_id: TaskId, + output: Result, Option>>, + ctx: ExecuteContext<'_>, + ) { + let mut task = ctx.task(task_id); + let old_error = task.remove(&CachedDataItemKey::Error {}); + let current_output = task.get(&CachedDataItemKey::Output {}); + let output_value = match output { + Ok(Ok(RawVc::TaskOutput(output_task_id))) => { + if let Some(CachedDataItemValue::Output { + value: OutputValue::Output(current_task_id), + }) = current_output + { + if *current_task_id == output_task_id { + return; + } + } + OutputValue::Output(output_task_id) + } + Ok(Ok(RawVc::TaskCell(output_task_id, cell))) => { + if let Some(CachedDataItemValue::Output { + value: + OutputValue::Cell(CellRef { + task: current_task_id, + cell: current_cell, + }), + }) = current_output + { + if *current_task_id == output_task_id && *current_cell == cell { + return; + } + } + OutputValue::Cell(CellRef { + task: output_task_id, + cell, + }) + } + Ok(Ok(RawVc::LocalCell(_, _))) => { + panic!("LocalCell must not be output of a task"); + } + Ok(Ok(RawVc::LocalOutput(_, _))) => { + panic!("LocalOutput must not be output of a task"); + } + Ok(Err(err)) => { + task.insert(CachedDataItem::Error { + value: SharedError::new(err), + }); + OutputValue::Error + } + Err(panic) => { + task.insert(CachedDataItem::Error { + value: SharedError::new(anyhow!("Panic: {:?}", panic)), + }); + OutputValue::Panic + } + }; + let old_content = task.insert(CachedDataItem::Output { + value: output_value, + }); + + let dependent = get_many!(task, OutputDependent { task } _value => task); + + drop(task); + drop(old_content); + drop(old_error); + + InvalidateOperation::run(dependent, ctx); + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs new file mode 100644 index 0000000000000..7a3006624c93c --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs @@ -0,0 +1,371 @@ +use std::{ + hash::{BuildHasherDefault, Hash}, + mem::take, + ops::{Deref, DerefMut}, + thread::available_parallelism, +}; + +use auto_hash_map::{map::Entry, AutoMap}; +use dashmap::DashMap; +use either::Either; +use rustc_hash::FxHasher; +use turbo_tasks::KeyValuePair; + +use crate::{ + backend::indexed::Indexed, + utils::dash_map_multi::{get_multiple_mut, RefMut}, +}; + +const INDEX_THRESHOLD: usize = 1024; + +type IndexedMap = AutoMap< + <::Key as Indexed>::Index, + AutoMap<::Key, ::Value>, +>; + +pub enum InnerStorage +where + T::Key: Indexed, +{ + Plain { map: AutoMap }, + Indexed { map: IndexedMap }, +} + +impl InnerStorage +where + T::Key: Indexed, +{ + fn new() -> Self { + Self::Plain { + map: AutoMap::new(), + } + } + + fn check_threshold(&mut self) { + let InnerStorage::Plain { map: plain_map } = self else { + return; + }; + if plain_map.len() >= INDEX_THRESHOLD { + let mut map: IndexedMap = AutoMap::new(); + for (key, value) in take(plain_map).into_iter() { + let index = key.index(); + map.entry(index).or_default().insert(key, value); + } + *self = InnerStorage::Indexed { map }; + } + } + + fn get_map_mut(&mut self, key: &T::Key) -> &mut AutoMap { + self.check_threshold(); + match self { + InnerStorage::Plain { map, .. } => map, + InnerStorage::Indexed { map, .. } => map.entry(key.index()).or_default(), + } + } + + fn get_map(&self, key: &T::Key) -> Option<&AutoMap> { + match self { + InnerStorage::Plain { map, .. } => Some(map), + InnerStorage::Indexed { map, .. } => map.get(&key.index()), + } + } + + fn index_map(&self, index: ::Index) -> Option<&AutoMap> { + match self { + InnerStorage::Plain { map, .. } => Some(map), + InnerStorage::Indexed { map, .. } => map.get(&index), + } + } + + pub fn add(&mut self, item: T) -> bool { + let (key, value) = item.into_key_and_value(); + match self.get_map_mut(&key).entry(key) { + Entry::Occupied(_) => false, + Entry::Vacant(e) => { + e.insert(value); + true + } + } + } + + pub fn insert(&mut self, item: T) -> Option { + let (key, value) = item.into_key_and_value(); + self.get_map_mut(&key).insert(key, value) + } + + pub fn remove(&mut self, key: &T::Key) -> Option { + self.get_map_mut(key).remove(key) + } + + pub fn get(&self, key: &T::Key) -> Option<&T::Value> { + self.get_map(key).and_then(|m| m.get(key)) + } + + pub fn has_key(&self, key: &T::Key) -> bool { + self.get_map(key) + .map(|m| m.contains_key(key)) + .unwrap_or_default() + } + + pub fn is_indexed(&self) -> bool { + matches!(self, InnerStorage::Indexed { .. }) + } + + pub fn iter( + &self, + index: ::Index, + ) -> impl Iterator { + self.index_map(index) + .map(|m| m.iter()) + .into_iter() + .flatten() + } + + pub fn iter_all(&self) -> impl Iterator { + match self { + InnerStorage::Plain { map, .. } => Either::Left(map.iter()), + InnerStorage::Indexed { map, .. } => { + Either::Right(map.iter().flat_map(|(_, m)| m.iter())) + } + } + } +} + +impl InnerStorage +where + T::Key: Indexed, + T::Value: Default, + T::Key: Clone, +{ + pub fn update( + &mut self, + key: &T::Key, + update: impl FnOnce(Option) -> Option, + ) { + let map = self.get_map_mut(key); + if let Some(value) = map.get_mut(key) { + let v = take(value); + if let Some(v) = update(Some(v)) { + *value = v; + } else { + map.remove(key); + } + } else if let Some(v) = update(None) { + map.insert(key.clone(), v); + } + } +} + +impl InnerStorage +where + T::Key: Indexed, + T::Value: PartialEq, +{ + pub fn has(&self, item: &mut T) -> bool { + let (key, value) = take(item).into_key_and_value(); + let result = if let Some(stored_value) = self.get(&key) { + *stored_value == value + } else { + false + }; + *item = T::from_key_and_value(key, value); + result + } +} + +pub struct Storage +where + T::Key: Indexed, +{ + map: DashMap, BuildHasherDefault>, +} + +impl Storage +where + T: KeyValuePair, + T::Key: Indexed, + K: Eq + std::hash::Hash + Clone, +{ + pub fn new() -> Self { + let shard_amount = + (available_parallelism().map_or(4, |v| v.get()) * 64).next_power_of_two(); + Self { + map: DashMap::with_capacity_and_hasher_and_shard_amount( + 1024 * 1024, + Default::default(), + shard_amount, + ), + } + } + + pub fn access_mut(&self, key: K) -> StorageWriteGuard<'_, K, T> { + let inner = match self.map.entry(key) { + dashmap::mapref::entry::Entry::Occupied(e) => e.into_ref(), + dashmap::mapref::entry::Entry::Vacant(e) => e.insert(InnerStorage::new()), + }; + StorageWriteGuard { + inner: inner.into(), + } + } + + pub fn access_pair_mut( + &self, + key1: K, + key2: K, + ) -> (StorageWriteGuard<'_, K, T>, StorageWriteGuard<'_, K, T>) { + let (a, b) = get_multiple_mut(&self.map, key1, key2, || InnerStorage::new()); + ( + StorageWriteGuard { inner: a }, + StorageWriteGuard { inner: b }, + ) + } +} + +pub struct StorageWriteGuard<'a, K, T> +where + T: KeyValuePair, + T::Key: Indexed, +{ + inner: RefMut<'a, K, InnerStorage, BuildHasherDefault>, +} + +impl<'a, K, T> Deref for StorageWriteGuard<'a, K, T> +where + T: KeyValuePair, + T::Key: Indexed, + K: Eq + Hash, +{ + type Target = InnerStorage; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl<'a, K, T> DerefMut for StorageWriteGuard<'a, K, T> +where + T: KeyValuePair, + T::Key: Indexed, + K: Eq + Hash, +{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +macro_rules! get { + ($task:ident, $key:ident $input:tt) => { + if let Some($crate::data::CachedDataItemValue::$key { value }) = $task.get(&$crate::data::CachedDataItemKey::$key $input).as_ref() { + Some(value) + } else { + None + } + }; + ($task:ident, $key:ident) => { + $crate::backend::storage::get!($task, $key {}) + }; +} + +macro_rules! iter_many { + ($task:ident, $key:ident $input:tt => $value:ident) => { + $task + .iter($crate::data::indicies::$key) + .filter_map(|(key, _)| match *key { + $crate::data::CachedDataItemKey::$key $input => Some($value), + _ => None, + }) + }; + ($task:ident, $key:ident $input:tt $value_ident:ident => $value:expr) => { + $task + .iter($crate::data::indicies::$key) + .filter_map(|(key, value)| match (key, value) { + (&$crate::data::CachedDataItemKey::$key $input, &$crate::data::CachedDataItemValue::$key { value: $value_ident }) => Some($value), + _ => None, + }) + }; + ($task:ident, $key:ident $input:tt $value_ident:ident if $cond:expr => $value:expr) => { + $task + .iter($crate::data::indicies::$key) + .filter_map(|(key, value)| match (key, value) { + (&$crate::data::CachedDataItemKey::$key $input, &$crate::data::CachedDataItemValue::$key { value: $value_ident }) if $cond => Some($value), + _ => None, + }) + }; +} + +macro_rules! get_many { + ($task:ident, $key:ident $input:tt => $value:ident) => { + $crate::backend::storage::iter_many!($task, $key $input => $value).collect() + }; + ($task:ident, $key:ident $input:tt $value_ident:ident => $value:expr) => { + $crate::backend::storage::iter_many!($task, $key $input $value_ident => $value).collect() + }; + ($task:ident, $key:ident $input:tt $value_ident:ident if $cond:expr => $value:expr) => { + $crate::backend::storage::iter_many!($task, $key $input $value_ident if $cond => $value).collect() + }; +} + +macro_rules! update { + ($task:ident, $key:ident $input:tt, $update:expr) => { + #[allow(unused_mut)] + match $update { + mut update => $task.update(&$crate::data::CachedDataItemKey::$key $input, |old| { + update(old.and_then(|old| { + if let $crate::data::CachedDataItemValue::$key { value } = old { + Some(value) + } else { + None + } + })) + .map(|new| $crate::data::CachedDataItemValue::$key { value: new }) + }) + } + }; + ($task:ident, $key:ident, $update:expr) => { + $crate::backend::storage::update!($task, $key {}, $update) + }; +} + +macro_rules! update_count { + ($task:ident, $key:ident $input:tt, $update:expr) => { + match $update { + update => { + let mut state_change = false; + $crate::backend::storage::update!($task, $key $input, |old: Option| { + if let Some(old) = old { + let new = old + update; + state_change = old <= 0 && new > 0 || old > 0 && new <= 0; + (new != 0).then_some(new) + } else { + state_change = update > 0; + (update != 0).then_some(update) + } + }); + state_change + } + } + }; + ($task:ident, $key:ident, $update:expr) => { + $crate::backend::storage::update_count!($task, $key {}, $update) + }; +} + +macro_rules! remove { + ($task:ident, $key:ident $input:tt) => { + if let Some($crate::data::CachedDataItemValue::$key { value }) = $task.remove(&$crate::data::CachedDataItemKey::$key $input) { + Some(value) + } else { + None + } + }; + ($task:ident, $key:ident) => { + $crate::backend::storage::remove!($task, $key {}) + }; +} + +pub(crate) use get; +pub(crate) use get_many; +pub(crate) use iter_many; +pub(crate) use remove; +pub(crate) use update; +pub(crate) use update_count; diff --git a/turbopack/crates/turbo-tasks-backend/src/data.rs b/turbopack/crates/turbo-tasks-backend/src/data.rs new file mode 100644 index 0000000000000..390ac1c093d16 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/data.rs @@ -0,0 +1,421 @@ +use serde::{Deserialize, Serialize}; +use turbo_tasks::{ + event::{Event, EventListener}, + util::SharedError, + CellId, KeyValuePair, SharedReference, TaskId, ValueTypeId, +}; + +use crate::backend::indexed::Indexed; + +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Serialize, Deserialize)] +pub struct CellRef { + pub task: TaskId, + pub cell: CellId, +} + +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Serialize, Deserialize)] +pub struct CollectiblesRef { + pub task: TaskId, + pub collectible_type: ValueTypeId, +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum OutputValue { + Cell(CellRef), + Output(TaskId), + Error, + Panic, +} +impl OutputValue { + fn is_transient(&self) -> bool { + match self { + OutputValue::Cell(cell) => cell.task.is_transient(), + OutputValue::Output(task) => task.is_transient(), + OutputValue::Error => false, + OutputValue::Panic => false, + } + } +} + +#[derive(Debug)] +pub struct RootState { + pub ty: ActiveType, + pub all_clean_event: Event, +} + +impl RootState { + pub fn new(ty: ActiveType) -> Self { + Self { + ty, + all_clean_event: Event::new(|| "RootState::all_clean_event".to_string()), + } + } +} + +#[derive(Debug, Clone, Copy)] +pub enum ActiveType { + RootTask, + OnceTask, + /// The aggregated task graph was scheduled because it has reached an AggregatedRoot while + /// propagating the dirty container or is read strongly consistent. This state is reset when + /// all this sub graph becomes clean again. + CachedActiveUntilClean, +} + +impl Clone for RootState { + fn clone(&self) -> Self { + panic!("RootState cannot be cloned"); + } +} + +#[derive(Debug)] +pub enum InProgressState { + Scheduled { + done_event: Event, + }, + InProgress { + stale: bool, + #[allow(dead_code)] + once_task: bool, + done_event: Event, + }, +} + +impl Clone for InProgressState { + fn clone(&self) -> Self { + panic!("InProgressState cannot be cloned"); + } +} + +#[derive(Debug)] +pub struct InProgressCellState { + pub event: Event, +} + +impl Clone for InProgressCellState { + fn clone(&self) -> Self { + panic!("InProgressCell cannot be cloned"); + } +} + +impl InProgressCellState { + pub fn new(task_id: TaskId, cell: CellId) -> Self { + InProgressCellState { + event: Event::new(move || { + format!("InProgressCellState::event ({} {:?})", task_id, cell) + }), + } + } +} + +#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)] +pub struct AggregationNumber { + pub base: u32, + pub distance: u32, + pub effective: u32, +} + +#[derive(Debug, Clone, KeyValuePair)] +pub enum CachedDataItem { + // Output + Output { + value: OutputValue, + }, + Collectible { + collectible: CellRef, + value: (), + }, + + // State + Dirty { + value: (), + }, + DirtyWhenPersisted { + value: (), + }, + + // Children + Child { + task: TaskId, + value: (), + }, + + // Cells + CellData { + cell: CellId, + value: SharedReference, + }, + CellTypeMaxIndex { + cell_type: ValueTypeId, + value: u32, + }, + + // Dependencies + OutputDependency { + target: TaskId, + value: (), + }, + CellDependency { + target: CellRef, + value: (), + }, + CollectiblesDependency { + target: CollectiblesRef, + value: (), + }, + + // Dependent + OutputDependent { + task: TaskId, + value: (), + }, + CellDependent { + cell: CellId, + task: TaskId, + value: (), + }, + CollectiblesDependent { + collectibles_type: ValueTypeId, + task: TaskId, + value: (), + }, + + // Aggregation Graph + AggregationNumber { + value: AggregationNumber, + }, + Follower { + task: TaskId, + value: i32, + }, + Upper { + task: TaskId, + value: i32, + }, + + // Aggregated Data + AggregatedDirtyContainer { + task: TaskId, + value: i32, + }, + AggregatedCollectible { + collectible: CellRef, + value: i32, + }, + AggregatedDirtyContainerCount { + value: i32, + }, + + // Transient Root Type + AggregateRoot { + value: RootState, + }, + + // Transient In Progress state + InProgress { + value: InProgressState, + }, + InProgressCell { + cell: CellId, + value: InProgressCellState, + }, + OutdatedCollectible { + collectible: CellRef, + value: (), + }, + OutdatedOutputDependency { + target: TaskId, + value: (), + }, + OutdatedCellDependency { + target: CellRef, + value: (), + }, + OutdatedChild { + task: TaskId, + value: (), + }, + + // Transient Error State + Error { + value: SharedError, + }, +} + +impl CachedDataItem { + pub fn is_persistent(&self) -> bool { + match self { + CachedDataItem::Output { value } => value.is_transient(), + CachedDataItem::Collectible { collectible, .. } => !collectible.task.is_transient(), + CachedDataItem::Dirty { .. } => true, + CachedDataItem::DirtyWhenPersisted { .. } => true, + CachedDataItem::Child { task, .. } => !task.is_transient(), + CachedDataItem::CellData { .. } => true, + CachedDataItem::CellTypeMaxIndex { .. } => true, + CachedDataItem::OutputDependency { target, .. } => !target.is_transient(), + CachedDataItem::CellDependency { target, .. } => !target.task.is_transient(), + CachedDataItem::CollectiblesDependency { target, .. } => !target.task.is_transient(), + CachedDataItem::OutputDependent { task, .. } => !task.is_transient(), + CachedDataItem::CellDependent { task, .. } => !task.is_transient(), + CachedDataItem::CollectiblesDependent { task, .. } => !task.is_transient(), + CachedDataItem::AggregationNumber { .. } => true, + CachedDataItem::Follower { task, .. } => !task.is_transient(), + CachedDataItem::Upper { task, .. } => !task.is_transient(), + CachedDataItem::AggregatedDirtyContainer { task, .. } => !task.is_transient(), + CachedDataItem::AggregatedCollectible { collectible, .. } => { + !collectible.task.is_transient() + } + CachedDataItem::AggregatedDirtyContainerCount { .. } => true, + CachedDataItem::AggregateRoot { .. } => false, + CachedDataItem::InProgress { .. } => false, + CachedDataItem::InProgressCell { .. } => false, + CachedDataItem::OutdatedCollectible { .. } => false, + CachedDataItem::OutdatedOutputDependency { .. } => false, + CachedDataItem::OutdatedCellDependency { .. } => false, + CachedDataItem::OutdatedChild { .. } => false, + CachedDataItem::Error { .. } => false, + } + } + + pub fn new_scheduled(description: impl Fn() -> String + Sync + Send + 'static) -> Self { + CachedDataItem::InProgress { + value: InProgressState::Scheduled { + done_event: Event::new(move || format!("{} done_event", description())), + }, + } + } + + pub fn new_scheduled_with_listener( + description: impl Fn() -> String + Sync + Send + 'static, + note: impl Fn() -> String + Sync + Send + 'static, + ) -> (Self, EventListener) { + let done_event = Event::new(move || format!("{} done_event", description())); + let listener = done_event.listen_with_note(note); + ( + CachedDataItem::InProgress { + value: InProgressState::Scheduled { done_event }, + }, + listener, + ) + } +} + +impl CachedDataItemKey { + pub fn is_persistent(&self) -> bool { + match self { + CachedDataItemKey::Output { .. } => true, + CachedDataItemKey::Collectible { collectible, .. } => !collectible.task.is_transient(), + CachedDataItemKey::Dirty { .. } => true, + CachedDataItemKey::DirtyWhenPersisted { .. } => true, + CachedDataItemKey::Child { task, .. } => !task.is_transient(), + CachedDataItemKey::CellData { .. } => true, + CachedDataItemKey::CellTypeMaxIndex { .. } => true, + CachedDataItemKey::OutputDependency { target, .. } => !target.is_transient(), + CachedDataItemKey::CellDependency { target, .. } => !target.task.is_transient(), + CachedDataItemKey::CollectiblesDependency { target, .. } => !target.task.is_transient(), + CachedDataItemKey::OutputDependent { task, .. } => !task.is_transient(), + CachedDataItemKey::CellDependent { task, .. } => !task.is_transient(), + CachedDataItemKey::CollectiblesDependent { task, .. } => !task.is_transient(), + CachedDataItemKey::AggregationNumber { .. } => true, + CachedDataItemKey::Follower { task, .. } => !task.is_transient(), + CachedDataItemKey::Upper { task, .. } => !task.is_transient(), + CachedDataItemKey::AggregatedDirtyContainer { task, .. } => !task.is_transient(), + CachedDataItemKey::AggregatedCollectible { collectible, .. } => { + !collectible.task.is_transient() + } + CachedDataItemKey::AggregatedDirtyContainerCount { .. } => true, + CachedDataItemKey::AggregateRoot { .. } => false, + CachedDataItemKey::InProgress { .. } => false, + CachedDataItemKey::InProgressCell { .. } => false, + CachedDataItemKey::OutdatedCollectible { .. } => false, + CachedDataItemKey::OutdatedOutputDependency { .. } => false, + CachedDataItemKey::OutdatedCellDependency { .. } => false, + CachedDataItemKey::OutdatedChild { .. } => false, + CachedDataItemKey::Error { .. } => false, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum CachedDataItemIndex { + Children, + Follower, + Upper, + AggregatedDirtyContainer, + CellData, + CellTypeMaxIndex, + CellDependent, + OutputDependent, + Dependencies, +} + +#[allow(non_upper_case_globals, dead_code)] +pub mod indicies { + use super::CachedDataItemIndex; + + pub const Child: CachedDataItemIndex = CachedDataItemIndex::Children; + pub const OutdatedChild: CachedDataItemIndex = CachedDataItemIndex::Children; + pub const Follower: CachedDataItemIndex = CachedDataItemIndex::Follower; + pub const Upper: CachedDataItemIndex = CachedDataItemIndex::Upper; + pub const AggregatedDirtyContainer: CachedDataItemIndex = + CachedDataItemIndex::AggregatedDirtyContainer; + pub const CellData: CachedDataItemIndex = CachedDataItemIndex::CellData; + pub const CellTypeMaxIndex: CachedDataItemIndex = CachedDataItemIndex::CellTypeMaxIndex; + pub const CellDependent: CachedDataItemIndex = CachedDataItemIndex::CellDependent; + pub const OutputDependent: CachedDataItemIndex = CachedDataItemIndex::OutputDependent; + pub const OutputDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; + pub const CellDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; + pub const OutdatedOutputDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; + pub const OutdatedCellDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; +} + +impl Indexed for CachedDataItemKey { + type Index = Option; + + fn index(&self) -> Option { + match self { + CachedDataItemKey::Child { .. } => Some(CachedDataItemIndex::Children), + CachedDataItemKey::OutdatedChild { .. } => Some(CachedDataItemIndex::Children), + CachedDataItemKey::Follower { .. } => Some(CachedDataItemIndex::Follower), + CachedDataItemKey::Upper { .. } => Some(CachedDataItemIndex::Upper), + CachedDataItemKey::AggregatedDirtyContainer { .. } => { + Some(CachedDataItemIndex::AggregatedDirtyContainer) + } + CachedDataItemKey::CellData { .. } => Some(CachedDataItemIndex::CellData), + CachedDataItemKey::CellTypeMaxIndex { .. } => { + Some(CachedDataItemIndex::CellTypeMaxIndex) + } + CachedDataItemKey::CellDependent { .. } => Some(CachedDataItemIndex::CellDependent), + CachedDataItemKey::OutputDependent { .. } => Some(CachedDataItemIndex::OutputDependent), + CachedDataItemKey::OutputDependency { .. } => Some(CachedDataItemIndex::Dependencies), + CachedDataItemKey::CellDependency { .. } => Some(CachedDataItemIndex::Dependencies), + CachedDataItemKey::OutdatedOutputDependency { .. } => { + Some(CachedDataItemIndex::Dependencies) + } + CachedDataItemKey::OutdatedCellDependency { .. } => { + Some(CachedDataItemIndex::Dependencies) + } + _ => None, + } + } +} + +impl CachedDataItemValue { + pub fn is_persistent(&self) -> bool { + match self { + CachedDataItemValue::Output { value } => !value.is_transient(), + _ => true, + } + } +} + +#[derive(Debug)] +pub struct CachedDataUpdate { + // TODO persistence + #[allow(dead_code)] + pub task: TaskId, + #[allow(dead_code)] + pub key: CachedDataItemKey, + #[allow(dead_code)] + pub value: Option, +} diff --git a/turbopack/crates/turbo-tasks-backend/src/lib.rs b/turbopack/crates/turbo-tasks-backend/src/lib.rs new file mode 100644 index 0000000000000..c7b5fe1832ad1 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/lib.rs @@ -0,0 +1,5 @@ +mod backend; +mod data; +mod utils; + +pub use self::backend::TurboTasksBackend; diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/bi_map.rs b/turbopack/crates/turbo-tasks-backend/src/utils/bi_map.rs new file mode 100644 index 0000000000000..a55757d85d4b4 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/bi_map.rs @@ -0,0 +1,54 @@ +use std::{borrow::Borrow, hash::Hash}; + +use dashmap::{mapref::entry::Entry, DashMap}; + +/// A bidirectional [`DashMap`] that allows lookup by key or value. +/// +/// As keys and values are stored twice, they should be small types, such as +/// [`Arc`][`std::sync::Arc`]. +pub struct BiMap { + forward: DashMap, + reverse: DashMap, +} + +impl BiMap +where + K: Eq + Hash + Clone, + V: Eq + Hash + Clone, +{ + pub fn new() -> Self { + Self { + forward: DashMap::new(), + reverse: DashMap::new(), + } + } + + pub fn lookup_forward(&self, key: &Q) -> Option + where + K: Borrow, + Q: Hash + Eq, + { + self.forward.get(key).map(|v| v.value().clone()) + } + + pub fn lookup_reverse(&self, key: &Q) -> Option + where + V: Borrow, + Q: Hash + Eq, + { + self.reverse.get(key).map(|v| v.value().clone()) + } + + pub fn try_insert(&self, key: K, value: V) -> Result<(), V> { + match self.forward.entry(key) { + Entry::Occupied(e) => Err(e.get().clone()), + Entry::Vacant(e) => { + let e = e.insert_entry(value.clone()); + let key = e.key().clone(); + self.reverse.insert(value, key); + drop(e); + Ok(()) + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/chunked_vec.rs b/turbopack/crates/turbo-tasks-backend/src/utils/chunked_vec.rs new file mode 100644 index 0000000000000..46292f79e5e72 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/chunked_vec.rs @@ -0,0 +1,76 @@ +pub struct ChunkedVec { + chunks: Vec>, +} + +impl ChunkedVec { + pub fn new() -> Self { + Self { chunks: Vec::new() } + } + + pub fn len(&self) -> usize { + if let Some(last) = self.chunks.last() { + let free = last.capacity() - self.len(); + cummulative_chunk_size(self.chunks.len() - 1) - free + } else { + 0 + } + } + + pub fn push(&mut self, item: T) { + if let Some(chunk) = self.chunks.last_mut() { + if chunk.len() < chunk.capacity() { + chunk.push(item); + return; + } + } + let mut chunk = Vec::with_capacity(chunk_size(self.chunks.len())); + chunk.push(item); + self.chunks.push(chunk); + } + + pub fn into_iter(self) -> impl Iterator { + let len = self.len(); + ExactSizeIter { + iter: self.chunks.into_iter().flat_map(|chunk| chunk.into_iter()), + len, + } + } + + pub fn iter(&self) -> impl Iterator { + ExactSizeIter { + iter: self.chunks.iter().flat_map(|chunk| chunk.iter()), + len: self.len(), + } + } +} + +fn chunk_size(chunk_index: usize) -> usize { + 8 << chunk_index +} + +fn cummulative_chunk_size(chunk_index: usize) -> usize { + (8 << (chunk_index + 1)) - 8 +} + +struct ExactSizeIter { + iter: I, + len: usize, +} + +impl Iterator for ExactSizeIter { + type Item = I::Item; + + fn next(&mut self) -> Option { + self.iter.next().inspect(|_| self.len -= 1) + } + + fn size_hint(&self) -> (usize, Option) { + (self.len, Some(self.len)) + } +} + +impl ExactSizeIterator for ExactSizeIter { + fn len(&self) -> usize { + self.len + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/dash_map_multi.rs b/turbopack/crates/turbo-tasks-backend/src/utils/dash_map_multi.rs new file mode 100644 index 0000000000000..65d630499fcdf --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/dash_map_multi.rs @@ -0,0 +1,220 @@ +use std::{ + hash::{BuildHasher, Hash}, + ops::{Deref, DerefMut}, + sync::Arc, +}; + +use dashmap::{DashMap, RwLockWriteGuard, SharedValue}; +use hashbrown::{hash_map, HashMap}; + +pub enum RefMut<'a, K, V, S> +where + S: BuildHasher, +{ + Base(dashmap::mapref::one::RefMut<'a, K, V, S>), + Simple { + _guard: RwLockWriteGuard<'a, HashMap, S>>, + key: *const K, + value: *mut V, + }, + Shared { + _guard: Arc, S>>>, + key: *const K, + value: *mut V, + }, +} + +unsafe impl<'a, K: Eq + Hash + Sync, V: Sync, S: BuildHasher> Send for RefMut<'a, K, V, S> {} +unsafe impl<'a, K: Eq + Hash + Sync, V: Sync, S: BuildHasher> Sync for RefMut<'a, K, V, S> {} + +impl<'a, K: Eq + Hash, V, S: BuildHasher> RefMut<'a, K, V, S> { + pub fn key(&self) -> &K { + self.pair().0 + } + + pub fn value(&self) -> &V { + self.pair().1 + } + + pub fn value_mut(&mut self) -> &mut V { + self.pair_mut().1 + } + + pub fn pair(&self) -> (&K, &V) { + match self { + RefMut::Base(r) => r.pair(), + &RefMut::Simple { key, value, .. } => unsafe { (&*key, &*value) }, + &RefMut::Shared { key, value, .. } => unsafe { (&*key, &*value) }, + } + } + + pub fn pair_mut(&mut self) -> (&K, &mut V) { + match self { + RefMut::Base(r) => r.pair_mut(), + &mut RefMut::Simple { key, value, .. } => unsafe { (&*key, &mut *value) }, + &mut RefMut::Shared { key, value, .. } => unsafe { (&*key, &mut *value) }, + } + } +} + +impl<'a, K: Eq + Hash, V, S: BuildHasher> Deref for RefMut<'a, K, V, S> { + type Target = V; + + fn deref(&self) -> &V { + self.value() + } +} + +impl<'a, K: Eq + Hash, V, S: BuildHasher> DerefMut for RefMut<'a, K, V, S> { + fn deref_mut(&mut self) -> &mut V { + self.value_mut() + } +} + +impl<'a, K, V, S> From> for RefMut<'a, K, V, S> +where + K: Hash + Eq, + S: BuildHasher, +{ + fn from(r: dashmap::mapref::one::RefMut<'a, K, V, S>) -> Self { + RefMut::Base(r) + } +} + +pub fn get_multiple_mut( + map: &DashMap, + key1: K, + key2: K, + insert_with: impl Fn() -> V, +) -> (RefMut<'_, K, V, S>, RefMut<'_, K, V, S>) +where + K: Hash + Eq + Clone, + S: BuildHasher + Clone, +{ + let s1 = map.determine_map(&key1); + let s2 = map.determine_map(&key2); + let shards = map.shards(); + if s1 == s2 { + let mut guard = shards[s1].write(); + let e1 = guard + .raw_entry_mut() + .from_key(&key1) + .or_insert_with(|| (key1.clone(), SharedValue::new(insert_with()))); + let mut key1_ptr = e1.0 as *const K; + let mut value1_ptr = e1.1.get_mut() as *mut V; + let key2_ptr; + let value2_ptr; + match guard.raw_entry_mut().from_key(&key2) { + hash_map::RawEntryMut::Occupied(e) => { + let e2 = e.into_key_value(); + key2_ptr = e2.0 as *const K; + value2_ptr = e2.1.get_mut() as *mut V; + } + hash_map::RawEntryMut::Vacant(e) => { + let e2 = e.insert(key2.clone(), SharedValue::new(insert_with())); + key2_ptr = e2.0 as *const K; + value2_ptr = e2.1.get_mut() as *mut V; + // inserting a new entry might invalidate the pointers of the first entry + let e1 = guard.get_key_value_mut(&key1).unwrap(); + key1_ptr = e1.0 as *const K; + value1_ptr = e1.1.get_mut() as *mut V; + } + } + let guard = Arc::new(guard); + ( + RefMut::Shared { + _guard: guard.clone(), + key: key1_ptr, + value: value1_ptr, + }, + RefMut::Shared { + _guard: guard, + key: key2_ptr, + value: value2_ptr, + }, + ) + } else { + let (mut guard1, mut guard2) = loop { + { + let g1 = shards[s1].write(); + if let Some(g2) = shards[s2].try_write() { + break (g1, g2); + } + } + { + let g2 = shards[s2].write(); + if let Some(g1) = shards[s1].try_write() { + break (g1, g2); + } + } + }; + let e1 = guard1 + .raw_entry_mut() + .from_key(&key1) + .or_insert_with(|| (key1, SharedValue::new(insert_with()))); + let key1 = e1.0 as *const K; + let value1 = e1.1.get_mut() as *mut V; + let e2 = guard2 + .raw_entry_mut() + .from_key(&key2) + .or_insert_with(|| (key2, SharedValue::new(insert_with()))); + let key2 = e2.0 as *const K; + let value2 = e2.1.get_mut() as *mut V; + ( + RefMut::Simple { + _guard: guard1, + key: key1, + value: value1, + }, + RefMut::Simple { + _guard: guard2, + key: key2, + value: value2, + }, + ) + } +} + +#[cfg(test)] +mod tests { + use std::thread::scope; + + use rand::prelude::SliceRandom; + + use super::*; + + #[test] + fn stress_deadlock() { + const N: usize = 100000; + const THREADS: usize = 20; + + let map = DashMap::with_shard_amount(4); + let indicies = (0..THREADS) + .map(|_| { + let mut vec = (0..N).collect::>(); + vec.shuffle(&mut rand::thread_rng()); + vec + }) + .collect::>(); + let map = ↦ + scope(|s| { + for indicies in indicies { + s.spawn(|| { + for i in indicies { + let (mut a, mut b) = get_multiple_mut(map, i, i + 1, || 0); + *a += 1; + *b += 1; + } + }); + } + }); + let value = *map.get(&0).unwrap(); + assert_eq!(value, THREADS); + for i in 1..N { + let value = *map.get(&i).unwrap(); + assert_eq!(value, THREADS * 2); + } + let value = *map.get(&N).unwrap(); + assert_eq!(value, THREADS); + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/mod.rs b/turbopack/crates/turbo-tasks-backend/src/utils/mod.rs new file mode 100644 index 0000000000000..676e3b809b388 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/mod.rs @@ -0,0 +1,4 @@ +pub mod bi_map; +pub mod chunked_vec; +pub mod dash_map_multi; +pub mod ptr_eq_arc; diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/ptr_eq_arc.rs b/turbopack/crates/turbo-tasks-backend/src/utils/ptr_eq_arc.rs new file mode 100644 index 0000000000000..7889de80e05ee --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/ptr_eq_arc.rs @@ -0,0 +1,47 @@ +use std::{ + hash::{Hash, Hasher}, + ops::Deref, + sync::Arc, +}; + +pub struct PtrEqArc(Arc); + +impl PtrEqArc { + pub fn new(value: T) -> Self { + Self(Arc::new(value)) + } +} + +impl From> for PtrEqArc { + fn from(value: Arc) -> Self { + Self(value) + } +} + +impl Deref for PtrEqArc { + type Target = Arc; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl Clone for PtrEqArc { + fn clone(&self) -> Self { + Self(self.0.clone()) + } +} + +impl PartialEq for PtrEqArc { + fn eq(&self, other: &Self) -> bool { + Arc::ptr_eq(&self.0, &other.0) + } +} + +impl Eq for PtrEqArc {} + +impl Hash for PtrEqArc { + fn hash(&self, state: &mut H) { + Arc::as_ptr(&self.0).hash(state) + } +} diff --git a/turbopack/crates/turbo-tasks-backend/tests/all_in_one.rs b/turbopack/crates/turbo-tasks-backend/tests/all_in_one.rs new file mode 120000 index 0000000000000..391ab595a93e2 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/all_in_one.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/all_in_one.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/basic.rs b/turbopack/crates/turbo-tasks-backend/tests/basic.rs new file mode 120000 index 0000000000000..d2c98272f0102 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/basic.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/basic.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/call_types.rs b/turbopack/crates/turbo-tasks-backend/tests/call_types.rs new file mode 120000 index 0000000000000..b20501cd53c79 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/call_types.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/call_types.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/debug.rs b/turbopack/crates/turbo-tasks-backend/tests/debug.rs new file mode 120000 index 0000000000000..ee7aea7eab52f --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/debug.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/debug.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/detached.rs b/turbopack/crates/turbo-tasks-backend/tests/detached.rs new file mode 120000 index 0000000000000..e726e54a7881e --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/detached.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/detached.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/emptied_cells.rs b/turbopack/crates/turbo-tasks-backend/tests/emptied_cells.rs new file mode 120000 index 0000000000000..9070c4d0b4dcc --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/emptied_cells.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/emptied_cells.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/generics.rs b/turbopack/crates/turbo-tasks-backend/tests/generics.rs new file mode 120000 index 0000000000000..526d71f58d8ba --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/generics.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/generics.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/local_cell.rs b/turbopack/crates/turbo-tasks-backend/tests/local_cell.rs new file mode 120000 index 0000000000000..9249e3399052e --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/local_cell.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/local_cell.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/performance.rs b/turbopack/crates/turbo-tasks-backend/tests/performance.rs new file mode 120000 index 0000000000000..23ff275bf1de5 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/performance.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/performance.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/read_ref_cell.rs b/turbopack/crates/turbo-tasks-backend/tests/read_ref_cell.rs new file mode 120000 index 0000000000000..4e1719dfefec2 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/read_ref_cell.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/read_ref_cell.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/recompute.rs b/turbopack/crates/turbo-tasks-backend/tests/recompute.rs new file mode 120000 index 0000000000000..5c35fb81af4e3 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/recompute.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/recompute.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/resolved_vc.rs b/turbopack/crates/turbo-tasks-backend/tests/resolved_vc.rs new file mode 120000 index 0000000000000..601c7f0fc0008 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/resolved_vc.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/resolved_vc.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/test_config.trs b/turbopack/crates/turbo-tasks-backend/tests/test_config.trs new file mode 100644 index 0000000000000..7387c44aaf3dd --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/test_config.trs @@ -0,0 +1,3 @@ +|_name, _initial| { + turbo_tasks::TurboTasks::new(turbo_tasks_backend::TurboTasksBackend::new()) +} diff --git a/turbopack/crates/turbo-tasks-backend/tests/trait_ref_cell.rs b/turbopack/crates/turbo-tasks-backend/tests/trait_ref_cell.rs new file mode 120000 index 0000000000000..026eed7f3b50f --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/trait_ref_cell.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/trait_ref_cell.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs b/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs index 6a74f41781668..5efbdb7263a66 100644 --- a/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs +++ b/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs @@ -76,12 +76,12 @@ async fn hash_directory(directory: Vc) -> Result> { for entry in entries.values() { match entry { DirectoryEntry::File(path) => { - let name = filename(*path).await?; - hashes.insert(name, hash_file(*path).await?.clone_value()); + let name = filename(**path).await?; + hashes.insert(name, hash_file(**path).await?.clone_value()); } DirectoryEntry::Directory(path) => { - let name = filename(*path).await?; - hashes.insert(name, hash_directory(*path).await?.clone_value()); + let name = filename(**path).await?; + hashes.insert(name, hash_directory(**path).await?.clone_value()); } _ => {} } diff --git a/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs b/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs index e3c8aa8a693ca..507b56e6210da 100644 --- a/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs +++ b/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs @@ -72,11 +72,11 @@ async fn hash_glob_result(result: Vc) -> Result> { let mut hashes = BTreeMap::new(); for (name, entry) in result.results.iter() { if let DirectoryEntry::File(path) = entry { - hashes.insert(name, hash_file(*path).await?.clone_value()); + hashes.insert(name, hash_file(**path).await?.clone_value()); } } for (name, result) in result.inner.iter() { - let hash = hash_glob_result(*result).await?; + let hash = hash_glob_result(**result).await?; if !hash.is_empty() { hashes.insert(name, hash.clone_value()); } diff --git a/turbopack/crates/turbo-tasks-fs/src/attach.rs b/turbopack/crates/turbo-tasks-fs/src/attach.rs index 7705aad035361..23c8302c38813 100644 --- a/turbopack/crates/turbo-tasks-fs/src/attach.rs +++ b/turbopack/crates/turbo-tasks-fs/src/attach.rs @@ -1,6 +1,6 @@ use anyhow::{bail, Result}; use auto_hash_map::AutoMap; -use turbo_tasks::{Completion, RcStr, ValueToString, Vc}; +use turbo_tasks::{Completion, RcStr, ResolvedVc, ValueToString, Vc}; use crate::{ DirectoryContent, DirectoryEntry, FileContent, FileMeta, FileSystem, FileSystemPath, @@ -13,11 +13,11 @@ use crate::{ /// Caveat: The `child_path` itself is not visible as a directory entry. #[turbo_tasks::value] pub struct AttachedFileSystem { - root_fs: Vc>, + root_fs: ResolvedVc>, // we turn this into a string because creating a FileSystemPath requires the filesystem which // we are creating (circular reference) child_path: RcStr, - child_fs: Vc>, + child_fs: ResolvedVc>, } #[turbo_tasks::value_impl] @@ -27,7 +27,7 @@ impl AttachedFileSystem { #[turbo_tasks::function] pub async fn new( child_path: Vc, - child_fs: Vc>, + child_fs: ResolvedVc>, ) -> Result> { let child_path = child_path.await?; @@ -45,11 +45,11 @@ impl AttachedFileSystem { /// [FileSystem] or this [AttachedFileSystem]. #[turbo_tasks::function] pub async fn convert_path( - self: Vc, + self: ResolvedVc, contained_path_vc: Vc, ) -> Result> { let contained_path = contained_path_vc.await?; - let self_fs: Vc> = Vc::upcast(self); + let self_fs: ResolvedVc> = ResolvedVc::upcast(self); let this = self.await?; match contained_path.fs { @@ -89,12 +89,12 @@ impl AttachedFileSystem { /// on the [AttachedFileSystem] #[turbo_tasks::function] pub async fn get_inner_fs_path( - self: Vc, + self: ResolvedVc, path: Vc, ) -> Result> { let this = self.await?; let path = path.await?; - let self_fs: Vc> = Vc::upcast(self); + let self_fs: ResolvedVc> = ResolvedVc::upcast(self); if path.fs != self_fs { let self_fs_str = self_fs.to_string().await?; @@ -144,10 +144,10 @@ impl FileSystem for AttachedFileSystem { use DirectoryEntry::*; let entry = match *entry { - File(path) => File(self.convert_path(path)), - Directory(path) => Directory(self.convert_path(path)), - Symlink(path) => Symlink(self.convert_path(path)), - Other(path) => Other(self.convert_path(path)), + File(path) => File(self.convert_path(*path).to_resolved().await?), + Directory(path) => Directory(self.convert_path(*path).to_resolved().await?), + Symlink(path) => Symlink(self.convert_path(*path).to_resolved().await?), + Other(path) => Other(self.convert_path(*path).to_resolved().await?), Error => Error, }; diff --git a/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs b/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs index 72a43ece95d65..159042797b6eb 100644 --- a/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs +++ b/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs @@ -1,4 +1,5 @@ use anyhow::{bail, Result}; +use auto_hash_map::AutoMap; use include_dir::{Dir, DirEntry}; use turbo_tasks::{Completion, RcStr, ValueToString, Vc}; @@ -46,29 +47,26 @@ impl FileSystem for EmbeddedFileSystem { (_, None) => return Ok(DirectoryContent::NotFound.cell()), }; - let entries = dir - .entries() - .iter() - .map(|e| { - let entry_name: RcStr = e - .path() - .file_name() - .unwrap_or_default() - .to_string_lossy() - .into(); - let entry_path = path.join(entry_name.clone()); - - ( - entry_name, - match e { - DirEntry::Dir(_) => DirectoryEntry::Directory(entry_path), - DirEntry::File(_) => DirectoryEntry::File(entry_path), - }, - ) - }) - .collect(); - - Ok(DirectoryContent::new(entries)) + let mut converted_entries = AutoMap::new(); + for e in dir.entries() { + let entry_name: RcStr = e + .path() + .file_name() + .unwrap_or_default() + .to_string_lossy() + .into(); + let entry_path = path.join(entry_name.clone()).to_resolved().await?; + + converted_entries.insert( + entry_name, + match e { + DirEntry::Dir(_) => DirectoryEntry::Directory(entry_path), + DirEntry::File(_) => DirectoryEntry::File(entry_path), + }, + ); + } + + Ok(DirectoryContent::new(converted_entries)) } #[turbo_tasks::function] diff --git a/turbopack/crates/turbo-tasks-fs/src/lib.rs b/turbopack/crates/turbo-tasks-fs/src/lib.rs index 611611fc297a9..404f43e62c792 100644 --- a/turbopack/crates/turbo-tasks-fs/src/lib.rs +++ b/turbopack/crates/turbo-tasks-fs/src/lib.rs @@ -59,7 +59,7 @@ use tokio::{ }; use tracing::Instrument; use turbo_tasks::{ - mark_stateful, trace::TraceRawVcs, Completion, Invalidator, RcStr, ReadRef, + mark_stateful, trace::TraceRawVcs, Completion, Invalidator, RcStr, ReadRef, ResolvedVc, SerializationInvalidator, ValueToString, Vc, }; use turbo_tasks_hash::{ @@ -530,29 +530,29 @@ impl FileSystem for DiskFileSystem { match &*self.read_dir_internal(fs_path).await? { InternalDirectoryContent::NotFound => Ok(DirectoryContent::not_found()), InternalDirectoryContent::Entries(entries) => { - let fs = fs_path.await?.fs; - let entries = entries - .iter() - .map(|(name, entry)| { - let entry = match entry { - InternalDirectoryEntry::File(path) => DirectoryEntry::File( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Directory(path) => DirectoryEntry::Directory( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Symlink(path) => DirectoryEntry::Symlink( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Other(path) => DirectoryEntry::Other( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Error => DirectoryEntry::Error, - }; - (name.clone(), entry) - }) - .collect(); - Ok(DirectoryContent::new(entries)) + let fs = *fs_path.await?.fs; + let normalize = + |path: &RcStr| FileSystemPath::new_normalized(fs, path.clone()).to_resolved(); + let mut normalized_entries = AutoMap::new(); + for (name, entry) in entries { + let entry = match entry { + InternalDirectoryEntry::File(path) => { + DirectoryEntry::File(normalize(path).await?) + } + InternalDirectoryEntry::Directory(path) => { + DirectoryEntry::Directory(normalize(path).await?) + } + InternalDirectoryEntry::Symlink(path) => { + DirectoryEntry::Symlink(normalize(path).await?) + } + InternalDirectoryEntry::Other(path) => { + DirectoryEntry::Other(normalize(path).await?) + } + InternalDirectoryEntry::Error => DirectoryEntry::Error, + }; + normalized_entries.insert(name.clone(), entry); + } + Ok(DirectoryContent::new(normalized_entries)) } } } @@ -881,7 +881,7 @@ impl ValueToString for DiskFileSystem { #[turbo_tasks::value] #[derive(Debug, Clone)] pub struct FileSystemPath { - pub fs: Vc>, + pub fs: ResolvedVc>, pub path: RcStr, } @@ -1085,7 +1085,7 @@ impl FileSystemPath { } #[turbo_tasks::value(transparent)] -pub struct FileSystemPathOption(Option>); +pub struct FileSystemPathOption(Option>); #[turbo_tasks::value_impl] impl FileSystemPathOption { @@ -1101,7 +1101,7 @@ impl FileSystemPath { /// /-separated path is expected to be already normalized (this is asserted /// in dev mode). #[turbo_tasks::function] - fn new_normalized(fs: Vc>, path: RcStr) -> Vc { + fn new_normalized(fs: ResolvedVc>, path: RcStr) -> Vc { // On Windows, the path must be converted to a unix path before creating. But on // Unix, backslashes are a valid char in file names, and the path can be // provided by the user, so we allow it. @@ -1125,7 +1125,7 @@ impl FileSystemPath { pub async fn join(self: Vc, path: RcStr) -> Result> { let this = self.await?; if let Some(path) = join_path(&this.path, &path) { - Ok(Self::new_normalized(this.fs, path.into())) + Ok(Self::new_normalized(*this.fs, path.into())) } else { bail!( "Vc(\"{}\").join(\"{}\") leaves the filesystem root", @@ -1147,7 +1147,7 @@ impl FileSystemPath { ) } Ok(Self::new_normalized( - this.fs, + *this.fs, format!("{}{}", this.path, path).into(), )) } @@ -1166,12 +1166,12 @@ impl FileSystemPath { } if let (path, Some(ext)) = this.split_extension() { return Ok(Self::new_normalized( - this.fs, + *this.fs, format!("{}{}.{}", path, appending, ext).into(), )); } Ok(Self::new_normalized( - this.fs, + *this.fs, format!("{}{}", this.path, appending).into(), )) } @@ -1182,7 +1182,9 @@ impl FileSystemPath { pub async fn try_join(&self, path: RcStr) -> Result> { if let Some(path) = join_path(&self.path, &path) { Ok(Vc::cell(Some( - Self::new_normalized(self.fs, path.into()).resolve().await?, + Self::new_normalized(*self.fs, path.into()) + .to_resolved() + .await?, ))) } else { Ok(FileSystemPathOption::none()) @@ -1196,7 +1198,9 @@ impl FileSystemPath { if let Some(path) = join_path(&self.path, &path) { if path.starts_with(&*self.path) { return Ok(Vc::cell(Some( - Self::new_normalized(self.fs, path.into()).resolve().await?, + Self::new_normalized(*self.fs, path.into()) + .to_resolved() + .await?, ))); } } @@ -1219,7 +1223,7 @@ impl FileSystemPath { #[turbo_tasks::function] pub fn fs(&self) -> Vc> { - self.fs + *self.fs } #[turbo_tasks::function] @@ -1243,7 +1247,7 @@ impl FileSystemPath { pub async fn with_extension(&self, extension: RcStr) -> Vc { let (path_without_extension, _) = self.split_extension(); Self::new_normalized( - self.fs, + *self.fs, // Like `Path::with_extension` and `PathBuf::set_extension`, if the extension is empty, // we remove the extension altogether. match extension.is_empty() { @@ -1392,7 +1396,7 @@ impl FileSystemPath { Some(index) => path[..index].to_string(), None => "".to_string(), }; - Ok(FileSystemPath::new_normalized(this.fs, p.into())) + Ok(FileSystemPath::new_normalized(*this.fs, p.into())) } #[turbo_tasks::function] @@ -1427,7 +1431,7 @@ impl FileSystemPath { } #[turbo_tasks::function] - pub async fn realpath_with_links(self: Vc) -> Result> { + pub async fn realpath_with_links(self: ResolvedVc) -> Result> { let this = self.await?; if this.is_root() { return Ok(RealPathResult { @@ -1436,14 +1440,18 @@ impl FileSystemPath { } .cell()); } - let parent = self.parent().resolve().await?; + let parent = self.parent().to_resolved().await?; let parent_result = parent.realpath_with_links().await?; let basename = this .path .rsplit_once('/') .map_or(this.path.as_str(), |(_, name)| name); let real_self = if parent_result.path != parent { - parent_result.path.join(basename.into()).resolve().await? + parent_result + .path + .join(basename.into()) + .to_resolved() + .await? } else { self }; @@ -1452,12 +1460,12 @@ impl FileSystemPath { if let LinkContent::Link { target, link_type } = &*real_self.read_link().await? { result.symlinks.push(real_self); result.path = if link_type.contains(LinkType::ABSOLUTE) { - real_self.root().resolve().await? + real_self.root().to_resolved().await? } else { result.path } .join(target.clone()) - .resolve() + .to_resolved() .await?; return Ok(result.cell()); } @@ -1480,15 +1488,15 @@ impl ValueToString for FileSystemPath { #[derive(Clone, Debug)] #[turbo_tasks::value(shared)] pub struct RealPathResult { - pub path: Vc, - pub symlinks: Vec>, + pub path: ResolvedVc, + pub symlinks: Vec>, } #[turbo_tasks::value_impl] impl RealPathResult { #[turbo_tasks::function] pub fn path(&self) -> Vc { - self.path + *self.path } } @@ -2080,10 +2088,10 @@ pub enum InternalDirectoryEntry { #[derive(Hash, Clone, Copy, Debug, PartialEq, Eq, TraceRawVcs, Serialize, Deserialize)] pub enum DirectoryEntry { - File(Vc), - Directory(Vc), - Symlink(Vc), - Other(Vc), + File(ResolvedVc), + Directory(ResolvedVc), + Symlink(ResolvedVc), + Other(ResolvedVc), Error, } @@ -2093,7 +2101,7 @@ pub enum DirectoryEntry { impl DirectoryEntry { pub async fn resolve_symlink(self) -> Result { if let DirectoryEntry::Symlink(symlink) = self { - let real_path = symlink.realpath().resolve().await?; + let real_path = symlink.realpath().to_resolved().await?; match *real_path.get_type().await? { FileSystemEntryType::Directory => Ok(DirectoryEntry::Directory(real_path)), FileSystemEntryType::File => Ok(DirectoryEntry::File(real_path)), diff --git a/turbopack/crates/turbo-tasks-fs/src/read_glob.rs b/turbopack/crates/turbo-tasks-fs/src/read_glob.rs index 69d1dbc2afd69..d5a88996ce2c2 100644 --- a/turbopack/crates/turbo-tasks-fs/src/read_glob.rs +++ b/turbopack/crates/turbo-tasks-fs/src/read_glob.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use anyhow::Result; -use turbo_tasks::{RcStr, Vc}; +use turbo_tasks::{RcStr, ResolvedVc, Vc}; use crate::{glob::Glob, DirectoryContent, DirectoryEntry, FileSystemPath}; @@ -9,7 +9,7 @@ use crate::{glob::Glob, DirectoryContent, DirectoryEntry, FileSystemPath}; #[derive(Default, Debug)] pub struct ReadGlobResult { pub results: HashMap, - pub inner: HashMap>, + pub inner: HashMap>, } /// Reads matches of a glob pattern. @@ -22,7 +22,7 @@ pub async fn read_glob( glob: Vc, include_dot_files: bool, ) -> Result> { - read_glob_internal("", directory, glob, include_dot_files).await + Ok(*read_glob_internal("", directory, glob, include_dot_files).await?) } #[turbo_tasks::function(fs)] @@ -32,7 +32,7 @@ async fn read_glob_inner( glob: Vc, include_dot_files: bool, ) -> Result> { - read_glob_internal(&prefix, directory, glob, include_dot_files).await + Ok(*read_glob_internal(&prefix, directory, glob, include_dot_files).await?) } async fn read_glob_internal( @@ -40,7 +40,7 @@ async fn read_glob_internal( directory: Vc, glob: Vc, include_dot_files: bool, -) -> Result> { +) -> Result> { let dir = directory.read_dir().await?; let mut result = ReadGlobResult::default(); let glob_value = glob.await?; @@ -63,7 +63,9 @@ async fn read_glob_internal( if glob_value.execute(&full_path_prefix) { result.inner.insert( full_path, - read_glob_inner(full_path_prefix, path, glob, include_dot_files), + read_glob_inner(full_path_prefix, *path, glob, include_dot_files) + .to_resolved() + .await?, ); } } @@ -78,5 +80,5 @@ async fn read_glob_internal( } DirectoryContent::NotFound => {} } - Ok(ReadGlobResult::cell(result)) + Ok(ReadGlobResult::resolved_cell(result)) } diff --git a/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs new file mode 100644 index 0000000000000..a3a0d192ec9a2 --- /dev/null +++ b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs @@ -0,0 +1,186 @@ +use proc_macro::TokenStream; +use quote::quote; +use syn::{parse_macro_input, Ident, ItemEnum}; + +pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as ItemEnum); + + let ident = &input.ident; + let vis = &input.vis; + let key_name = Ident::new(&format!("{}Key", input.ident), input.ident.span()); + let value_name = Ident::new(&format!("{}Value", input.ident), input.ident.span()); + + let variant_names = input + .variants + .iter() + .map(|variant| &variant.ident) + .collect::>(); + + let key_fields = input + .variants + .iter() + .map(|variant| { + variant + .fields + .iter() + .filter(|field| { + let Some(ident) = &field.ident else { + return false; + }; + ident != "value" + }) + .collect::>() + }) + .collect::>(); + + let value_fields = input + .variants + .iter() + .map(|variant| { + variant + .fields + .iter() + .filter(|field| { + let Some(ident) = &field.ident else { + return false; + }; + ident == "value" + }) + .collect::>() + }) + .collect::>(); + + let key_decl = field_declarations(&key_fields); + let key_pat = patterns(&key_fields); + let key_clone_fields = clone_fields(&key_fields); + + let value_decl = field_declarations(&value_fields); + let value_pat = patterns(&value_fields); + let value_clone_fields = clone_fields(&value_fields); + + quote! { + impl turbo_tasks::KeyValuePair for #ident { + type Key = #key_name; + type Value = #value_name; + + fn key(&self) -> #key_name { + match self { + #( + #ident::#variant_names { #key_pat .. } => #key_name::#variant_names { #key_clone_fields }, + )* + } + } + + fn value(&self) -> #value_name { + match self { + #( + #ident::#variant_names { #value_pat .. } => #value_name::#variant_names { #value_clone_fields }, + )* + } + } + + fn from_key_and_value(key: #key_name, value: #value_name) -> Self { + match (key, value) { + #( + (#key_name::#variant_names { #key_pat }, #value_name::#variant_names { #value_pat }) => #ident::#variant_names { #key_pat #value_pat }, + )* + _ => panic!("Invalid key and value combination"), + } + } + + fn into_key_and_value(self) -> (#key_name, #value_name) { + match self { + #( + #ident::#variant_names { #key_pat #value_pat } => (#key_name::#variant_names { #key_pat }, #value_name::#variant_names { #value_pat }), + )* + } + } + } + + #[derive(Debug, Clone, PartialEq, Eq, Hash)] + #vis enum #key_name { + #( + #variant_names { + #key_decl + }, + )* + } + + #[derive(Debug, Clone, Default)] + #vis enum #value_name { + #( + #variant_names { + #value_decl + }, + )* + #[default] + Reserved, + } + } + .into() +} + +fn patterns(fields: &[Vec<&syn::Field>]) -> Vec { + let variant_pat = fields + .iter() + .map(|fields| { + let pat = fields + .iter() + .map(|field| { + let ident = field.ident.as_ref().unwrap(); + quote! { + #ident + } + }) + .collect::>(); + quote! { + #(#pat,)* + } + }) + .collect::>(); + variant_pat +} + +fn clone_fields(fields: &[Vec<&syn::Field>]) -> Vec { + let variant_pat = fields + .iter() + .map(|fields| { + let pat = fields + .iter() + .map(|field| { + let ident = field.ident.as_ref().unwrap(); + quote! { + #ident: #ident.clone() + } + }) + .collect::>(); + quote! { + #(#pat,)* + } + }) + .collect::>(); + variant_pat +} + +fn field_declarations(fields: &[Vec<&syn::Field>]) -> Vec { + fields + .iter() + .map(|fields| { + let fields = fields + .iter() + .map(|field| { + let ty = &field.ty; + let ident = field.ident.as_ref().unwrap(); + let attrs = &field.attrs; + quote! { + #(#attrs)* + #ident: #ty + } + }) + .collect::>(); + quote! { + #(#fields),* + } + }) + .collect::>() +} diff --git a/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs b/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs index d48323309096e..d8c507574ab3b 100644 --- a/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs +++ b/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs @@ -1,4 +1,5 @@ mod deterministic_hash_macro; +mod key_value_pair_macro; mod resolved_value_macro; mod task_input_macro; mod trace_raw_vcs_macro; @@ -6,6 +7,7 @@ mod value_debug_format_macro; mod value_debug_macro; pub use deterministic_hash_macro::derive_deterministic_hash; +pub use key_value_pair_macro::derive_key_value_pair; pub use resolved_value_macro::derive_resolved_value; use syn::{spanned::Spanned, Attribute, Meta, MetaList, NestedMeta}; pub use task_input_macro::derive_task_input; diff --git a/turbopack/crates/turbo-tasks-macros/src/lib.rs b/turbopack/crates/turbo-tasks-macros/src/lib.rs index 75124c7ae8c0e..613b2da8ff789 100644 --- a/turbopack/crates/turbo-tasks-macros/src/lib.rs +++ b/turbopack/crates/turbo-tasks-macros/src/lib.rs @@ -47,83 +47,16 @@ pub fn derive_task_input(input: TokenStream) -> TokenStream { derive::derive_task_input(input) } -/// Creates a Vc struct for a `struct` or `enum` that represent -/// that type placed into a cell in a Task. -/// -/// That Vc object can be `await`ed to get a readonly reference -/// to the value contained in the cell. -/// -/// ## Arguments -/// -/// Example: `#[turbo_tasks::value(into = "new", eq = "manual")]` -/// -/// ### `cell` -/// -/// Possible values: -/// -/// - "new": Always overrides the value in the cell. Invalidating all -/// dependent tasks. -/// - "shared" (default): Compares with the existing value in the cell, before -/// overriding it. Requires Value to implement [Eq]. -/// -/// ### `eq` -/// -/// Possible values: -/// -/// - "manual": Prevents deriving [Eq] so you can do it manually. -/// -/// ### `into` -/// -/// When provided the Vc implement `From` to allow to convert -/// a Value to a Vc by placing it into a cell in a Task. -/// -/// Possible values: -/// -/// - "new": Always overrides the value in the cell. Invalidating all -/// dependent tasks. -/// - "shared": Compares with the existing value in the cell, before -/// overriding it. Requires Value to implement [Eq]. -/// - "none" (default): Prevents implementing `From`. -/// -/// ### `serialization` -/// -/// Affects serialization via [serde::Serialize] and [serde::Deserialize]. -/// -/// Possible values: -/// -/// - "auto" (default): Derives the serialization traits and enabled serialization. -/// - "auto_for_input": Same as "auto", but also adds the marker trait [turbo_tasks::TypedForInput]. -/// - "custom": Prevents deriving the serialization traits, but still enables serialization (you -/// need to manually implement [serde::Serialize] and [serde::Deserialize]). -/// - "custom_for_input":Same as "auto", but also adds the marker trait -/// [turbo_tasks::TypedForInput]. -/// - "none": Disables serialization and prevents deriving the traits. -/// -/// ### `shared` -/// -/// Sets both `cell = "shared"` and `into = "shared"` -/// -/// No value. -/// -/// Example: `#[turbo_tasks::value(shared)]` -/// -/// ### `transparent` -/// -/// If applied to a unit struct (e.g. `struct Wrapper(Value)`) the outer struct -/// is skipped for all operations (cell, into, reading). -/// -/// No value. -/// -/// Example: `#[turbo_tasks::value(transparent)]` -/// -/// ### `resolved` -/// -/// A shorthand syntax for -/// [`#[derive(turbo_tasks::ResolvedValue)]`][macro@turbo_tasks::ResolvedValue] -/// -/// Example: `#[turbo_tasks::value(resolved)]` -/// -/// TODO: add more documentation: presets, traits +/// Derives the `turbo_tasks::KeyValuePair` trait for a enum. Each variant need to have a `value` +/// field which becomes part of the value enum and all remaining fields become part of the key. +/// Assuming the enum is called `Abc` it exposes `AbcKey` and `AbcValue` types for it too. The key +/// enum will have `Debug, Clone, PartialEq, Eq, Hash` derived and the value enum will have `Debug, +/// Clone` derived. It's expected that all fields implement these traits. +#[proc_macro_derive(KeyValuePair)] +pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { + derive::derive_key_value_pair(input) +} + #[allow_internal_unstable(min_specialization, into_future, trivial_bounds)] #[proc_macro_error] #[proc_macro_attribute] diff --git a/turbopack/crates/turbo-tasks-macros/src/value_macro.rs b/turbopack/crates/turbo-tasks-macros/src/value_macro.rs index 0319c9ea4a511..570aeea20b3f3 100644 --- a/turbopack/crates/turbo-tasks-macros/src/value_macro.rs +++ b/turbopack/crates/turbo-tasks-macros/src/value_macro.rs @@ -339,9 +339,9 @@ pub fn value(args: TokenStream, input: TokenStream) -> TokenStream { let into = if let IntoMode::New | IntoMode::Shared = into_mode { quote! { - impl Into> for #ident { - fn into(self) -> turbo_tasks::Vc<#ident> { - self.cell() + impl ::std::convert::From<#ident> for turbo_tasks::Vc<#ident> { + fn from(value: #ident) -> Self { + value.cell() } } } diff --git a/turbopack/crates/turbo-tasks-memory/tests/basic.rs b/turbopack/crates/turbo-tasks-memory/tests/basic.rs new file mode 120000 index 0000000000000..d2c98272f0102 --- /dev/null +++ b/turbopack/crates/turbo-tasks-memory/tests/basic.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/basic.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-memory/tests/performance.rs b/turbopack/crates/turbo-tasks-memory/tests/performance.rs new file mode 120000 index 0000000000000..23ff275bf1de5 --- /dev/null +++ b/turbopack/crates/turbo-tasks-memory/tests/performance.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/performance.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-testing/src/lib.rs b/turbopack/crates/turbo-tasks-testing/src/lib.rs index 5ba43c8e3fb88..370194d94d151 100644 --- a/turbopack/crates/turbo-tasks-testing/src/lib.rs +++ b/turbopack/crates/turbo-tasks-testing/src/lib.rs @@ -24,7 +24,7 @@ use turbo_tasks::{ TaskPersistence, TraitTypeId, TurboTasksApi, TurboTasksCallApi, }; -pub use crate::run::{run, run_without_cache_check, Registration}; +pub use crate::run::{run, run_with_tt, run_without_cache_check, Registration}; enum Task { Spawned(Event), diff --git a/turbopack/crates/turbo-tasks-testing/src/run.rs b/turbopack/crates/turbo-tasks-testing/src/run.rs index cf7f8e8e785e8..5b2681421a196 100644 --- a/turbopack/crates/turbo-tasks-testing/src/run.rs +++ b/turbopack/crates/turbo-tasks-testing/src/run.rs @@ -86,6 +86,17 @@ pub async fn run( registration: &Registration, fut: impl Fn() -> F + Send + 'static, ) -> Result<()> +where + F: Future> + Send + 'static, + T: Debug + PartialEq + Eq + TraceRawVcs + Send + 'static, +{ + run_with_tt(registration, move |tt| run_once(tt, fut())).await +} + +pub async fn run_with_tt( + registration: &Registration, + fut: impl Fn(Arc) -> F + Send + 'static, +) -> Result<()> where F: Future> + Send + 'static, T: Debug + PartialEq + Eq + TraceRawVcs + Send + 'static, @@ -95,15 +106,25 @@ where let name = closure_to_name(&fut); let tt = registration.create_turbo_tasks(&name, true); println!("Run #1 (without cache)"); - let first = run_once(tt.clone(), fut()).await?; + let start = std::time::Instant::now(); + let first = fut(tt.clone()).await?; + println!("Run #1 took {:?}", start.elapsed()); println!("Run #2 (with memory cache, same TurboTasks instance)"); - let second = run_once(tt.clone(), fut()).await?; + let start = std::time::Instant::now(); + let second = fut(tt.clone()).await?; + println!("Run #2 took {:?}", start.elapsed()); assert_eq!(first, second); + let start = std::time::Instant::now(); tt.stop_and_wait().await; + println!("Stopping TurboTasks took {:?}", start.elapsed()); let tt = registration.create_turbo_tasks(&name, false); println!("Run #3 (with persistent cache if available, new TurboTasks instance)"); - let third = run_once(tt.clone(), fut()).await?; + let start = std::time::Instant::now(); + let third = fut(tt.clone()).await?; + println!("Run #3 took {:?}", start.elapsed()); + let start = std::time::Instant::now(); tt.stop_and_wait().await; + println!("Stopping TurboTasks took {:?}", start.elapsed()); assert_eq!(first, third); Ok(()) } diff --git a/turbopack/crates/turbo-tasks-testing/tests/basic.rs b/turbopack/crates/turbo-tasks-testing/tests/basic.rs new file mode 100644 index 0000000000000..84a56237e3193 --- /dev/null +++ b/turbopack/crates/turbo-tasks-testing/tests/basic.rs @@ -0,0 +1,40 @@ +#![feature(arbitrary_self_types)] + +use anyhow::Result; +use turbo_tasks::Vc; +use turbo_tasks_testing::{register, run, Registration}; + +static REGISTRATION: Registration = register!(); + +#[tokio::test] +async fn basic() { + run(®ISTRATION, || async { + let output1 = func_without_args(); + assert_eq!(output1.await?.value, 123); + + let input = Value { value: 42 }.cell(); + let output2 = func(input); + assert_eq!(output2.await?.value, 42); + + anyhow::Ok(()) + }) + .await + .unwrap() +} + +#[turbo_tasks::value] +struct Value { + value: u32, +} + +#[turbo_tasks::function] +async fn func(input: Vc) -> Result> { + let value = input.await?.value; + Ok(Value { value }.cell()) +} + +#[turbo_tasks::function] +async fn func_without_args() -> Result> { + let value = 123; + Ok(Value { value }.cell()) +} diff --git a/turbopack/crates/turbo-tasks-testing/tests/performance.rs b/turbopack/crates/turbo-tasks-testing/tests/performance.rs new file mode 100644 index 0000000000000..5dbd561bb285d --- /dev/null +++ b/turbopack/crates/turbo-tasks-testing/tests/performance.rs @@ -0,0 +1,100 @@ +#![feature(arbitrary_self_types)] + +use std::time::Duration; + +use turbo_tasks::Vc; +use turbo_tasks_testing::{register, run, Registration}; + +static REGISTRATION: Registration = register!(); + +const COUNT1: u32 = 100; +const COUNT2: u32 = 2000; + +#[tokio::test] +async fn many_calls_to_many_children() { + run(®ISTRATION, || async { + // The first call will actually execute many_children and its children. + let start = std::time::Instant::now(); + calls_many_children(0).strongly_consistent().await?; + println!("Initial call took {:?}", start.elapsed()); + + // The second call will connect to the cached many_children, but it would be ok if that's + // not yet optimized. + let start = std::time::Instant::now(); + calls_many_children(1).strongly_consistent().await?; + println!("Second call took {:?}", start.elapsed()); + + // Susbsequent calls should be very fast. + let start = std::time::Instant::now(); + for i in 2..COUNT1 { + calls_many_children(i).strongly_consistent().await?; + } + let subsequent = start.elapsed(); + println!( + "First {} subsequent calls took {:?}", + COUNT1 - 2, + subsequent + ); + + let start = std::time::Instant::now(); + for i in COUNT1..COUNT1 * 2 - 2 { + calls_many_children(i).strongly_consistent().await?; + } + let subsequent2 = start.elapsed(); + println!( + "Another {} subsequent calls took {:?}", + COUNT1 - 2, + subsequent2 + ); + + let start = std::time::Instant::now(); + calls_many_children(COUNT1 - 1) + .strongly_consistent() + .await?; + let final_call = start.elapsed(); + println!("Final call took {:?}", final_call); + + assert!( + subsequent2 * 2 < subsequent * 3, + "Performance should not regress with more calls" + ); + + assert!( + subsequent < Duration::from_micros(100) * (COUNT1 - 2), + "Each call should be less than 100µs" + ); + + assert!( + subsequent2 < Duration::from_micros(100) * (COUNT1 - 2), + "Each call should be less than 100µs" + ); + + anyhow::Ok(()) + }) + .await + .unwrap() +} + +#[turbo_tasks::value] +struct Value { + value: u32, +} + +#[turbo_tasks::function] +async fn calls_many_children(_i: u32) -> Vc<()> { + let _ = many_children(); + Vc::cell(()) +} + +#[turbo_tasks::function] +fn many_children() -> Vc<()> { + for i in 0..COUNT2 { + let _ = many_children_inner(i); + } + Vc::cell(()) +} + +#[turbo_tasks::function] +fn many_children_inner(_i: u32) -> Vc<()> { + Vc::cell(()) +} diff --git a/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs b/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs index c1b50136400ad..7c59f372b460f 100644 --- a/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs +++ b/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs @@ -2,22 +2,16 @@ use anyhow::Result; use turbo_tasks::{run_once, Completion, TryJoinIterExt, Vc}; -use turbo_tasks_testing::{register, Registration}; +use turbo_tasks_testing::{register, run_with_tt, Registration}; static REGISTRATION: Registration = register!(); -#[test] -fn rectangle_stress() { - REGISTRATION.ensure_registered(); - let rt = tokio::runtime::Builder::new_multi_thread() - .enable_all() - .build() - .unwrap(); - rt.block_on(async { - let tt = REGISTRATION.create_turbo_tasks("scope_stress_rectangle_stress", true); - let size = std::env::var("TURBOPACK_TEST_RECTANGLE_STRESS_SIZE") - .map(|size| size.parse().unwrap()) - .unwrap_or(50); +#[tokio::test(flavor = "multi_thread")] +async fn rectangle_stress() -> Result<()> { + let size = std::env::var("TURBOPACK_TEST_RECTANGLE_STRESS_SIZE") + .map(|size| size.parse().unwrap()) + .unwrap_or(50); + run_with_tt(®ISTRATION, move |tt| async move { (0..size) .map(|a| (a, size - 1)) .chain((0..size - 1).map(|b| (size - 1, b))) @@ -32,9 +26,10 @@ fn rectangle_stress() { } }) .try_join() - .await - .unwrap(); + .await?; + Ok(()) }) + .await } /// This fills a rectagle from (0, 0) to (a, b) by diff --git a/turbopack/crates/turbo-tasks/src/backend.rs b/turbopack/crates/turbo-tasks/src/backend.rs index d87ebe638048a..b77c606270f82 100644 --- a/turbopack/crates/turbo-tasks/src/backend.rs +++ b/turbopack/crates/turbo-tasks/src/backend.rs @@ -27,22 +27,25 @@ use crate::{ TraitTypeId, ValueTypeId, VcRead, VcValueTrait, VcValueType, }; -type TransientTaskRoot = +pub type TransientTaskRoot = Box Pin> + Send>> + Send + Sync>; pub enum TransientTaskType { /// A root task that will track dependencies and re-execute when /// dependencies change. Task will eventually settle to the correct /// execution. + /// /// Always active. Automatically scheduled. Root(TransientTaskRoot), // TODO implement these strongly consistency /// A single root task execution. It won't track dependencies. + /// /// Task will definitely include all invalidations that happened before the /// start of the task. It may or may not include invalidations that /// happened after that. It may see these invalidations partially /// applied. + /// /// Active until done. Automatically scheduled. Once(Pin> + Send + 'static>>), } @@ -92,13 +95,93 @@ impl Display for CachedTaskType { } mod ser { + use std::any::Any; + use serde::{ + de::{self}, ser::{SerializeSeq, SerializeTuple}, Deserialize, Deserializer, Serialize, Serializer, }; use super::*; + impl Serialize for TypedCellContent { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + let value_type = registry::get_value_type(self.0); + let serializable = if let Some(value) = &self.1 .0 { + value_type.any_as_serializable(&value.0) + } else { + None + }; + let mut state = serializer.serialize_tuple(3)?; + state.serialize_element(registry::get_value_type_global_name(self.0))?; + if let Some(serializable) = serializable { + state.serialize_element(&true)?; + state.serialize_element(serializable)?; + } else { + state.serialize_element(&false)?; + state.serialize_element(&())?; + } + state.end() + } + } + + impl<'de> Deserialize<'de> for TypedCellContent { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + struct Visitor; + + impl<'de> serde::de::Visitor<'de> for Visitor { + type Value = TypedCellContent; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + write!(formatter, "a valid TypedCellContent") + } + + fn visit_seq(self, mut seq: A) -> std::result::Result + where + A: de::SeqAccess<'de>, + { + let value_type = seq + .next_element()? + .ok_or_else(|| de::Error::invalid_length(0, &self))?; + let value_type = registry::get_value_type_id_by_global_name(value_type) + .ok_or_else(|| de::Error::custom("Unknown value type"))?; + let has_value: bool = seq + .next_element()? + .ok_or_else(|| de::Error::invalid_length(1, &self))?; + if has_value { + let seed = registry::get_value_type(value_type) + .get_any_deserialize_seed() + .ok_or_else(|| { + de::Error::custom("Value type doesn't support deserialization") + })?; + let value = seq + .next_element_seed(seed)? + .ok_or_else(|| de::Error::invalid_length(2, &self))?; + let arc = triomphe::Arc::::from(value); + Ok(TypedCellContent( + value_type, + CellContent(Some(SharedReference(arc))), + )) + } else { + let () = seq + .next_element()? + .ok_or_else(|| de::Error::invalid_length(2, &self))?; + Ok(TypedCellContent(value_type, CellContent(None))) + } + } + } + + deserializer.deserialize_tuple(2, Visitor) + } + } + enum FunctionAndArg<'a> { Owned { fn_type: FunctionId, diff --git a/turbopack/crates/turbo-tasks/src/graph/graph_store.rs b/turbopack/crates/turbo-tasks/src/graph/graph_store.rs index 30c43b85faeee..08f61a1c19e77 100644 --- a/turbopack/crates/turbo-tasks/src/graph/graph_store.rs +++ b/turbopack/crates/turbo-tasks/src/graph/graph_store.rs @@ -1,4 +1,6 @@ -use std::collections::HashSet; +use std::{collections::HashSet, hash::Hash}; + +use super::VisitedNodes; /// A graph store is a data structure that will be built up during a graph /// traversal. It is used to store the results of the traversal. @@ -62,6 +64,10 @@ where visited: Default::default(), } } + + pub fn new_with_visited_nodes(store: StoreImpl, visited: HashSet) -> Self { + Self { store, visited } + } } impl GraphStore for SkipDuplicates @@ -98,4 +104,9 @@ where pub fn into_inner(self) -> StoreImpl { self.store } + + /// Consumes the wrapper and returns the underlying store along with the visited nodes. + pub fn into_inner_with_visited(self) -> (StoreImpl, VisitedNodes) { + (self.store, VisitedNodes(self.visited)) + } } diff --git a/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs b/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs index d5c1832211aef..593368a088ad4 100644 --- a/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs +++ b/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs @@ -1,4 +1,4 @@ -use std::{future::Future, pin::Pin}; +use std::{collections::HashSet, future::Future, pin::Pin}; use anyhow::Result; use futures::{stream::FuturesUnordered, Stream}; @@ -9,6 +9,10 @@ use super::{ SkipDuplicates, Visit, VisitControlFlow, }; +/// A list of modules that were already visited and should be skipped (including their subgraphs). +#[derive(Clone, Default, Debug)] +pub struct VisitedNodes(pub HashSet); + /// [`GraphTraversal`] is a utility type that can be used to traverse a graph of /// nodes, where each node can have a variable number of outgoing edges. The /// traversal is done in parallel, and the order of the nodes in the traversal @@ -24,6 +28,10 @@ pub trait GraphTraversal: GraphStore + Sized { RootEdgesIt: IntoIterator; fn skip_duplicates(self) -> SkipDuplicates; + fn skip_duplicates_with_visited_nodes( + self, + visited: VisitedNodes, + ) -> SkipDuplicates; } impl GraphTraversal for Store @@ -73,6 +81,13 @@ where fn skip_duplicates(self) -> SkipDuplicates { SkipDuplicates::new(self) } + + fn skip_duplicates_with_visited_nodes( + self, + visited: VisitedNodes, + ) -> SkipDuplicates { + SkipDuplicates::new_with_visited_nodes(self, visited.0) + } } /// A future that resolves to a [`GraphStore`] containing the result of a graph diff --git a/turbopack/crates/turbo-tasks/src/graph/mod.rs b/turbopack/crates/turbo-tasks/src/graph/mod.rs index e2c0754485387..3829a39241be5 100644 --- a/turbopack/crates/turbo-tasks/src/graph/mod.rs +++ b/turbopack/crates/turbo-tasks/src/graph/mod.rs @@ -9,6 +9,6 @@ mod with_future; pub use adjacency_map::AdjacencyMap; pub use control_flow::VisitControlFlow; pub use graph_store::{GraphStore, SkipDuplicates}; -pub use graph_traversal::{GraphTraversal, GraphTraversalResult}; +pub use graph_traversal::{GraphTraversal, GraphTraversalResult, VisitedNodes}; pub use non_deterministic::NonDeterministic; pub use visit::Visit; diff --git a/turbopack/crates/turbo-tasks/src/key_value_pair.rs b/turbopack/crates/turbo-tasks/src/key_value_pair.rs new file mode 100644 index 0000000000000..6aceaea04d4f7 --- /dev/null +++ b/turbopack/crates/turbo-tasks/src/key_value_pair.rs @@ -0,0 +1,8 @@ +pub trait KeyValuePair { + type Key: PartialEq + Eq + std::hash::Hash; + type Value; + fn key(&self) -> Self::Key; + fn value(&self) -> Self::Value; + fn from_key_and_value(key: Self::Key, value: Self::Value) -> Self; + fn into_key_and_value(self) -> (Self::Key, Self::Value); +} diff --git a/turbopack/crates/turbo-tasks/src/lib.rs b/turbopack/crates/turbo-tasks/src/lib.rs index a289b5ad18aea..558f37cf35d8f 100644 --- a/turbopack/crates/turbo-tasks/src/lib.rs +++ b/turbopack/crates/turbo-tasks/src/lib.rs @@ -49,6 +49,7 @@ mod id; mod id_factory; mod invalidation; mod join_iter_ext; +mod key_value_pair; #[doc(hidden)] pub mod macro_helpers; mod magic_any; @@ -91,6 +92,7 @@ pub use invalidation::{ InvalidationReasonSet, Invalidator, }; pub use join_iter_ext::{JoinIterExt, TryFlatJoinIterExt, TryJoinIterExt}; +pub use key_value_pair::KeyValuePair; pub use magic_any::MagicAny; pub use manager::{ dynamic_call, dynamic_this_call, emit, mark_dirty_when_persisted, mark_finished, mark_stateful, @@ -107,7 +109,7 @@ pub use serialization_invalidation::SerializationInvalidator; pub use state::{State, TransientState}; pub use task::{task_input::TaskInput, SharedReference}; pub use trait_ref::{IntoTraitRef, TraitRef}; -pub use turbo_tasks_macros::{function, value, value_impl, value_trait, TaskInput}; +pub use turbo_tasks_macros::{function, value_impl, value_trait, KeyValuePair, TaskInput}; pub use value::{TransientInstance, TransientValue, Value}; pub use value_type::{TraitMethod, TraitType, ValueType}; pub use vc::{ @@ -118,6 +120,109 @@ pub use vc::{ pub use crate::rcstr::RcStr; +/// Implements [`VcValueType`] for the given `struct` or `enum`. These value types can be used +/// inside of a "value cell" as [`Vc<...>`][Vc]. +/// +/// A [`Vc`] represents a (potentially lazy) memoized computation. Each [`Vc`]'s value is placed +/// into a cell associated with the current [`TaskId`]. That [`Vc`] object can be `await`ed to get +/// [a read-only reference to the value contained in the cell][ReadRef]. +/// +/// This macro accepts multiple comma-separated arguments. For example: +/// +/// ``` +/// # #![feature(arbitrary_self_types)] +/// #[turbo_tasks::value(transparent, into = "shared")] +/// struct Foo(Vec); +/// ``` +/// +/// ## `cell = "..."` +/// +/// Controls when a cell is invalidated upon recomputation of a task. Internally, this is performed +/// by setting the [`VcValueType::CellMode`] associated type. +/// +/// - **`"new"`:** Always overrides the value in the cell, invalidating all dependent tasks. +/// - **`"shared"` *(default)*:** Compares with the existing value in the cell, before overriding it. +/// Requires the value to implement [`Eq`]. +/// +/// Avoiding unnecessary invalidation is important to reduce downstream recomputation of tasks that +/// depend on this cell's value. +/// +/// Use `"new"` only if a correct implementation of [`Eq`] is not possible, would be expensive (e.g. +/// would require comparing a large collection), or if you're implementing a low-level primitive +/// that intentionally forces recomputation. +/// +/// ## `eq = "..."` +/// +/// By default, we `#[derive(PartialEq, Eq)]`. [`Eq`] is required by `cell = "shared"`. This +/// argument allows overriding that default implementation behavior. +/// +/// - **`"manual"`:** Prevents deriving [`Eq`] and [`PartialEq`] so you can do it manually. +/// +/// ## `into = "..."` +/// +/// This macro always implements a `.cell()` method on your type with the signature: +/// +/// ```ignore +/// /// Wraps the value in a cell. +/// fn cell(self) -> Vc; +/// ``` +/// +/// This argument controls the visibility of the `.cell()` method, as well as whether a +/// [`From for Vc`][From] implementation is generated. +/// +/// - **`"new"` or `"shared"`:** Exposes both `.cell()` and [`From`]/[`Into`] implementations. Both +/// of these values (`"new"` or `"shared"`) do the same thing (for legacy reasons). +/// - **`"none"` *(default)*:** Makes `.cell()` private and prevents implementing [`From`]/[`Into`]. +/// +/// You should use the default value of `"none"` when providing your own public constructor methods. +/// +/// The naming of this field and it's values are due to legacy reasons. +/// +/// ## `serialization = "..."` +/// +/// Affects serialization via [`serde::Serialize`] and [`serde::Deserialize`]. Serialization is +/// required for persistent caching of tasks to disk. +/// +/// - **`"auto"` *(default)*:** Derives the serialization traits and enables serialization. +/// - **`"auto_for_input"`:** Same as `"auto"`, but also adds the marker trait [`TypedForInput`]. +/// - **`"custom"`:** Prevents deriving the serialization traits, but still enables serialization +/// (you must manually implement [`serde::Serialize`] and [`serde::Deserialize`]). +/// - **`"custom_for_input"`:** Same as `"custom"`, but also adds the marker trait +/// [`TypedForInput`]. +/// - **`"none"`:** Disables serialization and prevents deriving the traits. +/// +/// ## `shared` +/// +/// Sets both `cell = "shared"` *(already the default)* and `into = "shared"`, exposing the +/// `.cell()` method and adding a [`From`]/[`Into`] implementation. +/// +/// ## `transparent` +/// +/// This attribute is only valid on single-element unit structs. When this value is set: +/// +/// 1. The struct will use [`#[repr(transparent)]`][repr-transparent]. +/// 1. Read operations (`vc.await?`) return a [`ReadRef`] containing the inner type, rather than the +/// outer struct. Internally, this is accomplished using [`VcTransparentRead`] for the +/// [`VcValueType::Read`] associated type. +/// 1. Construction of the type must be performed using [`Vc::cell(inner)`][Vc::cell], rather than +/// using the `.cell()` method on the outer type (`outer.cell()`). +/// 1. The [`ValueDebug`][crate::debug::ValueDebug] implementation will defer to the inner type. +/// +/// This is commonly used to create [`VcValueType`] wrappers for foreign or generic types, such as +/// [`Vec`] or [`Option`]. +/// +/// [repr-transparent]: https://doc.rust-lang.org/nomicon/other-reprs.html#reprtransparent +/// +/// ## `resolved` +/// +/// Applies the [`#[derive(ResolvedValue)]`][macro@ResolvedValue] macro. +/// +/// Indicates that this struct has no fields containing [`Vc`] by implementing the [`ResolvedValue`] +/// marker trait. In order to safely implement [`ResolvedValue`], this inserts compile-time +/// assertions that every field in this struct has a type that is also a [`ResolvedValue`]. +#[rustfmt::skip] +pub use turbo_tasks_macros::value; + pub type TaskIdSet = AutoSet, 2>; pub mod test_helpers { diff --git a/turbopack/crates/turbo-tasks/src/vc/resolved.rs b/turbopack/crates/turbo-tasks/src/vc/resolved.rs index 3f194faed1567..3b85ff4a6e584 100644 --- a/turbopack/crates/turbo-tasks/src/vc/resolved.rs +++ b/turbopack/crates/turbo-tasks/src/vc/resolved.rs @@ -222,7 +222,7 @@ where /// /// This trait is marked as unsafe. You should not derive it yourself, but /// instead you should rely on [`#[turbo_tasks::value(resolved)]`][macro@ -/// turbo_tasks::value] to do it for you. +/// crate::value] to do it for you. pub unsafe trait ResolvedValue {} unsafe impl ResolvedValue for ResolvedVc {} diff --git a/turbopack/crates/turbo-tasks/src/vc/traits.rs b/turbopack/crates/turbo-tasks/src/vc/traits.rs index 526db09af974b..a4dbad46e5c35 100644 --- a/turbopack/crates/turbo-tasks/src/vc/traits.rs +++ b/turbopack/crates/turbo-tasks/src/vc/traits.rs @@ -54,9 +54,9 @@ where { } -/// Marker trait that a turbo_tasks::value is prepared for -/// serialization as [`Value<...>`][crate::Value] input. -/// Either use [`#[turbo_tasks::value(serialization: -/// auto_for_input)]`][macro@crate::value] or avoid [`Value<...>`][crate::Value] -/// in favor of a real [Vc][crate::Vc]. +/// Marker trait that a turbo_tasks::value is prepared for serialization as +/// [`Value<...>`][crate::Value] input. +/// +/// Either use [`#[turbo_tasks::value(serialization = "auto_for_input")]`][macro@crate::value] or +/// avoid [`Value<...>`][crate::Value] in favor of a real [Vc][crate::Vc]. pub trait TypedForInput: VcValueType {} diff --git a/turbopack/crates/turbopack-browser/src/ecmascript/runtime.rs b/turbopack/crates/turbopack-browser/src/ecmascript/runtime.rs deleted file mode 100644 index 9d21a5afab615..0000000000000 --- a/turbopack/crates/turbopack-browser/src/ecmascript/runtime.rs +++ /dev/null @@ -1,215 +0,0 @@ -use anyhow::{bail, Result}; -use turbo_tasks::{Value, ValueToString, Vc}; -use turbopack_core::{ - asset::Asset, - chunk::{ChunkGroup, ChunkListReference, ChunkingContext}, - ident::AssetIdent, -}; -use turbopack_ecmascript::chunk::{ - ChunkingContext, EcmascriptChunk, EcmascriptChunkPlaceables, EcmascriptChunkRuntime, - EcmascriptChunkRuntimeContent, -}; - -use crate::ecmascript::content::EcmascriptDevChunkContent; - -/// Development runtime for Ecmascript chunks. -#[turbo_tasks::value(shared)] -pub(crate) struct EcmascriptDevChunkRuntime { - /// The chunking context that created this runtime. - chunking_context: Vc>, - /// All chunks of this chunk group need to be ready for execution to start. - /// When None, it will use a chunk group created from the current chunk. - chunk_group: Option>, - /// If any evaluated entries are set, the main runtime code will be included - /// in the chunk and the provided entries will be evaluated as soon as the - /// chunk executes. - evaluated_entries: Option>, -} - -#[turbo_tasks::value_impl] -impl EcmascriptDevChunkRuntime { - /// Creates a new [`Vc`]. - #[turbo_tasks::function] - pub fn new( - chunking_context: Vc>, - evaluated_entries: Option>, - ) -> Vc { - EcmascriptDevChunkRuntime { - chunking_context, - chunk_group: None, - evaluated_entries, - } - .cell() - } -} - -#[turbo_tasks::value_impl] -impl ValueToString for EcmascriptDevChunkRuntime { - #[turbo_tasks::function] - fn to_string(&self) -> Vc { - Vc::cell("Ecmascript Dev Runtime".to_string()) - } -} - -#[turbo_tasks::function] -fn modifier() -> Vc { - Vc::cell("ecmascript dev chunk".to_string()) -} - -#[turbo_tasks::value_impl] -impl EcmascriptChunkRuntime for EcmascriptDevChunkRuntime { - #[turbo_tasks::function] - async fn decorate_asset_ident( - &self, - origin_chunk: Vc, - ident: Vc, - ) -> Result> { - let Self { - chunking_context: _, - chunk_group, - evaluated_entries, - } = self; - - let mut ident = ident.await?.clone_value(); - - // Add a constant modifier to qualify this runtime. - ident.add_modifier(modifier()); - - // Only add other modifiers when the chunk is evaluated. Otherwise, it will - // not receive any params and as such won't differ from another chunk in a - // different chunk group. - if let Some(evaluated_entries) = evaluated_entries { - ident.modifiers.extend( - evaluated_entries - .await? - .iter() - .map(|entry| entry.ident().to_string()), - ); - - // When the chunk group has changed, e.g. due to optimization, we want to - // include the information too. Since the optimization is - // deterministic, it's enough to include the entry chunk which is the only - // factor that influences the chunk group chunks. - // We want to avoid a cycle when this chunk is the entry chunk. - if let Some(chunk_group) = chunk_group { - let entry = chunk_group.entry().resolve().await?; - if entry != origin_chunk.into() { - ident.add_modifier(entry.ident().to_string()); - } - } - } - - Ok(AssetIdent::new(Value::new(ident))) - } - - #[turbo_tasks::function] - fn with_chunk_group(&self, chunk_group: Vc) -> Vc { - EcmascriptDevChunkRuntime::cell(EcmascriptDevChunkRuntime { - chunking_context: self.chunking_context, - chunk_group: Some(chunk_group), - evaluated_entries: self.evaluated_entries, - }) - } - - #[turbo_tasks::function] - fn references(&self, origin_chunk: Vc) -> Vc { - let Self { - chunk_group, - chunking_context, - evaluated_entries, - } = self; - - let mut references = vec![]; - if evaluated_entries.is_some() { - let chunk_group = - chunk_group.unwrap_or_else(|| ChunkGroup::from_chunk(origin_chunk.into())); - references.push(Vc::upcast(ChunkListReference::new( - chunking_context.output_root(), - chunk_group, - ))); - } - Vc::cell(references) - } - - #[turbo_tasks::function] - fn content(&self, origin_chunk: Vc) -> Vc { - Vc::upcast(EcmascriptDevChunkContent::new( - origin_chunk, - self.chunking_context, - self.chunk_group, - self.evaluated_entries, - )) - } - - #[turbo_tasks::function] - async fn merge( - &self, - runtimes: Vec>, - ) -> Result> { - let Self { - chunking_context, - chunk_group, - evaluated_entries, - } = self; - - let chunking_context = chunking_context.resolve().await?; - let chunk_group = if let Some(chunk_group) = chunk_group { - Some(chunk_group.resolve().await?) - } else { - None - }; - - let mut evaluated_entries = if let Some(evaluated_entries) = evaluated_entries { - Some(evaluated_entries.await?.clone_value()) - } else { - None - }; - - for runtime in runtimes { - let Some(runtime) = - Vc::try_resolve_downcast_type::(runtime).await? - else { - bail!("cannot merge EcmascriptDevChunkRuntime with non-EcmascriptDevChunkRuntime"); - }; - - let Self { - chunking_context: other_chunking_context, - chunk_group: other_chunk_group, - evaluated_entries: other_evaluated_entries, - } = &*runtime.await?; - - let other_chunking_context = other_chunking_context.resolve().await?; - let other_chunk_group = if let Some(other_chunk_group) = other_chunk_group { - Some(other_chunk_group.resolve().await?) - } else { - None - }; - - if chunking_context != other_chunking_context { - bail!("cannot merge EcmascriptDevChunkRuntime with different chunking contexts",); - } - - if chunk_group != other_chunk_group { - bail!("cannot merge EcmascriptDevChunkRuntime with different chunk groups",); - } - - match (&mut evaluated_entries, other_evaluated_entries) { - (Some(evaluated_entries), Some(other_evaluated_entries)) => { - evaluated_entries.extend(other_evaluated_entries.await?.iter().copied()); - } - (None, Some(other_evaluated_entries)) => { - evaluated_entries = Some(other_evaluated_entries.await?.clone_value()); - } - _ => {} - } - } - - Ok(EcmascriptDevChunkRuntime { - chunking_context, - chunk_group, - evaluated_entries: evaluated_entries.map(Vc::cell), - } - .cell() - .into()) - } -} diff --git a/turbopack/crates/turbopack-core/src/chunk/optimize.rs b/turbopack/crates/turbopack-core/src/chunk/optimize.rs index d216b25174bb0..bea7a542ce426 100644 --- a/turbopack/crates/turbopack-core/src/chunk/optimize.rs +++ b/turbopack/crates/turbopack-core/src/chunk/optimize.rs @@ -45,7 +45,7 @@ where Ok(( if let Some(common_parent) = &*common_parent { - Some(FileSystemPathKey::new(*common_parent).await?) + Some(FileSystemPathKey::new(**common_parent).await?) } else { None }, diff --git a/turbopack/crates/turbopack-core/src/resolve/mod.rs b/turbopack/crates/turbopack-core/src/resolve/mod.rs index fa9ad1e0cb147..7a3aa635a8b42 100644 --- a/turbopack/crates/turbopack-core/src/resolve/mod.rs +++ b/turbopack/crates/turbopack-core/src/resolve/mod.rs @@ -1010,7 +1010,7 @@ async fn type_exists( ) -> Result>> { let result = fs_path.resolve().await?.realpath_with_links().await?; for path in result.symlinks.iter() { - refs.push(Vc::upcast(FileSource::new(*path))); + refs.push(Vc::upcast(FileSource::new(**path))); } let path = result.path.resolve().await?; Ok(if *path.get_type().await? == ty { @@ -1026,7 +1026,7 @@ async fn any_exists( ) -> Result)>> { let result = fs_path.resolve().await?.realpath_with_links().await?; for path in result.symlinks.iter() { - refs.push(Vc::upcast(FileSource::new(*path))); + refs.push(Vc::upcast(FileSource::new(**path))); } let path = result.path.resolve().await?; let ty = *path.get_type().await?; @@ -1334,10 +1334,10 @@ pub async fn resolve_raw( let RealPathResult { path, symlinks } = &*path.realpath_with_links().await?; Ok(ResolveResult::source_with_affecting_sources( RequestKey::new(request.into()), - Vc::upcast(FileSource::new(*path)), + Vc::upcast(FileSource::new(**path)), symlinks .iter() - .copied() + .map(|symlink| **symlink) .map(FileSource::new) .map(Vc::upcast) .collect(), @@ -2583,7 +2583,7 @@ async fn resolved( if let Some(resolved_map) = options_value.resolved_map { let result = resolved_map - .lookup(*path, original_context, original_request) + .lookup(**path, original_context, original_request) .await?; let resolved_result = resolve_import_map_result( @@ -2603,10 +2603,10 @@ async fn resolved( Ok(ResolveResult::source_with_affecting_sources( request_key, - Vc::upcast(FileSource::new_with_query(*path, query)), + Vc::upcast(FileSource::new_with_query(**path, query)), symlinks .iter() - .copied() + .map(|symlink| **symlink) .map(FileSource::new) .map(Vc::upcast) .collect(), @@ -2940,7 +2940,7 @@ impl ValueToString for ModulePart { ModulePart::RenamedNamespace { export } => { format!("export * as {}", export.await?).into() } - ModulePart::Internal(id) => format!("internal part {}", id).into(), + ModulePart::Internal(id) => format!("internal part {}", id,).into(), ModulePart::Locals => "locals".into(), ModulePart::Exports => "exports".into(), ModulePart::Facade => "facade".into(), diff --git a/turbopack/crates/turbopack-core/src/resolve/pattern.rs b/turbopack/crates/turbopack-core/src/resolve/pattern.rs index b0802bc504a8c..df2b4623dd448 100644 --- a/turbopack/crates/turbopack-core/src/resolve/pattern.rs +++ b/turbopack/crates/turbopack-core/src/resolve/pattern.rs @@ -1512,7 +1512,7 @@ pub async fn read_matches( if let Some(pos) = pat.match_position(&prefix) { results.push(( pos, - PatternMatch::File(prefix.clone().into(), *path), + PatternMatch::File(prefix.clone().into(), **path), )); } prefix.truncate(len) @@ -1527,7 +1527,7 @@ pub async fn read_matches( if let Some(pos) = pat.match_position(&prefix) { results.push(( pos, - PatternMatch::Directory(prefix.clone().into(), *path), + PatternMatch::Directory(prefix.clone().into(), **path), )); } prefix.push('/'); @@ -1535,13 +1535,13 @@ pub async fn read_matches( if let Some(pos) = pat.match_position(&prefix) { results.push(( pos, - PatternMatch::Directory(prefix.clone().into(), *path), + PatternMatch::Directory(prefix.clone().into(), **path), )); } if let Some(pos) = pat.could_match_position(&prefix) { nested.push(( pos, - read_matches(*path, prefix.clone().into(), true, pattern), + read_matches(**path, prefix.clone().into(), true, pattern), )); } prefix.truncate(len) @@ -1562,13 +1562,16 @@ pub async fn read_matches( pos, PatternMatch::Directory( prefix.clone().into(), - *fs_path, + **fs_path, ), )); } else { results.push(( pos, - PatternMatch::File(prefix.clone().into(), *fs_path), + PatternMatch::File( + prefix.clone().into(), + **fs_path, + ), )); } } @@ -1583,7 +1586,7 @@ pub async fn read_matches( pos, PatternMatch::Directory( prefix.clone().into(), - *fs_path, + **fs_path, ), )); } @@ -1598,7 +1601,7 @@ pub async fn read_matches( pos, PatternMatch::Directory( prefix.clone().into(), - *fs_path, + **fs_path, ), )); } diff --git a/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs b/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs index dc8ef38e3984f..8e113c1e3d198 100644 --- a/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs +++ b/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs @@ -56,11 +56,11 @@ async fn get_routes_from_directory(dir: Vc) -> Result Some( - get_routes_from_directory(*path) + get_routes_from_directory(**path) .with_prepended_base(vec![BaseSegment::Static(name.clone())]), ), _ => None, @@ -121,12 +121,12 @@ impl Introspectable for StaticAssetsContentSource { .map(|(name, entry)| { let child = match entry { DirectoryEntry::File(path) | DirectoryEntry::Symlink(path) => { - IntrospectableSource::new(Vc::upcast(FileSource::new(*path))) + IntrospectableSource::new(Vc::upcast(FileSource::new(**path))) } DirectoryEntry::Directory(path) => { Vc::upcast(StaticAssetsContentSource::with_prefix( Vc::cell(format!("{}{name}/", &*prefix).into()), - *path, + **path, )) } DirectoryEntry::Other(_) => todo!("what's DirectoryContent::Other?"), diff --git a/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs b/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs index e45fc60c4ca93..fcbe51ca99d10 100644 --- a/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs +++ b/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs @@ -201,6 +201,7 @@ pub(crate) enum ImportedSymbol { Symbol(JsWord), Exports, Part(u32), + PartEvaluation(u32), } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -373,7 +374,6 @@ impl Visit for Analyzer<'_> { self.data.imports.insert(local, (i, orig_sym)); } - if import.specifiers.is_empty() { if let Some(internal_symbol) = internal_symbol { self.ensure_reference( @@ -587,7 +587,8 @@ pub(crate) fn orig_name(n: &ModuleExportName) -> JsWord { fn parse_with(with: Option<&ObjectLit>) -> Option { find_turbopack_part_id_in_asserts(with?).map(|v| match v { - PartId::Internal(index) => ImportedSymbol::Part(index), + PartId::Internal(index, true) => ImportedSymbol::PartEvaluation(index), + PartId::Internal(index, false) => ImportedSymbol::Part(index), PartId::ModuleEvaluation => ImportedSymbol::ModuleEvaluation, PartId::Export(e) => ImportedSymbol::Symbol(e.as_str().into()), PartId::Exports => ImportedSymbol::Exports, diff --git a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs index 42eda038af973..7d227b8c32a49 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs @@ -599,10 +599,11 @@ pub(crate) async fn analyse_ecmascript_module_internal( Some(ModulePart::evaluation()) } ImportedSymbol::Symbol(name) => Some(ModulePart::export((&**name).into())), - ImportedSymbol::Part(part_id) => { + ImportedSymbol::PartEvaluation(part_id) => { evaluation_references.push(i); Some(ModulePart::internal(*part_id)) } + ImportedSymbol::Part(part_id) => Some(ModulePart::internal(*part_id)), ImportedSymbol::Exports => Some(ModulePart::exports()), }, Some(TreeShakingMode::ReexportsOnly) => match &r.imported_symbol { @@ -611,7 +612,7 @@ pub(crate) async fn analyse_ecmascript_module_internal( Some(ModulePart::evaluation()) } ImportedSymbol::Symbol(name) => Some(ModulePart::export((&**name).into())), - ImportedSymbol::Part(_) => { + ImportedSymbol::PartEvaluation(_) | ImportedSymbol::Part(_) => { bail!("Internal imports doesn't exist in reexports only mode") } ImportedSymbol::Exports => None, diff --git a/turbopack/crates/turbopack-ecmascript/src/references/node.rs b/turbopack/crates/turbopack-ecmascript/src/references/node.rs index 49c78c2b28ef4..820b121a30610 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/node.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/node.rs @@ -122,11 +122,11 @@ async fn resolve_reference_from_dir( PatternMatch::File(matched_path, file) => { let realpath = file.realpath_with_links().await?; for &symlink in &realpath.symlinks { - affecting_sources.push(Vc::upcast(FileSource::new(symlink))); + affecting_sources.push(Vc::upcast(FileSource::new(*symlink))); } results.push(( RequestKey::new(matched_path.clone()), - Vc::upcast(RawModule::new(Vc::upcast(FileSource::new(realpath.path)))), + Vc::upcast(RawModule::new(Vc::upcast(FileSource::new(*realpath.path)))), )); } PatternMatch::Directory(..) => {} diff --git a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs index 24f1beb39a358..6a096b422800c 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs @@ -84,7 +84,7 @@ impl DirList { DirectoryEntry::File(path) => { if let Some(relative_path) = root_val.get_relative_path_to(&*path.await?) { if regex.is_match(&relative_path) { - list.insert(relative_path, DirListEntry::File(*path)); + list.insert(relative_path, DirListEntry::File(**path)); } } } @@ -93,7 +93,7 @@ impl DirList { list.insert( relative_path, DirListEntry::Dir(DirList::read_internal( - root, *path, recursive, filter, + root, **path, recursive, filter, )), ); } diff --git a/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs b/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs index b6347fc845a8e..b2442a03a1005 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs @@ -80,7 +80,7 @@ impl ModuleReference for TsReferencePathAssetReference { .origin .asset_context() .process( - Vc::upcast(FileSource::new(*path)), + Vc::upcast(FileSource::new(**path)), Value::new(ReferenceType::TypeScript( TypeScriptReferenceSubType::Undefined, )), diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs index 2773d61d6c3c4..59e1cd9f661b0 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs @@ -5,7 +5,7 @@ use turbopack_core::{ chunk::{AsyncModuleInfo, ChunkableModule, ChunkingContext, EvaluatableAsset}, ident::AssetIdent, module::Module, - reference::{ModuleReferences, SingleModuleReference}, + reference::{ModuleReference, ModuleReferences, SingleModuleReference}, resolve::ModulePart, }; @@ -143,9 +143,20 @@ impl Module for EcmascriptModulePartAsset { SplitResult::Failed { .. } => return Ok(analyze.references), }; + let part_dep = |part: Vc| -> Vc> { + Vc::upcast(SingleModuleReference::new( + Vc::upcast(EcmascriptModulePartAsset::new(self.full_module, part)), + Vc::cell("ecmascript module part".into()), + )) + }; + + let mut references = analyze.references.await?.to_vec(); + // Facade depends on evaluation and re-exports - if matches!(&*self.part.await?, ModulePart::Facade | ModulePart::Exports) { - return Ok(analyze.references); + if matches!(&*self.part.await?, ModulePart::Facade) { + references.push(part_dep(ModulePart::evaluation())); + references.push(part_dep(ModulePart::exports())); + return Ok(Vc::cell(references)); } let deps = { @@ -159,28 +170,24 @@ impl Module for EcmascriptModulePartAsset { } }; - let mut assets = deps - .iter() - .map(|part_id| { - Ok(Vc::upcast(SingleModuleReference::new( - Vc::upcast(EcmascriptModulePartAsset::new( - self.full_module, - match part_id { - PartId::Internal(part_id) => ModulePart::internal(*part_id), - PartId::Export(name) => ModulePart::export(name.clone()), - _ => unreachable!( - "PartId other than Internal and Export should not be used here" - ), - }, - )), - Vc::cell("ecmascript module part".into()), - ))) - }) - .collect::>>()?; - - assets.extend(analyze.references.await?.iter().cloned()); - - Ok(Vc::cell(assets)) + references.extend( + deps.iter() + .filter_map(|part_id| { + Some(part_dep(match part_id { + // This is an internal part that is not for evaluation, so we don't need to + // force-add it. + PartId::Internal(.., false) => return None, + PartId::Internal(part_id, true) => ModulePart::internal(*part_id), + PartId::Export(name) => ModulePart::export(name.clone()), + _ => unreachable!( + "PartId other than Internal and Export should not be used here" + ), + })) + }) + .collect::>(), + ); + + Ok(Vc::cell(references)) } } diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs index 3470d62597c9a..9c50b4f10a6b4 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs @@ -301,6 +301,7 @@ impl DepGraph { body: directives.to_vec(), shebang: None, }; + let mut part_deps_done = FxHashSet::default(); let mut required_vars = group .iter() @@ -369,25 +370,6 @@ impl DepGraph { } } - // Depend on direct dependencies so that they are executed before this module. - for dep in groups - .idx_graph - .neighbors_directed(ix as u32, petgraph::Direction::Outgoing) - { - chunk - .body - .push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - span: DUMMY_SP, - specifiers: vec![], - src: Box::new(TURBOPACK_PART_IMPORT_SOURCE.into()), - type_only: false, - with: Some(Box::new(create_turbopack_part_id_assert(PartId::Internal( - dep, - )))), - phase: Default::default(), - }))); - } - // Workaround for implcit export issue of server actions. // // Inline server actions require the generated `$$RSC_SERVER_0` to be **exported**. @@ -473,10 +455,12 @@ impl DepGraph { is_type_only: false, })]; + part_deps_done.insert(dep); + part_deps .entry(ix as u32) .or_default() - .push(PartId::Internal(dep)); + .push(PartId::Internal(dep, false)); chunk .body @@ -486,7 +470,35 @@ impl DepGraph { src: Box::new(TURBOPACK_PART_IMPORT_SOURCE.into()), type_only: false, with: Some(Box::new(create_turbopack_part_id_assert(PartId::Internal( - dep, + dep, false, + )))), + phase: Default::default(), + }))); + } + + // Depend on direct dependencies so that they are executed before this module. + for dep in groups + .idx_graph + .neighbors_directed(ix as u32, petgraph::Direction::Outgoing) + { + if !part_deps_done.insert(dep) { + continue; + } + + part_deps + .entry(ix as u32) + .or_default() + .push(PartId::Internal(dep, true)); + + chunk + .body + .push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { + span: DUMMY_SP, + specifiers: vec![], + src: Box::new(TURBOPACK_PART_IMPORT_SOURCE.into()), + type_only: false, + with: Some(Box::new(create_turbopack_part_id_assert(PartId::Internal( + dep, true, )))), phase: Default::default(), }))); @@ -1290,7 +1302,8 @@ pub(crate) enum PartId { ModuleEvaluation, Exports, Export(RcStr), - Internal(u32), + /// `(part_id, is_for_eval)` + Internal(u32, bool), } pub(crate) fn create_turbopack_part_id_assert(dep: PartId) -> ObjectLit { @@ -1303,7 +1316,15 @@ pub(crate) fn create_turbopack_part_id_assert(dep: PartId) -> ObjectLit { PartId::ModuleEvaluation => "module evaluation".into(), PartId::Exports => "exports".into(), PartId::Export(e) => format!("export {e}").into(), - PartId::Internal(dep) => (dep as f64).into(), + PartId::Internal(dep, is_for_eval) => { + let v = dep as f64; + if is_for_eval { + v + } else { + -v + } + } + .into(), }, })))], } @@ -1314,7 +1335,10 @@ pub(crate) fn find_turbopack_part_id_in_asserts(asserts: &ObjectLit) -> Option

Some(PartId::Internal(chunk_id.value as u32)), + })) if &*key.sym == ASSERT_CHUNK_KEY => Some(PartId::Internal( + chunk_id.value.abs() as u32, + chunk_id.value.is_sign_positive(), + )), PropOrSpread::Prop(box Prop::KeyValue(KeyValueProp { key: PropName::Ident(key), diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs index 282b1bb3fab3e..c6372e57e8e7f 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs @@ -53,7 +53,7 @@ where .as_deref() .and_then(find_turbopack_part_id_in_asserts); - if let Some(PartId::Internal(part_id)) = part_id { + if let Some(PartId::Internal(part_id, _)) = part_id { if self.done.insert((import.src.value.clone(), part_id)) { if let Some(dep) = self.loader.load(&import.src.value, part_id)? { let mut dep = self.merge_recursively(dep)?; diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs index 23b08f10a1d0e..ba5ab4e77af64 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs @@ -519,13 +519,6 @@ impl Visit for ShouldSkip { return; } - // This is needed to pass some tests even if we enable tree shaking only for production - // builds. - if n.is_ident_ref_to("__turbopack_refresh__") { - self.skip = true; - return; - } - n.visit_children_with(self); } diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md index e42d590969647..778369f184f5e 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md @@ -456,11 +456,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as d } from "__TURBOPACK_VAR__" assert { @@ -470,45 +467,33 @@ export { foo as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { foo }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as bar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; -import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { @@ -518,11 +503,11 @@ export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 @@ -530,28 +515,19 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += "foo"; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function internal() { return upper(foobar); @@ -563,20 +539,14 @@ export { internal as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function external1() { return internal() + foobar; @@ -588,31 +558,28 @@ export { external1 as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { g as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 8 }; export { foobar }; ``` ## Part 13 ```js +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; @@ -622,12 +589,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; function external2() { foobar += "."; } @@ -638,19 +599,16 @@ export { external2 as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { external2 }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -667,9 +625,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; console.log(foobarCopy); ``` @@ -686,15 +641,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; foobarCopy += "Unused"; ``` @@ -779,11 +731,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; function external2() { foobar += "."; @@ -795,76 +744,55 @@ export { external2 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { external2 }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; foobar += "foo"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 7 }; export { foobar }; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function internal() { return upper(foobar); @@ -876,21 +804,15 @@ export { internal as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { e as internal } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { e as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; function external1() { return internal() + foobar; } @@ -901,25 +823,19 @@ export { external1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { @@ -929,26 +845,20 @@ export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; foobarCopy += "Unused"; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; console.log(foobarCopy); ``` @@ -965,11 +875,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as h } from "__TURBOPACK_VAR__" assert { @@ -979,11 +886,8 @@ export { foo as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { h as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { foo }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md index bdeea790736d9..95429e25bc1b6 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md @@ -477,11 +477,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const foo = foobar; export { foo as d } from "__TURBOPACK_VAR__" assert { @@ -491,45 +488,33 @@ export { foo as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { foo }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as bar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; foobar += bar; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; let foobarCopy = foobar; export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { @@ -539,11 +524,11 @@ export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 @@ -551,28 +536,19 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; foobar += "foo"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function internal() { return upper(foobar); @@ -584,20 +560,14 @@ export { internal as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { f as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function external1() { return internal() + foobar; @@ -609,31 +579,28 @@ export { external1 as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { external1 }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 7 }; export { foobar }; ``` ## Part 12 ```js +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; @@ -643,12 +610,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; function external2() { foobar += "."; } @@ -659,11 +620,8 @@ export { external2 as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { h as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { external2 }; @@ -683,8 +641,8 @@ import "other"; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -704,9 +662,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; console.log(foobarCopy); ``` @@ -726,15 +681,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; foobarCopy += "Unused"; ``` @@ -817,11 +769,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function external2() { foobar += "."; @@ -833,76 +782,55 @@ export { external2 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { external2 }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; foobar += bar; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; foobar += "foo"; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 6 }; export { foobar }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 6 }; function internal() { return upper(foobar); @@ -914,21 +842,15 @@ export { internal as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { e as internal } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { e as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; function external1() { return internal() + foobar; } @@ -939,25 +861,19 @@ export { external1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { f as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { external1 }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; let foobarCopy = foobar; export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { @@ -967,22 +883,16 @@ export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; foobarCopy += "Unused"; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const foo = foobar; export { foo as h } from "__TURBOPACK_VAR__" assert { @@ -992,11 +902,8 @@ export { foo as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { foo }; @@ -1016,8 +923,8 @@ import "other"; ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 @@ -1025,9 +932,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; console.log(foobarCopy); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md index dadc79595d517..6248cbf5f85e1 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md @@ -383,14 +383,11 @@ export { d3 as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as d3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as d3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; function c2_1() { return c2_2(d3); @@ -414,11 +411,8 @@ export { c2_3 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; export { c2_2 }; @@ -441,20 +435,14 @@ export { d1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { e as d2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as d1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 5 }; function c1_1() { return c1_2(); @@ -478,30 +466,24 @@ export { c1_3 as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { g as c1_1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_1 }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_3 }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { i as c1_3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 @@ -515,16 +497,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; c1_3(); ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { c as c2_2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 @@ -541,9 +520,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; c2_2(); ``` @@ -612,15 +588,12 @@ export { d3 as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as d3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { a as d3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; function c2_1() { return c2_2(d3); } @@ -643,11 +616,8 @@ export { c2_3 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; export { c2_2 }; @@ -670,20 +640,14 @@ export { d1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { e as d2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as d1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 5 }; function c1_1() { return c1_2(); @@ -707,48 +671,36 @@ export { c1_3 as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { g as c1_1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_1 }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_3 }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; c1_3(); ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { c as c2_2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; c2_2(); ``` @@ -808,8 +760,8 @@ import "__TURBOPACK_PART__" assert { ## Merged (c1_3) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { i as c1_3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; export { c1_3 }; @@ -835,11 +787,11 @@ export { c1_3 }; ## Merged (c1_3,c2_2) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { i as c1_3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { c as c2_2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; export { c1_3 }; export { c2_2 }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md index f5bc25d5391e7..0b6ee9ae3ae13 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md @@ -392,53 +392,29 @@ export { Document as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { h as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { g as _jsxs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as _Fragment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as _jsx } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as Html } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as Head } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as Main } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as NextScript } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class MyDocument extends Document { static async getInitialProps(ctx) { @@ -491,8 +467,8 @@ import 'next/document'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { i as MyDocument } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 @@ -500,9 +476,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as MyDocument } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; const __TURBOPACK__default__export__ = MyDocument; export { __TURBOPACK__default__export__ as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -525,11 +498,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { j as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { __TURBOPACK__default__export__ as default }; @@ -635,53 +605,29 @@ export { Document as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { h as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { g as _jsxs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as _Fragment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as _jsx } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as Html } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as Head } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as Main } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as NextScript } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class MyDocument extends Document { static async getInitialProps(ctx) { @@ -734,8 +680,8 @@ import 'next/document'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { i as MyDocument } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 @@ -743,9 +689,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as MyDocument } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; const __TURBOPACK__default__export__ = MyDocument; export { __TURBOPACK__default__export__ as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -768,11 +711,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { j as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { __TURBOPACK__default__export__ as default }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md index 4ac5a2bdb7730..036f553fdf4f9 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md @@ -438,11 +438,8 @@ export { originalPathname as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as originalPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { originalPathname }; @@ -519,14 +516,14 @@ import 'VAR_USERLAND'; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -543,15 +540,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { d as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const routeModule = new AppRouteRouteModule({ definition: { kind: RouteKind.APP_ROUTE, @@ -591,22 +579,16 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { routeModule }; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; const { requestAsyncStorage, workAsyncStorage, serverHooks } = routeModule; export { requestAsyncStorage as g } from "__TURBOPACK_VAR__" assert { @@ -622,33 +604,30 @@ export { serverHooks as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { serverHooks }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { workAsyncStorage }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { b as _patchFetch } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 +}; +import { i as serverHooks } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -656,15 +635,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { b as _patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; function patchFetch() { return _patchFetch({ serverHooks, @@ -678,22 +648,16 @@ export { patchFetch as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { patchFetch }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { g as requestAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { requestAsyncStorage }; @@ -779,11 +743,8 @@ export { originalPathname as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as originalPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { originalPathname }; @@ -860,14 +821,14 @@ import 'VAR_USERLAND'; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -881,15 +842,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { d as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const routeModule = new AppRouteRouteModule({ definition: { kind: RouteKind.APP_ROUTE, @@ -909,22 +861,16 @@ export { routeModule as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { routeModule }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; const { requestAsyncStorage, workAsyncStorage, serverHooks } = routeModule; export { requestAsyncStorage as g } from "__TURBOPACK_VAR__" assert { @@ -940,20 +886,14 @@ export { serverHooks as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; import { b as _patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; function patchFetch() { return _patchFetch({ @@ -968,44 +908,32 @@ export { patchFetch as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { j as patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { patchFetch }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { serverHooks }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { workAsyncStorage }; ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as requestAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { requestAsyncStorage }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md index b985f59e405db..75d05e9e9abd1 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md @@ -111,25 +111,19 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = ()=>{}; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as a } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; console.log(a); @@ -175,25 +169,19 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = ()=>{}; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as a } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; console.log(a); diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md index 1f441267e23db..43417934895b8 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md @@ -106,11 +106,8 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; console.log(a); @@ -125,11 +122,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = 1; @@ -167,11 +161,8 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; console.log(a); @@ -186,11 +177,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = 1; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md index 14b3cfa980ace..741009b700b99 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md @@ -114,11 +114,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -133,11 +130,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; @@ -189,11 +183,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -208,11 +199,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md index 347e83e28b13b..7f5568a463b40 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md @@ -440,22 +440,16 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const initialCat = cat; export { initialCat as b } from "__TURBOPACK_VAR__" assert { @@ -465,11 +459,8 @@ export { initialCat as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as initialCat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { initialCat }; @@ -484,96 +475,75 @@ export { dog as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; dog += "!"; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 5 }; console.log(dog); ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; dog += "!"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; dog += "!"; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 9 }; function getChimera() { return cat + dog; @@ -585,25 +555,19 @@ export { getChimera as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { d as getChimera } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { getChimera }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 9 }; function getDog() { return dog; @@ -615,11 +579,11 @@ export { getDog as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -627,9 +591,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` @@ -649,14 +610,14 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { e as getDog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -12 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: 9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 @@ -664,12 +625,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 13 }; -import { e as getDog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; function setDog(newDog) { dog = newDog; } @@ -688,11 +643,8 @@ export { dogRef as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { g as dogRef } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { dogRef }; @@ -760,22 +712,16 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const initialCat = cat; export { initialCat as b } from "__TURBOPACK_VAR__" assert { @@ -785,11 +731,8 @@ export { initialCat as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as initialCat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { initialCat }; @@ -804,11 +747,8 @@ export { dog as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; function setDog(newDog) { dog = newDog; @@ -820,60 +760,45 @@ export { setDog as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; dog += "!"; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 6 }; dog += "!"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; dog += "!"; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as cat } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; function getChimera() { return cat + dog; } @@ -884,25 +809,19 @@ export { getChimera as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { e as getChimera } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { getChimera }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 8 }; function getDog() { return dog; @@ -914,26 +833,17 @@ export { getDog as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { f as getDog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; import { d as setDog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; const dogRef = { initial: dog, @@ -947,53 +857,44 @@ export { dogRef as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as dogRef } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { dogRef }; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 6 }; console.log(dog); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -1001,9 +902,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/input.js b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/input.js new file mode 100644 index 0000000000000..0fb5615352753 --- /dev/null +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/input.js @@ -0,0 +1,5 @@ +import { baz } from './module' + +if (1 + 1 == 3) { + baz(); +} diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/output.md new file mode 100644 index 0000000000000..14efcc2485176 --- /dev/null +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/output.md @@ -0,0 +1,218 @@ +# Items + +Count: 4 + +## Item 1: Stmt 0, `ImportOfModule` + +```js +import { baz } from './module'; + +``` + +- Hoisted +- Side effects + +## Item 2: Stmt 0, `ImportBinding(0)` + +```js +import { baz } from './module'; + +``` + +- Hoisted +- Declares: `baz` + +## Item 3: Stmt 1, `Normal` + +```js +if (1 + 1 == 3) { + baz(); +} + +``` + +- Side effects +- Reads: `baz` + +# Phase 1 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; +``` +# Phase 2 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; + Item3 --> Item2; + Item3 --> Item1; +``` +# Phase 3 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; + Item3 --> Item2; + Item3 --> Item1; +``` +# Phase 4 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; + Item3 --> Item2; + Item3 --> Item1; + Item4 --> Item1; + Item4 --> Item3; +``` +# Final +```mermaid +graph TD + N0["Items: [ItemId(0, ImportOfModule)]"]; + N1["Items: [ItemId(0, ImportBinding(0))]"]; + N2["Items: [ItemId(1, Normal)]"]; + N3["Items: [ItemId(ModuleEvaluation)]"]; + N2 --> N1; + N2 --> N0; + N3 --> N0; + N3 --> N2; +``` +# Entrypoints + +``` +{ + ModuleEvaluation: 3, + Exports: 4, +} +``` + + +# Modules (dev) +## Part 0 +```js +import './module'; + +``` +## Part 1 +```js +import { baz } from './module'; +export { baz as a } from "__TURBOPACK_VAR__" assert { + __turbopack_var__: true +}; + +``` +## Part 2 +```js +import { a as baz } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +if (1 + 1 == 3) { + baz(); +} + +``` +## Part 3 +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` +## Part 4 +```js + +``` +## Merged (module eval) +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` +# Entrypoints + +``` +{ + ModuleEvaluation: 3, + Exports: 4, +} +``` + + +# Modules (prod) +## Part 0 +```js +import './module'; + +``` +## Part 1 +```js +import { baz } from './module'; +export { baz as a } from "__TURBOPACK_VAR__" assert { + __turbopack_var__: true +}; + +``` +## Part 2 +```js +import { a as baz } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +if (1 + 1 == 3) { + baz(); +} + +``` +## Part 3 +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` +## Part 4 +```js + +``` +## Merged (module eval) +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md index 64dcc78e132ee..30ee49baac86d 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md @@ -113,11 +113,8 @@ export { __TURBOPACK__reexport__cat__ as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as __TURBOPACK__reexport__cat__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { __TURBOPACK__reexport__cat__ as fakeCat }; @@ -174,11 +171,8 @@ export { __TURBOPACK__reexport__cat__ as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as __TURBOPACK__reexport__cat__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { __TURBOPACK__reexport__cat__ as fakeCat }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md index 141d36c8d7bac..853860fc5d717 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md @@ -288,23 +288,14 @@ export { eventCallbacks as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as getSocketProtocol } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function connectHMR(options) { const { timeout = 5 * 1000 } = options; @@ -354,22 +345,16 @@ export { connectHMR as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as connectHMR } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { connectHMR }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function sendMessage(data) { if (!source || source.readyState !== source.OPEN) return; @@ -382,22 +367,16 @@ export { sendMessage as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as sendMessage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { sendMessage }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function addMessageListener(cb) { eventCallbacks.push(cb); @@ -409,11 +388,8 @@ export { addMessageListener as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; import { f as addMessageListener } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; export { addMessageListener }; @@ -493,23 +469,14 @@ export { eventCallbacks as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as getSocketProtocol } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function connectHMR(options) { const { timeout = 5 * 1000 } = options; @@ -559,22 +526,16 @@ export { connectHMR as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as connectHMR } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { connectHMR }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function sendMessage(data) { if (!source || source.readyState !== source.OPEN) return; @@ -587,22 +548,16 @@ export { sendMessage as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as sendMessage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { sendMessage }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function addMessageListener(cb) { eventCallbacks.push(cb); @@ -614,11 +569,8 @@ export { addMessageListener as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; import { f as addMessageListener } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; export { addMessageListener }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md index fae660f2d010f..a8c88bcdbe7f5 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md @@ -708,11 +708,8 @@ export { formatDynamicAPIAccesses as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as formatDynamicAPIAccesses } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { formatDynamicAPIAccesses }; @@ -729,11 +726,8 @@ export { usedDynamicAPIs as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as usedDynamicAPIs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { usedDynamicAPIs }; @@ -753,11 +747,8 @@ export { createPrerenderState as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as createPrerenderState } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { createPrerenderState }; @@ -834,8 +825,8 @@ import '../../lib/url'; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { g as React } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -861,9 +852,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const hasPostpone = typeof React.unstable_postpone === 'function'; function postponeWithTracking(prerenderState, expression, pathname) { assertPostpone(); @@ -912,17 +900,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; import { j as assertPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function createPostponedAbortSignal(reason) { assertPostpone(); @@ -941,22 +923,16 @@ export { createPostponedAbortSignal as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { k as createPostponedAbortSignal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { createPostponedAbortSignal }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function trackDynamicFetch(store, expression) { if (!store.prerenderState || store.isUnstableCacheCallback) return; @@ -969,22 +945,16 @@ export { trackDynamicFetch as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { l as trackDynamicFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; export { trackDynamicFetch }; ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function Postpone({ reason, prerenderState, pathname }) { postponeWithTracking(prerenderState, reason, pathname); @@ -996,40 +966,25 @@ export { Postpone as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { m as Postpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { Postpone }; ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function trackDynamicDataAccessed(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1056,40 +1011,25 @@ export { trackDynamicDataAccessed as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 -}; import { n as trackDynamicDataAccessed } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 + __turbopack_part__: -22 }; export { trackDynamicDataAccessed }; ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function markCurrentScopeAsDynamic(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1116,11 +1056,8 @@ export { markCurrentScopeAsDynamic as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 -}; import { o as markCurrentScopeAsDynamic } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 + __turbopack_part__: -24 }; export { markCurrentScopeAsDynamic }; @@ -1234,11 +1171,8 @@ export { formatDynamicAPIAccesses as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as formatDynamicAPIAccesses } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { formatDynamicAPIAccesses }; @@ -1255,11 +1189,8 @@ export { usedDynamicAPIs as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as usedDynamicAPIs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { usedDynamicAPIs }; @@ -1279,11 +1210,8 @@ export { createPrerenderState as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as createPrerenderState } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { createPrerenderState }; @@ -1360,8 +1288,8 @@ import '../../lib/url'; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { g as React } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1375,9 +1303,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 13 }; -import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const hasPostpone = typeof React.unstable_postpone === 'function'; export { hasPostpone as h } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1386,11 +1311,8 @@ export { hasPostpone as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as hasPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function assertPostpone() { if (!hasPostpone) { @@ -1404,20 +1326,14 @@ export { assertPostpone as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; import { i as assertPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 14 }; function createPostponedAbortSignal(reason) { assertPostpone(); @@ -1436,31 +1352,22 @@ export { createPostponedAbortSignal as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as createPostponedAbortSignal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { createPostponedAbortSignal }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; import { i as assertPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 14 }; function postponeWithTracking(prerenderState, expression, pathname) { assertPostpone(); @@ -1478,11 +1385,8 @@ export { postponeWithTracking as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function trackDynamicFetch(store, expression) { if (!store.prerenderState || store.isUnstableCacheCallback) return; @@ -1495,22 +1399,16 @@ export { trackDynamicFetch as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; import { l as trackDynamicFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 + __turbopack_part__: -19 }; export { trackDynamicFetch }; ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function Postpone({ reason, prerenderState, pathname }) { postponeWithTracking(prerenderState, reason, pathname); @@ -1522,40 +1420,25 @@ export { Postpone as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; import { m as Postpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 + __turbopack_part__: -21 }; export { Postpone }; ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function trackDynamicDataAccessed(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1582,40 +1465,25 @@ export { trackDynamicDataAccessed as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; import { n as trackDynamicDataAccessed } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 + __turbopack_part__: -23 }; export { trackDynamicDataAccessed }; ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function markCurrentScopeAsDynamic(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1642,11 +1510,8 @@ export { markCurrentScopeAsDynamic as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; import { o as markCurrentScopeAsDynamic } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 + __turbopack_part__: -25 }; export { markCurrentScopeAsDynamic }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md index 7c2e66e39cdb9..a54582c6888ac 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md @@ -2077,17 +2077,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -2104,17 +2098,11 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -2249,11 +2237,8 @@ export { createIpc as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; @@ -2313,11 +2298,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2340,12 +2325,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2354,8 +2333,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2381,9 +2360,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -2391,14 +2367,11 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: 11 }; export { IPC }; @@ -2456,8 +2429,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2489,16 +2462,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2533,16 +2503,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2580,16 +2547,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2630,16 +2594,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2683,16 +2644,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2739,16 +2697,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2798,16 +2753,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2860,16 +2812,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2925,16 +2874,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2993,16 +2939,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3064,16 +3007,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3138,16 +3078,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3215,16 +3152,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3295,16 +3229,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3378,16 +3309,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3464,9 +3392,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` @@ -3671,17 +3596,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -3698,28 +3617,19 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -3895,11 +3805,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3910,12 +3820,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3924,8 +3828,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3939,9 +3843,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -3949,15 +3850,12 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; export { IPC }; ``` @@ -4002,8 +3900,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4023,16 +3921,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4055,16 +3950,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4090,16 +3982,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4128,16 +4017,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4169,16 +4055,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4213,16 +4096,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4260,16 +4140,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4310,16 +4187,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4363,16 +4237,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4419,16 +4290,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4478,16 +4346,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4540,16 +4405,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4605,16 +4467,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4673,14 +4532,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; @@ -4741,17 +4600,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; @@ -4815,12 +4671,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md index 9180e805fd1c9..bc6763b55a5f1 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md @@ -344,25 +344,19 @@ export { x as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 3; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; console.log(x); @@ -377,113 +371,92 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 2 }; x = 5; ``` ## Part 5 ```js +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 6; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 7; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 8; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 9; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { x }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; const y = x; export { y as b } from "__TURBOPACK_VAR__" assert { @@ -493,36 +466,27 @@ export { y as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { b as y } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { y }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 2 }; x = 4; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 2; @@ -572,107 +536,83 @@ export { x as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 5; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 4; ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 3; ``` ## Part 4 ```js +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 6; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 4 }; x += 7; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 5 }; x += 8; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; x += 9; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const y = x; export { y as b } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -681,39 +621,30 @@ export { y as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { b as y } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { y }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; export { x }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; console.log(x); @@ -728,11 +659,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 2; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md index 8f277020ccbb8..466391f04dc28 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md @@ -269,11 +269,8 @@ export { IPC as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const ipc = IPC; export { ipc as c } from "__TURBOPACK_VAR__" assert { @@ -283,21 +280,15 @@ export { ipc as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as ipc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as queue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { c as ipc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { a as queue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const run = async (moduleFactory)=>{ let nextId = 1; const requests = new Map(); @@ -407,11 +398,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as run } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { run }; @@ -471,11 +459,8 @@ export { IPC as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const ipc = IPC; export { ipc as c } from "__TURBOPACK_VAR__" assert { @@ -485,21 +470,15 @@ export { ipc as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as ipc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as queue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { c as ipc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { a as queue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const run = async (moduleFactory)=>{ let nextId = 1; const requests = new Map(); @@ -609,11 +588,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as run } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { run }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md index 7c2e66e39cdb9..a54582c6888ac 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md @@ -2077,17 +2077,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -2104,17 +2098,11 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -2249,11 +2237,8 @@ export { createIpc as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; @@ -2313,11 +2298,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2340,12 +2325,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2354,8 +2333,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2381,9 +2360,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -2391,14 +2367,11 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: 11 }; export { IPC }; @@ -2456,8 +2429,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2489,16 +2462,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2533,16 +2503,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2580,16 +2547,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2630,16 +2594,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2683,16 +2644,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2739,16 +2697,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2798,16 +2753,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2860,16 +2812,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2925,16 +2874,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2993,16 +2939,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3064,16 +3007,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3138,16 +3078,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3215,16 +3152,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3295,16 +3229,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3378,16 +3309,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3464,9 +3392,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` @@ -3671,17 +3596,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -3698,28 +3617,19 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -3895,11 +3805,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3910,12 +3820,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3924,8 +3828,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3939,9 +3843,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -3949,15 +3850,12 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; export { IPC }; ``` @@ -4002,8 +3900,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4023,16 +3921,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4055,16 +3950,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4090,16 +3982,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4128,16 +4017,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4169,16 +4055,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4213,16 +4096,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4260,16 +4140,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4310,16 +4187,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4363,16 +4237,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4419,16 +4290,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4478,16 +4346,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4540,16 +4405,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4605,16 +4467,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4673,14 +4532,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; @@ -4741,17 +4600,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; @@ -4815,12 +4671,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md index 32b782230eed9..d4bfea84ddc58 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md @@ -238,23 +238,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -276,34 +267,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -340,11 +319,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; @@ -412,23 +388,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -450,34 +417,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -514,11 +469,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md index 2b831c57cafc5..cf1bdd8fe9751 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md @@ -238,23 +238,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -276,34 +267,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -340,11 +319,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; @@ -412,23 +388,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -450,34 +417,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -514,11 +469,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md index c917d6cc8b413..eff73648492ce 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md @@ -2022,14 +2022,14 @@ import './responsivePropType'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2046,15 +2046,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const gap = (props)=>{ if (props.gap !== undefined && props.gap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap'); @@ -2072,11 +2063,11 @@ export { gap as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2093,12 +2084,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; gap.propTypes = process.env.NODE_ENV !== 'production' ? { gap: responsivePropType } : {}; @@ -2106,14 +2091,14 @@ gap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2136,15 +2121,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const columnGap = (props)=>{ if (props.columnGap !== undefined && props.columnGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap'); @@ -2162,11 +2138,11 @@ export { columnGap as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2189,12 +2165,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { columnGap: responsivePropType } : {}; @@ -2202,14 +2172,14 @@ columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2238,15 +2208,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const rowGap = (props)=>{ if (props.rowGap !== undefined && props.rowGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap'); @@ -2264,11 +2225,11 @@ export { rowGap as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2297,12 +2258,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { rowGap: responsivePropType } : {}; @@ -2310,8 +2265,8 @@ rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2346,9 +2301,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridColumn = style({ prop: 'gridColumn' }); @@ -2359,19 +2311,16 @@ export { gridColumn as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; export { gridColumn }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2409,9 +2358,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridRow = style({ prop: 'gridRow' }); @@ -2422,19 +2368,16 @@ export { gridRow as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 + __turbopack_part__: -19 }; export { gridRow }; ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2475,9 +2418,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoFlow = style({ prop: 'gridAutoFlow' }); @@ -2488,19 +2428,16 @@ export { gridAutoFlow as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 + __turbopack_part__: -21 }; export { gridAutoFlow }; ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2544,9 +2481,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoColumns = style({ prop: 'gridAutoColumns' }); @@ -2557,19 +2491,16 @@ export { gridAutoColumns as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 + __turbopack_part__: -23 }; export { gridAutoColumns }; ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2616,9 +2547,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoRows = style({ prop: 'gridAutoRows' }); @@ -2629,19 +2557,16 @@ export { gridAutoRows as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 + __turbopack_part__: -25 }; export { gridAutoRows }; ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2691,9 +2616,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateColumns = style({ prop: 'gridTemplateColumns' }); @@ -2704,19 +2626,16 @@ export { gridTemplateColumns as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 + __turbopack_part__: -27 }; export { gridTemplateColumns }; ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2769,9 +2688,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 27 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateRows = style({ prop: 'gridTemplateRows' }); @@ -2782,19 +2698,16 @@ export { gridTemplateRows as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: -29 }; export { gridTemplateRows }; ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2850,9 +2763,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 29 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateAreas = style({ prop: 'gridTemplateAreas' }); @@ -2863,19 +2773,16 @@ export { gridTemplateAreas as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: -31 }; export { gridTemplateAreas }; ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2934,9 +2841,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 31 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridArea = style({ prop: 'gridArea' }); @@ -2947,25 +2851,19 @@ export { gridArea as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: -33 }; export { gridArea }; ``` ## Part 35 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 16 }; rowGap.filterProps = [ 'rowGap' @@ -2974,28 +2872,22 @@ rowGap.filterProps = [ ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 35 }; export { rowGap }; ``` ## Part 37 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 14 }; columnGap.filterProps = [ 'columnGap' @@ -3004,28 +2896,22 @@ columnGap.filterProps = [ ``` ## Part 38 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 37 }; export { columnGap }; ``` ## Part 39 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; gap.filterProps = [ 'gap' @@ -3034,67 +2920,64 @@ gap.filterProps = [ ``` ## Part 40 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 39 }; export { gap }; ``` ## Part 41 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as compose } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { j as gridColumn } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -17 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { k as gridRow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -21 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -23 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -25 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 +import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -27 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 +import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -29 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 +import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -31 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 +import { r as gridArea } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -33 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: 39 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: 37 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: 35 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3120,45 +3003,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { a as compose } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; -import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; -import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; -import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; -import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; -import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; -import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; -import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; const grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea); export { grid as s } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3167,8 +3011,8 @@ export { grid as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 42 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 +import { s as grid } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -41 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3230,9 +3074,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 33 }; -import { s as grid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 -}; const __TURBOPACK__default__export__ = grid; export { __TURBOPACK__default__export__ as t } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3312,11 +3153,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 44 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 -}; import { t as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 + __turbopack_part__: -42 }; export { __TURBOPACK__default__export__ as default }; @@ -3590,14 +3428,14 @@ import './responsivePropType'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3614,15 +3452,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const gap = (props)=>{ if (props.gap !== undefined && props.gap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap'); @@ -3640,11 +3469,11 @@ export { gap as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3661,12 +3490,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; gap.propTypes = process.env.NODE_ENV !== 'production' ? { gap: responsivePropType } : {}; @@ -3674,14 +3497,14 @@ gap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3704,15 +3527,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const columnGap = (props)=>{ if (props.columnGap !== undefined && props.columnGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap'); @@ -3730,11 +3544,11 @@ export { columnGap as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3757,12 +3571,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { columnGap: responsivePropType } : {}; @@ -3770,14 +3578,14 @@ columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3806,15 +3614,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const rowGap = (props)=>{ if (props.rowGap !== undefined && props.rowGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap'); @@ -3832,11 +3631,11 @@ export { rowGap as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3865,12 +3664,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { rowGap: responsivePropType } : {}; @@ -3878,8 +3671,8 @@ rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3914,9 +3707,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridColumn = style({ prop: 'gridColumn' }); @@ -3927,19 +3717,16 @@ export { gridColumn as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; export { gridColumn }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3977,9 +3764,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridRow = style({ prop: 'gridRow' }); @@ -3990,19 +3774,16 @@ export { gridRow as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 + __turbopack_part__: -19 }; export { gridRow }; ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4043,9 +3824,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoFlow = style({ prop: 'gridAutoFlow' }); @@ -4056,19 +3834,16 @@ export { gridAutoFlow as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 + __turbopack_part__: -21 }; export { gridAutoFlow }; ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4112,9 +3887,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoColumns = style({ prop: 'gridAutoColumns' }); @@ -4125,19 +3897,16 @@ export { gridAutoColumns as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 + __turbopack_part__: -23 }; export { gridAutoColumns }; ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4184,9 +3953,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoRows = style({ prop: 'gridAutoRows' }); @@ -4197,19 +3963,16 @@ export { gridAutoRows as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 + __turbopack_part__: -25 }; export { gridAutoRows }; ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4259,9 +4022,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateColumns = style({ prop: 'gridTemplateColumns' }); @@ -4272,19 +4032,16 @@ export { gridTemplateColumns as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 + __turbopack_part__: -27 }; export { gridTemplateColumns }; ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4337,9 +4094,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 27 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateRows = style({ prop: 'gridTemplateRows' }); @@ -4350,19 +4104,16 @@ export { gridTemplateRows as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: -29 }; export { gridTemplateRows }; ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4418,9 +4169,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 29 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateAreas = style({ prop: 'gridTemplateAreas' }); @@ -4431,19 +4179,16 @@ export { gridTemplateAreas as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: -31 }; export { gridTemplateAreas }; ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4502,9 +4247,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 31 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridArea = style({ prop: 'gridArea' }); @@ -4515,25 +4257,19 @@ export { gridArea as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: -33 }; export { gridArea }; ``` ## Part 35 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 16 }; rowGap.filterProps = [ 'rowGap' @@ -4542,28 +4278,22 @@ rowGap.filterProps = [ ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 35 }; export { rowGap }; ``` ## Part 37 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 14 }; columnGap.filterProps = [ 'columnGap' @@ -4572,28 +4302,22 @@ columnGap.filterProps = [ ``` ## Part 38 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 37 }; export { columnGap }; ``` ## Part 39 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; gap.filterProps = [ 'gap' @@ -4602,67 +4326,64 @@ gap.filterProps = [ ``` ## Part 40 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 39 }; export { gap }; ``` ## Part 41 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as compose } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { j as gridColumn } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -17 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { k as gridRow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -21 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -23 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -25 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 +import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -27 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 +import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -29 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 +import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -31 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 +import { r as gridArea } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -33 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: 39 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: 37 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: 35 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4688,45 +4409,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { a as compose } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; -import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; -import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; -import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; -import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; -import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; -import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; -import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; const grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea); export { grid as s } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -4735,8 +4417,8 @@ export { grid as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 42 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 +import { s as grid } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -41 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4798,9 +4480,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 33 }; -import { s as grid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 -}; const __TURBOPACK__default__export__ = grid; export { __TURBOPACK__default__export__ as t } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -4880,11 +4559,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 44 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 -}; import { t as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 + __turbopack_part__: -42 }; export { __TURBOPACK__default__export__ as default }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md index c420d4b4275d3..448e7ffc02135 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md @@ -114,11 +114,8 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; @@ -133,11 +130,8 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { dog as DOG }; @@ -189,11 +183,8 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; @@ -208,11 +199,8 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { dog as DOG }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md index 5f6065bf68905..6c9c6c6367d00 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md @@ -490,17 +490,17 @@ import './url-alphabet/index.js'; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as pool } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as crypto } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as poolOffset } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 5 @@ -508,18 +508,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as crypto } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; let fillPool = (bytes)=>{ if (!pool || pool.length < bytes) { pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER); @@ -586,34 +574,22 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { customRandom }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; let random = (bytes)=>{ fillPool((bytes -= 0)); @@ -626,43 +602,28 @@ export { random as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { random }; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 11 }; let nanoid = (size = 21)=>{ fillPool((size -= 0)); @@ -679,42 +640,30 @@ export { nanoid as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 13 }; export { urlAlphabet }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { i as nanoid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { nanoid }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; let customAlphabet = (alphabet, size)=>customRandom(alphabet, size, random); export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { @@ -724,11 +673,8 @@ export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as customAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { customAlphabet }; @@ -850,17 +796,17 @@ import './url-alphabet/index.js'; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as pool } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as crypto } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as poolOffset } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 5 @@ -868,18 +814,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as crypto } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; let fillPool = (bytes)=>{ if (!pool || pool.length < bytes) { pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER); @@ -946,34 +880,22 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { customRandom }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; let random = (bytes)=>{ fillPool((bytes -= 0)); @@ -986,43 +908,28 @@ export { random as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { random }; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 11 }; let nanoid = (size = 21)=>{ fillPool((size -= 0)); @@ -1039,42 +946,30 @@ export { nanoid as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 13 }; export { urlAlphabet }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { i as nanoid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { nanoid }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; let customAlphabet = (alphabet, size)=>customRandom(alphabet, size, random); export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { @@ -1084,11 +979,8 @@ export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as customAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { customAlphabet }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md index 15bd5b000aee7..5f95beb276865 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md @@ -744,59 +744,32 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { g as ResponseCookies } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as stringifyCookie } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as handleMiddlewareField } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as ReflectAdapter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { h as INTERNALS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; import { c as NextURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as toNodeOutgoingHttpHeaders } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as validateURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { i as REDIRECTS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; class NextResponse extends Response { constructor(body, init = {}){ @@ -893,11 +866,8 @@ export { NextResponse as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { j as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { NextResponse }; @@ -1156,59 +1126,32 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { g as ResponseCookies } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as stringifyCookie } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as handleMiddlewareField } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as ReflectAdapter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { h as INTERNALS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; import { c as NextURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as toNodeOutgoingHttpHeaders } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as validateURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { i as REDIRECTS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; class NextResponse extends Response { constructor(body, init = {}){ @@ -1305,11 +1248,8 @@ export { NextResponse as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { j as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { NextResponse }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md index 180ad1fad17b7..3c9fe677b3c18 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md @@ -759,11 +759,8 @@ export { lastSpanId as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { e as lastSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const getSpanId = ()=>lastSpanId++; export { getSpanId as f } from "__TURBOPACK_VAR__" assert { @@ -787,22 +784,16 @@ export { BubbledError as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { BubbledError }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; function isBubbledError(error) { if (typeof error !== 'object' || error === null) return false; @@ -815,11 +806,8 @@ export { isBubbledError as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { isBubbledError }; @@ -839,15 +827,12 @@ export { api as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; if (process.env.NEXT_RUNTIME === 'edge') { api = require('@opentelemetry/api'); } else { @@ -878,14 +863,11 @@ export { rootSpanAttributesStore as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; export { context as k } from "__TURBOPACK_VAR__" assert { @@ -910,22 +892,19 @@ export { ROOT_CONTEXT as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { o as SpanKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; export { SpanKind }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -939,9 +918,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; const rootSpanIdKey = api.createContextKey('next.rootSpanId'); export { rootSpanIdKey as q } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -950,17 +926,11 @@ export { rootSpanIdKey as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { n as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; const closeSpanWithError = (span, error)=>{ if (isBubbledError(error) && error.bubble) { @@ -983,82 +953,52 @@ export { closeSpanWithError as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { n as SpanStatusCode } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -14 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import { n as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: 17 }; export { SpanStatusCode }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { m as trace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { k as context } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { l as propagation } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { d as clientTraceDataSetter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as NextVanillaSpanAllowlist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { p as ROOT_CONTEXT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { f as getSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { q as rootSpanIdKey } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; import { j as rootSpanAttributesStore } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; import { b as LogSpanAllowList } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { r as closeSpanWithError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; import { a as isPromise } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class NextTracerImpl { getTracerInstance() { @@ -1205,8 +1145,8 @@ export { NextTracerImpl as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1223,9 +1163,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; const getTracer = (()=>{ const tracer = new NextTracerImpl(); return ()=>tracer; @@ -1257,11 +1194,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { t as getTracer } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { getTracer }; @@ -1382,11 +1316,8 @@ export { lastSpanId as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { e as lastSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const getSpanId = ()=>lastSpanId++; export { getSpanId as f } from "__TURBOPACK_VAR__" assert { @@ -1410,22 +1341,16 @@ export { BubbledError as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { BubbledError }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; function isBubbledError(error) { if (typeof error !== 'object' || error === null) return false; @@ -1438,11 +1363,8 @@ export { isBubbledError as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { isBubbledError }; @@ -1462,15 +1384,12 @@ export { api as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; if (process.env.NEXT_RUNTIME === 'edge') { api = require('@opentelemetry/api'); } else { @@ -1498,11 +1417,11 @@ export { rootSpanAttributesStore as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1510,9 +1429,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 13 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; const rootSpanIdKey = api.createContextKey('next.rootSpanId'); export { rootSpanIdKey as k } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1521,14 +1437,11 @@ export { rootSpanIdKey as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; export { context as l } from "__TURBOPACK_VAR__" assert { @@ -1553,28 +1466,19 @@ export { ROOT_CONTEXT as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { p as SpanKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { SpanKind }; ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { o as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; const closeSpanWithError = (span, error)=>{ if (isBubbledError(error) && error.bubble) { @@ -1597,82 +1501,52 @@ export { closeSpanWithError as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { o as SpanStatusCode } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { o as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 17 }; export { SpanStatusCode }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { n as trace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { l as context } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { m as propagation } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { d as clientTraceDataSetter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as NextVanillaSpanAllowlist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { q as ROOT_CONTEXT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { f as getSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { k as rootSpanIdKey } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { j as rootSpanAttributesStore } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; import { b as LogSpanAllowList } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { r as closeSpanWithError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; import { a as isPromise } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class NextTracerImpl { getTracerInstance() { @@ -1819,8 +1693,8 @@ export { NextTracerImpl as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1834,9 +1708,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; const getTracer = (()=>{ const tracer = new NextTracerImpl(); return ()=>tracer; @@ -1848,11 +1719,8 @@ export { getTracer as t } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { t as getTracer } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { getTracer }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md index c298fb61a63d5..c3de057bafd54 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md @@ -187,15 +187,12 @@ export { Stream as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as Stream } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { b as Stream } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -204,8 +201,8 @@ export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as fetch } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -213,9 +210,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as fetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const __TURBOPACK__default__export__ = fetch; export { __TURBOPACK__default__export__ as d } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -238,11 +232,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { __TURBOPACK__default__export__ as default }; @@ -305,15 +296,12 @@ export { Stream as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as Stream } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { b as Stream } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -322,8 +310,8 @@ export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as fetch } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -331,9 +319,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as fetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const __TURBOPACK__default__export__ = fetch; export { __TURBOPACK__default__export__ as d } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -356,11 +341,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { __TURBOPACK__default__export__ as default }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md index e34bc4360aceb..fa16521a40f6f 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md @@ -238,17 +238,11 @@ export { parseEnvironment as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function getEnvWithoutDefaults() { return parseEnvironment(_globalThis); @@ -260,34 +254,22 @@ export { getEnvWithoutDefaults as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getEnvWithoutDefaults } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getEnvWithoutDefaults }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as DEFAULT_ENVIRONMENT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function getEnv() { var globalEnv = parseEnvironment(_globalThis); @@ -300,11 +282,8 @@ export { getEnv as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as getEnv } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { getEnv }; @@ -397,17 +376,11 @@ export { parseEnvironment as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function getEnvWithoutDefaults() { return parseEnvironment(_globalThis); @@ -419,34 +392,22 @@ export { getEnvWithoutDefaults as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getEnvWithoutDefaults } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getEnvWithoutDefaults }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as DEFAULT_ENVIRONMENT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function getEnv() { var globalEnv = parseEnvironment(_globalThis); @@ -459,11 +420,8 @@ export { getEnv as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as getEnv } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { getEnv }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md index 65a31f3e70ca8..7d15565dff491 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md @@ -168,11 +168,8 @@ export { runtime as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as runtime } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { runtime }; @@ -187,11 +184,8 @@ export { NextResponse as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { b as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const GET = (req)=>{ return NextResponse.json({ @@ -205,11 +199,8 @@ export { GET as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { c as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { GET }; @@ -272,11 +263,8 @@ export { runtime as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as runtime } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { runtime }; @@ -291,11 +279,8 @@ export { NextResponse as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { b as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const GET = (req)=>{ return NextResponse.json({ @@ -309,11 +294,8 @@ export { GET as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { c as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { GET }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md index 6924612f2f251..72bd60ad17d9e 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md @@ -114,11 +114,8 @@ export { RouteKind as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; (function(RouteKind) { RouteKind["PAGES"] = "PAGES"; @@ -138,14 +135,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; export { RouteKind }; @@ -189,11 +183,8 @@ export { RouteKind as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; (function(RouteKind) { RouteKind["PAGES"] = "PAGES"; @@ -213,14 +204,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; export { RouteKind }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md index d1a4ab2bab400..231f1231854ad 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md @@ -281,11 +281,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -303,20 +300,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -329,11 +320,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -346,25 +334,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -377,22 +359,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -400,9 +379,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -425,14 +401,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; @@ -497,11 +470,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -519,20 +489,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -545,11 +509,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -562,25 +523,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -593,22 +548,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -616,9 +568,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -641,14 +590,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md index 4a933578294f8..c13e060954245 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md @@ -347,23 +347,14 @@ export { value2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as value } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as value2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as value3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const shared = { value, @@ -391,8 +382,8 @@ externalObject.propertyWithSetter = 42; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -406,9 +397,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 5 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(shared); ``` @@ -434,15 +422,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const a = { shared, a: "aaaaaaaaaaa" @@ -454,29 +439,23 @@ export { a as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { e as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { a }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const b = { shared, b: "bbbbbbbbbbb" @@ -488,11 +467,8 @@ export { b as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { b }; @@ -584,23 +560,14 @@ export { value2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as value } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as value2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as value3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const shared = { value, @@ -614,11 +581,8 @@ export { shared as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const a = { shared, @@ -631,25 +595,19 @@ export { a as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { a }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 5 }; const b = { shared, @@ -662,11 +620,8 @@ export { b as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; import { f as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; export { b }; @@ -687,8 +642,8 @@ externalObject.propertyWithSetter = 42; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -702,9 +657,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(shared); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md index d1a4ab2bab400..231f1231854ad 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md @@ -281,11 +281,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -303,20 +300,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -329,11 +320,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -346,25 +334,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -377,22 +359,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -400,9 +379,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -425,14 +401,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; @@ -497,11 +470,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -519,20 +489,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -545,11 +509,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -562,25 +523,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -593,22 +548,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -616,9 +568,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -641,14 +590,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md index 14b3cfa980ace..741009b700b99 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md @@ -114,11 +114,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -133,11 +130,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; @@ -189,11 +183,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -208,11 +199,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md index 3fddff090b84d..96d7c8e0ed885 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md @@ -166,17 +166,11 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const CHIMERA = cat + dog; export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { @@ -186,22 +180,16 @@ export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as CHIMERA } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { CHIMERA }; ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const DOG = dog; export { DOG as d } from "__TURBOPACK_VAR__" assert { @@ -211,11 +199,8 @@ export { DOG as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as DOG } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { DOG }; @@ -275,17 +260,11 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const CHIMERA = cat + dog; export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { @@ -295,22 +274,16 @@ export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as CHIMERA } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { CHIMERA }; ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const DOG = dog; export { DOG as d } from "__TURBOPACK_VAR__" assert { @@ -320,11 +293,8 @@ export { DOG as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as DOG } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { DOG }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md index 07c84eba05001..18bb0b9a02345 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md @@ -1527,11 +1527,11 @@ import 'VAR_USERLAND'; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1551,12 +1551,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const __TURBOPACK__default__export__ = hoist(userland, 'default'); export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1565,22 +1559,19 @@ export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { __TURBOPACK__default__export__ as default }; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1603,12 +1594,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticProps = hoist(userland, 'getStaticProps'); export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1617,22 +1602,19 @@ export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; export { getStaticProps }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1658,12 +1640,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticPaths = hoist(userland, 'getStaticPaths'); export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1672,22 +1648,19 @@ export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { i as getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { getStaticPaths }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1716,12 +1689,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getServerSideProps = hoist(userland, 'getServerSideProps'); export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1730,22 +1697,19 @@ export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { j as getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; export { getServerSideProps }; ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1777,12 +1741,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const config = hoist(userland, 'config'); export { config as k } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1791,22 +1749,19 @@ export { config as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { k as config } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { config }; ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1841,12 +1796,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const reportWebVitals = hoist(userland, 'reportWebVitals'); export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1855,22 +1804,19 @@ export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 -}; import { l as reportWebVitals } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 + __turbopack_part__: -22 }; export { reportWebVitals }; ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1908,12 +1854,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticProps = hoist(userland, 'unstable_getStaticProps'); export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1922,22 +1862,19 @@ export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 -}; import { m as unstable_getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 + __turbopack_part__: -24 }; export { unstable_getStaticProps }; ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1978,12 +1915,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticPaths = hoist(userland, 'unstable_getStaticPaths'); export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1992,22 +1923,19 @@ export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 -}; import { n as unstable_getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 + __turbopack_part__: -26 }; export { unstable_getStaticPaths }; ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2051,12 +1979,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticParams = hoist(userland, 'unstable_getStaticParams'); export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2065,22 +1987,19 @@ export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 -}; import { o as unstable_getStaticParams } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 + __turbopack_part__: -28 }; export { unstable_getStaticParams }; ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2127,12 +2046,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerProps = hoist(userland, 'unstable_getServerProps'); export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2141,22 +2054,19 @@ export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 -}; import { p as unstable_getServerProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 + __turbopack_part__: -30 }; export { unstable_getServerProps }; ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2206,12 +2116,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerSideProps = hoist(userland, 'unstable_getServerSideProps'); export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2220,31 +2124,28 @@ export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 -}; import { q as unstable_getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 + __turbopack_part__: -32 }; export { unstable_getServerSideProps }; ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as App } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as Document } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 32 @@ -2297,21 +2198,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as App } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import { a as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const routeModule = new PagesRouteModule({ definition: { kind: RouteKind.PAGES, @@ -2392,11 +2278,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 -}; import { r as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 + __turbopack_part__: -34 }; export { routeModule }; @@ -2672,11 +2555,11 @@ import 'VAR_USERLAND'; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2696,12 +2579,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const __TURBOPACK__default__export__ = hoist(userland, 'default'); export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2710,22 +2587,19 @@ export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { __TURBOPACK__default__export__ as default }; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2748,12 +2622,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticProps = hoist(userland, 'getStaticProps'); export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2762,22 +2630,19 @@ export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; export { getStaticProps }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2803,12 +2668,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticPaths = hoist(userland, 'getStaticPaths'); export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2817,22 +2676,19 @@ export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { i as getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { getStaticPaths }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2861,12 +2717,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getServerSideProps = hoist(userland, 'getServerSideProps'); export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2875,22 +2725,19 @@ export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { j as getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; export { getServerSideProps }; ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2922,12 +2769,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const config = hoist(userland, 'config'); export { config as k } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2936,22 +2777,19 @@ export { config as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { k as config } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { config }; ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2986,12 +2824,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const reportWebVitals = hoist(userland, 'reportWebVitals'); export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3000,22 +2832,19 @@ export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 -}; import { l as reportWebVitals } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 + __turbopack_part__: -22 }; export { reportWebVitals }; ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3053,12 +2882,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticProps = hoist(userland, 'unstable_getStaticProps'); export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3067,22 +2890,19 @@ export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 -}; import { m as unstable_getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 + __turbopack_part__: -24 }; export { unstable_getStaticProps }; ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3123,12 +2943,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticPaths = hoist(userland, 'unstable_getStaticPaths'); export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3137,22 +2951,19 @@ export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 -}; import { n as unstable_getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 + __turbopack_part__: -26 }; export { unstable_getStaticPaths }; ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3196,12 +3007,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticParams = hoist(userland, 'unstable_getStaticParams'); export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3210,22 +3015,19 @@ export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 -}; import { o as unstable_getStaticParams } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 + __turbopack_part__: -28 }; export { unstable_getStaticParams }; ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3272,12 +3074,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerProps = hoist(userland, 'unstable_getServerProps'); export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3286,22 +3082,19 @@ export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 -}; import { p as unstable_getServerProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 + __turbopack_part__: -30 }; export { unstable_getServerProps }; ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3351,12 +3144,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerSideProps = hoist(userland, 'unstable_getServerSideProps'); export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3365,31 +3152,28 @@ export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 -}; import { q as unstable_getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 + __turbopack_part__: -32 }; export { unstable_getServerSideProps }; ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as App } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as Document } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 32 @@ -3442,21 +3226,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as App } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import { a as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const routeModule = new PagesRouteModule({ definition: { kind: RouteKind.PAGES, @@ -3537,11 +3306,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 -}; import { r as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 + __turbopack_part__: -34 }; export { routeModule }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md index 2618322891641..78a2bcb82d5df 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md @@ -456,11 +456,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as d } from "__TURBOPACK_VAR__" assert { @@ -470,45 +467,33 @@ export { foo as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { foo }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as bar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; -import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { @@ -518,11 +503,11 @@ export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 @@ -530,28 +515,19 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += "foo"; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function internal() { return upper(foobar); @@ -563,20 +539,14 @@ export { internal as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function external1() { return internal() + foobar; @@ -588,31 +558,28 @@ export { external1 as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { g as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 8 }; export { foobar }; ``` ## Part 13 ```js +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; @@ -622,12 +589,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; function external2() { foobar += "."; } @@ -638,19 +599,16 @@ export { external2 as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { external2 }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -667,9 +625,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; console.log(foobarCopy); ``` @@ -686,15 +641,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; foobarCopy += "Unused"; ``` @@ -779,11 +731,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; function external2() { foobar += "."; @@ -795,76 +744,55 @@ export { external2 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { external2 }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; foobar += "foo"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 7 }; export { foobar }; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function internal() { return upper(foobar); @@ -876,21 +804,15 @@ export { internal as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { e as internal } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { e as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; function external1() { return internal() + foobar; } @@ -901,25 +823,19 @@ export { external1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { @@ -929,26 +845,20 @@ export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; foobarCopy += "Unused"; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; console.log(foobarCopy); ``` @@ -965,11 +875,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as h } from "__TURBOPACK_VAR__" assert { @@ -979,11 +886,8 @@ export { foo as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { h as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { foo }; @@ -1039,8 +943,8 @@ import "__TURBOPACK_PART__" assert { ## Merged (external1) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { f as external1 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; export { external1 }; @@ -1069,11 +973,11 @@ export { external1 }; ## Merged (external1,external2) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { f as external1 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as external2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; export { external1 }; export { external2 }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md index 308e68cf5d05a..d86ef89f17e37 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md @@ -154,26 +154,20 @@ export { effects as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { effects }; ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { a as effects } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; function effect(name) { effects.push(name); } @@ -184,11 +178,8 @@ export { effect as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { b as effect } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { effect }; @@ -251,11 +242,8 @@ export { effects as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function effect(name) { effects.push(name); @@ -267,22 +255,16 @@ export { effect as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { b as effect } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { effect }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { effects }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md index 7697decd9c5f9..160bac9430ede 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md @@ -227,23 +227,14 @@ export { NextResponse as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as MyModuleClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as ClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function GET() { return NextResponse.json({ @@ -258,11 +249,8 @@ export { GET as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { GET }; @@ -366,23 +354,14 @@ export { NextResponse as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as MyModuleClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as ClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function GET() { return NextResponse.json({ @@ -397,11 +376,8 @@ export { GET as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { GET }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md index 74733b899b426..70397abd9a71f 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md @@ -293,11 +293,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -329,11 +326,11 @@ export { x2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 @@ -341,9 +338,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const shared = { effect: order.push("b") }; @@ -354,22 +348,19 @@ export { shared as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { shared }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -380,9 +371,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -408,32 +396,26 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; export { order }; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; function func() { order.push("d"); } @@ -444,11 +426,8 @@ export { func as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { e as func } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { func }; @@ -516,11 +495,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -552,11 +528,11 @@ export { x2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 @@ -564,9 +540,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const shared = { effect: order.push("b") }; @@ -577,22 +550,19 @@ export { shared as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { shared }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -603,9 +573,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -631,14 +598,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; function func() { order.push("d"); @@ -650,25 +614,19 @@ export { func as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { e as func } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { func }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; export { order }; diff --git a/turbopack/crates/turbopack-node/src/transforms/webpack.rs b/turbopack/crates/turbopack-node/src/transforms/webpack.rs index 5460599d78927..ebd1fce574d80 100644 --- a/turbopack/crates/turbopack-node/src/transforms/webpack.rs +++ b/turbopack/crates/turbopack-node/src/transforms/webpack.rs @@ -704,7 +704,7 @@ async fn dir_dependency(glob: Vc) -> Result> { let glob = glob.await?; glob.inner .values() - .map(|&inner| dir_dependency(inner)) + .map(|&inner| dir_dependency(*inner)) .try_join() .await?; shallow.await?; diff --git a/turbopack/crates/turbopack-resolve/src/node_native_binding.rs b/turbopack/crates/turbopack-resolve/src/node_native_binding.rs index 8216a9da9743d..827eda87a6e98 100644 --- a/turbopack/crates/turbopack-resolve/src/node_native_binding.rs +++ b/turbopack/crates/turbopack-resolve/src/node_native_binding.rs @@ -150,7 +150,7 @@ pub async fn resolve_node_pre_gyp_files( { sources.insert( format!("{native_binding_path}/{key}").into(), - Vc::upcast(FileSource::new(dylib)), + Vc::upcast(FileSource::new(*dylib)), ); } } @@ -179,17 +179,17 @@ pub async fn resolve_node_pre_gyp_files( DirectoryEntry::File(dylib) => { sources.insert( format!("deps/lib/{key}").into(), - Vc::upcast(FileSource::new(dylib)), + Vc::upcast(FileSource::new(*dylib)), ); } DirectoryEntry::Symlink(dylib) => { let realpath_with_links = dylib.realpath_with_links().await?; for &symlink in realpath_with_links.symlinks.iter() { - affecting_paths.push(symlink); + affecting_paths.push(*symlink); } sources.insert( format!("deps/lib/{key}").into(), - Vc::upcast(FileSource::new(realpath_with_links.path)), + Vc::upcast(FileSource::new(*realpath_with_links.path)), ); } _ => {} diff --git a/turbopack/crates/turbopack-resolve/src/typescript.rs b/turbopack/crates/turbopack-resolve/src/typescript.rs index ee5f27517bc59..a46faf4661933 100644 --- a/turbopack/crates/turbopack-resolve/src/typescript.rs +++ b/turbopack/crates/turbopack-resolve/src/typescript.rs @@ -269,7 +269,7 @@ pub async fn tsconfig_resolve_options( let mut context_dir = source.ident().path().parent(); if let Some(base_url) = json["compilerOptions"]["baseUrl"].as_str() { if let Some(new_context) = *context_dir.try_join(base_url.into()).await? { - context_dir = new_context; + context_dir = *new_context; } }; for (key, value) in paths.iter() { @@ -336,7 +336,7 @@ pub async fn tsconfig_resolve_options( .unwrap_or_default(); Ok(TsConfigResolveOptions { - base_url, + base_url: base_url.as_deref().copied(), import_map, is_module_resolution_nodenext, } diff --git a/turbopack/crates/turbopack-test-utils/src/snapshot.rs b/turbopack/crates/turbopack-test-utils/src/snapshot.rs index c8d34ef86b2f0..2c73d5bd7e53f 100644 --- a/turbopack/crates/turbopack-test-utils/src/snapshot.rs +++ b/turbopack/crates/turbopack-test-utils/src/snapshot.rs @@ -91,7 +91,7 @@ pub async fn expected(dir: Vc) -> Result { - expected.insert(*file); + expected.insert(**file); } _ => bail!( "expected file at {}, found {:?}", diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js index d2f74e2974740..91139d62a65e9 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -143,7 +137,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -161,7 +154,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -181,7 +173,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -207,9 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -229,7 +217,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -242,15 +229,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -268,7 +253,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -284,7 +268,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -300,7 +283,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map index 51be1ef630519..c67a855e11eb1 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map @@ -4,42 +4,42 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,kPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,kPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,kPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 138, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 146, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 152, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,kPAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 168, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 174, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,kPAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,kPAAA,CAAA,IAAG;IACZ,KAAK,mPAAA,CAAA,IAAM;IACX,KAAK,kPAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 218, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 224, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 232, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 238, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,kPAAA,CAAA,IAAG,GAAG,kPAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 257, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 277, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 289, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 324, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 341, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,kPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,kPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,kPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 126, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,kPAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 160, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,kPAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,kPAAA,CAAA,IAAG;IACZ,KAAK,mPAAA,CAAA,IAAM;IACX,KAAK,kPAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,kPAAA,CAAA,IAAG,GAAG,kPAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 261, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 272, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 285, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 291, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 306, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 312, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 323, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js index 4e3cf09f65539..a865b4746f760 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -174,7 +168,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/module.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -205,7 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -230,12 +222,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map index 20987b8ef1de9..78d1743fa1806 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map @@ -4,40 +4,40 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 169, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 177, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 183, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 200, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 208, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 214, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 231, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js"],"sourcesContent":["import { fakeCat } from \"./module\";\n\n\nconsole.log(fakeCat)\n"],"names":[],"mappings":";;;;;;;AAGA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAO"}}, - {"offset": {"line": 239, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 245, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 252, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 258, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 133, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 143, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 157, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 170, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 187, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 193, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 200, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 217, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 223, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js"],"sourcesContent":["import { fakeCat } from \"./module\";\n\n\nconsole.log(fakeCat)\n"],"names":[],"mappings":";;;;;;AAGA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAO"}}, + {"offset": {"line": 230, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 236, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 243, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 249, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 254, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js index b135e128475e4..7d2731a9a0ca6 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -174,7 +168,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -192,7 +185,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -212,7 +204,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -238,9 +229,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -260,7 +248,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -273,15 +260,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -299,7 +284,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -315,7 +299,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -331,7 +314,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -380,7 +362,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -405,12 +386,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"].cat); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map index 06c999b2f36e4..1bad33bcc7015 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map @@ -4,58 +4,58 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 169, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 177, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 183, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 199, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 205, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 249, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 269, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 288, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 294, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 302, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 308, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 320, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 326, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 334, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 340, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 355, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 361, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 369, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 375, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 383, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 389, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 400, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 406, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js"],"sourcesContent":["import {lib} from './module'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, - {"offset": {"line": 414, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 420, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 427, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 433, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 438, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 133, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 143, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 157, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 170, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 191, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 197, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 210, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 216, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 237, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 243, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 250, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 273, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 279, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 286, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 292, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 316, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 322, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 337, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 343, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 351, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 357, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 364, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 370, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 381, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 387, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js"],"sourcesContent":["import {lib} from './module'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, + {"offset": {"line": 394, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 400, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 407, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 413, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 418, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js index 3eef8f6ba6918..59b3fb946e1c3 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -153,7 +147,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -178,12 +171,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"]) // TODO: Execution ; }}), diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map index 9e8afc629548a..f81b0fe7b1e13 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map @@ -4,32 +4,32 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,uPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,uPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,uPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 148, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 156, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 162, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 173, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js"],"sourcesContent":["import {cat as c,dogRef,initialCat,getChimera} from './lib'\n\nconsole.log(c)\n\n// TODO: Execution\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAC,EAEb,kBAAkB"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 201, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 207, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,uPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,uPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,uPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 136, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 172, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js"],"sourcesContent":["import {cat as c,dogRef,initialCat,getChimera} from './lib'\n\nconsole.log(c)\n\n// TODO: Execution\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAC,EAEb,kBAAkB"}}, + {"offset": {"line": 180, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 186, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 193, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 199, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 204, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js index b80bccc4d46c5..f000a38b95bda 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -153,7 +147,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -178,12 +171,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map index 4248dfd9611db..8ca7bc26992a9 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map @@ -4,32 +4,32 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 148, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 156, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 162, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 173, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js"],"sourcesContent":["import {cat as c} from './lib'\n\nconsole.log(c)\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAC"}}, - {"offset": {"line": 187, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 193, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 200, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 211, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 136, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 172, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js"],"sourcesContent":["import {cat as c} from './lib'\n\nconsole.log(c)\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAC"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 192, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 203, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js index cedbeb8d916c6..dc7c6e5f596fb 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -153,7 +147,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -171,7 +164,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -191,7 +183,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -217,9 +208,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -239,7 +227,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -252,15 +239,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -278,7 +263,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -294,7 +278,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -310,7 +293,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -353,12 +335,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"].cat); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map index cfd529f4f9ebd..d0697329000c3 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map @@ -4,50 +4,50 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 148, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 156, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 162, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 178, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 184, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 204, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 228, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 234, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 267, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 273, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 281, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 287, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 299, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 305, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 313, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 319, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 334, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 340, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 348, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 354, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js"],"sourcesContent":["import * as lib from './lib'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, - {"offset": {"line": 362, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 368, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 375, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 381, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 386, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 136, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 170, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 189, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 195, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 216, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 222, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 229, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 235, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 252, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 258, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 265, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 282, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 288, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 301, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 316, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 322, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 336, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js"],"sourcesContent":["import * as lib from './lib'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, + {"offset": {"line": 343, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 349, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 356, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 362, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 367, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js index 2ab78d5eb24d2..ff9ac1456fb09 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map index a993a9be292a1..030a968d416dd 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map @@ -4,24 +4,24 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,yPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,yPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,yPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 150, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,yPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,yPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,yPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 133, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 144, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js index f0f20be8c82d5..fd42042849086 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -143,7 +137,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -161,7 +154,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -181,7 +173,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -207,9 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -229,7 +217,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -242,15 +229,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -268,7 +253,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -284,7 +268,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -300,7 +283,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map index eed96fbd24538..743f33a870938 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map @@ -4,44 +4,44 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,0PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,0PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,0PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 138, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 146, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 152, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,0PAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 168, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 174, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,0PAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,0PAAA,CAAA,IAAG;IACZ,KAAK,2PAAA,CAAA,IAAM;IACX,KAAK,0PAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 218, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 224, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 232, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 238, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,0PAAA,CAAA,IAAG,GAAG,0PAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 257, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 277, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 289, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 324, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 341, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 346, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/index.js"],"sourcesContent":["const {cat} = require('./lib')\n"],"names":[],"mappings":"AAAA,MAAM,EAAC,GAAG,EAAC"}}, - {"offset": {"line": 347, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,0PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,0PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,0PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 126, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,0PAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 160, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,0PAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,0PAAA,CAAA,IAAG;IACZ,KAAK,2PAAA,CAAA,IAAM;IACX,KAAK,0PAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,0PAAA,CAAA,IAAG,GAAG,0PAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 261, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 272, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 285, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 291, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 306, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 312, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 323, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 328, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/index.js"],"sourcesContent":["const {cat} = require('./lib')\n"],"names":[],"mappings":"AAAA,MAAM,EAAC,GAAG,EAAC"}}, + {"offset": {"line": 329, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js index dfc368614aec3..5bf44f761a571 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -143,7 +137,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -161,7 +154,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -181,7 +173,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -207,9 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -229,7 +217,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -242,15 +229,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -268,7 +253,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -284,7 +268,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -300,7 +283,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map index c9fec8650a2ba..7925bc5995b93 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map @@ -4,42 +4,42 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,6PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,6PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,6PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 138, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 146, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 152, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,6PAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 168, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 174, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,6PAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,6PAAA,CAAA,IAAG;IACZ,KAAK,8PAAA,CAAA,IAAM;IACX,KAAK,6PAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 218, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 224, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 232, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 238, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,6PAAA,CAAA,IAAG,GAAG,6PAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 257, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 277, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 289, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 324, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 341, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,6PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,6PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,6PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 126, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,6PAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 160, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,6PAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,6PAAA,CAAA,IAAG;IACZ,KAAK,8PAAA,CAAA,IAAM;IACX,KAAK,6PAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,6PAAA,CAAA,IAAG,GAAG,6PAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 261, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 272, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 285, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 291, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 306, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 312, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 323, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js new file mode 100644 index 0000000000000..0fb5615352753 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js @@ -0,0 +1,5 @@ +import { baz } from './module' + +if (1 + 1 == 3) { + baz(); +} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js new file mode 100644 index 0000000000000..4d614d519c52a --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js @@ -0,0 +1,7 @@ +export function bar() { + console.log('BAR should not be included'); +} + +export function baz() { + console.log('BAZ should not be included'); +} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/options.json b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/options.json new file mode 100644 index 0000000000000..000d78a6b3cbb --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/options.json @@ -0,0 +1,3 @@ +{ + "treeShakingMode": "module-fragments" +} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js new file mode 100644 index 0000000000000..688e8a424e300 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js @@ -0,0 +1,6 @@ +(globalThis.TURBOPACK = globalThis.TURBOPACK || []).push([ + "output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js", + {}, + {"otherChunks":["output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript)"]} +]); +// Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js.map new file mode 100644 index 0000000000000..c15d7ec00382d --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js.map @@ -0,0 +1,5 @@ +{ + "version": 3, + "sources": [], + "sections": [] +} \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js new file mode 100644 index 0000000000000..75cbc130434e8 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js @@ -0,0 +1,59 @@ +(globalThis.TURBOPACK = globalThis.TURBOPACK || []).push(["output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js", { + +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js [test] (ecmascript) ": (function(__turbopack_context__) { + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, m: module, e: exports, t: require } = __turbopack_context__; +{ +"module evaluation"; +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$module$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$module__evaluation$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +; +if ("TURBOPACK compile-time falsy", 0) { + "TURBOPACK unreachable"; +} +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__2$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +; +"module evaluation"; +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript)": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$module__evaluation$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +; +}}), +}]); + +//# sourceMappingURL=turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map new file mode 100644 index 0000000000000..e9cbf3634b650 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map @@ -0,0 +1,15 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 6, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 13, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 17, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 23, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js"],"sourcesContent":["import { baz } from './module'\n\nif (1 + 1 == 3) {\n baz();\n}\n"],"names":[],"mappings":";;;;;AAEA,uCAAgB;;AAEhB"}}, + {"offset": {"line": 31, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 37, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 44, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 50, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] +} \ No newline at end of file