Skip to content

Turbopack: fix duplicate facade module #78191

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion turbopack/crates/turbopack-core/src/resolve/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3144,7 +3144,6 @@ async fn error_severity(resolve_options: Vc<ResolveOptions>) -> Result<ResolvedV
})
}

// TODO this should become a TaskInput instead of a Vc
/// ModulePart represents a part of a module.
///
/// Currently this is used only for ESMs.
Expand Down
2 changes: 1 addition & 1 deletion turbopack/crates/turbopack-ecmascript/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -828,7 +828,7 @@ impl EcmascriptModuleContent {
if let EcmascriptExports::EsmExports(exports) = *exports.await? {
Some(
exports
.code_generation(*module_graph, *chunking_context, *parsed)
.code_generation(*module_graph, *chunking_context, Some(*parsed))
.await?,
)
} else {
Expand Down
21 changes: 13 additions & 8 deletions turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -495,13 +495,13 @@ impl EsmExports {
self: Vc<Self>,
_module_graph: Vc<ModuleGraph>,
chunking_context: Vc<Box<dyn ChunkingContext>>,
parsed: Vc<ParseResult>,
parsed: Option<Vc<ParseResult>>,
) -> Result<CodeGeneration> {
let expanded = self.expand_exports().await?;
let parsed = parsed.await?;
let eval_context = match &*parsed {
ParseResult::Ok { eval_context, .. } => Some(eval_context),
_ => None,
let parsed = if let Some(parsed) = parsed {
Some(parsed.await?)
} else {
None
};

let mut dynamic_exports = Vec::<Box<Expr>>::new();
Expand Down Expand Up @@ -529,9 +529,14 @@ impl EsmExports {
} else {
Cow::Borrowed(name.as_str())
};
let ctxt = eval_context
.and_then(|eval_context| {
eval_context.imports.exports.get(name).map(|id| id.1)
let ctxt = parsed
.as_ref()
.and_then(|parsed| {
if let ParseResult::Ok { eval_context, .. } = &**parsed {
eval_context.imports.exports.get(name).map(|id| id.1)
} else {
None
}
})
.unwrap_or_default();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,7 @@ impl EcmascriptChunkItem for EcmascriptModuleFacadeChunkItem {

let esm_code_gens = self
.module
.code_generation(
*self.module_graph,
*chunking_context,
*self.module.await?.parsed,
)
.code_generation(*self.module_graph, *chunking_context)
.await?;
let additional_code_gens = [
self.module
Expand All @@ -84,11 +80,7 @@ impl EcmascriptChunkItem for EcmascriptModuleFacadeChunkItem {
)
.await?,
exports
.code_generation(
*self.module_graph,
*chunking_context,
*self.module.await?.parsed,
)
.code_generation(*self.module_graph, *chunking_context, None)
.await?,
];
let code_gens = esm_code_gens.iter().chain(additional_code_gens.iter());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ use super::chunk_item::EcmascriptModuleFacadeChunkItem;
use crate::{
chunk::{EcmascriptChunkPlaceable, EcmascriptExports},
code_gen::CodeGeneration,
parse::ParseResult,
references::{
async_module::{AsyncModule, OptionAsyncModule},
esm::{EsmExport, EsmExports},
Expand All @@ -32,19 +31,14 @@ use crate::{
#[turbo_tasks::value]
pub struct EcmascriptModuleFacadeModule {
pub module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
pub parsed: ResolvedVc<ParseResult>,
pub ty: ModulePart,
}

#[turbo_tasks::value_impl]
impl EcmascriptModuleFacadeModule {
#[turbo_tasks::function]
pub fn new(
module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
parsed: ResolvedVc<ParseResult>,
ty: ModulePart,
) -> Vc<Self> {
EcmascriptModuleFacadeModule { module, parsed, ty }.cell()
pub fn new(module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>, ty: ModulePart) -> Vc<Self> {
EcmascriptModuleFacadeModule { module, ty }.cell()
}

#[turbo_tasks::function]
Expand All @@ -71,7 +65,6 @@ impl EcmascriptModuleFacadeModule {
self: Vc<Self>,
module_graph: Vc<ModuleGraph>,
chunking_context: Vc<Box<dyn ChunkingContext>>,
parsed: Vc<ParseResult>,
) -> Result<Vec<CodeGeneration>> {
let this = self.await?;
Ok(match &this.ty {
Expand All @@ -93,13 +86,9 @@ impl EcmascriptModuleFacadeModule {
.try_join()
.await?;
code_gens.push(
EcmascriptModulePartReference::new_part(
*this.module,
parsed,
ModulePart::locals(),
)
.code_generation(module_graph, chunking_context)
.await?,
EcmascriptModulePartReference::new_part(*this.module, ModulePart::locals())
.code_generation(module_graph, chunking_context)
.await?,
);
code_gens
}
Expand All @@ -121,41 +110,29 @@ impl EcmascriptModuleFacadeModule {
.try_join()
.await?;
code_gens.push(
EcmascriptModulePartReference::new_part(
*this.module,
parsed,
ModulePart::locals(),
)
.code_generation(module_graph, chunking_context)
.await?,
EcmascriptModulePartReference::new_part(*this.module, ModulePart::locals())
.code_generation(module_graph, chunking_context)
.await?,
);
code_gens
}
ModulePart::Facade => {
vec![
EcmascriptModulePartReference::new_part(
*this.module,
parsed,
ModulePart::evaluation(),
)
.code_generation(module_graph, chunking_context)
.await?,
EcmascriptModulePartReference::new_part(
*this.module,
parsed,
ModulePart::exports(),
)
.code_generation(module_graph, chunking_context)
.await?,
EcmascriptModulePartReference::new_part(*this.module, ModulePart::evaluation())
.code_generation(module_graph, chunking_context)
.await?,
EcmascriptModulePartReference::new_part(*this.module, ModulePart::exports())
.code_generation(module_graph, chunking_context)
.await?,
]
}
ModulePart::RenamedNamespace { .. } => vec![
EcmascriptModulePartReference::new(*this.module, parsed)
EcmascriptModulePartReference::new(*this.module)
.code_generation(module_graph, chunking_context)
.await?,
],
ModulePart::RenamedExport { .. } => vec![
EcmascriptModulePartReference::new(*this.module, parsed)
EcmascriptModulePartReference::new(*this.module)
.code_generation(module_graph, chunking_context)
.await?,
],
Expand Down Expand Up @@ -194,13 +171,9 @@ impl Module for EcmascriptModuleFacadeModule {
.iter()
.map(|r| ResolvedVc::upcast(*r))
.chain(std::iter::once(ResolvedVc::upcast(
EcmascriptModulePartReference::new_part(
*self.module,
*self.parsed,
ModulePart::locals(),
)
.to_resolved()
.await?,
EcmascriptModulePartReference::new_part(*self.module, ModulePart::locals())
.to_resolved()
.await?,
)))
.collect()
}
Expand All @@ -220,13 +193,9 @@ impl Module for EcmascriptModuleFacadeModule {
.iter()
.map(|r| ResolvedVc::upcast(*r))
.chain(std::iter::once(ResolvedVc::upcast(
EcmascriptModulePartReference::new_part(
*self.module,
*self.parsed,
ModulePart::locals(),
)
.to_resolved()
.await?,
EcmascriptModulePartReference::new_part(*self.module, ModulePart::locals())
.to_resolved()
.await?,
)))
.collect()
}
Expand All @@ -235,7 +204,6 @@ impl Module for EcmascriptModuleFacadeModule {
ResolvedVc::upcast(
EcmascriptModulePartReference::new_part(
*self.module,
*self.parsed,
ModulePart::evaluation(),
)
.to_resolved()
Expand All @@ -244,7 +212,6 @@ impl Module for EcmascriptModuleFacadeModule {
ResolvedVc::upcast(
EcmascriptModulePartReference::new_part(
*self.module,
*self.parsed,
ModulePart::exports(),
)
.to_resolved()
Expand All @@ -254,14 +221,14 @@ impl Module for EcmascriptModuleFacadeModule {
}
ModulePart::RenamedNamespace { .. } => {
vec![ResolvedVc::upcast(
EcmascriptModulePartReference::new(*self.module, *self.parsed)
EcmascriptModulePartReference::new(*self.module)
.to_resolved()
.await?,
)]
}
ModulePart::RenamedExport { .. } => {
vec![ResolvedVc::upcast(
EcmascriptModulePartReference::new(*self.module, *self.parsed)
EcmascriptModulePartReference::new(*self.module)
.to_resolved()
.await?,
)]
Expand Down Expand Up @@ -323,7 +290,6 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
ResolvedVc::upcast(
EcmascriptModulePartReference::new_part(
*self.module,
*self.parsed,
ModulePart::locals(),
)
.to_resolved()
Expand Down Expand Up @@ -371,7 +337,6 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
ResolvedVc::upcast(
EcmascriptModulePartReference::new_part(
*self.module,
*self.parsed,
ModulePart::exports(),
)
.to_resolved()
Expand All @@ -383,13 +348,9 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
);
}
star_exports.push(ResolvedVc::upcast(
EcmascriptModulePartReference::new_part(
*self.module,
*self.parsed,
ModulePart::exports(),
)
.to_resolved()
.await?,
EcmascriptModulePartReference::new_part(*self.module, ModulePart::exports())
.to_resolved()
.await?,
));
}
ModulePart::RenamedExport {
Expand All @@ -400,7 +361,7 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
export.clone(),
EsmExport::ImportedBinding(
ResolvedVc::upcast(
EcmascriptModulePartReference::new(*self.module, *self.parsed)
EcmascriptModulePartReference::new(*self.module)
.to_resolved()
.await?,
),
Expand All @@ -413,7 +374,7 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
exports.insert(
export.clone(),
EsmExport::ImportedNamespace(ResolvedVc::upcast(
EcmascriptModulePartReference::new(*self.module, *self.parsed)
EcmascriptModulePartReference::new(*self.module)
.to_resolved()
.await?,
)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use super::{
facade::module::EcmascriptModuleFacadeModule, locals::module::EcmascriptModuleLocalsModule,
};
use crate::{
chunk::EcmascriptChunkPlaceable, code_gen::CodeGeneration, parse::ParseResult,
chunk::EcmascriptChunkPlaceable, code_gen::CodeGeneration,
references::esm::base::ReferencedAsset, runtime_functions::TURBOPACK_IMPORT,
utils::module_id_to_lit,
};
Expand All @@ -27,7 +27,6 @@ use crate::{
#[turbo_tasks::value]
pub struct EcmascriptModulePartReference {
pub module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
pub parsed: ResolvedVc<ParseResult>,
pub part: Option<ModulePart>,
}

Expand All @@ -36,28 +35,18 @@ impl EcmascriptModulePartReference {
#[turbo_tasks::function]
pub fn new_part(
module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
parsed: ResolvedVc<ParseResult>,
part: ModulePart,
) -> Vc<Self> {
EcmascriptModulePartReference {
module,
parsed,
part: Some(part),
}
.cell()
}

#[turbo_tasks::function]
pub fn new(
module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
parsed: ResolvedVc<ParseResult>,
) -> Vc<Self> {
EcmascriptModulePartReference {
module,
parsed,
part: None,
}
.cell()
pub fn new(module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>) -> Vc<Self> {
EcmascriptModulePartReference { module, part: None }.cell()
}
}

Expand Down Expand Up @@ -92,7 +81,7 @@ impl ModuleReference for EcmascriptModulePartReference {
| ModulePart::Facade
| ModulePart::RenamedExport { .. }
| ModulePart::RenamedNamespace { .. } => Vc::upcast(
EcmascriptModuleFacadeModule::new(*self.module, *self.parsed, part.clone()),
EcmascriptModuleFacadeModule::new(*self.module, part.clone()),
),
ModulePart::Export(..)
| ModulePart::Internal(..)
Expand Down
3 changes: 0 additions & 3 deletions turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,15 +162,13 @@ impl EcmascriptModulePartAsset {
export_name: new_export,
..
} = &*result.await?;
let parsed = module.parse();
let final_module = if let Some(new_export) = new_export {
if *new_export == export {
*final_module
} else {
ResolvedVc::upcast(
EcmascriptModuleFacadeModule::new(
**final_module,
parsed,
ModulePart::renamed_export(new_export.clone(), export.clone()),
)
.to_resolved()
Expand All @@ -181,7 +179,6 @@ impl EcmascriptModulePartAsset {
ResolvedVc::upcast(
EcmascriptModuleFacadeModule::new(
**final_module,
parsed,
ModulePart::renamed_namespace(export.clone()),
)
.to_resolved()
Expand Down
Loading
Loading