Skip to content

Commit c96b3ed

Browse files
committed
reduce number of turbo-tasks function calls in EsmAssertReference::code_generation
1 parent d15b8d0 commit c96b3ed

File tree

4 files changed

+23
-32
lines changed

4 files changed

+23
-32
lines changed

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ pub enum ModuleResolveResultItem {
7070
Error(Vc<RcStr>),
7171
Empty,
7272
Custom(u8),
73-
Unresolveable,
7473
}
7574

7675
#[turbo_tasks::value(shared)]
@@ -398,7 +397,6 @@ pub enum ResolveResultItem {
398397
Error(Vc<RcStr>),
399398
Empty,
400399
Custom(u8),
401-
Unresolveable,
402400
}
403401

404402
/// Represents the key for a request that leads to a certain results during
@@ -491,9 +489,6 @@ impl ValueToString for ResolveResult {
491489
ResolveResultItem::Custom(_) => {
492490
result.push_str("custom");
493491
}
494-
ResolveResultItem::Unresolveable => {
495-
result.push_str("unresolveable");
496-
}
497492
}
498493
result.push('\n');
499494
}
@@ -684,9 +679,6 @@ impl ResolveResult {
684679
ResolveResultItem::Custom(u8) => {
685680
ModuleResolveResultItem::Custom(u8)
686681
}
687-
ResolveResultItem::Unresolveable => {
688-
ModuleResolveResultItem::Unresolveable
689-
}
690682
},
691683
))
692684
}

turbopack/crates/turbopack-ecmascript/src/references/async_module.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ impl AsyncModule {
135135
}
136136
}
137137
ReferencedAsset::External(..) => None,
138-
ReferencedAsset::None => None,
138+
ReferencedAsset::None | ReferencedAsset::Unresolveable => None,
139139
})
140140
})
141141
.try_flat_join()

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

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ pub enum ReferencedAsset {
4343
Some(Vc<Box<dyn EcmascriptChunkPlaceable>>),
4444
External(RcStr, ExternalType),
4545
None,
46+
Unresolveable,
4647
}
4748

4849
impl ReferencedAsset {
@@ -52,7 +53,7 @@ impl ReferencedAsset {
5253
ReferencedAsset::External(request, ty) => Some(magic_identifier::mangle(&format!(
5354
"{ty} external {request}"
5455
))),
55-
ReferencedAsset::None => None,
56+
ReferencedAsset::None | ReferencedAsset::Unresolveable => None,
5657
})
5758
}
5859

@@ -72,7 +73,11 @@ impl ReferencedAsset {
7273
#[turbo_tasks::function]
7374
pub async fn from_resolve_result(resolve_result: Vc<ModuleResolveResult>) -> Result<Vc<Self>> {
7475
// TODO handle multiple keyed results
75-
for (_key, result) in resolve_result.await?.primary.iter() {
76+
let result = resolve_result.await?;
77+
if result.primary.is_empty() {
78+
return Ok(ReferencedAsset::Unresolveable.cell());
79+
}
80+
for (_key, result) in result.primary.iter() {
7681
match result {
7782
ModuleResolveResultItem::External(request, ty) => {
7883
return Ok(ReferencedAsset::External(request.clone(), *ty).cell());
@@ -82,14 +87,14 @@ impl ReferencedAsset {
8287
Vc::try_resolve_downcast::<Box<dyn EcmascriptChunkPlaceable>>(module)
8388
.await?
8489
{
85-
return Ok(ReferencedAsset::cell(ReferencedAsset::Some(placeable)));
90+
return Ok(ReferencedAsset::Some(placeable).cell());
8691
}
8792
}
8893
// TODO ignore should probably be handled differently
8994
_ => {}
9095
}
9196
}
92-
Ok(ReferencedAsset::cell(ReferencedAsset::None))
97+
Ok(ReferencedAsset::None.cell())
9398
}
9499
}
95100

@@ -244,25 +249,9 @@ impl CodeGenerateable for EsmAssetReference {
244249
chunking_context: Vc<Box<dyn ChunkingContext>>,
245250
) -> Result<Vc<CodeGeneration>> {
246251
let this = &*self.await?;
247-
let chunking_type = self.chunking_type().await?;
248-
let resolved = self.resolve_reference().await?;
249-
250-
// Insert code that throws immediately at time of import if a request is
251-
// unresolvable
252-
if resolved.is_unresolveable_ref() {
253-
let request = request_to_string(this.request).await?.to_string();
254-
let stmt = Stmt::Expr(ExprStmt {
255-
expr: Box::new(throw_module_not_found_expr(&request)),
256-
span: DUMMY_SP,
257-
});
258-
return Ok(CodeGeneration::hoisted_stmt(
259-
format!("throw {request}").into(),
260-
stmt,
261-
));
262-
}
263252

264253
// only chunked references can be imported
265-
let result = if chunking_type.is_some() {
254+
let result = if this.annotations.chunking_type() != Some("none") {
266255
let referenced_asset = self.get_referenced_asset().await?;
267256
let import_externals = this.import_externals;
268257
if let Some(ident) = referenced_asset.get_ident().await? {
@@ -275,6 +264,16 @@ impl CodeGenerateable for EsmAssetReference {
275264
Span::new(BytePos(start as u32), BytePos(end as u32))
276265
});
277266
match &*referenced_asset {
267+
ReferencedAsset::Unresolveable => {
268+
// Insert code that throws immediately at time of import if a request is
269+
// unresolvable
270+
let request = request_to_string(this.request).await?.to_string();
271+
let stmt = Stmt::Expr(ExprStmt {
272+
expr: Box::new(throw_module_not_found_expr(&request)),
273+
span: DUMMY_SP,
274+
});
275+
Some((format!("throw {request}").into(), stmt))
276+
}
278277
ReferencedAsset::Some(asset) => {
279278
let id = asset
280279
.as_chunk_item(Vc::upcast(chunking_context))

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ impl CodeGenerateable for UrlAssetReference {
205205
request
206206
)
207207
}
208-
ReferencedAsset::None => {}
208+
ReferencedAsset::None | ReferencedAsset::Unresolveable => {}
209209
}
210210
}
211211
UrlRewriteBehavior::Full => {
@@ -293,7 +293,7 @@ impl CodeGenerateable for UrlAssetReference {
293293
request
294294
)
295295
}
296-
ReferencedAsset::None => {}
296+
ReferencedAsset::None | ReferencedAsset::Unresolveable => {}
297297
}
298298
}
299299
UrlRewriteBehavior::None => {

0 commit comments

Comments
 (0)