From e72485fb1776d2ffebd90ff716374edfba42d603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 10 May 2023 23:55:48 +0200 Subject: [PATCH] fix(node): conditional exports edge case (#19082) Fixes https://github.com/denoland/deno/issues/18743 --- cli/tests/testdata/npm/conditional_exports/main.js | 2 ++ cli/tests/testdata/npm/conditional_exports/main.out | 1 + .../testdata/npm/conditional_exports/main_node_modules.out | 1 + .../@denotest/conditional-exports/1.0.0/esm/client/m.js | 3 +++ ext/node/resolution.rs | 2 +- 5 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 cli/tests/testdata/npm/registry/@denotest/conditional-exports/1.0.0/esm/client/m.js diff --git a/cli/tests/testdata/npm/conditional_exports/main.js b/cli/tests/testdata/npm/conditional_exports/main.js index eb243a52c7..52b78bc22d 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 b374d9f6c9..9f65c1f9a6 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 525f31d5c6..94ce955812 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 0000000000..40e769031a --- /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 16720f22c0..9664915052 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)