Skip to content

Commit 5437319

Browse files
authored
[turbopack] Rename is_marked_as_side_effect_free to side_effects and return ModuleSideEffects enum (#87102)
Refactor the `is_marked_side_effect_free` API * Rename `side_effects` * Change it to return `ModuleSideEffects` instead of a `bool` * Remove the `side_effect_packages` from its parameters, instead arrange to pass that to the EcmascriptModule constructor since that is where we need it. - This cleans up callsites and fixes a tiny issue where we construct that glob multiple times.
1 parent 2ff2a7a commit 5437319

File tree

43 files changed

+309
-282
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+309
-282
lines changed

crates/next-core/src/hmr_entry.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ use std::io::Write;
33
use anyhow::Result;
44
use turbo_rcstr::{RcStr, rcstr};
55
use turbo_tasks::{ResolvedVc, ValueToString, Vc};
6-
use turbo_tasks_fs::{FileSystem, VirtualFileSystem, glob::Glob, rope::RopeBuilder};
6+
use turbo_tasks_fs::{FileSystem, VirtualFileSystem, rope::RopeBuilder};
77
use turbopack_core::{
88
asset::{Asset, AssetContent},
99
chunk::{
1010
ChunkItem, ChunkType, ChunkableModule, ChunkableModuleReference, ChunkingContext,
1111
EvaluatableAsset,
1212
},
1313
ident::AssetIdent,
14-
module::Module,
14+
module::{Module, ModuleSideEffects},
1515
module_graph::ModuleGraph,
1616
output::OutputAssetsReference,
1717
reference::{ModuleReference, ModuleReferences},
@@ -76,10 +76,9 @@ impl Module for HmrEntryModule {
7676
.await?,
7777
)]))
7878
}
79-
8079
#[turbo_tasks::function]
81-
fn is_marked_as_side_effect_free(self: Vc<Self>, _: Vc<Glob>) -> Vc<bool> {
82-
Vc::cell(false)
80+
fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
81+
ModuleSideEffects::SideEffectful.cell()
8382
}
8483
}
8584

crates/next-core/src/next_client/context.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use turbo_tasks_fs::FileSystemPath;
88
use turbopack::module_options::{
99
CssOptionsContext, EcmascriptOptionsContext, JsxTransformOptions, ModuleRule,
1010
TypescriptTransformOptions, module_options_context::ModuleOptionsContext,
11+
side_effect_free_packages_glob,
1112
};
1213
use turbopack_browser::{
1314
BrowserChunkingContext, ChunkSuffix, ContentHashing, CurrentChunkMethod,
@@ -337,7 +338,11 @@ pub async fn get_client_module_options_context(
337338
execution_context: Some(execution_context),
338339
tree_shaking_mode: tree_shaking_mode_for_user_code,
339340
enable_postcss_transform,
340-
side_effect_free_packages: next_config.optimize_package_imports().owned().await?,
341+
side_effect_free_packages: Some(
342+
side_effect_free_packages_glob(next_config.optimize_package_imports())
343+
.to_resolved()
344+
.await?,
345+
),
341346
keep_last_successful_parse: next_mode.is_development(),
342347
analyze_mode: if next_mode.is_development() {
343348
AnalyzeMode::CodeGeneration

crates/next-core/src/next_client_reference/css_client_reference/css_client_reference_module.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use turbopack_core::{
66
asset::{Asset, AssetContent},
77
chunk::{ChunkGroupType, ChunkableModuleReference, ChunkingType, ChunkingTypeOption},
88
ident::AssetIdent,
9-
module::Module,
9+
module::{Module, ModuleSideEffects},
1010
reference::{ModuleReference, ModuleReferences},
1111
resolve::ModuleResolveResult,
1212
source::OptionSource,
@@ -57,6 +57,10 @@ impl Module for CssClientReferenceModule {
5757
.await?,
5858
)]))
5959
}
60+
#[turbo_tasks::function]
61+
fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
62+
ModuleSideEffects::SideEffectful.cell()
63+
}
6064
}
6165

6266
#[turbo_tasks::value_impl]

crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use turbopack_core::{
1414
code_builder::CodeBuilder,
1515
context::AssetContext,
1616
ident::AssetIdent,
17-
module::Module,
17+
module::{Module, ModuleSideEffects},
1818
module_graph::{ModuleGraph, binding_usage_info::ModuleExportUsageInfo},
1919
output::OutputAssetsReference,
2020
reference::{ModuleReference, ModuleReferences},
@@ -241,6 +241,12 @@ impl Module for EcmascriptClientReferenceModule {
241241

242242
Ok(Vc::cell(references))
243243
}
244+
#[turbo_tasks::function]
245+
fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
246+
// These just re-export some specially tagged functions, however we do assume that client
247+
// references are executed client side so we need to preserve these in the graph.
248+
ModuleSideEffects::SideEffectful.cell()
249+
}
244250
}
245251

246252
#[turbo_tasks::value_impl]

