From adec4f575eb19a48cefe451ce3962a6a4754e3ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 31 Aug 2022 00:31:59 +0200 Subject: fix(npm): translate CJS to ESM with name clashes for files and dirs (#15697) --- cli/node/mod.rs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'cli/node') diff --git a/cli/node/mod.rs b/cli/node/mod.rs index 66b0f32f1..c64ba6132 100644 --- a/cli/node/mod.rs +++ b/cli/node/mod.rs @@ -738,7 +738,6 @@ pub fn translate_cjs_to_esm( // if there are reexports, handle them first for (idx, reexport) in analysis.reexports.iter().enumerate() { // Firstly, resolve relate reexport specifier - // todo(dsherret): call module_resolve instead? let resolved_reexport = resolve( reexport, specifier, @@ -1039,19 +1038,29 @@ fn is_relative_specifier(specifier: &str) -> bool { } fn file_extension_probe( - mut p: PathBuf, + p: PathBuf, referrer: &Path, ) -> Result { - if p.exists() && !p.is_dir() { - Ok(p.clean()) - } else { - p.set_extension("js"); - if p.exists() && !p.is_dir() { - Ok(p) + let p = p.clean(); + if p.exists() { + let mut p_js = p.clone(); + p_js.set_extension("js"); + if p_js.exists() && p_js.is_file() { + return Ok(p_js); + } else if p.is_dir() { + return Ok(p.join("index.js")); } else { - Err(not_found(&p.clean().to_string_lossy(), referrer)) + return Ok(p); + } + } else { + let mut p_js = p.clone(); + p_js.set_extension("js"); + if p_js.exists() && p_js.is_file() { + return Ok(p_js); } } + + Err(not_found(&p.to_string_lossy(), referrer)) } fn not_found(path: &str, referrer: &Path) -> AnyError { -- cgit v1.2.3