Skip to content

Commit dc428bc

Browse files
authored
Turbopack: fix duplicate facade module (#78191)
Previously, the `[project]/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/tla/tla-reexported.js [test] (ecmascript) <export tlaReexported as tlaReexported2>` module was duplicated. A regression from #73544 In all of these synthetic modules reexporting modules, the AST isn't actually needed.
1 parent fe6ff11 commit dc428bc

File tree

8 files changed

+49
-116
lines changed

8 files changed

+49
-116
lines changed

turbopack/crates/turbopack-core/src/resolve/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3144,7 +3144,6 @@ async fn error_severity(resolve_options: Vc<ResolveOptions>) -> Result<ResolvedV
31443144
})
31453145
}
31463146

3147-
// TODO this should become a TaskInput instead of a Vc
31483147
/// ModulePart represents a part of a module.
31493148
///
31503149
/// Currently this is used only for ESMs.

turbopack/crates/turbopack-ecmascript/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ impl EcmascriptModuleContent {
828828
if let EcmascriptExports::EsmExports(exports) = *exports.await? {
829829
Some(
830830
exports
831-
.code_generation(*module_graph, *chunking_context, *parsed)
831+
.code_generation(*module_graph, *chunking_context, Some(*parsed))
832832
.await?,
833833
)
834834
} else {

turbopack/crates/turbopack-ecmascript/src/references/esm/export.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -495,13 +495,13 @@ impl EsmExports {
495495
self: Vc<Self>,
496496
_module_graph: Vc<ModuleGraph>,
497497
chunking_context: Vc<Box<dyn ChunkingContext>>,
498-
parsed: Vc<ParseResult>,
498+
parsed: Option<Vc<ParseResult>>,
499499
) -> Result<CodeGeneration> {
500500
let expanded = self.expand_exports().await?;
501-
let parsed = parsed.await?;
502-
let eval_context = match &*parsed {
503-
ParseResult::Ok { eval_context, .. } => Some(eval_context),
504-
_ => None,
501+
let parsed = if let Some(parsed) = parsed {
502+
Some(parsed.await?)
503+
} else {
504+
None
505505
};
506506

507507
let mut dynamic_exports = Vec::<Box<Expr>>::new();
@@ -529,9 +529,14 @@ impl EsmExports {
529529
} else {
530530
Cow::Borrowed(name.as_str())
531531
};
532-
let ctxt = eval_context
533-
.and_then(|eval_context| {
534-
eval_context.imports.exports.get(name).map(|id| id.1)
532+
let ctxt = parsed
533+
.as_ref()
534+
.and_then(|parsed| {
535+
if let ParseResult::Ok { eval_context, .. } = &**parsed {
536+
eval_context.imports.exports.get(name).map(|id| id.1)
537+
} else {
538+
None
539+
}
535540
})
536541
.unwrap_or_default();
537542

turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/chunk_item.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,7 @@ impl EcmascriptChunkItem for EcmascriptModuleFacadeChunkItem {
6868

6969
let esm_code_gens = self
7070
.module
71-
.code_generation(
72-
*self.module_graph,
73-
*chunking_context,
74-
*self.module.await?.parsed,
75-
)
71+
.code_generation(*self.module_graph, *chunking_context)
7672
.await?;
7773
let additional_code_gens = [
7874
self.module
@@ -84,11 +80,7 @@ impl EcmascriptChunkItem for EcmascriptModuleFacadeChunkItem {
8480
)
8581
.await?,
8682
exports
87-
.code_generation(
88-
*self.module_graph,
89-
*chunking_context,
90-
*self.module.await?.parsed,
91-
)
83+
.code_generation(*self.module_graph, *chunking_context, None)
9284
.await?,
9385
];
9486
let code_gens = esm_code_gens.iter().chain(additional_code_gens.iter());

turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs

Lines changed: 29 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use super::chunk_item::EcmascriptModuleFacadeChunkItem;
1717
use crate::{
1818
chunk::{EcmascriptChunkPlaceable, EcmascriptExports},
1919
code_gen::CodeGeneration,
20-
parse::ParseResult,
2120
references::{
2221
async_module::{AsyncModule, OptionAsyncModule},
2322
esm::{EsmExport, EsmExports},
@@ -32,19 +31,14 @@ use crate::{
3231
#[turbo_tasks::value]
3332
pub struct EcmascriptModuleFacadeModule {
3433
pub module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
35-
pub parsed: ResolvedVc<ParseResult>,
3634
pub ty: ModulePart,
3735
}
3836

3937
#[turbo_tasks::value_impl]
4038
impl EcmascriptModuleFacadeModule {
4139
#[turbo_tasks::function]
42-
pub fn new(
43-
module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
44-
parsed: ResolvedVc<ParseResult>,
45-
ty: ModulePart,
46-
) -> Vc<Self> {
47-
EcmascriptModuleFacadeModule { module, parsed, ty }.cell()
40+
pub fn new(module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>, ty: ModulePart) -> Vc<Self> {
41+
EcmascriptModuleFacadeModule { module, ty }.cell()
4842
}
4943

5044
#[turbo_tasks::function]
@@ -71,7 +65,6 @@ impl EcmascriptModuleFacadeModule {
7165
self: Vc<Self>,
7266
module_graph: Vc<ModuleGraph>,
7367
chunking_context: Vc<Box<dyn ChunkingContext>>,
74-
parsed: Vc<ParseResult>,
7568
) -> Result<Vec<CodeGeneration>> {
7669
let this = self.await?;
7770
Ok(match &this.ty {
@@ -93,13 +86,9 @@ impl EcmascriptModuleFacadeModule {
9386
.try_join()
9487
.await?;
9588
code_gens.push(
96-
EcmascriptModulePartReference::new_part(
97-
*this.module,
98-
parsed,
99-
ModulePart::locals(),
100-
)
101-
.code_generation(module_graph, chunking_context)
102-
.await?,
89+
EcmascriptModulePartReference::new_part(*this.module, ModulePart::locals())
90+
.code_generation(module_graph, chunking_context)
91+
.await?,
10392
);
10493
code_gens
10594
}
@@ -121,41 +110,29 @@ impl EcmascriptModuleFacadeModule {
121110
.try_join()
122111
.await?;
123112
code_gens.push(
124-
EcmascriptModulePartReference::new_part(
125-
*this.module,
126-
parsed,
127-
ModulePart::locals(),
128-
)
129-
.code_generation(module_graph, chunking_context)
130-
.await?,
113+
EcmascriptModulePartReference::new_part(*this.module, ModulePart::locals())
114+
.code_generation(module_graph, chunking_context)
115+
.await?,
131116
);
132117
code_gens
133118
}
134119
ModulePart::Facade => {
135120
vec![
136-
EcmascriptModulePartReference::new_part(
137-
*this.module,
138-
parsed,
139-
ModulePart::evaluation(),
140-
)
141-
.code_generation(module_graph, chunking_context)
142-
.await?,
143-
EcmascriptModulePartReference::new_part(
144-
*this.module,
145-
parsed,
146-
ModulePart::exports(),
147-
)
148-
.code_generation(module_graph, chunking_context)
149-
.await?,
121+
EcmascriptModulePartReference::new_part(*this.module, ModulePart::evaluation())
122+
.code_generation(module_graph, chunking_context)
123+
.await?,
124+
EcmascriptModulePartReference::new_part(*this.module, ModulePart::exports())
125+
.code_generation(module_graph, chunking_context)
126+
.await?,
150127
]
151128
}
152129
ModulePart::RenamedNamespace { .. } => vec![
153-
EcmascriptModulePartReference::new(*this.module, parsed)
130+
EcmascriptModulePartReference::new(*this.module)
154131
.code_generation(module_graph, chunking_context)
155132
.await?,
156133
],
157134
ModulePart::RenamedExport { .. } => vec![
158-
EcmascriptModulePartReference::new(*this.module, parsed)
135+
EcmascriptModulePartReference::new(*this.module)
159136
.code_generation(module_graph, chunking_context)
160137
.await?,
161138
],
@@ -194,13 +171,9 @@ impl Module for EcmascriptModuleFacadeModule {
194171
.iter()
195172
.map(|r| ResolvedVc::upcast(*r))
196173
.chain(std::iter::once(ResolvedVc::upcast(
197-
EcmascriptModulePartReference::new_part(
198-
*self.module,
199-
*self.parsed,
200-
ModulePart::locals(),
201-
)
202-
.to_resolved()
203-
.await?,
174+
EcmascriptModulePartReference::new_part(*self.module, ModulePart::locals())
175+
.to_resolved()
176+
.await?,
204177
)))
205178
.collect()
206179
}
@@ -220,13 +193,9 @@ impl Module for EcmascriptModuleFacadeModule {
220193
.iter()
221194
.map(|r| ResolvedVc::upcast(*r))
222195
.chain(std::iter::once(ResolvedVc::upcast(
223-
EcmascriptModulePartReference::new_part(
224-
*self.module,
225-
*self.parsed,
226-
ModulePart::locals(),
227-
)
228-
.to_resolved()
229-
.await?,
196+
EcmascriptModulePartReference::new_part(*self.module, ModulePart::locals())
197+
.to_resolved()
198+
.await?,
230199
)))
231200
.collect()
232201
}
@@ -235,7 +204,6 @@ impl Module for EcmascriptModuleFacadeModule {
235204
ResolvedVc::upcast(
236205
EcmascriptModulePartReference::new_part(
237206
*self.module,
238-
*self.parsed,
239207
ModulePart::evaluation(),
240208
)
241209
.to_resolved()
@@ -244,7 +212,6 @@ impl Module for EcmascriptModuleFacadeModule {
244212
ResolvedVc::upcast(
245213
EcmascriptModulePartReference::new_part(
246214
*self.module,
247-
*self.parsed,
248215
ModulePart::exports(),
249216
)
250217
.to_resolved()
@@ -254,14 +221,14 @@ impl Module for EcmascriptModuleFacadeModule {
254221
}
255222
ModulePart::RenamedNamespace { .. } => {
256223
vec![ResolvedVc::upcast(
257-
EcmascriptModulePartReference::new(*self.module, *self.parsed)
224+
EcmascriptModulePartReference::new(*self.module)
258225
.to_resolved()
259226
.await?,
260227
)]
261228
}
262229
ModulePart::RenamedExport { .. } => {
263230
vec![ResolvedVc::upcast(
264-
EcmascriptModulePartReference::new(*self.module, *self.parsed)
231+
EcmascriptModulePartReference::new(*self.module)
265232
.to_resolved()
266233
.await?,
267234
)]
@@ -323,7 +290,6 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
323290
ResolvedVc::upcast(
324291
EcmascriptModulePartReference::new_part(
325292
*self.module,
326-
*self.parsed,
327293
ModulePart::locals(),
328294
)
329295
.to_resolved()
@@ -371,7 +337,6 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
371337
ResolvedVc::upcast(
372338
EcmascriptModulePartReference::new_part(
373339
*self.module,
374-
*self.parsed,
375340
ModulePart::exports(),
376341
)
377342
.to_resolved()
@@ -383,13 +348,9 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
383348
);
384349
}
385350
star_exports.push(ResolvedVc::upcast(
386-
EcmascriptModulePartReference::new_part(
387-
*self.module,
388-
*self.parsed,
389-
ModulePart::exports(),
390-
)
391-
.to_resolved()
392-
.await?,
351+
EcmascriptModulePartReference::new_part(*self.module, ModulePart::exports())
352+
.to_resolved()
353+
.await?,
393354
));
394355
}
395356
ModulePart::RenamedExport {
@@ -400,7 +361,7 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
400361
export.clone(),
401362
EsmExport::ImportedBinding(
402363
ResolvedVc::upcast(
403-
EcmascriptModulePartReference::new(*self.module, *self.parsed)
364+
EcmascriptModulePartReference::new(*self.module)
404365
.to_resolved()
405366
.await?,
406367
),
@@ -413,7 +374,7 @@ impl EcmascriptChunkPlaceable for EcmascriptModuleFacadeModule {
413374
exports.insert(
414375
export.clone(),
415376
EsmExport::ImportedNamespace(ResolvedVc::upcast(
416-
EcmascriptModulePartReference::new(*self.module, *self.parsed)
377+
EcmascriptModulePartReference::new(*self.module)
417378
.to_resolved()
418379
.await?,
419380
)),

turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/reference.rs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use super::{
1717
facade::module::EcmascriptModuleFacadeModule, locals::module::EcmascriptModuleLocalsModule,
1818
};
1919
use crate::{
20-
chunk::EcmascriptChunkPlaceable, code_gen::CodeGeneration, parse::ParseResult,
20+
chunk::EcmascriptChunkPlaceable, code_gen::CodeGeneration,
2121
references::esm::base::ReferencedAsset, runtime_functions::TURBOPACK_IMPORT,
2222
utils::module_id_to_lit,
2323
};
@@ -27,7 +27,6 @@ use crate::{
2727
#[turbo_tasks::value]
2828
pub struct EcmascriptModulePartReference {
2929
pub module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
30-
pub parsed: ResolvedVc<ParseResult>,
3130
pub part: Option<ModulePart>,
3231
}
3332

@@ -36,28 +35,18 @@ impl EcmascriptModulePartReference {
3635
#[turbo_tasks::function]
3736
pub fn new_part(
3837
module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
39-
parsed: ResolvedVc<ParseResult>,
4038
part: ModulePart,
4139
) -> Vc<Self> {
4240
EcmascriptModulePartReference {
4341
module,
44-
parsed,
4542
part: Some(part),
4643
}
4744
.cell()
4845
}
4946

5047
#[turbo_tasks::function]
51-
pub fn new(
52-
module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>,
53-
parsed: ResolvedVc<ParseResult>,
54-
) -> Vc<Self> {
55-
EcmascriptModulePartReference {
56-
module,
57-
parsed,
58-
part: None,
59-
}
60-
.cell()
48+
pub fn new(module: ResolvedVc<Box<dyn EcmascriptChunkPlaceable>>) -> Vc<Self> {
49+
EcmascriptModulePartReference { module, part: None }.cell()
6150
}
6251
}
6352

@@ -92,7 +81,7 @@ impl ModuleReference for EcmascriptModulePartReference {
9281
| ModulePart::Facade
9382
| ModulePart::RenamedExport { .. }
9483
| ModulePart::RenamedNamespace { .. } => Vc::upcast(
95-
EcmascriptModuleFacadeModule::new(*self.module, *self.parsed, part.clone()),
84+
EcmascriptModuleFacadeModule::new(*self.module, part.clone()),
9685
),
9786
ModulePart::Export(..)
9887
| ModulePart::Internal(..)

turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,13 @@ impl EcmascriptModulePartAsset {
162162
export_name: new_export,
163163
..
164164
} = &*result.await?;
165-
let parsed = module.parse();
166165
let final_module = if let Some(new_export) = new_export {
167166
if *new_export == export {
168167
*final_module
169168
} else {
170169
ResolvedVc::upcast(
171170
EcmascriptModuleFacadeModule::new(
172171
**final_module,
173-
parsed,
174172
ModulePart::renamed_export(new_export.clone(), export.clone()),
175173
)
176174
.to_resolved()
@@ -181,7 +179,6 @@ impl EcmascriptModulePartAsset {
181179
ResolvedVc::upcast(
182180
EcmascriptModuleFacadeModule::new(
183181
**final_module,
184-
parsed,
185182
ModulePart::renamed_namespace(export.clone()),
186183
)
187184
.to_resolved()

0 commit comments

Comments
 (0)