summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorawait-ovo <13152410380@163.com>2023-09-19 04:02:58 +0800
committerGitHub <noreply@github.com>2023-09-18 20:02:58 +0000
commitdc1da309274823c15ad8ade0545678f8a9b8e54d (patch)
tree95514a8d53c3bcea02f07ac995946c68e5a37fa6
parentf5963b6a0595810c0e4b6da793ce0d50a9944796 (diff)
fix(cli): for main-module that exists in package.json, use the version defined in package.json directly (#20328)
-rw-r--r--cli/factory.rs1
-rw-r--r--cli/standalone/mod.rs1
-rw-r--r--cli/tests/integration/npm_tests.rs21
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/bin/0.5.0/package.json2
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/bin/0.6.0/package.json2
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/bin/1.0.0/package.json2
-rw-r--r--cli/tests/testdata/npm/run_existing_npm_package/main.out3
-rw-r--r--cli/tests/testdata/npm/run_existing_npm_package/package.json6
-rw-r--r--cli/tests/testdata/npm/run_existing_npm_package_with_subpath/main.out5
-rw-r--r--cli/tests/testdata/npm/run_existing_npm_package_with_subpath/package.json6
-rw-r--r--cli/worker.rs26
11 files changed, 72 insertions, 3 deletions
diff --git a/cli/factory.rs b/cli/factory.rs
index 42d98e234..28788093b 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -684,6 +684,7 @@ impl CliFactory {
.unsafely_ignore_certificate_errors()
.clone(),
unstable: self.options.unstable(),
+ maybe_package_json_deps: self.options.maybe_package_json_deps(),
})
}
}
diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs
index d7547f847..5ab39d719 100644
--- a/cli/standalone/mod.rs
+++ b/cli/standalone/mod.rs
@@ -458,6 +458,7 @@ pub async fn run(
unsafely_ignore_certificate_errors: metadata
.unsafely_ignore_certificate_errors,
unstable: metadata.unstable,
+ maybe_package_json_deps: package_json_deps_provider.deps().cloned(),
},
);
diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs
index edd100d7d..09330a80c 100644
--- a/cli/tests/integration/npm_tests.rs
+++ b/cli/tests/integration/npm_tests.rs
@@ -448,6 +448,27 @@ itest!(permissions_outside_package {
http_server: true,
});
+itest!(run_existing_npm_package {
+ args: "run --allow-read --node-modules-dir npm:@denotest/bin",
+ output: "npm/run_existing_npm_package/main.out",
+ envs: env_vars_for_npm_tests(),
+ http_server: true,
+ temp_cwd: true,
+ cwd: Some("npm/run_existing_npm_package/"),
+ copy_temp_dir: Some("npm/run_existing_npm_package/"),
+});
+
+itest!(run_existing_npm_package_with_subpath {
+ args:
+ "run --allow-read --node-modules-dir npm:@denotest/bin/cli-esm dev --help",
+ output: "npm/run_existing_npm_package_with_subpath/main.out",
+ envs: env_vars_for_npm_tests(),
+ http_server: true,
+ temp_cwd: true,
+ cwd: Some("npm/run_existing_npm_package_with_subpath/"),
+ copy_temp_dir: Some("npm/run_existing_npm_package_with_subpath/"),
+});
+
#[test]
fn parallel_downloading() {
let (out, _err) = util::run_and_collect_output_with_args(
diff --git a/cli/tests/testdata/npm/registry/@denotest/bin/0.5.0/package.json b/cli/tests/testdata/npm/registry/@denotest/bin/0.5.0/package.json
index caa2ef538..1b077a52e 100644
--- a/cli/tests/testdata/npm/registry/@denotest/bin/0.5.0/package.json
+++ b/cli/tests/testdata/npm/registry/@denotest/bin/0.5.0/package.json
@@ -1,5 +1,5 @@
{
- "name": "@deno/bin",
+ "name": "@denotest/bin",
"version": "0.5.0",
"bin": "./cli.mjs"
}
diff --git a/cli/tests/testdata/npm/registry/@denotest/bin/0.6.0/package.json b/cli/tests/testdata/npm/registry/@denotest/bin/0.6.0/package.json
index db50464bc..a9ff2d946 100644
--- a/cli/tests/testdata/npm/registry/@denotest/bin/0.6.0/package.json
+++ b/cli/tests/testdata/npm/registry/@denotest/bin/0.6.0/package.json
@@ -1,4 +1,4 @@
{
- "name": "@deno/bin",
+ "name": "@denotest/bin",
"version": "0.6.0"
}
diff --git a/cli/tests/testdata/npm/registry/@denotest/bin/1.0.0/package.json b/cli/tests/testdata/npm/registry/@denotest/bin/1.0.0/package.json
index 78a1abff2..27118c21a 100644
--- a/cli/tests/testdata/npm/registry/@denotest/bin/1.0.0/package.json
+++ b/cli/tests/testdata/npm/registry/@denotest/bin/1.0.0/package.json
@@ -1,5 +1,5 @@
{
- "name": "@deno/bin",
+ "name": "@denotest/bin",
"version": "1.0.0",
"bin": {
"cli-esm": "./cli.mjs",
diff --git a/cli/tests/testdata/npm/run_existing_npm_package/main.out b/cli/tests/testdata/npm/run_existing_npm_package/main.out
new file mode 100644
index 000000000..baf7b7afd
--- /dev/null
+++ b/cli/tests/testdata/npm/run_existing_npm_package/main.out
@@ -0,0 +1,3 @@
+Download http://localhost:4545/npm/registry/@denotest/bin
+Download http://localhost:4545/npm/registry/@denotest/bin/0.5.0.tgz
+Initialize @denotest/bin@0.5.0
diff --git a/cli/tests/testdata/npm/run_existing_npm_package/package.json b/cli/tests/testdata/npm/run_existing_npm_package/package.json
new file mode 100644
index 000000000..1cd6d749d
--- /dev/null
+++ b/cli/tests/testdata/npm/run_existing_npm_package/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "run-existing-npm-package",
+ "dependencies": {
+ "@denotest/bin": "0.5.0"
+ }
+}
diff --git a/cli/tests/testdata/npm/run_existing_npm_package_with_subpath/main.out b/cli/tests/testdata/npm/run_existing_npm_package_with_subpath/main.out
new file mode 100644
index 000000000..bec78df94
--- /dev/null
+++ b/cli/tests/testdata/npm/run_existing_npm_package_with_subpath/main.out
@@ -0,0 +1,5 @@
+Download http://localhost:4545/npm/registry/@denotest/bin
+Download http://localhost:4545/npm/registry/@denotest/bin/1.0.0.tgz
+Initialize @denotest/bin@1.0.0
+dev
+--help
diff --git a/cli/tests/testdata/npm/run_existing_npm_package_with_subpath/package.json b/cli/tests/testdata/npm/run_existing_npm_package_with_subpath/package.json
new file mode 100644
index 000000000..e9a7e84ce
--- /dev/null
+++ b/cli/tests/testdata/npm/run_existing_npm_package_with_subpath/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "run-existing-npm-package",
+ "dependencies": {
+ "@denotest/bin": "1.0.0"
+ }
+}
diff --git a/cli/worker.rs b/cli/worker.rs
index 45968afe7..b29f22e6e 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -40,7 +40,9 @@ use deno_runtime::worker::WorkerOptions;
use deno_runtime::BootstrapOptions;
use deno_runtime::WorkerLogLevel;
use deno_semver::npm::NpmPackageReqReference;
+use deno_semver::package::PackageReqReference;
+use crate::args::package_json::PackageJsonDeps;
use crate::args::StorageKeyResolver;
use crate::errors;
use crate::npm::CliNpmResolver;
@@ -89,6 +91,7 @@ pub struct CliMainWorkerOptions {
pub seed: Option<u64>,
pub unsafely_ignore_certificate_errors: Option<Vec<String>>,
pub unstable: bool,
+ pub maybe_package_json_deps: Option<PackageJsonDeps>,
}
struct SharedWorkerState {
@@ -356,6 +359,29 @@ impl CliMainWorkerFactory {
let (main_module, is_main_cjs) = if let Ok(package_ref) =
NpmPackageReqReference::from_specifier(&main_module)
{
+ let package_ref = if package_ref.req().version_req.version_text() == "*" {
+ // When using the wildcard version, select the same version used in the
+ // package.json deps in order to prevent adding new dependency version
+ shared
+ .options
+ .maybe_package_json_deps
+ .as_ref()
+ .and_then(|deps| {
+ deps
+ .values()
+ .filter_map(|v| v.as_ref().ok())
+ .find(|dep| dep.name == package_ref.req().name)
+ .map(|dep| {
+ NpmPackageReqReference::new(PackageReqReference {
+ req: dep.clone(),
+ sub_path: package_ref.sub_path().map(|s| s.to_string()),
+ })
+ })
+ })
+ .unwrap_or(package_ref)
+ } else {
+ package_ref
+ };
shared
.npm_resolver
.add_package_reqs(&[package_ref.req().clone()])