diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-06-26 17:24:10 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-26 21:24:10 +0000 |
commit | 0da01c0ca6b537f74be32126e567bdfc2c73ed16 (patch) | |
tree | ef29d32cffb03a975a58c16827b0691dda50a5b3 /ext/node/ops/require.rs | |
parent | 86e0292733d6d08bf338b68fd50863aef17b1e44 (diff) |
refactor: move PackageJson to deno_config (#24348)
Diffstat (limited to 'ext/node/ops/require.rs')
-rw-r--r-- | ext/node/ops/require.rs | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/ext/node/ops/require.rs b/ext/node/ops/require.rs index 3fde6c31a..3702a9047 100644 --- a/ext/node/ops/require.rs +++ b/ext/node/ops/require.rs @@ -17,7 +17,6 @@ use std::rc::Rc; use crate::resolution; use crate::resolution::NodeResolverRc; -use crate::AllowAllNodePermissions; use crate::NodeModuleKind; use crate::NodePermissions; use crate::NodeResolutionMode; @@ -390,7 +389,6 @@ where let pkg = node_resolver .get_closest_package_json( &Url::from_file_path(parent_path.unwrap()).unwrap(), - &mut AllowAllNodePermissions, ) .ok() .flatten(); @@ -497,30 +495,30 @@ where original } }; - let pkg = node_resolver.load_package_json( - &mut AllowAllNodePermissions, - PathBuf::from(&pkg_path).join("package.json"), - )?; + let Some(pkg) = node_resolver + .load_package_json(&PathBuf::from(&pkg_path).join("package.json"))? + else { + return Ok(None); + }; + let Some(exports) = &pkg.exports else { + return Ok(None); + }; - if let Some(exports) = &pkg.exports { - let referrer = Url::from_file_path(parent_path).unwrap(); - let r = node_resolver.package_exports_resolve( - &pkg.path, - &format!(".{expansion}"), - exports, - &referrer, - NodeModuleKind::Cjs, - resolution::REQUIRE_CONDITIONS, - NodeResolutionMode::Execution, - )?; - Ok(Some(if r.scheme() == "file" { - url_to_file_path_string(&r)? - } else { - r.to_string() - })) + let referrer = Url::from_file_path(parent_path).unwrap(); + let r = node_resolver.package_exports_resolve( + &pkg.path, + &format!(".{expansion}"), + exports, + &referrer, + NodeModuleKind::Cjs, + resolution::REQUIRE_CONDITIONS, + NodeResolutionMode::Execution, + )?; + Ok(Some(if r.scheme() == "file" { + url_to_file_path_string(&r)? } else { - Ok(None) - } + r.to_string() + })) } #[op2] @@ -537,12 +535,8 @@ where PathBuf::from(&filename).parent().unwrap(), )?; let node_resolver = state.borrow::<NodeResolverRc>().clone(); - let permissions = state.borrow_mut::<P>(); node_resolver - .get_closest_package_json( - &Url::from_file_path(filename).unwrap(), - permissions, - ) + .get_closest_package_json(&Url::from_file_path(filename).unwrap()) .map(|maybe_pkg| maybe_pkg.map(|pkg| (*pkg).clone())) } @@ -556,12 +550,16 @@ where P: NodePermissions + 'static, { let node_resolver = state.borrow::<NodeResolverRc>().clone(); - let permissions = state.borrow_mut::<P>(); let package_json_path = PathBuf::from(package_json_path); + if package_json_path.file_name() != Some("package.json".as_ref()) { + // permissions: do not allow reading a non-package.json file + return None; + } node_resolver - .load_package_json(permissions, package_json_path) - .map(|pkg| (*pkg).clone()) + .load_package_json(&package_json_path) .ok() + .flatten() + .map(|pkg| (*pkg).clone()) } #[op2] @@ -577,10 +575,8 @@ where let referrer_path = PathBuf::from(&referrer_filename); ensure_read_permission::<P>(state, &referrer_path)?; let node_resolver = state.borrow::<NodeResolverRc>(); - let Some(pkg) = node_resolver.get_closest_package_json_from_path( - &referrer_path, - &mut AllowAllNodePermissions, - )? + let Some(pkg) = + node_resolver.get_closest_package_json_from_path(&referrer_path)? else { return Ok(None); }; |