summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-05-10 23:55:48 +0200
committerGitHub <noreply@github.com>2023-05-10 23:55:48 +0200
commite72485fb1776d2ffebd90ff716374edfba42d603 (patch)
treea5176ee6ee23c0fcbdab1290cff02e68003c0f01
parentec67e96a124398a2eb12ed8721076ad0147be113 (diff)
fix(node): conditional exports edge case (#19082)
Fixes https://github.com/denoland/deno/issues/18743
-rw-r--r--cli/tests/testdata/npm/conditional_exports/main.js2
-rw-r--r--cli/tests/testdata/npm/conditional_exports/main.out1
-rw-r--r--cli/tests/testdata/npm/conditional_exports/main_node_modules.out1
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/conditional-exports/1.0.0/esm/client/m.js3
-rw-r--r--ext/node/resolution.rs2
5 files changed, 8 insertions, 1 deletions
diff --git a/cli/tests/testdata/npm/conditional_exports/main.js b/cli/tests/testdata/npm/conditional_exports/main.js
index eb243a52c..52b78bc22 100644
--- a/cli/tests/testdata/npm/conditional_exports/main.js
+++ b/cli/tests/testdata/npm/conditional_exports/main.js
@@ -3,6 +3,7 @@ import foo from "npm:@denotest/conditional-exports/foo.js";
import client from "npm:@denotest/conditional-exports/client";
import clientFoo from "npm:@denotest/conditional-exports/client/foo";
import clientBar from "npm:@denotest/conditional-exports/client/bar";
+import clientM from "npm:@denotest/conditional-exports/client/m";
import supportsESM from "npm:supports-esm";
console.log(mod);
@@ -10,4 +11,5 @@ console.log(foo);
console.log(client);
console.log(clientFoo);
console.log(clientBar);
+console.log(clientM);
console.log(supportsESM);
diff --git a/cli/tests/testdata/npm/conditional_exports/main.out b/cli/tests/testdata/npm/conditional_exports/main.out
index b374d9f6c..9f65c1f9a 100644
--- a/cli/tests/testdata/npm/conditional_exports/main.out
+++ b/cli/tests/testdata/npm/conditional_exports/main.out
@@ -11,4 +11,5 @@ Download http://localhost:4545/npm/registry/supports-esm/supports-esm-1.0.0.tgz
{ hello: "from esm client" }
{ hello: "from esm client foo" }
{ hello: "from esm client bar" }
+{ hello: "from esm client m" }
true
diff --git a/cli/tests/testdata/npm/conditional_exports/main_node_modules.out b/cli/tests/testdata/npm/conditional_exports/main_node_modules.out
index 525f31d5c..94ce95581 100644
--- a/cli/tests/testdata/npm/conditional_exports/main_node_modules.out
+++ b/cli/tests/testdata/npm/conditional_exports/main_node_modules.out
@@ -15,4 +15,5 @@ Initialize supports-esm@1.0.0
{ hello: "from esm client" }
{ hello: "from esm client foo" }
{ hello: "from esm client bar" }
+{ hello: "from esm client m" }
true
diff --git a/cli/tests/testdata/npm/registry/@denotest/conditional-exports/1.0.0/esm/client/m.js b/cli/tests/testdata/npm/registry/@denotest/conditional-exports/1.0.0/esm/client/m.js
new file mode 100644
index 000000000..40e769031
--- /dev/null
+++ b/cli/tests/testdata/npm/registry/@denotest/conditional-exports/1.0.0/esm/client/m.js
@@ -0,0 +1,3 @@
+export default {
+ hello: "from esm client m",
+} \ No newline at end of file
diff --git a/ext/node/resolution.rs b/ext/node/resolution.rs
index 16720f22c..966491505 100644
--- a/ext/node/resolution.rs
+++ b/ext/node/resolution.rs
@@ -922,7 +922,7 @@ impl NodeResolver {
// emitTrailingSlashPatternDeprecation();
}
let pattern_trailer = &key[pattern_index + 1..];
- if package_subpath.len() > key.len()
+ if package_subpath.len() >= key.len()
&& package_subpath.ends_with(&pattern_trailer)
&& pattern_key_compare(best_match, key) == 1
&& key.rfind('*') == Some(pattern_index)