diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-08-26 14:34:35 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-26 14:34:35 -0400 |
commit | ec98d86d216594e8fb8b63d32e2357d556a1b19f (patch) | |
tree | 302aebedfe5d584a5be05086c2c387c56c99dd16 /cli/node | |
parent | 9b324b1cf4a8ee4159abb041e72a8885a28e92a3 (diff) |
fix(npm): handle cjs re-exports with the same name as an export (#15626)
Diffstat (limited to 'cli/node')
-rw-r--r-- | cli/node/mod.rs | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/cli/node/mod.rs b/cli/node/mod.rs index 91dfd45f6..c19179d0c 100644 --- a/cli/node/mod.rs +++ b/cli/node/mod.rs @@ -539,6 +539,11 @@ pub fn translate_cjs_to_esm( maybe_syntax: None, })?; let analysis = parsed_source.analyze_cjs(); + let root_exports = analysis + .exports + .iter() + .map(|s| s.as_str()) + .collect::<HashSet<_>>(); let mut temp_var_count = 0; let mut source = vec![ @@ -578,8 +583,9 @@ pub fn translate_cjs_to_esm( idx, reexport )); - for export in analysis.exports.iter().filter(|e| e.as_str() != "default") - { + for export in analysis.exports.iter().filter(|e| { + e.as_str() != "default" && !root_exports.contains(e.as_str()) + }) { add_export( &mut source, export, @@ -605,12 +611,13 @@ pub fn translate_cjs_to_esm( let mut had_default = false; for export in analysis.exports.iter() { if export.as_str() == "default" { - // todo(dsherret): we should only do this if there was a `_esModule: true` instead - source.push(format!( - "export default Deno[Deno.internal].require.bindExport(mod[\"{}\"], mod);", - export, - )); - had_default = true; + if root_exports.contains("__esModule") { + source.push(format!( + "export default Deno[Deno.internal].require.bindExport(mod[\"{}\"], mod);", + export, + )); + had_default = true; + } } else { add_export( &mut source, |