Skip to content

Commit 1e41700

Browse files
committed
feat(turbopack): externalType support umd
1 parent 2467728 commit 1e41700

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,7 @@ pub enum ExternalType {
476476
EcmaScriptModule,
477477
Global,
478478
Script,
479+
Umd,
479480
}
480481

481482
impl Display for ExternalType {
@@ -486,6 +487,7 @@ impl Display for ExternalType {
486487
ExternalType::Url => write!(f, "url"),
487488
ExternalType::Global => write!(f, "global"),
488489
ExternalType::Script => write!(f, "script"),
490+
ExternalType::Umd => write!(f, "umd"),
489491
}
490492
}
491493
}
@@ -2768,7 +2770,7 @@ async fn resolve_import_map_result(
27682770
ExternalType::EcmaScriptModule => {
27692771
node_esm_resolve_options(alias_lookup_path.root().await?.clone_value())
27702772
}
2771-
ExternalType::Script | ExternalType::Url | ExternalType::Global => options,
2773+
ExternalType::Script | ExternalType::Url | ExternalType::Global | ExternalType::Umd => options,
27722774
},
27732775
)
27742776
.await?

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ pub enum CachedExternalType {
4747
EcmaScriptViaImport,
4848
Global,
4949
Script,
50+
Umd,
5051
}
5152

5253
impl Display for CachedExternalType {
@@ -57,6 +58,7 @@ impl Display for CachedExternalType {
5758
CachedExternalType::EcmaScriptViaImport => write!(f, "esm_import"),
5859
CachedExternalType::Global => write!(f, "global"),
5960
CachedExternalType::Script => write!(f, "script"),
61+
CachedExternalType::Umd => write!(f, "umd"),
6062
}
6163
}
6264
}
@@ -98,11 +100,11 @@ impl CachedExternalModule {
98100
CachedExternalType::Global => {
99101
if self.request.is_empty() {
100102
writeln!(code, "const mod = {{}};")?;
101-
} else if self.request.contains('/') {
103+
} else if self.request.contains(' ') {
102104
// Handle requests with '/' by splitting into nested global access
103105
let global_access = self
104106
.request
105-
.split('/')
107+
.split(' ')
106108
.fold("globalThis".to_string(), |acc, part| {
107109
format!("{}[{}]", acc, StringifyJs(part))
108110
});
@@ -116,6 +118,22 @@ impl CachedExternalModule {
116118
)?;
117119
}
118120
}
121+
CachedExternalType::Umd => {
122+
// request format is: "root React commonjs react"
123+
let parts = self.request.split(' ').collect::<Vec<_>>();
124+
let global_name = parts[1];
125+
let module_name = parts[2];
126+
127+
writeln!(
128+
code,
129+
"if (typeof exports === 'object' && typeof module === 'object') {{ const mod \
130+
= {TURBOPACK_EXTERNAL_REQUIRE}({}, () => require({})); }} else {{ const mod \
131+
= globalThis[{}] }}",
132+
StringifyJs(global_name),
133+
StringifyJs(module_name),
134+
StringifyJs(module_name),
135+
)?;
136+
}
119137
CachedExternalType::Script => {
120138
// Parse the request format: "variableName@url"
121139
// e.g., "foo@https://test.test.com"

turbopack/crates/turbopack/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ async fn externals_tracing_module_context(ty: ExternalType) -> Result<Vc<ModuleA
660660
custom_conditions: match ty {
661661
ExternalType::CommonJs => vec!["require".into()],
662662
ExternalType::EcmaScriptModule => vec!["import".into()],
663-
ExternalType::Url | ExternalType::Global | ExternalType::Script => vec![],
663+
ExternalType::Url | ExternalType::Global | ExternalType::Script | ExternalType::Umd => vec![],
664664
},
665665
..Default::default()
666666
};
@@ -1014,6 +1014,7 @@ pub async fn replace_external(
10141014
}
10151015
ExternalType::Global => CachedExternalType::Global,
10161016
ExternalType::Script => CachedExternalType::Script,
1017+
ExternalType::Umd => CachedExternalType::Umd,
10171018
ExternalType::Url => {
10181019
// we don't want to wrap url externals.
10191020
return Ok(None);

0 commit comments

Comments
 (0)