crates/next-core/src/next_dynamic/dynamic_module.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use turbopack_core::{
99
asset::{Asset, AssetContent},
1010
chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt},
1111
ident::AssetIdent,
12-
module::Module,
12+
module::{Module, ModuleSideEffects},
1313
module_graph::ModuleGraph,
1414
output::OutputAssetsReference,
1515
reference::{ModuleReferences, SingleChunkableModuleReference},
@@ -71,6 +71,11 @@ impl Module for NextDynamicEntryModule {
7171
.await?,
7272
)]))
7373
}
74+
#[turbo_tasks::function]
75+
fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
76+
// This just exports another import
77+
ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell()
78+
}
7479
}
7580

7681
#[turbo_tasks::value_impl]

crates/next-core/src/next_server/context.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use turbopack::{
99
module_options::{
1010
CssOptionsContext, EcmascriptOptionsContext, ExternalsTracingOptions, JsxTransformOptions,
1111
ModuleOptionsContext, ModuleRule, TypescriptTransformOptions,
12+
side_effect_free_packages_glob,
1213
},
1314
transition::Transition,
1415
};
@@ -592,7 +593,11 @@ pub async fn get_server_module_options_context(
592593
..Default::default()
593594
},
594595
tree_shaking_mode: tree_shaking_mode_for_user_code,
595-
side_effect_free_packages: next_config.optimize_package_imports().owned().await?,
596+
side_effect_free_packages: Some(
597+
side_effect_free_packages_glob(next_config.optimize_package_imports())
598+
.to_resolved()
599+
.await?,
600+
),
596601
analyze_mode: if next_mode.is_development() {
597602
AnalyzeMode::CodeGeneration
598603
} else {

crates/next-core/src/next_server_component/server_component_module.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use turbopack_core::{
99
asset::{Asset, AssetContent},
1010
chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt},
1111
ident::AssetIdent,
12-
module::Module,
12+
module::{Module, ModuleSideEffects},
1313
module_graph::ModuleGraph,
1414
output::OutputAssetsReference,
1515
reference::ModuleReferences,
@@ -67,6 +67,11 @@ impl Module for NextServerComponentModule {
6767
.await?,
6868
)]))
6969
}
70+
#[turbo_tasks::function]
71+
fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
72+
// This just exports another import
73+
ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell()
74+
}
7075
}
7176

7277
#[turbo_tasks::value_impl]

crates/next-core/src/next_server_utility/server_utility_module.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use turbopack_core::{
99
asset::{Asset, AssetContent},
1010
chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt},
1111
ident::AssetIdent,
12-
module::Module,
12+
module::{Module, ModuleSideEffects},
1313
module_graph::ModuleGraph,
1414
output::OutputAssetsReference,
1515
reference::ModuleReferences,
@@ -67,6 +67,12 @@ impl Module for NextServerUtilityModule {
6767
.await?,
6868
)]))
6969
}
70+
71+
#[turbo_tasks::function]
72+
fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
73+
// This just exports another import
74+
ModuleSideEffects::ModuleEvaluationIsSideEffectFree.cell()
75+
}
7076
}
7177

7278
#[turbo_tasks::value_impl]

crates/next-core/src/raw_ecmascript_module.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use regex::Regex;
77
use tracing::Instrument;
88
use turbo_rcstr::rcstr;
99
use turbo_tasks::{FxIndexMap, FxIndexSet, ResolvedVc, TryJoinIterExt, ValueToString, Vc};
10-
use turbo_tasks_fs::{FileContent, glob::Glob, rope::Rope};
10+
use turbo_tasks_fs::{FileContent, rope::Rope};
1111
use turbopack::{ModuleAssetContext, module_options::CustomModuleType};
1212
use turbopack_core::{
1313
asset::{Asset, AssetContent},
@@ -18,7 +18,7 @@ use turbopack_core::{
1818
},
1919
context::AssetContext,
2020
ident::AssetIdent,
21-
module::Module,
21+
module::{Module, ModuleSideEffects},
2222
module_graph::ModuleGraph,
2323
output::OutputAssetsReference,
2424
resolve::ModulePart,
@@ -99,11 +99,8 @@ impl Module for RawEcmascriptModule {
9999
}
100100

101101
#[turbo_tasks::function]
102-
fn is_marked_as_side_effect_free(
103-
self: Vc<Self>,
104-
_side_effect_free_packages: Vc<Glob>,
105-
) -> Vc<bool> {
106-
Vc::cell(false)
102+
fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
103+
ModuleSideEffects::SideEffectful.cell()
107104
}
108105
}
109106

turbopack/crates/turbopack-core/src/context.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use anyhow::{Result, bail};
22
use turbo_rcstr::RcStr;
33
use turbo_tasks::{ResolvedVc, Vc};
4-
use turbo_tasks_fs::{FileSystemPath, glob::Glob};
4+
use turbo_tasks_fs::FileSystemPath;
55

66
use crate::{
77
compile_time_info::CompileTimeInfo,
@@ -104,7 +104,4 @@ pub trait AssetContext {
104104
/// Gets a new AssetContext with the transition applied.
105105
#[turbo_tasks::function]
106106
fn with_transition(self: Vc<Self>, transition: RcStr) -> Vc<Box<dyn AssetContext>>;
107-
108-
#[turbo_tasks::function]
109-
fn side_effect_free_packages(self: Vc<Self>) -> Vc<Glob>;
110107
}

0 commit comments

Comments
 (0)