Skip to content

Commit 6527be6

Browse files
committed
reduce number of turbo-tasks function calls in EsmAssertReference::code_generation
1 parent ec2c206 commit 6527be6

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
@@ -68,7 +68,6 @@ pub enum ModuleResolveResultItem {
6868
Error(Vc<RcStr>),
6969
Empty,
7070
Custom(u8),
71-
Unresolveable,
7271
}
7372

7473
#[turbo_tasks::value(shared)]
@@ -396,7 +395,6 @@ pub enum ResolveResultItem {
396395
Error(Vc<RcStr>),
397396
Empty,
398397
Custom(u8),
399-
Unresolveable,
400398
}
401399

402400
/// Represents the key for a request that leads to a certain results during
@@ -486,9 +484,6 @@ impl ValueToString for ResolveResult {
486484
ResolveResultItem::Custom(_) => {
487485
result.push_str("custom");
488486
}
489-
ResolveResultItem::Unresolveable => {
490-
result.push_str("unresolveable");
491-
}
492487
}
493488
result.push('\n');
494489
}
@@ -673,9 +668,6 @@ impl ResolveResult {
673668
ResolveResultItem::Custom(u8) => {
674669
ModuleResolveResultItem::Custom(u8)
675670
}
676-
ResolveResultItem::Unresolveable => {
677-
ModuleResolveResultItem::Unresolveable
678-
}
679671
},
680672
))
681673
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ impl AsyncModule {
134134
}
135135
}
136136
ReferencedAsset::External(..) => None,
137-
ReferencedAsset::None => None,
137+
ReferencedAsset::None | ReferencedAsset::Unresolveable => None,
138138
})
139139
})
140140
.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
@@ -206,7 +206,7 @@ impl CodeGenerateable for UrlAssetReference {
206206
request
207207
)
208208
}
209-
ReferencedAsset::None => {}
209+
ReferencedAsset::None | ReferencedAsset::Unresolveable => {}
210210
}
211211
}
212212
UrlRewriteBehavior::Full => {
@@ -294,7 +294,7 @@ impl CodeGenerateable for UrlAssetReference {
294294
request
295295
)
296296
}
297-
ReferencedAsset::None => {}
297+
ReferencedAsset::None | ReferencedAsset::Unresolveable => {}
298298
}
299299
}
300300
UrlRewriteBehavior::None => {

0 commit comments

Comments
 (0)