From 8eb208ba27b0c0bad12f24a4f9879b1b8d8b8a20 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Wed, 26 Nov 2025 11:59:39 -0800 Subject: [PATCH 1/6] Rename side_effects and implement it everywhere --- crates/next-core/src/hmr_entry.rs | 7 +- .../css_client_reference_module.rs | 8 +- .../ecmascript_client_reference_module.rs | 9 +- .../src/next_dynamic/dynamic_module.rs | 9 +- .../server_component_module.rs | 9 +- .../server_utility_module.rs | 10 +- crates/next-core/src/raw_ecmascript_module.rs | 10 +- turbopack/crates/turbopack-core/src/module.rs | 13 +-- .../turbopack-core/src/module_graph/mod.rs | 11 ++- .../turbopack-core/src/node_addon_module.rs | 9 +- .../crates/turbopack-core/src/raw_module.rs | 9 +- turbopack/crates/turbopack-css/src/asset.rs | 9 +- .../crates/turbopack-css/src/module_asset.rs | 11 ++- .../src/async_chunk/module.rs | 9 +- .../src/chunk/placeable.rs | 32 ++++-- .../src/inlined_bytes_module.rs | 9 +- .../crates/turbopack-ecmascript/src/lib.rs | 24 +++-- .../src/manifest/chunk_asset.rs | 9 +- .../turbopack-ecmascript/src/merged_module.rs | 12 ++- .../src/references/esm/base.rs | 8 +- .../src/references/esm/export.rs | 7 +- .../src/references/external_module.rs | 13 +-- .../src/references/require_context.rs | 9 +- .../side_effect_optimization/facade/module.rs | 13 +-- .../side_effect_optimization/locals/module.rs | 7 +- .../src/tree_shake/asset.rs | 20 ++-- .../src/tree_shake/side_effect_module.rs | 6 +- .../src/typescript/mod.rs | 9 +- .../turbopack-ecmascript/src/webpack/mod.rs | 8 +- .../src/worker_chunk/module.rs | 9 +- turbopack/crates/turbopack-json/src/lib.rs | 9 +- turbopack/crates/turbopack-static/src/css.rs | 9 +- turbopack/crates/turbopack-static/src/ecma.rs | 9 +- .../Error evaluating Node.js code-a1070b.txt | 26 +++++ ...ree-shake_export-named_input_328b6878._.js | 51 ++++++++++ ...shake_export-named_input_328b6878._.js.map | 9 ++ ...ree-shake_export-named_input_6eee2cc7._.js | 97 ------------------- ...shake_export-named_input_6eee2cc7._.js.map | 13 --- ...hake_export-named_input_index_02b52f5d.js} | 4 +- ..._export-named_input_index_02b52f5d.js.map} | 0 ...hake_export-namespace_input_7e401b19._.js} | 20 +--- ..._export-namespace_input_7e401b19._.js.map} | 17 ++-- ..._export-namespace_input_index_b3684963.js} | 4 +- ...ort-namespace_input_index_b3684963.js.map} | 0 ...t-with-locals_input_index_0b2e25bd.js.map} | 0 ...xport-with-locals_input_index_0b2e25bd.js} | 4 +- ..._reexport-with-locals_input_ce2e648f._.js} | 18 +--- ...xport-with-locals_input_ce2e648f._.js.map} | 4 +- ...ps_merged-unicode_input_index_bd01f301.js} | 4 +- ...erged-unicode_input_index_bd01f301.js.map} | 0 ...aps_merged-unicode_input_2490dad7._.js.map | 10 -- ...e_maps_merged-unicode_input_e01a5bc2._.js} | 30 +----- ...aps_merged-unicode_input_e01a5bc2._.js.map | 9 ++ ...t_tree-shaking_dce_input_index_969f085a.js | 12 +++ ...ee-shaking_dce_input_index_969f085a.js.map | 6 ++ ...e-shaking_dce_input_index_ae3d8f84.js.map} | 0 ..._tree-shaking_dce_input_index_ae3d8f84.js} | 4 +- ...pshot_tree-shaking_dce_input_17ca2f0a._.js | 19 ---- ...t_tree-shaking_dce_input_17ca2f0a._.js.map | 7 -- .../crates/turbopack-wasm/src/module_asset.rs | 12 ++- turbopack/crates/turbopack-wasm/src/raw.rs | 9 +- turbopack/crates/turbopack/src/lib.rs | 12 +-- 62 files changed, 366 insertions(+), 390 deletions(-) create mode 100644 turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/issues/Error evaluating Node.js code-a1070b.txt create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js.map delete mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js delete mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js.map rename turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/{ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js => ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js} (79%) rename turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/{bf321_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js.map => bf321_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js.map} (100%) rename turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/{780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js => 780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js} (84%) rename turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/{780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js.map => 780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js.map} (80%) rename turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/{ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js => ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js} (79%) rename turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/{bf321_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js.map => bf321_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js.map} (100%) rename turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/{53446_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js.map => 53446_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js.map} (100%) rename turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/{964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js => 964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js} (78%) rename turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/{bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js => bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js} (51%) rename turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/{bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js.map => bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js.map} (52%) rename turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/{5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js => 5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js} (77%) rename turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/{780ce_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js.map => 780ce_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js.map} (100%) delete mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js.map rename turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/{aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js => aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js} (58%) create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js.map create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js.map rename turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/{aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js.map => aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js.map} (100%) rename turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/{ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js => ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js} (62%) delete mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js delete mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js.map diff --git a/crates/next-core/src/hmr_entry.rs b/crates/next-core/src/hmr_entry.rs index 8653c564bde51..2549e50c864c4 100644 --- a/crates/next-core/src/hmr_entry.rs +++ b/crates/next-core/src/hmr_entry.rs @@ -11,7 +11,7 @@ use turbopack_core::{ EvaluatableAsset, }, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, reference::{ModuleReference, ModuleReferences}, @@ -76,10 +76,9 @@ impl Module for HmrEntryModule { .await?, )])) } - #[turbo_tasks::function] - fn is_marked_as_side_effect_free(self: Vc, _: Vc) -> Vc { - Vc::cell(false) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() } } diff --git a/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs b/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs index 8238907881e03..d73029fae4fd2 100644 --- a/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs +++ b/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs @@ -1,13 +1,13 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::FileContent; +use turbo_tasks_fs::{FileContent, glob::Glob}; use turbopack::css::chunk::CssChunkPlaceable; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkGroupType, ChunkableModuleReference, ChunkingType, ChunkingTypeOption}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, reference::{ModuleReference, ModuleReferences}, resolve::ModuleResolveResult, source::OptionSource, @@ -57,6 +57,10 @@ impl Module for CssClientReferenceModule { .await?, )])) } + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs index 35526af5537d8..a5fb3b45d62ce 100644 --- a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs +++ b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs @@ -4,7 +4,7 @@ use anyhow::{Context, Result, bail}; use indoc::writedoc; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{IntoTraitRef, ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{File, FileContent}; +use turbo_tasks_fs::{File, FileContent, glob::Glob}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -14,7 +14,7 @@ use turbopack_core::{ code_builder::CodeBuilder, context::AssetContext, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::{ModuleGraph, binding_usage_info::ModuleExportUsageInfo}, output::OutputAssetsReference, reference::{ModuleReference, ModuleReferences}, @@ -241,6 +241,11 @@ impl Module for EcmascriptClientReferenceModule { Ok(Vc::cell(references)) } + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // These just export some specially tagged functions + ModuleSideEffects::DeclaredSideEffectFree.cell() + } } #[turbo_tasks::value_impl] diff --git a/crates/next-core/src/next_dynamic/dynamic_module.rs b/crates/next-core/src/next_dynamic/dynamic_module.rs index a93cc9ff59ffa..e7ff33faf32b5 100644 --- a/crates/next-core/src/next_dynamic/dynamic_module.rs +++ b/crates/next-core/src/next_dynamic/dynamic_module.rs @@ -4,12 +4,12 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::FileContent; +use turbo_tasks_fs::{FileContent, glob::Glob}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, reference::{ModuleReferences, SingleChunkableModuleReference}, @@ -71,6 +71,11 @@ impl Module for NextDynamicEntryModule { .await?, )])) } + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // This just exports another import + ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell() + } } #[turbo_tasks::value_impl] diff --git a/crates/next-core/src/next_server_component/server_component_module.rs b/crates/next-core/src/next_server_component/server_component_module.rs index 996bdc7f91a53..130bb540ecb1e 100644 --- a/crates/next-core/src/next_server_component/server_component_module.rs +++ b/crates/next-core/src/next_server_component/server_component_module.rs @@ -4,12 +4,12 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath}; +use turbo_tasks_fs::{FileContent, FileSystemPath, glob::Glob}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, reference::ModuleReferences, @@ -67,6 +67,11 @@ impl Module for NextServerComponentModule { .await?, )])) } + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // This just exports another import + ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell() + } } #[turbo_tasks::value_impl] diff --git a/crates/next-core/src/next_server_utility/server_utility_module.rs b/crates/next-core/src/next_server_utility/server_utility_module.rs index e50548bd50d13..c5712f8771ffa 100644 --- a/crates/next-core/src/next_server_utility/server_utility_module.rs +++ b/crates/next-core/src/next_server_utility/server_utility_module.rs @@ -4,12 +4,12 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath}; +use turbo_tasks_fs::{FileContent, FileSystemPath, glob::Glob}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, reference::ModuleReferences, @@ -67,6 +67,12 @@ impl Module for NextServerUtilityModule { .await?, )])) } + + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // This just exports another import + ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell() + } } #[turbo_tasks::value_impl] diff --git a/crates/next-core/src/raw_ecmascript_module.rs b/crates/next-core/src/raw_ecmascript_module.rs index 58d76d8d04498..4f589f504bb77 100644 --- a/crates/next-core/src/raw_ecmascript_module.rs +++ b/crates/next-core/src/raw_ecmascript_module.rs @@ -18,7 +18,7 @@ use turbopack_core::{ }, context::AssetContext, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, resolve::ModulePart, @@ -99,11 +99,9 @@ impl Module for RawEcmascriptModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(false) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // Is this correct? + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-core/src/module.rs b/turbopack/crates/turbopack-core/src/module.rs index 1627e70cec6cc..b73f9af667d01 100644 --- a/turbopack/crates/turbopack-core/src/module.rs +++ b/turbopack/crates/turbopack-core/src/module.rs @@ -1,6 +1,5 @@ -use serde::{Deserialize, Serialize}; use turbo_rcstr::RcStr; -use turbo_tasks::{NonLocalValue, ResolvedVc, TaskInput, ValueToString, Vc, trace::TraceRawVcs}; +use turbo_tasks::{ResolvedVc, TaskInput, ValueToString, Vc}; use turbo_tasks_fs::glob::Glob; use crate::{asset::Asset, ident::AssetIdent, reference::ModuleReferences, source::OptionSource}; @@ -12,7 +11,8 @@ pub enum StyleType { GlobalStyle, } -#[derive(Serialize, Deserialize, Hash, Eq, PartialEq, Debug, NonLocalValue, TraceRawVcs)] +#[derive(Hash, Debug)] +#[turbo_tasks::value(shared)] pub enum ModuleSideEffects { /// Analysis determined that the module evaluation is side effect free /// the module may still be side effectful based on its imports. @@ -61,12 +61,7 @@ pub trait Module: Asset { /// Returns true if the module is marked as side effect free in package.json or by other means. #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(false) - } + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc; } #[turbo_tasks::value_trait] diff --git a/turbopack/crates/turbopack-core/src/module_graph/mod.rs b/turbopack/crates/turbopack-core/src/module_graph/mod.rs index e5c6f6a795781..d74055f3e64a1 100644 --- a/turbopack/crates/turbopack-core/src/module_graph/mod.rs +++ b/turbopack/crates/turbopack-core/src/module_graph/mod.rs @@ -1880,12 +1880,12 @@ pub mod tests { use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; use turbo_tasks_backend::{BackendOptions, TurboTasksBackend, noop_backing_storage}; - use turbo_tasks_fs::{FileSystem, FileSystemPath, VirtualFileSystem}; + use turbo_tasks_fs::{FileSystem, FileSystemPath, VirtualFileSystem, glob::Glob}; use crate::{ asset::{Asset, AssetContent}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::{ GraphEntries, GraphTraversalAction, ModuleGraph, ModuleGraphRef, SingleModuleGraph, VisitedModules, chunk_group_info::ChunkGroupEntry, @@ -2281,6 +2281,13 @@ pub mod tests { Ok(Vc::cell(references)) } + #[turbo_tasks::function] + fn side_effects( + self: Vc, + _side_effect_free_packages: Vc, + ) -> Vc { + ModuleSideEffects::SideEffectful.cell() + } } /// Constructs a graph based on the provided dependency adjacency lists and calls the given test diff --git a/turbopack/crates/turbopack-core/src/node_addon_module.rs b/turbopack/crates/turbopack-core/src/node_addon_module.rs index ba1096f4c5968..7800a068fad98 100644 --- a/turbopack/crates/turbopack-core/src/node_addon_module.rs +++ b/turbopack/crates/turbopack-core/src/node_addon_module.rs @@ -4,13 +4,13 @@ use anyhow::{Result, bail}; use regex::Regex; use turbo_rcstr::rcstr; use turbo_tasks::{FxIndexSet, ResolvedVc, TryJoinIterExt, Vc}; -use turbo_tasks_fs::{FileSystemEntryType, FileSystemPath}; +use turbo_tasks_fs::{FileSystemEntryType, FileSystemPath, glob::Glob}; use crate::{ asset::{Asset, AssetContent}, file_source::FileSource, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, raw_module::RawModule, reference::{ModuleReferences, TracedModuleReference}, resolve::pattern::{Pattern, PatternMatch, read_matches}, @@ -100,6 +100,11 @@ impl Module for NodeAddonModule { // Most addon modules don't have references to other modules. Ok(ModuleReferences::empty()) } + + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-core/src/raw_module.rs b/turbopack/crates/turbopack-core/src/raw_module.rs index dc6fd947b4e96..6f61c64c25734 100644 --- a/turbopack/crates/turbopack-core/src/raw_module.rs +++ b/turbopack/crates/turbopack-core/src/raw_module.rs @@ -1,13 +1,14 @@ use turbo_tasks::{ResolvedVc, Vc}; +use turbo_tasks_fs::glob::Glob; use crate::{ asset::{Asset, AssetContent}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, source::{OptionSource, Source}, }; -/// A module where source code doesn't need to be parsed but can be usd as is. +/// A module where source code doesn't need to be parsed but can be used as is. /// This module has no references to other modules. #[turbo_tasks::value] pub struct RawModule { @@ -25,6 +26,10 @@ impl Module for RawModule { fn source(&self) -> Vc { Vc::cell(Some(self.source)) } + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-css/src/asset.rs b/turbopack/crates/turbopack-css/src/asset.rs index caad1b5c2e361..b097d57c077d2 100644 --- a/turbopack/crates/turbopack-css/src/asset.rs +++ b/turbopack/crates/turbopack-css/src/asset.rs @@ -1,14 +1,14 @@ use anyhow::Result; use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, TryJoinIterExt, ValueToString, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath}; +use turbo_tasks_fs::{FileContent, FileSystemPath, glob::Glob}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, MinifyType}, context::AssetContext, environment::Environment, ident::AssetIdent, - module::{Module, StyleModule, StyleType}, + module::{Module, ModuleSideEffects, StyleModule, StyleType}, module_graph::ModuleGraph, output::{OutputAssetsReference, OutputAssetsWithReferenced}, reference::{ModuleReference, ModuleReferences}, @@ -153,6 +153,11 @@ impl Module for CssModuleAsset { ParseCssResult::NotFound => Ok(ModuleReferences::empty()), } } + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // global css is always a side effect + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-css/src/module_asset.rs b/turbopack/crates/turbopack-css/src/module_asset.rs index 1918f45763120..185797007cd1a 100644 --- a/turbopack/crates/turbopack-css/src/module_asset.rs +++ b/turbopack/crates/turbopack-css/src/module_asset.rs @@ -6,7 +6,7 @@ use lightningcss::css_modules::CssModuleReference; use swc_core::common::{BytePos, FileName, LineCol, SourceMap}; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{FxIndexMap, IntoTraitRef, ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{FileSystemPath, rope::Rope}; +use turbo_tasks_fs::{FileSystemPath, glob::Glob, rope::Rope}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, @@ -16,7 +16,7 @@ use turbopack_core::{ Issue, IssueExt, IssueSeverity, IssueSource, IssueStage, OptionIssueSource, OptionStyledString, StyledString, }, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, reference::{ModuleReference, ModuleReferences}, @@ -111,6 +111,13 @@ impl Module for ModuleCssAsset { Ok(Vc::cell(references)) } + + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // modules can still effect global styles using `:root` selectors and other similar features + // We could do better with some static analysis if we want + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs index d32a0551a236f..0b3a0e3a7372e 100644 --- a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs @@ -6,7 +6,7 @@ use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkableModule, ChunkingContext, availability_info::AvailabilityInfo}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::{ModuleReferences, SingleModuleReference}, }; @@ -68,11 +68,8 @@ impl Module for AsyncLoaderModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs b/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs index d9f810b120af5..8d2a28fe9a4d9 100644 --- a/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs +++ b/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs @@ -179,13 +179,21 @@ impl Issue for SideEffectsInPackageJsonIssue { } } +#[turbo_tasks::value(shared)] +#[derive(Copy, Clone)] +pub enum SideEffectsDeclaration { + SideEffectFree, + SideEffectful, + None, +} + #[turbo_tasks::function] -pub async fn is_marked_as_side_effect_free( +pub async fn get_side_effect_free_declaration( path: FileSystemPath, side_effect_free_packages: Vc, -) -> Result> { +) -> Result> { if side_effect_free_packages.await?.matches(&path.path) { - return Ok(Vc::cell(true)); + return Ok(SideEffectsDeclaration::SideEffectFree.cell()); } let find_package_json = find_context_file(path.parent(), package_json(), false).await?; @@ -193,17 +201,29 @@ pub async fn is_marked_as_side_effect_free( if let FindContextFileResult::Found(package_json, _) = &*find_package_json { match *side_effects_from_package_json(package_json.clone()).await? { SideEffectsValue::None => {} - SideEffectsValue::Constant(side_effects) => return Ok(Vc::cell(!side_effects)), + SideEffectsValue::Constant(side_effects) => { + return Ok(if side_effects { + SideEffectsDeclaration::SideEffectful + } else { + SideEffectsDeclaration::SideEffectFree + } + .cell()); + } SideEffectsValue::Glob(glob) => { if let Some(rel_path) = package_json.parent().get_relative_path_to(&path) { let rel_path = rel_path.strip_prefix("./").unwrap_or(&rel_path); - return Ok(Vc::cell(!glob.await?.matches(rel_path))); + return Ok(if glob.await?.matches(rel_path) { + SideEffectsDeclaration::SideEffectful + } else { + SideEffectsDeclaration::SideEffectFree + } + .cell()); } } } } - Ok(Vc::cell(false)) + Ok(SideEffectsDeclaration::None.cell()) } #[turbo_tasks::value(shared)] diff --git a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs index 106f45fc3c56d..4b04393400fed 100644 --- a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs @@ -8,7 +8,7 @@ use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, source::Source, @@ -51,11 +51,8 @@ impl Module for InlinedBytesJsModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/lib.rs b/turbopack/crates/turbopack-ecmascript/src/lib.rs index 62e4039fd4c33..bdddf03150da9 100644 --- a/turbopack/crates/turbopack-ecmascript/src/lib.rs +++ b/turbopack/crates/turbopack-ecmascript/src/lib.rs @@ -117,7 +117,10 @@ pub use turbopack_resolve::ecmascript as resolve; use self::chunk::{EcmascriptChunkItemContent, EcmascriptChunkType, EcmascriptExports}; use crate::{ analyzer::graph::EvalContext, - chunk::{EcmascriptChunkPlaceable, placeable::is_marked_as_side_effect_free}, + chunk::{ + EcmascriptChunkPlaceable, + placeable::{SideEffectsDeclaration, get_side_effect_free_declaration}, + }, code_gen::{CodeGens, ModifiableAst}, merged_module::MergedEcmascriptModule, parse::generate_js_source_map, @@ -757,20 +760,23 @@ impl Module for EcmascriptModuleAsset { } #[turbo_tasks::function] - async fn is_marked_as_side_effect_free( + async fn side_effects( self: Vc, side_effect_free_packages: Vc, - ) -> Result> { + ) -> Result> { // Check package.json first, so that we can skip parsing the module if it's marked that way. - let pkg_side_effect_free = is_marked_as_side_effect_free( + // We need to respect package.json configuration over any static analysis we might do. + Ok((match *get_side_effect_free_declaration( self.ident().path().owned().await?, side_effect_free_packages, - ); - Ok(if *pkg_side_effect_free.await? { - pkg_side_effect_free - } else { - Vc::cell(self.analyze().await?.side_effects == ModuleSideEffects::SideEffectFree) + ) + .await? + { + SideEffectsDeclaration::SideEffectful => ModuleSideEffects::SideEffectful, + SideEffectsDeclaration::SideEffectFree => ModuleSideEffects::SideEffectFree, + SideEffectsDeclaration::None => self.analyze().await?.side_effects, }) + .cell()) } } diff --git a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs index 06f3276366ca2..16c43f4ce4518 100644 --- a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs @@ -8,7 +8,7 @@ use turbopack_core::{ ChunkableModule, ChunkingContext, ChunkingContextExt, availability_info::AvailabilityInfo, }, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::{ ModuleGraph, chunk_group_info::ChunkGroup, module_batch::ChunkableModuleOrBatch, }, @@ -154,11 +154,8 @@ impl Module for ManifestAsyncModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/merged_module.rs b/turbopack/crates/turbopack-ecmascript/src/merged_module.rs index 31b8729b93421..632f650831594 100644 --- a/turbopack/crates/turbopack-ecmascript/src/merged_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/merged_module.rs @@ -1,5 +1,6 @@ use anyhow::{Context, Result}; use turbo_tasks::{ResolvedVc, Vc}; +use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -7,7 +8,7 @@ use turbopack_core::{ MergeableModuleExposure, MergeableModules, MergeableModulesExposed, }, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, reference::ModuleReferences, @@ -83,14 +84,19 @@ impl Module for MergedEcmascriptModule { } #[turbo_tasks::function] - async fn references(self: Vc) -> Result> { + fn references(self: Vc) -> Result> { panic!("references() should not be called"); } #[turbo_tasks::function] - async fn is_self_async(&self) -> Result> { + fn is_self_async(&self) -> Result> { panic!("is_self_async() should not be called"); } + #[turbo_tasks::function] + fn side_effects(&self, _side_effect_free_packages: Vc) -> Vc { + // If needed this could be computed by merging the effects from all the merged modules + panic!("side_effects() should not be called"); + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs b/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs index 3e45aa03a4a08..ddbdff04b6317 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs @@ -22,7 +22,7 @@ use turbopack_core::{ Issue, IssueExt, IssueSeverity, IssueSource, IssueStage, OptionIssueSource, OptionStyledString, StyledString, }, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::binding_usage_info::ModuleExportUsageInfo, reference::ModuleReference, reference_type::{EcmaScriptModulesReferenceSubType, ImportWithType}, @@ -423,10 +423,8 @@ impl ModuleReference for EsmAssetReference { let side_effect_free_packages = self.module.asset_context().side_effect_free_packages(); - if *self - .module - .is_marked_as_side_effect_free(side_effect_free_packages) - .await? + if *self.module.side_effects(side_effect_free_packages).await? + == ModuleSideEffects::DeclaredSideEffectFree { return Ok(ModuleResolveResult { primary: Box::new([( diff --git a/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs b/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs index c6ab7c90375ed..64817558e0e75 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs @@ -20,7 +20,7 @@ use turbopack_core::{ chunk::{ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, issue::{IssueExt, IssueSeverity, StyledString, analyze::AnalyzeIssue}, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::binding_usage_info::ModuleExportUsageInfo, reference::ModuleReference, resolve::ModulePart, @@ -172,9 +172,8 @@ pub async fn follow_reexports( }; if !ignore_side_effects - && !*module - .is_marked_as_side_effect_free(side_effect_free_packages) - .await? + && *module.side_effects(side_effect_free_packages).await? + != ModuleSideEffects::DeclaredSideEffectFree { // TODO It's unfortunate that we have to use the whole module here. // This is often the Facade module, which includes all reexports. diff --git a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs index fdc9095e793eb..1598eb7e23b69 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs @@ -13,7 +13,7 @@ use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{AsyncModuleInfo, ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, ident::{AssetIdent, Layer}, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::{ OutputAsset, OutputAssets, OutputAssetsReference, OutputAssetsReferences, @@ -368,11 +368,8 @@ impl Module for CachedExternalModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(false) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() } } @@ -557,6 +554,10 @@ impl Module for ModuleWithoutSelfAsync { self.module.references() } + #[turbo_tasks::function] + fn side_effects(&self, side_effect_free_packages: Vc) -> Vc { + self.module.side_effects(side_effect_free_packages) + } // Don't override and use default is_self_async that always returns false } diff --git a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs index 3295e45cc49b3..85b764da1a24b 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs @@ -28,7 +28,7 @@ use turbopack_core::{ }, ident::AssetIdent, issue::IssueSource, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, reference::{ModuleReference, ModuleReferences}, @@ -428,11 +428,8 @@ impl Module for RequireContextAsset { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs index 7fa5eb6b9a587..b53f1954448ba 100644 --- a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs @@ -10,7 +10,7 @@ use turbopack_core::{ MergeableModules, MergeableModulesExposed, }, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::ModuleReferences, resolve::{ExportUsage, ModulePart}, @@ -182,16 +182,11 @@ impl Module for EcmascriptModuleFacadeModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - &self, - side_effect_free_packages: Vc, - ) -> Result> { + fn side_effects(&self, side_effect_free_packages: Vc) -> Result> { Ok(match self.part { - ModulePart::Facade => self - .module - .is_marked_as_side_effect_free(side_effect_free_packages), + ModulePart::Facade => self.module.side_effects(side_effect_free_packages), ModulePart::RenamedExport { .. } | ModulePart::RenamedNamespace { .. } => { - Vc::cell(true) + ModuleSideEffects::DeclaredSideEffectFree.cell() } _ => bail!("Unexpected ModulePart for EcmascriptModuleFacadeModule"), }) diff --git a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs index 6f687d24f9518..1b7a43fa273eb 100644 --- a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs @@ -10,7 +10,7 @@ use turbopack_core::{ MergeableModulesExposed, }, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::ModuleReferences, resolve::ModulePart, @@ -73,9 +73,8 @@ impl Module for EcmascriptModuleLocalsModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free(&self, side_effect_free_packages: Vc) -> Vc { - self.module - .is_marked_as_side_effect_free(side_effect_free_packages) + fn side_effects(&self, side_effect_free_packages: Vc) -> Vc { + self.module.side_effects(side_effect_free_packages) } } diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs index b0ad370ff2ea0..69e819b483734 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs @@ -7,7 +7,7 @@ use turbopack_core::{ chunk::{AsyncModuleInfo, ChunkableModule, ChunkingContext, EvaluatableAsset}, context::AssetContext, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::{ModuleReference, ModuleReferences, SingleChunkableModuleReference}, resolve::{ExportUsage, ModulePart, origin::ResolveOrigin}, @@ -264,8 +264,9 @@ async fn follow_reexports_with_side_effects( let mut current_export_name = export_name; let result = loop { let is_side_effect_free = *current_module - .is_marked_as_side_effect_free(side_effect_free_packages) - .await?; + .side_effects(side_effect_free_packages) + .await? + == ModuleSideEffects::DeclaredSideEffectFree; if !is_side_effect_free { side_effects.push(only_effects(*current_module).to_resolved().await?); @@ -353,15 +354,12 @@ impl Module for EcmascriptModulePartAsset { } #[turbo_tasks::function] - async fn is_marked_as_side_effect_free( - &self, - side_effect_free_packages: Vc, - ) -> Result> { + async fn side_effects(&self, side_effect_free_packages: Vc) -> Vc { match self.part { - ModulePart::Exports | ModulePart::Export(..) => Ok(Vc::cell(true)), - _ => Ok(self - .full_module - .is_marked_as_side_effect_free(side_effect_free_packages)), + ModulePart::Exports | ModulePart::Export(..) => { + ModuleSideEffects::DeclaredSideEffectFree.cell() + } + _ => self.full_module.side_effects(side_effect_free_packages), } } } diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs index 5c6b2d9a9be6f..d5c804f93b5e0 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs @@ -6,7 +6,7 @@ use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkableModule, ChunkingContext, EvaluatableAsset}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::{ModuleReferences, SingleChunkableModuleReference}, resolve::{ExportUsage, ModulePart}, @@ -114,8 +114,8 @@ impl Module for SideEffectsModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free(self: Vc, _: Vc) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs index 97217f735824d..c41260cf35994 100644 --- a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs @@ -2,11 +2,11 @@ use anyhow::Result; use serde_json::Value as JsonValue; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; -use turbo_tasks_fs::DirectoryContent; +use turbo_tasks_fs::{DirectoryContent, glob::Glob}; use turbopack_core::{ asset::{Asset, AssetContent}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, raw_module::RawModule, reference::{ModuleReference, ModuleReferences}, reference_type::{CommonJsReferenceSubType, ReferenceType}, @@ -173,6 +173,11 @@ impl Module for TsConfigModuleAsset { } Ok(Vc::cell(references)) } + + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs index af213d90dba31..f27dcb98cbc01 100644 --- a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs @@ -2,11 +2,12 @@ use anyhow::Result; use swc_core::ecma::ast::Lit; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; +use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, file_source::FileSource, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, reference::{ModuleReference, ModuleReferences}, reference_type::{CommonJsReferenceSubType, ReferenceType}, resolve::{ @@ -62,6 +63,11 @@ impl Module for WebpackModuleAsset { fn references(&self) -> Vc { module_references(*self.source, *self.runtime, *self.transforms) } + + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs index 09dfb6110c9d7..4db428f5edced 100644 --- a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs @@ -9,7 +9,7 @@ use turbopack_core::{ ChunkingTypeOption, }, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::{ModuleReference, ModuleReferences}, resolve::ModuleResolveResult, @@ -59,11 +59,8 @@ impl Module for WorkerLoaderModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-json/src/lib.rs b/turbopack/crates/turbopack-json/src/lib.rs index e77a9f7bbe3bc..8b4156e3eb207 100644 --- a/turbopack/crates/turbopack-json/src/lib.rs +++ b/turbopack/crates/turbopack-json/src/lib.rs @@ -20,7 +20,7 @@ use turbopack_core::{ chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, code_builder::CodeBuilder, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::OutputAssetsReference, source::Source, @@ -59,11 +59,8 @@ impl Module for JsonModuleAsset { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-static/src/css.rs b/turbopack/crates/turbopack-static/src/css.rs index 975318dc6cd28..4157e9ac5a537 100644 --- a/turbopack/crates/turbopack-static/src/css.rs +++ b/turbopack/crates/turbopack-static/src/css.rs @@ -5,7 +5,7 @@ use turbopack_core::{ asset::{Asset, AssetContent}, chunk::ChunkingContext, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, output::OutputAsset, source::Source, }; @@ -53,11 +53,8 @@ impl Module for StaticUrlCssModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-static/src/ecma.rs b/turbopack/crates/turbopack-static/src/ecma.rs index 5898740e7b410..dc9adcee3d863 100644 --- a/turbopack/crates/turbopack-static/src/ecma.rs +++ b/turbopack/crates/turbopack-static/src/ecma.rs @@ -6,7 +6,7 @@ use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::{OutputAsset, OutputAssetsReference, OutputAssetsWithReferenced}, source::Source, @@ -65,11 +65,8 @@ impl Module for StaticUrlJsModule { } #[turbo_tasks::function] - fn is_marked_as_side_effect_free( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { - Vc::cell(true) + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/issues/Error evaluating Node.js code-a1070b.txt b/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/issues/Error evaluating Node.js code-a1070b.txt new file mode 100644 index 0000000000000..5337e8470ed16 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/issues/Error evaluating Node.js code-a1070b.txt @@ -0,0 +1,26 @@ +error - [transform] /turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/input/index.js Error evaluating Node.js code + + Error: Should have a lower precedence than foo.ts + at module evaluation (turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/input/src/foo.js:1:7) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/bf321_tests_execution_turbopack_resolving_tsconfig-nodenext_input_490cd2a4._.js:4:7] + | v + 1 + throw new Error('Should have a lower precedence than foo.ts') + | ^ + 2 | + + at instantiateModule (turbopack:///[turbopack]/nodejs/runtime.ts:228:5) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/[turbopack]_runtime.js:715:9] + at getOrInstantiateModuleFromParent (turbopack:///[turbopack]/nodejs/runtime.ts:261:10) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/[turbopack]_runtime.js:738:12] + at Context.esmImport [as i] (turbopack:///[turbopack]/shared/runtime-utils.ts:347:18) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/[turbopack]_runtime.js:228:20] + at module evaluation (turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/input/index.js:1:1) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/bf321_tests_execution_turbopack_resolving_tsconfig-nodenext_input_490cd2a4._.js:11:256] + | v + 1 + import foo from './src/foo.js' + | ^ + 2 | // import fileTsx from './src/file-tsx.js' + 3 | // import fileMts from './src/file-mts.mjs' + 4 | // import fileCts from './src/file-cts.cjs' + 5 | // import fileMjs from './src/file-mjs.mjs' + + at instantiateModule (turbopack:///[turbopack]/nodejs/runtime.ts:228:5) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/[turbopack]_runtime.js:715:9] + at getOrInstantiateModuleFromParent (turbopack:///[turbopack]/nodejs/runtime.ts:261:10) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/[turbopack]_runtime.js:738:12] + at Context.esmImport [as i] (turbopack:///[turbopack]/shared/runtime-utils.ts:347:18) [WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/[turbopack]_runtime.js:228:20] + [at WORKSPACE_ROOT/turbopack/crates/turbopack-tests/tests/execution/turbopack/resolving/tsconfig-nodenext/output/bf321_tests_execution_turbopack_resolving_tsconfig-nodenext_input_index_ea864b75.js:8:16] + [at process.processTicksAndRejections (node:internal/process/task_queues:95:5)] \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js new file mode 100644 index 0000000000000..3bca0109b5256 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js @@ -0,0 +1,51 @@ +(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js", +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "e", + ()=>cat, + (new_cat)=>cat = new_cat +]); +let cat = 'cat'; +; +}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "cat", + ()=>__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__5$3e$__["e"] +]); +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__5$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); +; +; +}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/module.js [test] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "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$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__["cat"], + (new_cat)=>__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$__["cat"] = new_cat, + "fakeCat", + ()=>__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$__["cat"] +]); +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_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); +; +; +; +; +; +}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +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$module$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/module.js [test] (ecmascript) "); +; +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$module$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["fakeCat"]); +}), +]); + +//# sourceMappingURL=780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js.map new file mode 100644 index 0000000000000..7da6e0c054ba9 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "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": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 43, "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\nconsole.log(fakeCat)\n"],"names":[],"mappings":";AAAA;;AAEA,QAAQ,GAAG,CAAC,8PAAO"}}] +} \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js deleted file mode 100644 index add109068e039..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js +++ /dev/null @@ -1,97 +0,0 @@ -(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js", -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([ - "a", - ()=>dog, - (new_dog)=>dog = new_dog -]); -let dog = 'dog'; -; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([]); -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__0$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -; -__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__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$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] += '!'; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([]); -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__0$3e$__ = __turbopack_context__.i("[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__1$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -; -; -__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__0$3e$__["a"] += '!'; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([]); -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__0$3e$__ = __turbopack_context__.i("[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__1$3e$__ = __turbopack_context__.i("[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_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -; -; -; -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__0$3e$__["a"]); -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__0$3e$__["a"]); -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__0$3e$__["a"]); -; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([ - "e", - ()=>cat, - (new_cat)=>cat = new_cat -]); -let cat = 'cat'; -; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([ - "cat", - ()=>__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__5$3e$__["e"] -]); -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__5$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -; -; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/module.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([ - "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$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__["cat"], - (new_cat)=>__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$__["cat"] = new_cat, - "fakeCat", - ()=>__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$__["cat"] -]); -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__2$3e$__ = __turbopack_context__.i("[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__8$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -; -; -; -; -; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript)", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([]); -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$module$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/module.js [test] (ecmascript) "); -; -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$module$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["fakeCat"]); -}), -]); - -//# sourceMappingURL=780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js.map deleted file mode 100644 index 4ba267363cb5f..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js.map +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": 3, - "sources": [], - "sections": [ - {"offset": {"line": 4, "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":["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,qPAAG,IAAI;AAQP,qPAAG,IAAI"}}, - {"offset": {"line": 24, "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,qPAAG,IAAI"}}, - {"offset": {"line": 34, "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,qPAAG;AAQf,QAAQ,GAAG,CAAC,qPAAG;AAQf,QAAQ,GAAG,CAAC,qPAAG"}}, - {"offset": {"line": 49, "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": 60, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 89, "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\nconsole.log(fakeCat)\n"],"names":[],"mappings":";AAAA;;AAEA,QAAQ,GAAG,CAAC,8PAAO"}}] -} \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js similarity index 79% rename from turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js rename to turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js index 2fc639f6c39ea..20fed24d622ce 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js @@ -1,5 +1,5 @@ (globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([ - "output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js", - {"otherChunks":["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_6eee2cc7._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript)"]} + "output/ad3e4_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js", + {"otherChunks":["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_328b6878._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript)"]} ]); // Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/bf321_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/bf321_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js.map similarity index 100% rename from turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/bf321_tests_snapshot_basic-tree-shake_export-named_input_index_28364f2a.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/bf321_tests_snapshot_basic-tree-shake_export-named_input_index_02b52f5d.js.map diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js similarity index 84% rename from turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js rename to turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js index 5eb68e8bcc9e5..109a43e966638 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js @@ -1,4 +1,4 @@ -(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js", +(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js", "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { "use strict"; @@ -29,21 +29,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; __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"] += '!'; }), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([]); -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_context__.i("[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__1$3e$__ = __turbopack_context__.i("[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_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); -; -; -; -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__0$3e$__["a"]); -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__0$3e$__["a"]); -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__0$3e$__["a"]); -; -}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ", ((__turbopack_context__) => { "use strict"; @@ -171,7 +156,6 @@ __turbopack_context__.s([ "lib", ()=>__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$exports$3e$__ ]); -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__2$3e$__ = __turbopack_context__.i("[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$exports$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); ; ; @@ -189,4 +173,4 @@ console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$ }), ]); -//# sourceMappingURL=780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js.map \ No newline at end of file +//# sourceMappingURL=780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js.map similarity index 80% rename from turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js.map index 1586bf9ceb551..30d115c6687a3 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js.map @@ -5,13 +5,12 @@ {"offset": {"line": 4, "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":["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,yPAAG,IAAI;AAQP,yPAAG,IAAI"}}, {"offset": {"line": 24, "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,yPAAG,IAAI"}}, - {"offset": {"line": 34, "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,yPAAG;AAQf,QAAQ,GAAG,CAAC,yPAAG;AAQf,QAAQ,GAAG,CAAC,yPAAG"}}, - {"offset": {"line": 49, "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,yPAAG;AACZ;AAMA,SAAS,OAAO,MAAM;IACpB,yPAAG,GAAG;AACR;AAMO,MAAM,SAAS;IACpB,SAAS,yPAAG;IACZ,KAAK;IACL,KAAK;AACP"}}, - {"offset": {"line": 85, "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": 96, "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,yPAAG"}}, - {"offset": {"line": 112, "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,yPAAG,GAAG,yPAAG;AAClB"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 167, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 184, "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":";AAAA;;AAEA,QAAQ,GAAG,CAAC,8PAAG,CAAC,GAAG"}}] + {"offset": {"line": 34, "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,yPAAG;AACZ;AAMA,SAAS,OAAO,MAAM;IACpB,yPAAG,GAAG;AACR;AAMO,MAAM,SAAS;IACpB,SAAS,yPAAG;IACZ,KAAK;IACL,KAAK;AACP"}}, + {"offset": {"line": 70, "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": 81, "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,yPAAG"}}, + {"offset": {"line": 97, "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,yPAAG,GAAG,yPAAG;AAClB"}}, + {"offset": {"line": 119, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 130, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 152, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 168, "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":";AAAA;;AAEA,QAAQ,GAAG,CAAC,8PAAG,CAAC,GAAG"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js similarity index 79% rename from turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js rename to turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js index 263d256bf6a36..8bc032366c4e6 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js @@ -1,5 +1,5 @@ (globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([ - "output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js", - {"otherChunks":["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_c8f48bdf._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript)"]} + "output/ad3e4_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js", + {"otherChunks":["output/780ce_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_7e401b19._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript)"]} ]); // Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/bf321_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/bf321_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js.map similarity index 100% rename from turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/bf321_tests_snapshot_basic-tree-shake_export-namespace_input_index_2b1fc03b.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/bf321_tests_snapshot_basic-tree-shake_export-namespace_input_index_b3684963.js.map diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/53446_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/53446_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js.map similarity index 100% rename from turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/53446_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/53446_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js.map diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js b/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js similarity index 78% rename from turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js rename to turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js index 54b5dfbdab24f..95318b2624851 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js @@ -1,5 +1,5 @@ (globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([ - "output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_c3eaf1ce.js", - {"otherChunks":["output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/index.js [test] (ecmascript)"]} + "output/964ba_snapshot_intermediate-tree-shake_reexport-with-locals_input_index_0b2e25bd.js", + {"otherChunks":["output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/index.js [test] (ecmascript)"]} ]); // Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js b/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js similarity index 51% rename from turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js rename to turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js index 16d25049adf9c..b83e7d1a11a89 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js @@ -1,4 +1,4 @@ -(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js", +(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js", "[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/index.js [test] (ecmascript)", ((__turbopack_context__) => { "use strict"; @@ -7,23 +7,9 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo (0, __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$intermediate$2d$tree$2d$shake$2f$reexport$2d$with$2d$locals$2f$input$2f$node_modules$2f$lib$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$locals$3e$__["local"])(); __turbopack_context__.s([]); }), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/unused.js [test] (ecmascript)", ((__turbopack_context__) => { -"use strict"; - -function unusedStar() {} -__turbopack_context__.s([]); -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/unused-star.js [test] (ecmascript)", ((__turbopack_context__) => { -"use strict"; - -function unused() {} -__turbopack_context__.s([]); -}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/index.js [test] (ecmascript) ", ((__turbopack_context__) => { "use strict"; -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$intermediate$2d$tree$2d$shake$2f$reexport$2d$with$2d$locals$2f$input$2f$node_modules$2f$lib$2f$unused$2e$js__$5b$test$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/unused.js [test] (ecmascript)"); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$intermediate$2d$tree$2d$shake$2f$reexport$2d$with$2d$locals$2f$input$2f$node_modules$2f$lib$2f$unused$2d$star$2e$js__$5b$test$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/unused-star.js [test] (ecmascript)"); ; ; function local() { @@ -40,4 +26,4 @@ __turbopack_context__.s([ }), ]); -//# sourceMappingURL=bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js.map \ No newline at end of file +//# sourceMappingURL=bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js.map similarity index 52% rename from turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js.map index 381f676f93550..765accd1c9638 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_328b13f8._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/output/bf321_tests_snapshot_intermediate-tree-shake_reexport-with-locals_input_ce2e648f._.js.map @@ -3,7 +3,5 @@ "sources": [], "sections": [ {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/index.js"],"sourcesContent":["import { local } from 'lib'\n\nlocal()\n"],"names":[],"mappings":"AAAA;;AAEA,IAAA,yRAAK"}}, - {"offset": {"line": 12, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/unused.js"],"sourcesContent":["export function unusedStar() {}\n"],"names":[],"mappings":"AAAO,SAAS,cAAc","ignoreList":[0]}}, - {"offset": {"line": 18, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/unused-star.js"],"sourcesContent":["export function unused() {}\n"],"names":[],"mappings":"AAAO,SAAS,UAAU","ignoreList":[0]}}, - {"offset": {"line": 24, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/index.js"],"sourcesContent":["export { unused } from './unused.js'\nexport * from './unused-star.js'\n\nfunction local() {\n console.log('This is a local function')\n}\nfunction localUnused() {\n console.log('This is a local unused function')\n}\n\nexport { local, localUnused }\n"],"names":[],"mappings":"AAAA;AACA;;;AAEA,SAAS;IACP,QAAQ,GAAG,CAAC;AACd;AACA,SAAS;IACP,QAAQ,GAAG,CAAC;AACd","ignoreList":[0]}}] + {"offset": {"line": 12, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/intermediate-tree-shake/reexport-with-locals/input/node_modules/lib/index.js"],"sourcesContent":["export { unused } from './unused.js'\nexport * from './unused-star.js'\n\nfunction local() {\n console.log('This is a local function')\n}\nfunction localUnused() {\n console.log('This is a local unused function')\n}\n\nexport { local, localUnused }\n"],"names":[],"mappings":";;AAGA,SAAS;IACP,QAAQ,GAAG,CAAC;AACd;AACA,SAAS;IACP,QAAQ,GAAG,CAAC;AACd","ignoreList":[0]}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js similarity index 77% rename from turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js rename to turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js index 685756c2801a5..b1a220227c3fe 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js @@ -1,5 +1,5 @@ (globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([ - "output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js", - {"otherChunks":["output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index.js [test] (ecmascript)"]} + "output/5c1d0_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js", + {"otherChunks":["output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index.js [test] (ecmascript)"]} ]); // Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/780ce_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/780ce_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js.map similarity index 100% rename from turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/780ce_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_53cb9f39.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/780ce_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_index_bd01f301.js.map diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js.map deleted file mode 100644 index f09853c671d23..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js.map +++ /dev/null @@ -1,10 +0,0 @@ -{ - "version": 3, - "sources": [], - "sections": [ - {"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/jsx-runtime.js"],"sourcesContent":["module.exports = {};\n"],"names":[],"mappings":"AAAA,OAAO,OAAO,GAAG,CAAC"}}, - {"offset": {"line": 8, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/reflect-utils.js","turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/collect-segment-data.js"],"sourcesContent":["// This regex will have fast negatives meaning valid identifiers may not pass\n// this test. However this is only used during static generation to provide hints\n// about why a page bailed out of some or all prerendering and we can use bracket notation\n// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']`\n// even if this would have been fine too `searchParams.ಠ_ಠ`\nconst isDefinitelyAValidIdentifier = /s/;\nexport function describeStringPropertyAccess(target, prop) {}\nexport function describeHasCheckingStringProperty(target, prop) {}\nexport const wellKnownProperties = new Set([])\n","import { jsx as _jsx } from \"./jsx-runtime\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nconst createFromReadableStream = 123; //import { createFromReadableStream } from 'react-server-dom-webpack/client.edge';\n// eslint-disable-next-line import/no-extraneous-dependencies\nconst prerender = 123; // import { prerender } from 'react-server-dom-webpack/static.edge';\nconst streamFromBuffer=1,streamToBuffer=1; // import { streamFromBuffer, streamToBuffer } from '../stream-utils/node-web-streams-helper';\nconst waitAtLeastOneReactRenderTask=1; //import { waitAtLeastOneReactRenderTask } from '../../lib/scheduler';\n// import './segment-value-encoding';\n"],"names":[],"mappings":";;;;;;;AAAA,6EAA6E;AAC7E,iFAAiF;AACjF,0FAA0F;AAC1F,uFAAuF;AACvF,2DAA2D;AAC3D,MAAM,+BAA+B;AAC9B,SAAS,6BAA6B,MAAM,EAAE,IAAI,GAAG;AACrD,SAAS,kCAAkC,MAAM,EAAE,IAAI,GAAG;AAC1D,MAAM,sBAAsB,IAAI,IAAI,EAAE;;;;ACR7C;;AACA,6DAA6D;AAC7D,MAAM,2BAA2B,KAAK,kFAAkF;AACxH,6DAA6D;AAC7D,MAAM,YAAY,KAAK,oEAAoE;AAC3F,MAAM,mBAAiB,GAAE,iBAAe,GAAG,8FAA8F;AACzI,MAAM,gCAA8B,GAAG,sEAAsE;CAC7G,sCAAsC"}}, - {"offset": {"line": 42, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index1.js"],"sourcesContent":["import \"./entry-base.js\";\n"],"names":[],"mappings":";AAAA"}}, - {"offset": {"line": 49, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index2.js"],"sourcesContent":["import \"./entry-base.js\";\n"],"names":[],"mappings":";AAAA"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index.js"],"sourcesContent":["// \"entry-base.js [app-rsc] (ecmascript) \" with\n// [\"reflect-utils.js [app-rsc] (ecmascript)\",\n// \"params.js [app-rsc] (ecmascript)\",\n// \"segment-value-encoding.js [app-rsc] (ecmascript)\",\n// \"collect-segment-data.js [app-rsc] (ecmascript)\",\n// \"entry-base.js [app-rsc] (ecmascript) \"]\n\n// \"entry-base.js [test] (ecmascript) \" with\n// [\"reflect-utils.js [test] (ecmascript)\",\n// \"params.js [test] (ecmascript)\",\n// \"segment-value-encoding.js [test] (ecmascript)\",\n// \"collect-segment-data.js [test] (ecmascript)\",\n// \"entry-base.js [test] (ecmascript) \"]\n\nif (Date.now() > 0) {\n require('./index1.js')\n}\nif (Date.now() > 0) {\n require('./index2.js')\n}\n\n"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8CAA8C;AAC9C,sCAAsC;AACtC,sDAAsD;AACtD,oDAAoD;AACpD,mDAAmD;AAEnD,+DAA+D;AAC/D,2CAA2C;AAC3C,mCAAmC;AACnC,mDAAmD;AACnD,kDAAkD;AAClD,iDAAiD;AAEjD,IAAI,KAAK,GAAG,KAAK,GAAG;;AAEpB;AACA,IAAI,KAAK,GAAG,KAAK,GAAG;;AAEpB"}}] -} \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js similarity index 58% rename from turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js rename to turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js index 5b804961b1a86..9355e3843badc 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js @@ -1,8 +1,4 @@ -(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js", -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/jsx-runtime.js [test] (ecmascript)", ((__turbopack_context__, module, exports) => { - -module.exports = {}; -}), +(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js", "[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/entry-base.js [test] (ecmascript)", ((__turbopack_context__) => { "use strict"; @@ -11,29 +7,7 @@ module.exports = {}; __turbopack_context__.s([], "[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/entry-base.js [test] (ecmascript)"); // MERGED MODULE: [project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/params.js [test] (ecmascript) ; -// MERGED MODULE: [project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/reflect-utils.js [test] (ecmascript) -; -// This regex will have fast negatives meaning valid identifiers may not pass -// this test. However this is only used during static generation to provide hints -// about why a page bailed out of some or all prerendering and we can use bracket notation -// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']` -// even if this would have been fine too `searchParams.ಠ_ಠ` -const isDefinitelyAValidIdentifier = /s/; -function describeStringPropertyAccess(target, prop) {} -function describeHasCheckingStringProperty(target, prop) {} -const wellKnownProperties = new Set([]); -; -// MERGED MODULE: [project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/collect-segment-data.js [test] (ecmascript) -; -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$source_maps$2f$merged$2d$unicode$2f$input$2f$jsx$2d$runtime$2e$js__$5b$test$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/jsx-runtime.js [test] (ecmascript)"); ; -// eslint-disable-next-line import/no-extraneous-dependencies -const createFromReadableStream = 123; //import { createFromReadableStream } from 'react-server-dom-webpack/client.edge'; -// eslint-disable-next-line import/no-extraneous-dependencies -const prerender = 123; // import { prerender } from 'react-server-dom-webpack/static.edge'; -const streamFromBuffer = 1, streamToBuffer = 1; // import { streamFromBuffer, streamToBuffer } from '../stream-utils/node-web-streams-helper'; -const waitAtLeastOneReactRenderTask = 1; //import { waitAtLeastOneReactRenderTask } from '../../lib/scheduler'; - // import './segment-value-encoding'; ; ; }), @@ -74,4 +48,4 @@ if (Date.now() > 0) { }), ]); -//# sourceMappingURL=aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_2490dad7._.js.map +//# sourceMappingURL=aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js.map new file mode 100644 index 0000000000000..08f0a2312556a --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/output/aaf3a_crates_turbopack-tests_tests_snapshot_source_maps_merged-unicode_input_e01a5bc2._.js.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 16, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index1.js"],"sourcesContent":["import \"./entry-base.js\";\n"],"names":[],"mappings":";AAAA"}}, + {"offset": {"line": 23, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index2.js"],"sourcesContent":["import \"./entry-base.js\";\n"],"names":[],"mappings":";AAAA"}}, + {"offset": {"line": 29, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/turbopack/crates/turbopack-tests/tests/snapshot/source_maps/merged-unicode/input/index.js"],"sourcesContent":["// \"entry-base.js [app-rsc] (ecmascript) \" with\n// [\"reflect-utils.js [app-rsc] (ecmascript)\",\n// \"params.js [app-rsc] (ecmascript)\",\n// \"segment-value-encoding.js [app-rsc] (ecmascript)\",\n// \"collect-segment-data.js [app-rsc] (ecmascript)\",\n// \"entry-base.js [app-rsc] (ecmascript) \"]\n\n// \"entry-base.js [test] (ecmascript) \" with\n// [\"reflect-utils.js [test] (ecmascript)\",\n// \"params.js [test] (ecmascript)\",\n// \"segment-value-encoding.js [test] (ecmascript)\",\n// \"collect-segment-data.js [test] (ecmascript)\",\n// \"entry-base.js [test] (ecmascript) \"]\n\nif (Date.now() > 0) {\n require('./index1.js')\n}\nif (Date.now() > 0) {\n require('./index2.js')\n}\n\n"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8CAA8C;AAC9C,sCAAsC;AACtC,sDAAsD;AACtD,oDAAoD;AACpD,mDAAmD;AAEnD,+DAA+D;AAC/D,2CAA2C;AAC3C,mCAAmC;AACnC,mDAAmD;AACnD,kDAAkD;AAClD,iDAAiD;AAEjD,IAAI,KAAK,GAAG,KAAK,GAAG;;AAEpB;AACA,IAAI,KAAK,GAAG,KAAK,GAAG;;AAEpB"}}] +} \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js new file mode 100644 index 0000000000000..8d1c9c4152f9e --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js @@ -0,0 +1,12 @@ +(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js", +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +; +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +}), +]); + +//# sourceMappingURL=aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js.map new file mode 100644 index 0000000000000..7a4b8c50a0b46 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "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"}}] +} \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js.map similarity index 100% rename from turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js.map diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js similarity index 62% rename from turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js rename to turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js index 1e0503e0edcd0..9952068fe6c73 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js @@ -1,5 +1,5 @@ (globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([ - "output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_3ffe3be9.js", - {"otherChunks":["output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript)"]} + "output/ba425_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_ae3d8f84.js", + {"otherChunks":["output/aaf3a_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_969f085a.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/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js deleted file mode 100644 index 3094949bb459c..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js +++ /dev/null @@ -1,19 +0,0 @@ -(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push(["output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js", -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js [test] (ecmascript) ", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([]); -; -}), -"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript)", ((__turbopack_context__) => { -"use strict"; - -__turbopack_context__.s([]); -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$internal__part__3$3e$__ = __turbopack_context__.i("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js [test] (ecmascript) "); -; -if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable -; -}), -]); - -//# sourceMappingURL=turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.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_17ca2f0a._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js.map deleted file mode 100644 index 5e45bdb0d07f1..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_17ca2f0a._.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": [], - "sections": [ - {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 10, "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":";AAAA;;AAEA"}}] -} \ No newline at end of file diff --git a/turbopack/crates/turbopack-wasm/src/module_asset.rs b/turbopack/crates/turbopack-wasm/src/module_asset.rs index 3db28a19882fb..5f8ba8407b701 100644 --- a/turbopack/crates/turbopack-wasm/src/module_asset.rs +++ b/turbopack/crates/turbopack-wasm/src/module_asset.rs @@ -1,7 +1,7 @@ use anyhow::{Context, Result, bail}; use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, Vc, fxindexmap}; -use turbo_tasks_fs::FileSystemPath; +use turbo_tasks_fs::{FileSystemPath, glob::Glob}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -10,7 +10,7 @@ use turbopack_core::{ }, context::AssetContext, ident::AssetIdent, - module::{Module, OptionModule}, + module::{Module, ModuleSideEffects, OptionModule}, module_graph::ModuleGraph, output::{OutputAssetsReference, OutputAssetsWithReferenced}, reference::{ModuleReferences, SingleChunkableModuleReference}, @@ -144,6 +144,14 @@ impl Module for WebAssemblyModuleAsset { fn is_self_async(self: Vc) -> Vc { Vc::cell(true) } + + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // Both versions of this module have a top level await that instantiates a wasm module + // wasm module instantiation can trigger arbitrary side effects from the native start + // function + ModuleSideEffects::SideEffectful.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack-wasm/src/raw.rs b/turbopack/crates/turbopack-wasm/src/raw.rs index 03661228b60b6..6b1506fcab128 100644 --- a/turbopack/crates/turbopack-wasm/src/raw.rs +++ b/turbopack/crates/turbopack-wasm/src/raw.rs @@ -1,12 +1,13 @@ use anyhow::{Result, bail}; use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, Vc}; +use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, context::AssetContext, ident::AssetIdent, - module::Module, + module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, output::{OutputAsset, OutputAssetsReference, OutputAssetsWithReferenced}, source::{OptionSource, Source}, @@ -64,6 +65,12 @@ impl Module for RawWebAssemblyModuleAsset { fn source(&self) -> Vc { Vc::cell(Some(ResolvedVc::upcast(self.source))) } + + #[turbo_tasks::function] + fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + // this just exports a path + ModuleSideEffects::DeclaredSideEffectFree.cell() + } } #[turbo_tasks::value_impl] diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index b875f69b9fd47..c595a56b9b6e7 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -36,7 +36,7 @@ use turbopack_core::{ context::{AssetContext, ProcessResult}, ident::Layer, issue::{IssueExt, IssueSource, module::ModuleIssue}, - module::Module, + module::{Module, ModuleSideEffects}, node_addon_module::NodeAddonModule, output::{ExpandedOutputAssets, OutputAsset}, raw_module::RawModule, @@ -182,9 +182,8 @@ async fn apply_module_type( .resolve() .await?; - if *module - .is_marked_as_side_effect_free(side_effect_free_packages) - .await? + if *module.side_effects(side_effect_free_packages).await? + == ModuleSideEffects::DeclaredSideEffectFree { return Ok(ProcessResult::Ignore.cell()); } @@ -316,9 +315,8 @@ async fn apply_module_type( .resolve() .await?; - if *module - .is_marked_as_side_effect_free(side_effect_free_packages) - .await? + if *module.side_effects(side_effect_free_packages).await? + == ModuleSideEffects::DeclaredSideEffectFree { return Ok(ProcessResult::Ignore.cell()); } From 29b7925e4cca2890699391eca49b9c920d15884b Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Sun, 30 Nov 2025 14:22:39 -0800 Subject: [PATCH 2/6] simplify the side_effects api by moving the package glob into EcmascriptModule fewer globs constructed, fewer turbotasks executed --- crates/next-core/src/hmr_entry.rs | 4 +- crates/next-core/src/next_client/context.rs | 7 +- .../css_client_reference_module.rs | 4 +- .../ecmascript_client_reference_module.rs | 4 +- .../src/next_dynamic/dynamic_module.rs | 4 +- crates/next-core/src/next_server/context.rs | 7 +- .../server_component_module.rs | 4 +- .../server_utility_module.rs | 4 +- crates/next-core/src/raw_ecmascript_module.rs | 4 +- .../crates/turbopack-core/src/context.rs | 5 +- turbopack/crates/turbopack-core/src/module.rs | 3 +- .../turbopack-core/src/module_graph/mod.rs | 8 +- .../module_graph/side_effect_module_info.rs | 87 +++++++++++++++++++ .../turbopack-core/src/node_addon_module.rs | 4 +- .../crates/turbopack-core/src/raw_module.rs | 3 +- turbopack/crates/turbopack-css/src/asset.rs | 4 +- .../crates/turbopack-css/src/module_asset.rs | 4 +- .../benches/references.rs | 9 +- .../src/async_chunk/module.rs | 3 +- .../src/inlined_bytes_module.rs | 4 +- .../crates/turbopack-ecmascript/src/lib.rs | 40 ++++++--- .../src/manifest/chunk_asset.rs | 3 +- .../turbopack-ecmascript/src/merged_module.rs | 3 +- .../src/references/esm/base.rs | 8 +- .../src/references/esm/export.rs | 5 +- .../src/references/external_module.rs | 9 +- .../src/references/require_context.rs | 4 +- .../side_effect_optimization/facade/module.rs | 6 +- .../side_effect_optimization/locals/module.rs | 5 +- .../src/tree_shake/asset.rs | 34 ++------ .../src/tree_shake/side_effect_module.rs | 4 +- .../src/typescript/mod.rs | 4 +- .../turbopack-ecmascript/src/webpack/mod.rs | 3 +- .../src/worker_chunk/module.rs | 3 +- turbopack/crates/turbopack-json/src/lib.rs | 4 +- turbopack/crates/turbopack-static/src/css.rs | 3 +- turbopack/crates/turbopack-static/src/ecma.rs | 3 +- .../src/noop_asset_context.rs | 9 +- .../crates/turbopack-wasm/src/module_asset.rs | 4 +- turbopack/crates/turbopack-wasm/src/raw.rs | 3 +- turbopack/crates/turbopack/src/lib.rs | 57 +++--------- .../module_options/module_options_context.rs | 28 +++++- 42 files changed, 237 insertions(+), 181 deletions(-) create mode 100644 turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs diff --git a/crates/next-core/src/hmr_entry.rs b/crates/next-core/src/hmr_entry.rs index 2549e50c864c4..abbed4209daba 100644 --- a/crates/next-core/src/hmr_entry.rs +++ b/crates/next-core/src/hmr_entry.rs @@ -3,7 +3,7 @@ use std::io::Write; use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{FileSystem, VirtualFileSystem, glob::Glob, rope::RopeBuilder}; +use turbo_tasks_fs::{FileSystem, VirtualFileSystem, rope::RopeBuilder}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -77,7 +77,7 @@ impl Module for HmrEntryModule { )])) } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } diff --git a/crates/next-core/src/next_client/context.rs b/crates/next-core/src/next_client/context.rs index e63720f07e526..6756cbdbaadbc 100644 --- a/crates/next-core/src/next_client/context.rs +++ b/crates/next-core/src/next_client/context.rs @@ -10,6 +10,7 @@ use turbopack::{ module_options::{ CssOptionsContext, EcmascriptOptionsContext, JsxTransformOptions, ModuleRule, TypescriptTransformOptions, module_options_context::ModuleOptionsContext, + side_effect_free_packages_glob, }, resolve_options_context::ResolveOptionsContext, }; @@ -336,7 +337,11 @@ pub async fn get_client_module_options_context( execution_context: Some(execution_context), tree_shaking_mode: tree_shaking_mode_for_user_code, enable_postcss_transform, - side_effect_free_packages: next_config.optimize_package_imports().owned().await?, + side_effect_free_packages: Some( + side_effect_free_packages_glob(next_config.optimize_package_imports()) + .to_resolved() + .await?, + ), keep_last_successful_parse: next_mode.is_development(), analyze_mode: if next_mode.is_development() { AnalyzeMode::CodeGeneration diff --git a/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs b/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs index d73029fae4fd2..c532111ddf6d8 100644 --- a/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs +++ b/crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs @@ -1,7 +1,7 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{FileContent, glob::Glob}; +use turbo_tasks_fs::FileContent; use turbopack::css::chunk::CssChunkPlaceable; use turbopack_core::{ asset::{Asset, AssetContent}, @@ -58,7 +58,7 @@ impl Module for CssClientReferenceModule { )])) } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } diff --git a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs index a5fb3b45d62ce..efed783b8a4b0 100644 --- a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs +++ b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs @@ -4,7 +4,7 @@ use anyhow::{Context, Result, bail}; use indoc::writedoc; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{IntoTraitRef, ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{File, FileContent, glob::Glob}; +use turbo_tasks_fs::{File, FileContent}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -242,7 +242,7 @@ impl Module for EcmascriptClientReferenceModule { Ok(Vc::cell(references)) } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // These just export some specially tagged functions ModuleSideEffects::DeclaredSideEffectFree.cell() } diff --git a/crates/next-core/src/next_dynamic/dynamic_module.rs b/crates/next-core/src/next_dynamic/dynamic_module.rs index e7ff33faf32b5..07a0c3b6b1225 100644 --- a/crates/next-core/src/next_dynamic/dynamic_module.rs +++ b/crates/next-core/src/next_dynamic/dynamic_module.rs @@ -4,7 +4,7 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileContent, glob::Glob}; +use turbo_tasks_fs::FileContent; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, @@ -72,7 +72,7 @@ impl Module for NextDynamicEntryModule { )])) } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // This just exports another import ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell() } diff --git a/crates/next-core/src/next_server/context.rs b/crates/next-core/src/next_server/context.rs index a1b6646a07396..d300574a3bfdc 100644 --- a/crates/next-core/src/next_server/context.rs +++ b/crates/next-core/src/next_server/context.rs @@ -10,6 +10,7 @@ use turbopack::{ module_options::{ CssOptionsContext, EcmascriptOptionsContext, ExternalsTracingOptions, JsxTransformOptions, ModuleOptionsContext, ModuleRule, TypescriptTransformOptions, + side_effect_free_packages_glob, }, resolve_options_context::ResolveOptionsContext, transition::Transition, @@ -592,7 +593,11 @@ pub async fn get_server_module_options_context( ..Default::default() }, tree_shaking_mode: tree_shaking_mode_for_user_code, - side_effect_free_packages: next_config.optimize_package_imports().owned().await?, + side_effect_free_packages: Some( + side_effect_free_packages_glob(next_config.optimize_package_imports()) + .to_resolved() + .await?, + ), analyze_mode: if next_mode.is_development() { AnalyzeMode::CodeGeneration } else { diff --git a/crates/next-core/src/next_server_component/server_component_module.rs b/crates/next-core/src/next_server_component/server_component_module.rs index 130bb540ecb1e..e3f65fe7d18a3 100644 --- a/crates/next-core/src/next_server_component/server_component_module.rs +++ b/crates/next-core/src/next_server_component/server_component_module.rs @@ -4,7 +4,7 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath, glob::Glob}; +use turbo_tasks_fs::{FileContent, FileSystemPath}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, @@ -68,7 +68,7 @@ impl Module for NextServerComponentModule { )])) } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // This just exports another import ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell() } diff --git a/crates/next-core/src/next_server_utility/server_utility_module.rs b/crates/next-core/src/next_server_utility/server_utility_module.rs index c5712f8771ffa..dd2b7c41f9592 100644 --- a/crates/next-core/src/next_server_utility/server_utility_module.rs +++ b/crates/next-core/src/next_server_utility/server_utility_module.rs @@ -4,7 +4,7 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath, glob::Glob}; +use turbo_tasks_fs::{FileContent, FileSystemPath}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, @@ -69,7 +69,7 @@ impl Module for NextServerUtilityModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // This just exports another import ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell() } diff --git a/crates/next-core/src/raw_ecmascript_module.rs b/crates/next-core/src/raw_ecmascript_module.rs index 4f589f504bb77..eba5b5798d352 100644 --- a/crates/next-core/src/raw_ecmascript_module.rs +++ b/crates/next-core/src/raw_ecmascript_module.rs @@ -7,7 +7,7 @@ use regex::Regex; use tracing::Instrument; use turbo_rcstr::rcstr; use turbo_tasks::{FxIndexMap, FxIndexSet, ResolvedVc, TryJoinIterExt, ValueToString, Vc}; -use turbo_tasks_fs::{FileContent, glob::Glob, rope::Rope}; +use turbo_tasks_fs::{FileContent, rope::Rope}; use turbopack::{ModuleAssetContext, module_options::CustomModuleType}; use turbopack_core::{ asset::{Asset, AssetContent}, @@ -99,7 +99,7 @@ impl Module for RawEcmascriptModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // Is this correct? ModuleSideEffects::DeclaredSideEffectFree.cell() } diff --git a/turbopack/crates/turbopack-core/src/context.rs b/turbopack/crates/turbopack-core/src/context.rs index 3c135b8fd3ff1..8f9177907a26d 100644 --- a/turbopack/crates/turbopack-core/src/context.rs +++ b/turbopack/crates/turbopack-core/src/context.rs @@ -1,7 +1,7 @@ use anyhow::{Result, bail}; use turbo_rcstr::RcStr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileSystemPath, glob::Glob}; +use turbo_tasks_fs::FileSystemPath; use crate::{ compile_time_info::CompileTimeInfo, @@ -104,7 +104,4 @@ pub trait AssetContext { /// Gets a new AssetContext with the transition applied. #[turbo_tasks::function] fn with_transition(self: Vc, transition: RcStr) -> Vc>; - - #[turbo_tasks::function] - fn side_effect_free_packages(self: Vc) -> Vc; } diff --git a/turbopack/crates/turbopack-core/src/module.rs b/turbopack/crates/turbopack-core/src/module.rs index b73f9af667d01..2a4e5df905b95 100644 --- a/turbopack/crates/turbopack-core/src/module.rs +++ b/turbopack/crates/turbopack-core/src/module.rs @@ -1,6 +1,5 @@ use turbo_rcstr::RcStr; use turbo_tasks::{ResolvedVc, TaskInput, ValueToString, Vc}; -use turbo_tasks_fs::glob::Glob; use crate::{asset::Asset, ident::AssetIdent, reference::ModuleReferences, source::OptionSource}; @@ -61,7 +60,7 @@ pub trait Module: Asset { /// Returns true if the module is marked as side effect free in package.json or by other means. #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc; + fn side_effects(self: Vc) -> Vc; } #[turbo_tasks::value_trait] diff --git a/turbopack/crates/turbopack-core/src/module_graph/mod.rs b/turbopack/crates/turbopack-core/src/module_graph/mod.rs index d74055f3e64a1..d4c399e7bd1d3 100644 --- a/turbopack/crates/turbopack-core/src/module_graph/mod.rs +++ b/turbopack/crates/turbopack-core/src/module_graph/mod.rs @@ -47,6 +47,7 @@ pub mod chunk_group_info; pub mod merged_modules; pub mod module_batch; pub(crate) mod module_batches; +mod side_effect_module_info; pub(crate) mod style_groups; mod traced_di_graph; @@ -1880,7 +1881,7 @@ pub mod tests { use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; use turbo_tasks_backend::{BackendOptions, TurboTasksBackend, noop_backing_storage}; - use turbo_tasks_fs::{FileSystem, FileSystemPath, VirtualFileSystem, glob::Glob}; + use turbo_tasks_fs::{FileSystem, FileSystemPath, VirtualFileSystem}; use crate::{ asset::{Asset, AssetContent}, @@ -2282,10 +2283,7 @@ pub mod tests { Ok(Vc::cell(references)) } #[turbo_tasks::function] - fn side_effects( - self: Vc, - _side_effect_free_packages: Vc, - ) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } diff --git a/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs b/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs new file mode 100644 index 0000000000000..f396e1dfa659b --- /dev/null +++ b/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs @@ -0,0 +1,87 @@ +use anyhow::Result; +use rustc_hash::FxHashSet; +use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; + +use crate::{ + module::Module, + module_graph::{GraphTraversalAction, ModuleGraph, SingleModuleGraphWithBindingUsage}, +}; + +/// This lists all the modules that are side effect free +/// This means they are either declared side effect free by some configuration or they have been +/// determined to be side effect free via static analysis of the module evaluation and dependencies. +#[turbo_tasks::value(transparent)] +pub struct SideEffectFreeModules(FxHashSet>>); + +#[turbo_tasks::function(operation)] +pub async fn compute_side_effect_free_module_info( + graphs: ResolvedVc, +) -> Result> { + // Layout segment optimization, we can individually compute the side effect free modules for + // each graph. + let mut result: Vc = Vc::cell(Default::default()); + let graphs = graphs.await?; + for graph in graphs.iter_graphs() { + result = compute_side_effect_free_module_info_single(graph, result); + } + Ok(result) +} + +#[turbo_tasks::function] +async fn compute_side_effect_free_module_info_single( + graph: SingleModuleGraphWithBindingUsage, + parent_side_effect_free_modules: Vc, +) -> Result> { + let parent_async_modules = parent_side_effect_free_modules.await?; + let graph = graph.read().await?; + + let self_async_modules = graph + .graphs + .first() + .unwrap() + .iter_nodes() + .map(async |node| Ok((node, *node.is_self_async().await?))) + .try_join() + .await? + .into_iter() + .flat_map(|(k, v)| v.then_some(k)) + .chain(parent_async_modules.iter().copied()) + .collect::>(); + + // To determine which modules are async, we need to propagate the self-async flag to all + // importers, which is done using a postorder traversal of the graph. + // + // This however doesn't cover cycles of async modules, which are handled by determining all + // strongly-connected components, and then marking all the whole SCC as async if one of the + // modules in the SCC is async. + + let mut async_modules = self_async_modules; + graph.traverse_edges_from_entries_dfs( + graph.graphs.first().unwrap().entry_modules(), + &mut (), + |_, _, _| Ok(GraphTraversalAction::Continue), + |parent_info, module, _| { + let Some((parent_module, ref_data)) = parent_info else { + // An entry module + return Ok(()); + }; + + if ref_data.chunking_type.is_inherit_async() && async_modules.contains(&module) { + async_modules.insert(parent_module); + } + Ok(()) + }, + )?; + + graph.traverse_cycles( + |ref_data| ref_data.chunking_type.is_inherit_async(), + |cycle| { + if cycle.iter().any(|node| async_modules.contains(node)) { + async_modules.extend(cycle.iter().map(|n| **n)); + } + Ok(()) + }, + )?; + + Ok(Vc::cell(async_modules)) +} diff --git a/turbopack/crates/turbopack-core/src/node_addon_module.rs b/turbopack/crates/turbopack-core/src/node_addon_module.rs index 7800a068fad98..61051634455e5 100644 --- a/turbopack/crates/turbopack-core/src/node_addon_module.rs +++ b/turbopack/crates/turbopack-core/src/node_addon_module.rs @@ -4,7 +4,7 @@ use anyhow::{Result, bail}; use regex::Regex; use turbo_rcstr::rcstr; use turbo_tasks::{FxIndexSet, ResolvedVc, TryJoinIterExt, Vc}; -use turbo_tasks_fs::{FileSystemEntryType, FileSystemPath, glob::Glob}; +use turbo_tasks_fs::{FileSystemEntryType, FileSystemPath}; use crate::{ asset::{Asset, AssetContent}, @@ -102,7 +102,7 @@ impl Module for NodeAddonModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } diff --git a/turbopack/crates/turbopack-core/src/raw_module.rs b/turbopack/crates/turbopack-core/src/raw_module.rs index 6f61c64c25734..cc0b430eeed33 100644 --- a/turbopack/crates/turbopack-core/src/raw_module.rs +++ b/turbopack/crates/turbopack-core/src/raw_module.rs @@ -1,5 +1,4 @@ use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use crate::{ asset::{Asset, AssetContent}, @@ -27,7 +26,7 @@ impl Module for RawModule { Vc::cell(Some(self.source)) } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } diff --git a/turbopack/crates/turbopack-css/src/asset.rs b/turbopack/crates/turbopack-css/src/asset.rs index b097d57c077d2..9cd9b5e4b38f7 100644 --- a/turbopack/crates/turbopack-css/src/asset.rs +++ b/turbopack/crates/turbopack-css/src/asset.rs @@ -1,7 +1,7 @@ use anyhow::Result; use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, TryJoinIterExt, ValueToString, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath, glob::Glob}; +use turbo_tasks_fs::{FileContent, FileSystemPath}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, MinifyType}, @@ -154,7 +154,7 @@ impl Module for CssModuleAsset { } } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // global css is always a side effect ModuleSideEffects::SideEffectful.cell() } diff --git a/turbopack/crates/turbopack-css/src/module_asset.rs b/turbopack/crates/turbopack-css/src/module_asset.rs index 185797007cd1a..bfa59b89958ea 100644 --- a/turbopack/crates/turbopack-css/src/module_asset.rs +++ b/turbopack/crates/turbopack-css/src/module_asset.rs @@ -6,7 +6,7 @@ use lightningcss::css_modules::CssModuleReference; use swc_core::common::{BytePos, FileName, LineCol, SourceMap}; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{FxIndexMap, IntoTraitRef, ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{FileSystemPath, glob::Glob, rope::Rope}; +use turbo_tasks_fs::{FileSystemPath, rope::Rope}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, @@ -113,7 +113,7 @@ impl Module for ModuleCssAsset { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // modules can still effect global styles using `:root` selectors and other similar features // We could do better with some static analysis if we want ModuleSideEffects::SideEffectful.cell() diff --git a/turbopack/crates/turbopack-ecmascript/benches/references.rs b/turbopack/crates/turbopack-ecmascript/benches/references.rs index 60160f950d5ac..2201cbf1a57b3 100644 --- a/turbopack/crates/turbopack-ecmascript/benches/references.rs +++ b/turbopack/crates/turbopack-ecmascript/benches/references.rs @@ -5,7 +5,10 @@ use criterion::{BatchSize, Bencher, BenchmarkId, Criterion, criterion_group, cri use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, TurboTasks}; use turbo_tasks_backend::{BackendOptions, TurboTasksBackend, noop_backing_storage}; -use turbo_tasks_fs::{DiskFileSystem, FileSystem}; +use turbo_tasks_fs::{ + DiskFileSystem, FileSystem, + glob::{Glob, GlobOptions}, +}; use turbopack_core::{ compile_time_info::CompileTimeInfo, environment::{Environment, ExecutionEnvironment, NodeJsEnvironment}, @@ -77,6 +80,9 @@ async fn setup( layer, } .resolved_cell(); + let side_effect_free_packages = Glob::new("".into(), GlobOptions::default()) + .to_resolved() + .await?; let module = EcmascriptModuleAsset::builder( ResolvedVc::upcast( FileSource::new(fs.root().await?.join(file).unwrap()) @@ -96,6 +102,7 @@ async fn setup( } .resolved_cell(), compile_time_info, + side_effect_free_packages, ) .build() .to_resolved() diff --git a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs index 0b3a0e3a7372e..c82997fec5862 100644 --- a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs @@ -1,7 +1,6 @@ use anyhow::Result; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkableModule, ChunkingContext, availability_info::AvailabilityInfo}, @@ -68,7 +67,7 @@ impl Module for AsyncLoaderModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs index 4b04393400fed..9c2fd1194153f 100644 --- a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs @@ -3,7 +3,7 @@ use std::io::{Read, Write}; use anyhow::{Result, bail}; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{FileContent, glob::Glob, rope::RopeBuilder}; +use turbo_tasks_fs::{FileContent, rope::RopeBuilder}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, @@ -51,7 +51,7 @@ impl Module for InlinedBytesJsModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/lib.rs b/turbopack/crates/turbopack-ecmascript/src/lib.rs index bdddf03150da9..202409d715cf1 100644 --- a/turbopack/crates/turbopack-ecmascript/src/lib.rs +++ b/turbopack/crates/turbopack-ecmascript/src/lib.rs @@ -329,6 +329,7 @@ pub struct EcmascriptModuleAssetBuilder { transforms: ResolvedVc, options: ResolvedVc, compile_time_info: ResolvedVc, + side_effect_free_packages: Option>, inner_assets: Option>, } @@ -352,6 +353,7 @@ impl EcmascriptModuleAssetBuilder { *self.transforms, *self.options, *self.compile_time_info, + self.side_effect_free_packages.map(|g| *g), *inner_assets, ) } else { @@ -362,6 +364,7 @@ impl EcmascriptModuleAssetBuilder { *self.transforms, *self.options, *self.compile_time_info, + self.side_effect_free_packages.map(|g| *g), ) } } @@ -375,6 +378,7 @@ pub struct EcmascriptModuleAsset { pub transforms: ResolvedVc, pub options: ResolvedVc, pub compile_time_info: ResolvedVc, + pub side_effect_free_packages: Option>, pub inner_assets: Option>, #[turbo_tasks(debug_ignore)] last_successful_parse: turbo_tasks::TransientState>, @@ -388,6 +392,7 @@ impl core::fmt::Debug for EcmascriptModuleAsset { .field("transforms", &self.transforms) .field("options", &self.options) .field("compile_time_info", &self.compile_time_info) + .field("side_effect_free_packages", &self.side_effect_free_packages) .field("inner_assets", &self.inner_assets) .finish() } @@ -456,6 +461,7 @@ impl EcmascriptModuleAsset { transforms: ResolvedVc, options: ResolvedVc, compile_time_info: ResolvedVc, + side_effect_free_packages: Option>, ) -> EcmascriptModuleAssetBuilder { EcmascriptModuleAssetBuilder { source, @@ -464,6 +470,7 @@ impl EcmascriptModuleAsset { transforms, options, compile_time_info, + side_effect_free_packages, inner_assets: None, } } @@ -625,13 +632,14 @@ async fn determine_module_type_for_directory( #[turbo_tasks::value_impl] impl EcmascriptModuleAsset { #[turbo_tasks::function] - pub fn new( + fn new( source: ResolvedVc>, asset_context: ResolvedVc>, ty: EcmascriptModuleAssetType, transforms: ResolvedVc, options: ResolvedVc, compile_time_info: ResolvedVc, + side_effect_free_packages: Option>, ) -> Vc { Self::cell(EcmascriptModuleAsset { source, @@ -639,21 +647,22 @@ impl EcmascriptModuleAsset { ty, transforms, options, - compile_time_info, + side_effect_free_packages, inner_assets: None, last_successful_parse: Default::default(), }) } #[turbo_tasks::function] - pub async fn new_with_inner_assets( + async fn new_with_inner_assets( source: ResolvedVc>, asset_context: ResolvedVc>, ty: EcmascriptModuleAssetType, transforms: ResolvedVc, options: ResolvedVc, compile_time_info: ResolvedVc, + side_effect_free_packages: Option>, inner_assets: ResolvedVc, ) -> Result> { if inner_assets.await?.is_empty() { @@ -664,6 +673,7 @@ impl EcmascriptModuleAsset { *transforms, *options, *compile_time_info, + side_effect_free_packages.map(|g| *g), )) } else { Ok(Self::cell(EcmascriptModuleAsset { @@ -673,6 +683,7 @@ impl EcmascriptModuleAsset { transforms, options, compile_time_info, + side_effect_free_packages, inner_assets: Some(inner_assets), last_successful_parse: Default::default(), })) @@ -760,18 +771,21 @@ impl Module for EcmascriptModuleAsset { } #[turbo_tasks::function] - async fn side_effects( - self: Vc, - side_effect_free_packages: Vc, - ) -> Result> { + async fn side_effects(self: Vc) -> Result> { + let this = self.await?; // Check package.json first, so that we can skip parsing the module if it's marked that way. // We need to respect package.json configuration over any static analysis we might do. - Ok((match *get_side_effect_free_declaration( - self.ident().path().owned().await?, - side_effect_free_packages, - ) - .await? - { + let side_effects_declaration = match &this.side_effect_free_packages { + Some(side_effect_free_packages) => { + *get_side_effect_free_declaration( + self.ident().path().owned().await?, + **side_effect_free_packages, + ) + .await? + } + None => SideEffectsDeclaration::None, + }; + Ok((match side_effects_declaration { SideEffectsDeclaration::SideEffectful => ModuleSideEffects::SideEffectful, SideEffectsDeclaration::SideEffectFree => ModuleSideEffects::SideEffectFree, SideEffectsDeclaration::None => self.analyze().await?.side_effects, diff --git a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs index 16c43f4ce4518..48e41794b3a85 100644 --- a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs @@ -1,7 +1,6 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -154,7 +153,7 @@ impl Module for ManifestAsyncModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/merged_module.rs b/turbopack/crates/turbopack-ecmascript/src/merged_module.rs index 632f650831594..eef2535a4dea2 100644 --- a/turbopack/crates/turbopack-ecmascript/src/merged_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/merged_module.rs @@ -1,6 +1,5 @@ use anyhow::{Context, Result}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -93,7 +92,7 @@ impl Module for MergedEcmascriptModule { panic!("is_self_async() should not be called"); } #[turbo_tasks::function] - fn side_effects(&self, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(&self) -> Vc { // If needed this could be computed by merging the effects from all the merged modules panic!("side_effects() should not be called"); } diff --git a/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs b/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs index ddbdff04b6317..271d0fb32d123 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs @@ -17,7 +17,6 @@ use turbopack_core::{ ChunkableModuleReference, ChunkingContext, ChunkingType, ChunkingTypeOption, ModuleChunkItemIdExt, }, - context::AssetContext, issue::{ Issue, IssueExt, IssueSeverity, IssueSource, IssueStage, OptionIssueSource, OptionStyledString, StyledString, @@ -420,12 +419,7 @@ impl ModuleReference for EsmAssetReference { if let Some(TreeShakingMode::ModuleFragments) = self.tree_shaking_mode { if let Some(ModulePart::Evaluation) = &self.export_name { - let side_effect_free_packages = - self.module.asset_context().side_effect_free_packages(); - - if *self.module.side_effects(side_effect_free_packages).await? - == ModuleSideEffects::DeclaredSideEffectFree - { + if *self.module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree { return Ok(ModuleResolveResult { primary: Box::new([( RequestKey::default(), diff --git a/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs b/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs index 64817558e0e75..7d4fb16ff3e6d 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs @@ -15,7 +15,6 @@ use turbo_tasks::{ FxIndexMap, NonLocalValue, ResolvedVc, TryFlatJoinIterExt, ValueToString, Vc, trace::TraceRawVcs, }; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ chunk::{ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, @@ -154,7 +153,6 @@ pub struct FollowExportsResult { pub async fn follow_reexports( module: ResolvedVc>, export_name: RcStr, - side_effect_free_packages: Vc, ignore_side_effect_of_entry: bool, ) -> Result> { let mut ignore_side_effects = ignore_side_effect_of_entry; @@ -172,8 +170,7 @@ pub async fn follow_reexports( }; if !ignore_side_effects - && *module.side_effects(side_effect_free_packages).await? - != ModuleSideEffects::DeclaredSideEffectFree + && *module.side_effects().await? != ModuleSideEffects::DeclaredSideEffectFree { // TODO It's unfortunate that we have to use the whole module here. // This is often the Facade module, which includes all reexports. diff --git a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs index 1598eb7e23b69..ae9ec9eab96f4 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs @@ -5,8 +5,7 @@ use serde::{Deserialize, Serialize}; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{NonLocalValue, ResolvedVc, TaskInput, TryJoinIterExt, Vc, trace::TraceRawVcs}; use turbo_tasks_fs::{ - FileContent, FileSystem, FileSystemPath, LinkType, VirtualFileSystem, glob::Glob, - rope::RopeBuilder, + FileContent, FileSystem, FileSystemPath, LinkType, VirtualFileSystem, rope::RopeBuilder, }; use turbo_tasks_hash::{encode_hex, hash_xxh3_hash64}; use turbopack_core::{ @@ -368,7 +367,7 @@ impl Module for CachedExternalModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } @@ -555,8 +554,8 @@ impl Module for ModuleWithoutSelfAsync { } #[turbo_tasks::function] - fn side_effects(&self, side_effect_free_packages: Vc) -> Vc { - self.module.side_effects(side_effect_free_packages) + fn side_effects(&self) -> Vc { + self.module.side_effects() } // Don't override and use default is_self_async that always returns false } diff --git a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs index 85b764da1a24b..f2df44e1e5000 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs @@ -19,7 +19,7 @@ use turbo_tasks::{ FxIndexMap, NonLocalValue, ResolvedVc, ValueToString, Vc, debug::ValueDebugFormat, trace::TraceRawVcs, }; -use turbo_tasks_fs::{DirectoryContent, DirectoryEntry, FileSystemPath, glob::Glob}; +use turbo_tasks_fs::{DirectoryContent, DirectoryEntry, FileSystemPath}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -428,7 +428,7 @@ impl Module for RequireContextAsset { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs index b53f1954448ba..59b9c68ee5e0a 100644 --- a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs @@ -2,7 +2,7 @@ use std::collections::BTreeMap; use anyhow::{Result, bail}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{File, FileContent, glob::Glob}; +use turbo_tasks_fs::{File, FileContent}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -182,9 +182,9 @@ impl Module for EcmascriptModuleFacadeModule { } #[turbo_tasks::function] - fn side_effects(&self, side_effect_free_packages: Vc) -> Result> { + fn side_effects(&self) -> Result> { Ok(match self.part { - ModulePart::Facade => self.module.side_effects(side_effect_free_packages), + ModulePart::Facade => self.module.side_effects(), ModulePart::RenamedExport { .. } | ModulePart::RenamedNamespace { .. } => { ModuleSideEffects::DeclaredSideEffectFree.cell() } diff --git a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs index 1b7a43fa273eb..d9c0f005429c0 100644 --- a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs @@ -2,7 +2,6 @@ use std::collections::BTreeMap; use anyhow::{Result, bail}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -73,8 +72,8 @@ impl Module for EcmascriptModuleLocalsModule { } #[turbo_tasks::function] - fn side_effects(&self, side_effect_free_packages: Vc) -> Vc { - self.module.side_effects(side_effect_free_packages) + fn side_effects(&self) -> Vc { + self.module.side_effects() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs index 69e819b483734..3ea454905a11c 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs @@ -1,16 +1,14 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{AsyncModuleInfo, ChunkableModule, ChunkingContext, EvaluatableAsset}, - context::AssetContext, ident::AssetIdent, module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::{ModuleReference, ModuleReferences, SingleChunkableModuleReference}, - resolve::{ExportUsage, ModulePart, origin::ResolveOrigin}, + resolve::{ExportUsage, ModulePart}, }; use super::{ @@ -175,17 +173,11 @@ impl EcmascriptModulePartAsset { ), )); } - let side_effect_free_packages = module.asset_context().side_effect_free_packages(); let source_module = Vc::upcast(module); let FollowExportsWithSideEffectsResult { side_effects, result, - } = &*follow_reexports_with_side_effects( - source_module, - export.clone(), - side_effect_free_packages, - ) - .await?; + } = &*follow_reexports_with_side_effects(source_module, export.clone()).await?; let FollowExportsResult { module: final_module, export_name: new_export, @@ -256,31 +248,23 @@ struct FollowExportsWithSideEffectsResult { async fn follow_reexports_with_side_effects( module: ResolvedVc>, export_name: RcStr, - side_effect_free_packages: Vc, ) -> Result> { let mut side_effects = vec![]; let mut current_module = module; let mut current_export_name = export_name; let result = loop { - let is_side_effect_free = *current_module - .side_effects(side_effect_free_packages) - .await? - == ModuleSideEffects::DeclaredSideEffectFree; + let is_side_effect_free = + *current_module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree; if !is_side_effect_free { side_effects.push(only_effects(*current_module).to_resolved().await?); } // We ignore the side effect of the entry module here, because we need to proceed. - let result = follow_reexports( - *current_module, - current_export_name.clone(), - side_effect_free_packages, - true, - ) - .to_resolved() - .await?; + let result = follow_reexports(*current_module, current_export_name.clone(), true) + .to_resolved() + .await?; let FollowExportsResult { module, @@ -354,12 +338,12 @@ impl Module for EcmascriptModulePartAsset { } #[turbo_tasks::function] - async fn side_effects(&self, side_effect_free_packages: Vc) -> Vc { + async fn side_effects(&self) -> Vc { match self.part { ModulePart::Exports | ModulePart::Export(..) => { ModuleSideEffects::DeclaredSideEffectFree.cell() } - _ => self.full_module.side_effects(side_effect_free_packages), + _ => self.full_module.side_effects(), } } } diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs index d5c804f93b5e0..30032a13edb0e 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs @@ -1,7 +1,7 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; -use turbo_tasks_fs::{FileContent, glob::Glob}; +use turbo_tasks_fs::FileContent; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkableModule, ChunkingContext, EvaluatableAsset}, @@ -114,7 +114,7 @@ impl Module for SideEffectsModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs index c41260cf35994..392b63ef44778 100644 --- a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs @@ -2,7 +2,7 @@ use anyhow::Result; use serde_json::Value as JsonValue; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; -use turbo_tasks_fs::{DirectoryContent, glob::Glob}; +use turbo_tasks_fs::DirectoryContent; use turbopack_core::{ asset::{Asset, AssetContent}, ident::AssetIdent, @@ -175,7 +175,7 @@ impl Module for TsConfigModuleAsset { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs index f27dcb98cbc01..f12d829a5da5b 100644 --- a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs @@ -2,7 +2,6 @@ use anyhow::Result; use swc_core::ecma::ast::Lit; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, file_source::FileSource, @@ -65,7 +64,7 @@ impl Module for WebpackModuleAsset { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::SideEffectful.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs index 4db428f5edced..394ba61c93bab 100644 --- a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs @@ -1,7 +1,6 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -59,7 +58,7 @@ impl Module for WorkerLoaderModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-json/src/lib.rs b/turbopack/crates/turbopack-json/src/lib.rs index 8b4156e3eb207..c164033d84234 100644 --- a/turbopack/crates/turbopack-json/src/lib.rs +++ b/turbopack/crates/turbopack-json/src/lib.rs @@ -14,7 +14,7 @@ use std::fmt::Write; use anyhow::{Error, Result, bail}; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{FileContent, FileJsonContent, glob::Glob}; +use turbo_tasks_fs::{FileContent, FileJsonContent}; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, @@ -59,7 +59,7 @@ impl Module for JsonModuleAsset { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-static/src/css.rs b/turbopack/crates/turbopack-static/src/css.rs index 4157e9ac5a537..02da2daa9d3d5 100644 --- a/turbopack/crates/turbopack-static/src/css.rs +++ b/turbopack/crates/turbopack-static/src/css.rs @@ -1,6 +1,5 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::ChunkingContext, @@ -53,7 +52,7 @@ impl Module for StaticUrlCssModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-static/src/ecma.rs b/turbopack/crates/turbopack-static/src/ecma.rs index dc9adcee3d863..a27294b61fc91 100644 --- a/turbopack/crates/turbopack-static/src/ecma.rs +++ b/turbopack/crates/turbopack-static/src/ecma.rs @@ -1,7 +1,6 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, @@ -65,7 +64,7 @@ impl Module for StaticUrlJsModule { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { ModuleSideEffects::DeclaredSideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs b/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs index 1602c0df8c213..89bc7a43901e2 100644 --- a/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs +++ b/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs @@ -1,7 +1,7 @@ use anyhow::Result; -use turbo_rcstr::{RcStr, rcstr}; +use turbo_rcstr::RcStr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileSystemPath, glob::Glob}; +use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ compile_time_info::CompileTimeInfo, context::{AssetContext, ProcessResult}, @@ -73,9 +73,4 @@ impl AssetContext for NoopAssetContext { ) -> Result>> { Ok(Vc::upcast(self)) } - - #[turbo_tasks::function] - async fn side_effect_free_packages(&self) -> Result> { - Ok(Glob::new(rcstr!(""), Default::default())) - } } diff --git a/turbopack/crates/turbopack-wasm/src/module_asset.rs b/turbopack/crates/turbopack-wasm/src/module_asset.rs index 5f8ba8407b701..0affe4b5f55ec 100644 --- a/turbopack/crates/turbopack-wasm/src/module_asset.rs +++ b/turbopack/crates/turbopack-wasm/src/module_asset.rs @@ -1,7 +1,7 @@ use anyhow::{Context, Result, bail}; use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, Vc, fxindexmap}; -use turbo_tasks_fs::{FileSystemPath, glob::Glob}; +use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ @@ -146,7 +146,7 @@ impl Module for WebAssemblyModuleAsset { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // Both versions of this module have a top level await that instantiates a wasm module // wasm module instantiation can trigger arbitrary side effects from the native start // function diff --git a/turbopack/crates/turbopack-wasm/src/raw.rs b/turbopack/crates/turbopack-wasm/src/raw.rs index 6b1506fcab128..6d7cbbfb159ec 100644 --- a/turbopack/crates/turbopack-wasm/src/raw.rs +++ b/turbopack/crates/turbopack-wasm/src/raw.rs @@ -1,7 +1,6 @@ use anyhow::{Result, bail}; use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, Vc}; -use turbo_tasks_fs::glob::Glob; use turbopack_core::{ asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, @@ -67,7 +66,7 @@ impl Module for RawWebAssemblyModuleAsset { } #[turbo_tasks::function] - fn side_effects(self: Vc, _side_effect_free_packages: Vc) -> Vc { + fn side_effects(self: Vc) -> Vc { // this just exports a path ModuleSideEffects::DeclaredSideEffectFree.cell() } diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index c595a56b9b6e7..1b4f4f00276a9 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -24,10 +24,7 @@ use module_options::{ModuleOptions, ModuleOptionsContext, ModuleRuleEffect, Modu use tracing::{Instrument, field::Empty}; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; -use turbo_tasks_fs::{ - FileSystemPath, - glob::{Glob, GlobOptions}, -}; +use turbo_tasks_fs::FileSystemPath; pub use turbopack_core::condition; use turbopack_core::{ asset::Asset, @@ -127,6 +124,10 @@ async fn apply_module_type( } .to_resolved() .await?; + let side_effect_free_packages = module_asset_context + .module_options_context() + .await? + .side_effect_free_packages; let mut builder = EcmascriptModuleAsset::builder( source, ResolvedVc::upcast(context_for_module), @@ -140,6 +141,7 @@ async fn apply_module_type( .compile_time_info() .to_resolved() .await?, + side_effect_free_packages, ); match module_type { ModuleType::Ecmascript { .. } => { @@ -177,14 +179,7 @@ async fn apply_module_type( if tree_shaking_mode.is_some() && is_evaluation { // If we are tree shaking, skip the evaluation part if the module is marked as // side effect free. - let side_effect_free_packages = module_asset_context - .side_effect_free_packages() - .resolve() - .await?; - - if *module.side_effects(side_effect_free_packages).await? - == ModuleSideEffects::DeclaredSideEffectFree - { + if *module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree { return Ok(ProcessResult::Ignore.cell()); } } @@ -207,11 +202,6 @@ async fn apply_module_type( } } ModulePart::Export(_) => { - let side_effect_free_packages = module_asset_context - .side_effect_free_packages() - .resolve() - .await?; - if *module.get_exports().split_locals_and_reexports().await? { apply_reexport_tree_shaking( Vc::upcast( @@ -223,16 +213,11 @@ async fn apply_module_type( .await?, ), part, - side_effect_free_packages, ) .await? } else { - apply_reexport_tree_shaking( - Vc::upcast(*module), - part, - side_effect_free_packages, - ) - .await? + apply_reexport_tree_shaking(Vc::upcast(*module), part) + .await? } } _ => bail!( @@ -310,14 +295,7 @@ async fn apply_module_type( if tree_shaking_mode.is_some() && is_evaluation { // If we are tree shaking, skip the evaluation part if the module is marked as // side effect free. - let side_effect_free_packages = module_asset_context - .side_effect_free_packages() - .resolve() - .await?; - - if *module.side_effects(side_effect_free_packages).await? - == ModuleSideEffects::DeclaredSideEffectFree - { + if *module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree { return Ok(ProcessResult::Ignore.cell()); } } @@ -328,14 +306,13 @@ async fn apply_module_type( async fn apply_reexport_tree_shaking( module: Vc>, part: ModulePart, - side_effect_free_packages: Vc, ) -> Result>> { if let ModulePart::Export(export) = &part { let FollowExportsResult { module: final_module, export_name: new_export, .. - } = &*follow_reexports(module, export.clone(), side_effect_free_packages, true).await?; + } = &*follow_reexports(module, export.clone(), true).await?; let module = if let Some(new_export) = new_export { if *new_export == *export { Vc::upcast(**final_module) @@ -1018,18 +995,6 @@ impl AssetContext for ModuleAssetContext { }, ) } - - #[turbo_tasks::function] - async fn side_effect_free_packages(&self) -> Result> { - let pkgs = &self.module_options_context.await?.side_effect_free_packages; - - let mut globs = String::new(); - globs.push_str("**/node_modules/{"); - globs.push_str(&pkgs.join(",")); - globs.push_str("}/**"); - - Ok(Glob::new(globs.into(), GlobOptions::default())) - } } #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack/src/module_options/module_options_context.rs b/turbopack/crates/turbopack/src/module_options/module_options_context.rs index 0f6789e3604e6..dfadb0fa8e353 100644 --- a/turbopack/crates/turbopack/src/module_options/module_options_context.rs +++ b/turbopack/crates/turbopack/src/module_options/module_options_context.rs @@ -1,10 +1,14 @@ use std::fmt::Debug; +use anyhow::Result; use serde::{Deserialize, Serialize}; use turbo_esregex::EsRegex; -use turbo_rcstr::RcStr; +use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{NonLocalValue, ResolvedVc, ValueDefault, Vc, trace::TraceRawVcs}; -use turbo_tasks_fs::FileSystemPath; +use turbo_tasks_fs::{ + FileSystemPath, + glob::{Glob, GlobOptions}, +}; use turbopack_core::{ chunk::SourceMapsType, compile_time_info::CompileTimeInfo, condition::ContextCondition, environment::Environment, resolve::options::ImportMapping, @@ -175,7 +179,6 @@ pub struct ExternalsTracingOptions { #[turbo_tasks::value(shared)] #[derive(Clone, Default)] -#[serde(default)] pub struct ModuleOptionsContext { pub ecmascript: EcmascriptOptionsContext, pub css: CssOptionsContext, @@ -189,7 +192,7 @@ pub struct ModuleOptionsContext { pub environment: Option>, pub execution_context: Option>, - pub side_effect_free_packages: Vec, + pub side_effect_free_packages: Option>, pub tree_shaking_mode: Option, /// Generate (non-emitted) output assets for static assets and externals, to facilitate @@ -277,3 +280,20 @@ impl ValueDefault for ModuleOptionsContext { Self::cell(Default::default()) } } + +#[turbo_tasks::function] +pub async fn side_effect_free_packages_glob( + side_effect_free_packages: ResolvedVc>, +) -> Result> { + let side_effect_free_packages = &*side_effect_free_packages.await?; + if side_effect_free_packages.is_empty() { + return Ok(Glob::new(rcstr!(""), GlobOptions::default())); + } + + let mut globs = String::new(); + globs.push_str("**/node_modules/{"); + globs.push_str(&side_effect_free_packages.join(",")); + globs.push_str("}/**"); + + Ok(Glob::new(globs.into(), GlobOptions::default())) +} From 0551789ed2d061707fd605bc2b7bb681acaf53a9 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Sun, 30 Nov 2025 14:23:42 -0800 Subject: [PATCH 3/6] fix a benchmark --- turbopack/crates/turbopack-ecmascript/benches/references.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/turbopack/crates/turbopack-ecmascript/benches/references.rs b/turbopack/crates/turbopack-ecmascript/benches/references.rs index 2201cbf1a57b3..bc34eb48f5708 100644 --- a/turbopack/crates/turbopack-ecmascript/benches/references.rs +++ b/turbopack/crates/turbopack-ecmascript/benches/references.rs @@ -80,9 +80,7 @@ async fn setup( layer, } .resolved_cell(); - let side_effect_free_packages = Glob::new("".into(), GlobOptions::default()) - .to_resolved() - .await?; + let module = EcmascriptModuleAsset::builder( ResolvedVc::upcast( FileSource::new(fs.root().await?.join(file).unwrap()) @@ -102,7 +100,7 @@ async fn setup( } .resolved_cell(), compile_time_info, - side_effect_free_packages, + None, ) .build() .to_resolved() From 8a9e7c7fca3ef493f3003ae32360ad5abd5cc7c7 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Sun, 30 Nov 2025 14:24:13 -0800 Subject: [PATCH 4/6] clippy --- turbopack/crates/turbopack-ecmascript/benches/references.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/turbopack/crates/turbopack-ecmascript/benches/references.rs b/turbopack/crates/turbopack-ecmascript/benches/references.rs index bc34eb48f5708..b65c7b5c8ca7c 100644 --- a/turbopack/crates/turbopack-ecmascript/benches/references.rs +++ b/turbopack/crates/turbopack-ecmascript/benches/references.rs @@ -5,10 +5,7 @@ use criterion::{BatchSize, Bencher, BenchmarkId, Criterion, criterion_group, cri use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, TurboTasks}; use turbo_tasks_backend::{BackendOptions, TurboTasksBackend, noop_backing_storage}; -use turbo_tasks_fs::{ - DiskFileSystem, FileSystem, - glob::{Glob, GlobOptions}, -}; +use turbo_tasks_fs::{DiskFileSystem, FileSystem}; use turbopack_core::{ compile_time_info::CompileTimeInfo, environment::{Environment, ExecutionEnvironment, NodeJsEnvironment}, From e9710917047b9c2f3b8eebce3cd3e25ce77e71f4 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Sun, 30 Nov 2025 19:10:17 -0800 Subject: [PATCH 5/6] integrate into binding_usage_info --- .../src/module_graph/binding_usage_info.rs | 38 ++++-- .../module_graph/side_effect_module_info.rs | 119 +++++++++++------- 2 files changed, 104 insertions(+), 53 deletions(-) diff --git a/turbopack/crates/turbopack-core/src/module_graph/binding_usage_info.rs b/turbopack/crates/turbopack-core/src/module_graph/binding_usage_info.rs index 4d745611e3db2..f2246787d7a56 100644 --- a/turbopack/crates/turbopack-core/src/module_graph/binding_usage_info.rs +++ b/turbopack/crates/turbopack-core/src/module_graph/binding_usage_info.rs @@ -9,7 +9,10 @@ use turbo_tasks::{ResolvedVc, Vc}; use crate::{ module::Module, - module_graph::{GraphEdgeIndex, GraphTraversalAction, ModuleGraph}, + module_graph::{ + GraphEdgeIndex, GraphTraversalAction, ModuleGraph, + side_effect_module_info::compute_side_effect_free_module_info, + }, reference::ModuleReference, resolve::{ExportUsage, ImportUsage}, }; @@ -121,6 +124,7 @@ pub async fn compute_binding_usage_info( without_unused_references" ); } + let side_effect_free_modules = compute_side_effect_free_module_info(*graph).await?; let graph = graph.read_graphs().await?; @@ -147,6 +151,7 @@ pub async fn compute_binding_usage_info( .iter() .all(|e| !source_used_exports.is_export_used(e)) { + // all exports are unused #[cfg(debug_assertions)] debug_unused_references_name.insert(( parent, @@ -170,15 +175,28 @@ pub async fn compute_binding_usage_info( } } ImportUsage::SideEffects => { - #[cfg(debug_assertions)] - debug_unused_references_name.remove(&( - parent, - ref_data.binding_usage.export.clone(), - target, - )); - unused_references_edges.remove(&edge); - unused_references.remove(&ref_data.reference); - // Continue, has to always be included + if side_effect_free_modules.contains(&target) { + #[cfg(debug_assertions)] + debug_unused_references_name.insert(( + parent, + ref_data.binding_usage.export.clone(), + target, + )); + unused_references_edges.insert(edge); + unused_references.insert(ref_data.reference); + + return Ok(GraphTraversalAction::Skip); + } else { + #[cfg(debug_assertions)] + debug_unused_references_name.remove(&( + parent, + ref_data.binding_usage.export.clone(), + target, + )); + unused_references_edges.remove(&edge); + unused_references.remove(&ref_data.reference); + // Continue, has to always be included + } } } } diff --git a/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs b/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs index f396e1dfa659b..d23a7c255eeae 100644 --- a/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs +++ b/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs @@ -1,9 +1,9 @@ use anyhow::Result; -use rustc_hash::FxHashSet; +use rustc_hash::{FxHashMap, FxHashSet}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; use crate::{ - module::Module, + module::{Module, ModuleSideEffects}, module_graph::{GraphTraversalAction, ModuleGraph, SingleModuleGraphWithBindingUsage}, }; @@ -13,7 +13,7 @@ use crate::{ #[turbo_tasks::value(transparent)] pub struct SideEffectFreeModules(FxHashSet>>); -#[turbo_tasks::function(operation)] +#[turbo_tasks::function] pub async fn compute_side_effect_free_module_info( graphs: ResolvedVc, ) -> Result> { @@ -32,56 +32,89 @@ async fn compute_side_effect_free_module_info_single( graph: SingleModuleGraphWithBindingUsage, parent_side_effect_free_modules: Vc, ) -> Result> { - let parent_async_modules = parent_side_effect_free_modules.await?; + let parent_side_effect_free_modules = parent_side_effect_free_modules.await?; let graph = graph.read().await?; - let self_async_modules = graph - .graphs - .first() - .unwrap() - .iter_nodes() - .map(async |node| Ok((node, *node.is_self_async().await?))) + let module_side_effects = graph + .enumerate_nodes() + .map(async |(_, node)| { + Ok(match node { + super::SingleModuleGraphNode::Module(module) => { + // This turbo task always has a cache hit since it is called when building the + // module graph. we could consider moving this information + // into to the module graph, but then changes would invalidate the whole graph. + (*module, *module.side_effects().await?) + } + super::SingleModuleGraphNode::VisitedModule { idx: _, module } => ( + *module, + if parent_side_effect_free_modules.contains(module) { + ModuleSideEffects::DeclaredSideEffectFree + } else { + ModuleSideEffects::SideEffectful + }, + ), + }) + }) .try_join() .await? .into_iter() - .flat_map(|(k, v)| v.then_some(k)) - .chain(parent_async_modules.iter().copied()) - .collect::>(); + .collect::>(); - // To determine which modules are async, we need to propagate the self-async flag to all - // importers, which is done using a postorder traversal of the graph. - // - // This however doesn't cover cycles of async modules, which are handled by determining all - // strongly-connected components, and then marking all the whole SCC as async if one of the - // modules in the SCC is async. + // Modules are categorized as side-effectful, locally side effect free and side effect free. + // So we are really just interested in determining what modules that are locally side effect + // free. logically we want to start at all such modules are determine if their transitive + // dependencies are side effect free. - let mut async_modules = self_async_modules; - graph.traverse_edges_from_entries_dfs( - graph.graphs.first().unwrap().entry_modules(), - &mut (), - |_, _, _| Ok(GraphTraversalAction::Continue), - |parent_info, module, _| { - let Some((parent_module, ref_data)) = parent_info else { - // An entry module - return Ok(()); - }; - - if ref_data.chunking_type.is_inherit_async() && async_modules.contains(&module) { - async_modules.insert(parent_module); + let mut locally_side_effect_free_modules_that_have_side_effects = FxHashSet::default(); + graph.traverse_edges_from_entries_dfs_reversed( + // Start from all the side effectful nodes + module_side_effects.iter().filter_map(|(m, e)| { + if *e == ModuleSideEffects::SideEffectful { + Some(*m) + } else { + None } - Ok(()) + }), + &mut (), + // child is a previously visited module that we know is side effectful + |child, _parent, _s| { + Ok(if let Some((child_module, _edge)) = child { + match module_side_effects.get(&child_module).unwrap() { + ModuleSideEffects::SideEffectful + | ModuleSideEffects::DeclaredSideEffectFree => { + // We have either already seen this or don't want to follow it + GraphTraversalAction::Exclude + } + ModuleSideEffects::ModuleEvaluationIsSideEffectFree => { + // this module is side effect free locally but must depend on something + // effectful so it to is effectful + locally_side_effect_free_modules_that_have_side_effects + .insert(child_module); + GraphTraversalAction::Continue + } + } + } else { + // entry point, keep going + GraphTraversalAction::Continue + }) }, + |_, _, _| Ok(()), )?; - - graph.traverse_cycles( - |ref_data| ref_data.chunking_type.is_inherit_async(), - |cycle| { - if cycle.iter().any(|node| async_modules.contains(node)) { - async_modules.extend(cycle.iter().map(|n| **n)); + let side_effect_free_modules = module_side_effects + .into_iter() + .filter_map(|(m, e)| match e { + ModuleSideEffects::SideEffectful => None, + ModuleSideEffects::DeclaredSideEffectFree => Some(m), + ModuleSideEffects::ModuleEvaluationIsSideEffectFree => { + if locally_side_effect_free_modules_that_have_side_effects.contains(&m) { + None + } else { + Some(m) + } } - Ok(()) - }, - )?; + }) + .chain(parent_side_effect_free_modules.iter().copied()) + .collect::>(); - Ok(Vc::cell(async_modules)) + Ok(Vc::cell(side_effect_free_modules)) } From 739fa8bd33e3694041b6f66f052f2e40960e31d8 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Mon, 1 Dec 2025 13:36:15 -0800 Subject: [PATCH 6/6] fix a name --- .../ecmascript_client_reference_module.rs | 2 +- crates/next-core/src/raw_ecmascript_module.rs | 2 +- turbopack/crates/turbopack-core/src/module.rs | 2 +- .../src/module_graph/side_effect_module_info.rs | 7 +++---- .../crates/turbopack-ecmascript/src/async_chunk/module.rs | 2 +- .../turbopack-ecmascript/src/inlined_bytes_module.rs | 2 +- .../turbopack-ecmascript/src/manifest/chunk_asset.rs | 2 +- .../crates/turbopack-ecmascript/src/references/esm/base.rs | 2 +- .../turbopack-ecmascript/src/references/esm/export.rs | 2 +- .../turbopack-ecmascript/src/references/require_context.rs | 2 +- .../src/side_effect_optimization/facade/module.rs | 2 +- .../crates/turbopack-ecmascript/src/tree_shake/asset.rs | 4 ++-- .../src/tree_shake/side_effect_module.rs | 2 +- .../crates/turbopack-ecmascript/src/worker_chunk/module.rs | 2 +- turbopack/crates/turbopack-json/src/lib.rs | 2 +- turbopack/crates/turbopack-static/src/css.rs | 2 +- turbopack/crates/turbopack-static/src/ecma.rs | 2 +- turbopack/crates/turbopack-wasm/src/raw.rs | 2 +- turbopack/crates/turbopack/src/lib.rs | 4 ++-- 19 files changed, 23 insertions(+), 24 deletions(-) diff --git a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs index efed783b8a4b0..e63def3fd0e9a 100644 --- a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs +++ b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs @@ -244,7 +244,7 @@ impl Module for EcmascriptClientReferenceModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { // These just export some specially tagged functions - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/crates/next-core/src/raw_ecmascript_module.rs b/crates/next-core/src/raw_ecmascript_module.rs index eba5b5798d352..e4ee621d6b867 100644 --- a/crates/next-core/src/raw_ecmascript_module.rs +++ b/crates/next-core/src/raw_ecmascript_module.rs @@ -101,7 +101,7 @@ impl Module for RawEcmascriptModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { // Is this correct? - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-core/src/module.rs b/turbopack/crates/turbopack-core/src/module.rs index 2a4e5df905b95..b55a6dd35394d 100644 --- a/turbopack/crates/turbopack-core/src/module.rs +++ b/turbopack/crates/turbopack-core/src/module.rs @@ -10,7 +10,7 @@ pub enum StyleType { GlobalStyle, } -#[derive(Hash, Debug)] +#[derive(Hash, Debug, Copy, Clone)] #[turbo_tasks::value(shared)] pub enum ModuleSideEffects { /// Analysis determined that the module evaluation is side effect free diff --git a/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs b/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs index d23a7c255eeae..55b11c270c4e5 100644 --- a/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs +++ b/turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs @@ -48,7 +48,7 @@ async fn compute_side_effect_free_module_info_single( super::SingleModuleGraphNode::VisitedModule { idx: _, module } => ( *module, if parent_side_effect_free_modules.contains(module) { - ModuleSideEffects::DeclaredSideEffectFree + ModuleSideEffects::SideEffectFree } else { ModuleSideEffects::SideEffectful }, @@ -80,8 +80,7 @@ async fn compute_side_effect_free_module_info_single( |child, _parent, _s| { Ok(if let Some((child_module, _edge)) = child { match module_side_effects.get(&child_module).unwrap() { - ModuleSideEffects::SideEffectful - | ModuleSideEffects::DeclaredSideEffectFree => { + ModuleSideEffects::SideEffectful | ModuleSideEffects::SideEffectFree => { // We have either already seen this or don't want to follow it GraphTraversalAction::Exclude } @@ -104,7 +103,7 @@ async fn compute_side_effect_free_module_info_single( .into_iter() .filter_map(|(m, e)| match e { ModuleSideEffects::SideEffectful => None, - ModuleSideEffects::DeclaredSideEffectFree => Some(m), + ModuleSideEffects::SideEffectFree => Some(m), ModuleSideEffects::ModuleEvaluationIsSideEffectFree => { if locally_side_effect_free_modules_that_have_side_effects.contains(&m) { None diff --git a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs index c82997fec5862..4b35fa32b7da7 100644 --- a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs @@ -68,7 +68,7 @@ impl Module for AsyncLoaderModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs index 9c2fd1194153f..394e2d202a2b3 100644 --- a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs @@ -52,7 +52,7 @@ impl Module for InlinedBytesJsModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs index 48e41794b3a85..826ec5c644c2c 100644 --- a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs @@ -154,7 +154,7 @@ impl Module for ManifestAsyncModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs b/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs index 271d0fb32d123..766a9da7ae105 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/esm/base.rs @@ -419,7 +419,7 @@ impl ModuleReference for EsmAssetReference { if let Some(TreeShakingMode::ModuleFragments) = self.tree_shaking_mode { if let Some(ModulePart::Evaluation) = &self.export_name { - if *self.module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree { + if *self.module.side_effects().await? == ModuleSideEffects::SideEffectFree { return Ok(ModuleResolveResult { primary: Box::new([( RequestKey::default(), diff --git a/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs b/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs index 7d4fb16ff3e6d..65288d35207c6 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs @@ -170,7 +170,7 @@ pub async fn follow_reexports( }; if !ignore_side_effects - && *module.side_effects().await? != ModuleSideEffects::DeclaredSideEffectFree + && *module.side_effects().await? != ModuleSideEffects::SideEffectFree { // TODO It's unfortunate that we have to use the whole module here. // This is often the Facade module, which includes all reexports. diff --git a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs index f2df44e1e5000..4a3f4ff9e8f30 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs @@ -429,7 +429,7 @@ impl Module for RequireContextAsset { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs index 59b9c68ee5e0a..5cd05226e16d0 100644 --- a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs @@ -186,7 +186,7 @@ impl Module for EcmascriptModuleFacadeModule { Ok(match self.part { ModulePart::Facade => self.module.side_effects(), ModulePart::RenamedExport { .. } | ModulePart::RenamedNamespace { .. } => { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } _ => bail!("Unexpected ModulePart for EcmascriptModuleFacadeModule"), }) diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs index 3ea454905a11c..2ef0eb38eb0fd 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs @@ -255,7 +255,7 @@ async fn follow_reexports_with_side_effects( let mut current_export_name = export_name; let result = loop { let is_side_effect_free = - *current_module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree; + *current_module.side_effects().await? == ModuleSideEffects::SideEffectFree; if !is_side_effect_free { side_effects.push(only_effects(*current_module).to_resolved().await?); @@ -341,7 +341,7 @@ impl Module for EcmascriptModulePartAsset { async fn side_effects(&self) -> Vc { match self.part { ModulePart::Exports | ModulePart::Export(..) => { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } _ => self.full_module.side_effects(), } diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs index 30032a13edb0e..8b511fd8a658f 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs @@ -115,7 +115,7 @@ impl Module for SideEffectsModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs index 394ba61c93bab..825a29bf2551f 100644 --- a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs @@ -59,7 +59,7 @@ impl Module for WorkerLoaderModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-json/src/lib.rs b/turbopack/crates/turbopack-json/src/lib.rs index c164033d84234..86643337737e1 100644 --- a/turbopack/crates/turbopack-json/src/lib.rs +++ b/turbopack/crates/turbopack-json/src/lib.rs @@ -60,7 +60,7 @@ impl Module for JsonModuleAsset { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-static/src/css.rs b/turbopack/crates/turbopack-static/src/css.rs index 02da2daa9d3d5..40e8f95f1e0f4 100644 --- a/turbopack/crates/turbopack-static/src/css.rs +++ b/turbopack/crates/turbopack-static/src/css.rs @@ -53,7 +53,7 @@ impl Module for StaticUrlCssModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-static/src/ecma.rs b/turbopack/crates/turbopack-static/src/ecma.rs index a27294b61fc91..d867459a6887a 100644 --- a/turbopack/crates/turbopack-static/src/ecma.rs +++ b/turbopack/crates/turbopack-static/src/ecma.rs @@ -65,7 +65,7 @@ impl Module for StaticUrlJsModule { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack-wasm/src/raw.rs b/turbopack/crates/turbopack-wasm/src/raw.rs index 6d7cbbfb159ec..1d2fa1ab9bad7 100644 --- a/turbopack/crates/turbopack-wasm/src/raw.rs +++ b/turbopack/crates/turbopack-wasm/src/raw.rs @@ -68,7 +68,7 @@ impl Module for RawWebAssemblyModuleAsset { #[turbo_tasks::function] fn side_effects(self: Vc) -> Vc { // this just exports a path - ModuleSideEffects::DeclaredSideEffectFree.cell() + ModuleSideEffects::SideEffectFree.cell() } } diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index 1b4f4f00276a9..170e7394fbffb 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -179,7 +179,7 @@ async fn apply_module_type( if tree_shaking_mode.is_some() && is_evaluation { // If we are tree shaking, skip the evaluation part if the module is marked as // side effect free. - if *module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree { + if *module.side_effects().await? == ModuleSideEffects::SideEffectFree { return Ok(ProcessResult::Ignore.cell()); } } @@ -295,7 +295,7 @@ async fn apply_module_type( if tree_shaking_mode.is_some() && is_evaluation { // If we are tree shaking, skip the evaluation part if the module is marked as // side effect free. - if *module.side_effects().await? == ModuleSideEffects::DeclaredSideEffectFree { + if *module.side_effects().await? == ModuleSideEffects::SideEffectFree { return Ok(ProcessResult::Ignore.cell()); } }