summaryrefslogtreecommitdiff
path: root/cli/compat/esm_resolver.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/compat/esm_resolver.rs')
-rw-r--r--cli/compat/esm_resolver.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/cli/compat/esm_resolver.rs b/cli/compat/esm_resolver.rs
index f069428e5..0709c66a3 100644
--- a/cli/compat/esm_resolver.rs
+++ b/cli/compat/esm_resolver.rs
@@ -926,6 +926,20 @@ struct PackageConfig {
typ: String,
}
+pub fn check_if_should_use_esm_loader(
+ main_module: &ModuleSpecifier,
+) -> Result<bool, AnyError> {
+ let s = main_module.as_str();
+ if s.ends_with(".mjs") {
+ return Ok(true);
+ }
+ if s.ends_with(".cjs") {
+ return Ok(false);
+ }
+ let package_config = get_package_scope_config(main_module)?;
+ Ok(package_config.typ == "module")
+}
+
fn get_package_config(
path: PathBuf,
specifier: &str,
@@ -1219,4 +1233,18 @@ mod tests {
assert!(is_relative_specifier("./foo.js"));
assert!(!is_relative_specifier("https://deno.land/std/node/http.ts"));
}
+
+ #[test]
+ fn test_check_if_should_use_esm_loader() {
+ let basic = testdir("basic");
+ let main = Url::from_file_path(basic.join("main.js")).unwrap();
+ assert!(check_if_should_use_esm_loader(&main).unwrap());
+
+ let cjs = Url::from_file_path(basic.join("main.cjs")).unwrap();
+ assert!(!check_if_should_use_esm_loader(&cjs).unwrap());
+
+ let not_esm = testdir("not_esm");
+ let main = Url::from_file_path(not_esm.join("main.js")).unwrap();
+ assert!(!check_if_should_use_esm_loader(&main).unwrap());
+ }
}