diff options
Diffstat (limited to 'cli/args/package_json.rs')
-rw-r--r-- | cli/args/package_json.rs | 34 |
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(), }); } |