summaryrefslogtreecommitdiff
path: root/cli/args/package_json.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/args/package_json.rs')
-rw-r--r--cli/args/package_json.rs34
1 files changed, 9 insertions, 25 deletions
diff --git a/cli/args/package_json.rs b/cli/args/package_json.rs
index b9f0919d5..2529e54fd 100644
--- a/cli/args/package_json.rs
+++ b/cli/args/package_json.rs
@@ -1,6 +1,5 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-use std::collections::HashSet;
use std::path::PathBuf;
use std::sync::Arc;
@@ -10,18 +9,16 @@ use deno_package_json::PackageJsonDepValue;
use deno_semver::npm::NpmPackageReqReference;
use deno_semver::package::PackageReq;
-use crate::util::path::is_banned_path_char;
-
#[derive(Debug)]
pub struct InstallNpmRemotePkg {
- pub alias: String,
+ pub alias: Option<String>,
pub base_dir: PathBuf,
pub req: PackageReq,
}
#[derive(Debug)]
pub struct InstallNpmWorkspacePkg {
- pub alias: String,
+ pub alias: Option<String>,
pub target_dir: PathBuf,
}
@@ -43,16 +40,13 @@ impl NpmInstallDepsProvider {
let workspace_npm_pkgs = workspace.npm_packages();
for (_, folder) in workspace.config_folders() {
- let mut deno_json_aliases = HashSet::new();
-
// deal with the deno.json first because it takes precedence during resolution
if let Some(deno_json) = &folder.deno_json {
// don't bother with externally referenced import maps as users
// should inline their import map to get this behaviour
if let Some(serde_json::Value::Object(obj)) = &deno_json.json.imports {
- deno_json_aliases.reserve(obj.len());
let mut pkg_pkgs = Vec::with_capacity(obj.len());
- for (alias, value) in obj {
+ for (_alias, value) in obj {
let serde_json::Value::String(specifier) = value else {
continue;
};
@@ -60,11 +54,6 @@ impl NpmInstallDepsProvider {
else {
continue;
};
- // skip any aliases with banned characters
- if alias.chars().any(|c| c == '\\' || is_banned_path_char(c)) {
- continue;
- }
- deno_json_aliases.insert(alias.to_lowercase());
let pkg_req = npm_req_ref.into_inner().req;
let workspace_pkg = workspace_npm_pkgs
.iter()
@@ -72,12 +61,12 @@ impl NpmInstallDepsProvider {
if let Some(pkg) = workspace_pkg {
workspace_pkgs.push(InstallNpmWorkspacePkg {
- alias: alias.to_string(),
+ alias: None,
target_dir: pkg.pkg_json.dir_path().to_path_buf(),
});
} else {
pkg_pkgs.push(InstallNpmRemotePkg {
- alias: alias.to_string(),
+ alias: None,
base_dir: deno_json.dir_path(),
req: pkg_req,
});
@@ -85,7 +74,7 @@ impl NpmInstallDepsProvider {
}
// sort within each package (more like npm resolution)
- pkg_pkgs.sort_by(|a, b| a.alias.cmp(&b.alias));
+ pkg_pkgs.sort_by(|a, b| a.req.cmp(&b.req));
remote_pkgs.extend(pkg_pkgs);
}
}
@@ -97,11 +86,6 @@ impl NpmInstallDepsProvider {
let Ok(dep) = dep else {
continue;
};
- if deno_json_aliases.contains(&alias.to_lowercase()) {
- // aliases in deno.json take precedence over package.json, so
- // since this can't be resolved don't bother installing it
- continue;
- }
match dep {
PackageJsonDepValue::Req(pkg_req) => {
let workspace_pkg = workspace_npm_pkgs.iter().find(|pkg| {
@@ -112,12 +96,12 @@ impl NpmInstallDepsProvider {
if let Some(pkg) = workspace_pkg {
workspace_pkgs.push(InstallNpmWorkspacePkg {
- alias,
+ alias: Some(alias),
target_dir: pkg.pkg_json.dir_path().to_path_buf(),
});
} else {
pkg_pkgs.push(InstallNpmRemotePkg {
- alias,
+ alias: Some(alias),
base_dir: pkg_json.dir_path().to_path_buf(),
req: pkg_req,
});
@@ -128,7 +112,7 @@ impl NpmInstallDepsProvider {
pkg.matches_name_and_version_req(&alias, &version_req)
}) {
workspace_pkgs.push(InstallNpmWorkspacePkg {
- alias,
+ alias: Some(alias),
target_dir: pkg.pkg_json.dir_path().to_path_buf(),
});
}