summaryrefslogtreecommitdiff
path: root/cli/node/mod.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-08-31 00:31:59 +0200
committerGitHub <noreply@github.com>2022-08-31 00:31:59 +0200
commitadec4f575eb19a48cefe451ce3962a6a4754e3ba (patch)
treeab2c6384364c45b0ce1f7d6ae225dae56d3ed8b6 /cli/node/mod.rs
parent79fe8ffff8f5032ed11df410c14acadfa1a74946 (diff)
fix(npm): translate CJS to ESM with name clashes for files and dirs (#15697)
Diffstat (limited to 'cli/node/mod.rs')
-rw-r--r--cli/node/mod.rs27
1 files changed, 18 insertions, 9 deletions
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<PathBuf, AnyError> {
- 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 {