diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-04-24 21:07:48 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-24 21:07:48 -0400 |
commit | 5b4a9b48aeabded174cc161bfdafb6529cffbca1 (patch) | |
tree | 77a2e82cfe04e2c1c04200496499a11f6d53b7e9 /ext/node/ops/require.rs | |
parent | 667acb075c0f1fb62bc1177f46b550e9dd506c00 (diff) |
refactor(ext/node): enforce interior mutable for `NodePermissions` to remove clones (#18831)
We can make `NodePermissions` rely on interior mutability (which the
`PermissionsContainer` is already doing) in order to not have to clone
everything all the time. This also reduces the chance of an accidental
`borrow` while `borrrow_mut`.
Diffstat (limited to 'ext/node/ops/require.rs')
-rw-r--r-- | ext/node/ops/require.rs | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/ext/node/ops/require.rs b/ext/node/ops/require.rs index 513b3f589..34eac8475 100644 --- a/ext/node/ops/require.rs +++ b/ext/node/ops/require.rs @@ -32,11 +32,8 @@ fn ensure_read_permission<P>( where P: NodePermissions + 'static, { - let resolver = { - let resolver = state.borrow::<Arc<dyn NpmResolver>>(); - resolver.clone() - }; - let permissions = state.borrow_mut::<P>(); + let resolver = state.borrow::<Arc<dyn NpmResolver>>(); + let permissions = state.borrow::<P>(); resolver.ensure_read_permission(permissions, file_path) } @@ -98,7 +95,7 @@ pub fn op_require_node_module_paths<Env>( where Env: NodeEnv + 'static, { - let fs = state.borrow::<Arc<dyn NodeFs>>().clone(); + let fs = state.borrow::<Arc<dyn NodeFs>>(); // Guarantee that "from" is absolute. let from = deno_core::resolve_path( &from, @@ -267,7 +264,7 @@ where { let path = PathBuf::from(path); ensure_read_permission::<Env::P>(state, &path)?; - let fs = state.borrow::<Arc<dyn NodeFs>>().clone(); + let fs = state.borrow::<Arc<dyn NodeFs>>(); if let Ok(metadata) = fs.metadata(&path) { if metadata.is_file { return Ok(0); @@ -289,7 +286,7 @@ where { let path = PathBuf::from(request); ensure_read_permission::<Env::P>(state, &path)?; - let fs = state.borrow::<Arc<dyn NodeFs>>().clone(); + let fs = state.borrow::<Arc<dyn NodeFs>>(); let mut canonicalized_path = fs.canonicalize(&path)?; if cfg!(windows) { canonicalized_path = PathBuf::from( @@ -358,7 +355,7 @@ where if let Some(parent_id) = maybe_parent_id { if parent_id == "<repl>" || parent_id == "internal/preload" { - let fs = state.borrow::<Arc<dyn NodeFs>>().clone(); + let fs = state.borrow::<Arc<dyn NodeFs>>(); if let Ok(cwd) = fs.current_dir() { ensure_read_permission::<Env::P>(state, &cwd)?; return Ok(Some(cwd.to_string_lossy().to_string())); @@ -381,8 +378,8 @@ where return Ok(None); } - let node_resolver = state.borrow::<Rc<NodeResolver>>().clone(); - let permissions = state.borrow_mut::<Env::P>(); + let node_resolver = state.borrow::<Rc<NodeResolver>>(); + let permissions = state.borrow::<Env::P>(); let pkg = node_resolver .get_package_scope_config( &Url::from_file_path(parent_path.unwrap()).unwrap(), @@ -441,7 +438,7 @@ where { let file_path = PathBuf::from(file_path); ensure_read_permission::<Env::P>(state, &file_path)?; - let fs = state.borrow::<Arc<dyn NodeFs>>().clone(); + let fs = state.borrow::<Arc<dyn NodeFs>>(); Ok(fs.read_to_string(&file_path)?) } @@ -469,10 +466,10 @@ fn op_require_resolve_exports<Env>( where Env: NodeEnv + 'static, { - let fs = state.borrow::<Arc<dyn NodeFs>>().clone(); - let npm_resolver = state.borrow::<Arc<dyn NpmResolver>>().clone(); - let node_resolver = state.borrow::<Rc<NodeResolver>>().clone(); - let permissions = state.borrow_mut::<Env::P>(); + let fs = state.borrow::<Arc<dyn NodeFs>>(); + let npm_resolver = state.borrow::<Arc<dyn NpmResolver>>(); + let node_resolver = state.borrow::<Rc<NodeResolver>>(); + let permissions = state.borrow::<Env::P>(); let pkg_path = if npm_resolver .in_npm_package_at_path(&PathBuf::from(&modules_path)) @@ -524,8 +521,8 @@ where state, PathBuf::from(&filename).parent().unwrap(), )?; - let node_resolver = state.borrow::<Rc<NodeResolver>>().clone(); - let permissions = state.borrow_mut::<Env::P>(); + let node_resolver = state.borrow::<Rc<NodeResolver>>(); + let permissions = state.borrow::<Env::P>(); node_resolver.get_closest_package_json( &Url::from_file_path(filename).unwrap(), permissions, @@ -540,8 +537,8 @@ fn op_require_read_package_scope<Env>( where Env: NodeEnv + 'static, { - let node_resolver = state.borrow::<Rc<NodeResolver>>().clone(); - let permissions = state.borrow_mut::<Env::P>(); + let node_resolver = state.borrow::<Rc<NodeResolver>>(); + let permissions = state.borrow::<Env::P>(); let package_json_path = PathBuf::from(package_json_path); node_resolver .load_package_json(permissions, package_json_path) @@ -559,8 +556,8 @@ where { let parent_path = PathBuf::from(&parent_filename); ensure_read_permission::<Env::P>(state, &parent_path)?; - let node_resolver = state.borrow::<Rc<NodeResolver>>().clone(); - let permissions = state.borrow_mut::<Env::P>(); + let node_resolver = state.borrow::<Rc<NodeResolver>>(); + let permissions = state.borrow::<Env::P>(); let pkg = node_resolver .load_package_json(permissions, parent_path.join("package.json"))?; |