summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-10-14 15:35:52 -0400
committerGitHub <noreply@github.com>2024-10-14 19:35:52 +0000
commitc5449d71da2d623e866d733b6db180a6f94ff7c6 (patch)
tree91f27329054b33b7524618cb57a484faa74ba82e
parentf3530c858f873b0f4561a52fa92ddd1d099612b3 (diff)
fix(install): support installing npm package with alias (#26246)
Just tried this out today and it wasn't properly implemented in https://github.com/denoland/deno/pull/24156
-rw-r--r--cli/tools/registry/pm.rs12
-rw-r--r--tests/specs/add/alias/__test__.jsonc13
-rw-r--r--tests/specs/add/alias/package.json4
-rw-r--r--tests/specs/add/alias/package.json.out5
-rw-r--r--tests/specs/add/dev/package.json.out4
-rw-r--r--tests/specs/install/future_install_local_add_npm/package.json.out4
-rw-r--r--tests/specs/install/install_add_dev/package.json.out4
-rw-r--r--tests/specs/install/install_deprecated_package/package.json.out4
-rw-r--r--tests/specs/remove/package_json/rm_add_package.json.out4
9 files changed, 48 insertions, 6 deletions
diff --git a/cli/tools/registry/pm.rs b/cli/tools/registry/pm.rs
index 5dc042620..3276acfbf 100644
--- a/cli/tools/registry/pm.rs
+++ b/cli/tools/registry/pm.rs
@@ -363,7 +363,14 @@ fn package_json_dependency_entry(
selected: SelectedPackage,
) -> (String, String) {
if let Some(npm_package) = selected.package_name.strip_prefix("npm:") {
- (npm_package.into(), selected.version_req)
+ if selected.import_name == npm_package {
+ (npm_package.into(), selected.version_req)
+ } else {
+ (
+ selected.import_name,
+ format!("npm:{}@{}", npm_package, selected.version_req),
+ )
+ }
} else if let Some(jsr_package) = selected.package_name.strip_prefix("jsr:") {
let jsr_package = jsr_package.strip_prefix('@').unwrap_or(jsr_package);
let scope_replaced = jsr_package.replace('/', "__");
@@ -741,6 +748,9 @@ fn generate_imports(mut packages_to_version: Vec<(String, String)>) -> String {
let mut contents = vec![];
let len = packages_to_version.len();
for (index, (package, version)) in packages_to_version.iter().enumerate() {
+ if index == 0 {
+ contents.push(String::new()); // force a newline at the start
+ }
// TODO(bartlomieju): fix it, once we start support specifying version on the cli
contents.push(format!("\"{}\": \"{}\"", package, version));
if index != len - 1 {
diff --git a/tests/specs/add/alias/__test__.jsonc b/tests/specs/add/alias/__test__.jsonc
new file mode 100644
index 000000000..8a16ad3b4
--- /dev/null
+++ b/tests/specs/add/alias/__test__.jsonc
@@ -0,0 +1,13 @@
+{
+ "tempDir": true,
+ "steps": [{
+ "args": "install my-alias@npm:@denotest/add",
+ "output": "[WILDCARD]"
+ }, {
+ "args": [
+ "eval",
+ "console.log(Deno.readTextFileSync('package.json').trim())"
+ ],
+ "output": "package.json.out"
+ }]
+}
diff --git a/tests/specs/add/alias/package.json b/tests/specs/add/alias/package.json
new file mode 100644
index 000000000..9664f260a
--- /dev/null
+++ b/tests/specs/add/alias/package.json
@@ -0,0 +1,4 @@
+{
+ "dependencies": {
+ }
+}
diff --git a/tests/specs/add/alias/package.json.out b/tests/specs/add/alias/package.json.out
new file mode 100644
index 000000000..b6326e8bf
--- /dev/null
+++ b/tests/specs/add/alias/package.json.out
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "my-alias": "npm:@denotest/add@^1.0.0"
+ }
+}
diff --git a/tests/specs/add/dev/package.json.out b/tests/specs/add/dev/package.json.out
index d5ca56e00..866724397 100644
--- a/tests/specs/add/dev/package.json.out
+++ b/tests/specs/add/dev/package.json.out
@@ -1,3 +1,5 @@
{
- "devDependencies": { "@denotest/esm-basic": "^1.0.0" }
+ "devDependencies": {
+ "@denotest/esm-basic": "^1.0.0"
+ }
}
diff --git a/tests/specs/install/future_install_local_add_npm/package.json.out b/tests/specs/install/future_install_local_add_npm/package.json.out
index ad8518e79..613d98636 100644
--- a/tests/specs/install/future_install_local_add_npm/package.json.out
+++ b/tests/specs/install/future_install_local_add_npm/package.json.out
@@ -1,3 +1,5 @@
{
- "dependencies": { "@denotest/esm-basic": "^1.0.0" }
+ "dependencies": {
+ "@denotest/esm-basic": "^1.0.0"
+ }
}
diff --git a/tests/specs/install/install_add_dev/package.json.out b/tests/specs/install/install_add_dev/package.json.out
index d5ca56e00..866724397 100644
--- a/tests/specs/install/install_add_dev/package.json.out
+++ b/tests/specs/install/install_add_dev/package.json.out
@@ -1,3 +1,5 @@
{
- "devDependencies": { "@denotest/esm-basic": "^1.0.0" }
+ "devDependencies": {
+ "@denotest/esm-basic": "^1.0.0"
+ }
}
diff --git a/tests/specs/install/install_deprecated_package/package.json.out b/tests/specs/install/install_deprecated_package/package.json.out
index 4b4b08087..0cf36cd24 100644
--- a/tests/specs/install/install_deprecated_package/package.json.out
+++ b/tests/specs/install/install_deprecated_package/package.json.out
@@ -1,3 +1,5 @@
{
- "dependencies": { "@denotest/deprecated-package": "^1.0.0" }
+ "dependencies": {
+ "@denotest/deprecated-package": "^1.0.0"
+ }
}
diff --git a/tests/specs/remove/package_json/rm_add_package.json.out b/tests/specs/remove/package_json/rm_add_package.json.out
index d5ca56e00..866724397 100644
--- a/tests/specs/remove/package_json/rm_add_package.json.out
+++ b/tests/specs/remove/package_json/rm_add_package.json.out
@@ -1,3 +1,5 @@
{
- "devDependencies": { "@denotest/esm-basic": "^1.0.0" }
+ "devDependencies": {
+ "@denotest/esm-basic": "^1.0.0"
+ }
}