diff options
author | Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> | 2024-09-24 18:10:01 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-25 01:10:01 +0000 |
commit | 5c40b47629bc83b9120019b77b34ced5eaabcffe (patch) | |
tree | 019d8007267d916e9f8aa09cf6e8d007b7cfa373 | |
parent | 6c26c1ed96da2fc869bddbfdbdc833f176f3f736 (diff) |
fix(add/install): default to "latest" tag for npm packages in `deno add npm:pkg` (#25858)
Fixes #25813.
I initially tried doing this in `deno_semver`, where it's a cleaner
change, but that caused breakage in deno in places where we don't expect
a tag (see https://github.com/denoland/deno/issues/25857).
This does not fix wildcard requirements failing to choose pre-release
versions. That's a little more involved and I'll do a separate PR.
6 files changed, 37 insertions, 2 deletions
diff --git a/cli/tools/registry/pm.rs b/cli/tools/registry/pm.rs index 05785ec74..c92710f46 100644 --- a/cli/tools/registry/pm.rs +++ b/cli/tools/registry/pm.rs @@ -5,6 +5,7 @@ mod cache_deps; pub use cache_deps::cache_top_level_deps; use deno_semver::jsr::JsrPackageReqReference; use deno_semver::npm::NpmPackageReqReference; +use deno_semver::VersionReq; use std::borrow::Cow; use std::path::PathBuf; @@ -717,7 +718,18 @@ impl AddPackageReq { Prefix::Npm => { let req_ref = NpmPackageReqReference::from_str(&format!("npm:{}", entry_text))?; - let package_req = req_ref.into_inner().req; + let mut package_req = req_ref.into_inner().req; + // deno_semver defaults to a version req of `*` if none is specified + // we want to default to `latest` instead + if package_req.version_req == *deno_semver::WILDCARD_VERSION_REQ + && package_req.version_req.version_text() == "*" + && !entry_text.contains("@*") + { + package_req.version_req = VersionReq::from_raw_text_and_inner( + "latest".into(), + deno_semver::RangeSetOrTag::Tag("latest".into()), + ); + } Ok(Ok(AddPackageReq { alias: maybe_alias.unwrap_or_else(|| package_req.name.to_string()), value: AddPackageReqValue::Npm(package_req), @@ -888,7 +900,9 @@ mod test { AddPackageReq::parse("@alias/pkg@npm:foo").unwrap().unwrap(), AddPackageReq { alias: "@alias/pkg".to_string(), - value: AddPackageReqValue::Npm(PackageReq::from_str("foo").unwrap()) + value: AddPackageReqValue::Npm( + PackageReq::from_str("foo@latest").unwrap() + ) } ); assert_eq!( diff --git a/tests/registry/npm/@denotest/unstable/1.0.0-beta.1/index.js b/tests/registry/npm/@denotest/unstable/1.0.0-beta.1/index.js new file mode 100644 index 000000000..ba330abd5 --- /dev/null +++ b/tests/registry/npm/@denotest/unstable/1.0.0-beta.1/index.js @@ -0,0 +1,3 @@ +export function sayHello() { + console.log("Hello") +}
\ No newline at end of file diff --git a/tests/registry/npm/@denotest/unstable/1.0.0-beta.1/package.json b/tests/registry/npm/@denotest/unstable/1.0.0-beta.1/package.json new file mode 100644 index 000000000..69f2a57cd --- /dev/null +++ b/tests/registry/npm/@denotest/unstable/1.0.0-beta.1/package.json @@ -0,0 +1,5 @@ +{ + "name": "@denotest/unstable", + "type": "module", + "version": "1.0.0-beta.1" +}
\ No newline at end of file diff --git a/tests/specs/add/only_unstable_versions/__test__.jsonc b/tests/specs/add/only_unstable_versions/__test__.jsonc new file mode 100644 index 000000000..d05628b6f --- /dev/null +++ b/tests/specs/add/only_unstable_versions/__test__.jsonc @@ -0,0 +1,9 @@ +{ + "tempDir": true, + "steps": [ + { + "args": "add npm:@denotest/unstable", + "output": "add.out" + } + ] +} diff --git a/tests/specs/add/only_unstable_versions/add.out b/tests/specs/add/only_unstable_versions/add.out new file mode 100644 index 000000000..48462b8be --- /dev/null +++ b/tests/specs/add/only_unstable_versions/add.out @@ -0,0 +1,3 @@ +Add npm:@denotest/unstable@1.0.0-beta.1 +Download http://localhost:4260/@denotest/unstable +Download http://localhost:4260/@denotest/unstable/1.0.0-beta.1.tgz diff --git a/tests/specs/add/only_unstable_versions/deno.json b/tests/specs/add/only_unstable_versions/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tests/specs/add/only_unstable_versions/deno.json @@ -0,0 +1 @@ +{} |