From 913e2875c1c31d5ffbc9c0c9ed0e8c63f6143024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 30 Mar 2023 03:20:31 +0200 Subject: refactor(ext/node): add NodeEnv::Fs associated type (#18484) This commit adds associated type to "NodeEnv" trait, called "Fs". The "Fs" type has a trait bound on "NodeFs", which specifies APIs required for all ops and resolution APIs to function. A "RealFs" implementation of "NodeFs" is exported from the "deno_node" crate, that provides a default implementation for the trait. All code in "deno_node" extension was changed to use the "NodeFs" trait to handle file system operations, instead of relying on APIs from the standard library. --- ext/node/ops.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'ext/node/ops.rs') diff --git a/ext/node/ops.rs b/ext/node/ops.rs index 3dbab33c1..5ecf70f3e 100644 --- a/ext/node/ops.rs +++ b/ext/node/ops.rs @@ -14,6 +14,7 @@ use std::path::PathBuf; use std::rc::Rc; use crate::NodeEnv; +use crate::NodeFs; use super::resolution; use super::NodeModuleKind; @@ -98,7 +99,7 @@ where // Guarantee that "from" is absolute. let from = deno_core::resolve_path( &from, - &std::env::current_dir().context("Unable to get CWD")?, + &(Env::Fs::current_dir()).context("Unable to get CWD")?, ) .unwrap() .to_file_path() @@ -263,7 +264,7 @@ where { let path = PathBuf::from(path); ensure_read_permission::(state, &path)?; - if let Ok(metadata) = std::fs::metadata(&path) { + if let Ok(metadata) = Env::Fs::metadata(&path) { if metadata.is_file() { return Ok(0); } else { @@ -352,7 +353,7 @@ where if let Some(parent_id) = maybe_parent_id { if parent_id == "" || parent_id == "internal/preload" { - if let Ok(cwd) = std::env::current_dir() { + if let Ok(cwd) = Env::Fs::current_dir() { ensure_read_permission::(state, &cwd)?; return Ok(Some(cwd.to_string_lossy().to_string())); } @@ -376,7 +377,7 @@ where let resolver = state.borrow::>().clone(); let permissions = state.borrow_mut::(); - let pkg = resolution::get_package_scope_config( + let pkg = resolution::get_package_scope_config::( &Url::from_file_path(parent_path.unwrap()).unwrap(), &*resolver, permissions, @@ -407,7 +408,7 @@ where let referrer = deno_core::url::Url::from_file_path(&pkg.path).unwrap(); if let Some(exports) = &pkg.exports { - resolution::package_exports_resolve( + resolution::package_exports_resolve::( &pkg.path, expansion, exports, @@ -434,7 +435,7 @@ where { let file_path = PathBuf::from(file_path); ensure_read_permission::(state, &file_path)?; - Ok(std::fs::read_to_string(file_path)?) + Ok(Env::Fs::read_to_string(file_path)?) } #[op] @@ -471,7 +472,7 @@ where } else { path_resolve(vec![modules_path, name]) }; - let pkg = PackageJson::load( + let pkg = PackageJson::load::( &*resolver, permissions, PathBuf::from(&pkg_path).join("package.json"), @@ -479,7 +480,7 @@ where if let Some(exports) = &pkg.exports { let referrer = Url::from_file_path(parent_path).unwrap(); - resolution::package_exports_resolve( + resolution::package_exports_resolve::( &pkg.path, format!(".{expansion}"), exports, @@ -510,7 +511,7 @@ where )?; let resolver = state.borrow::>().clone(); let permissions = state.borrow_mut::(); - resolution::get_closest_package_json( + resolution::get_closest_package_json::( &Url::from_file_path(filename).unwrap(), &*resolver, permissions, @@ -528,7 +529,7 @@ where let resolver = state.borrow::>().clone(); let permissions = state.borrow_mut::(); let package_json_path = PathBuf::from(package_json_path); - PackageJson::load(&*resolver, permissions, package_json_path).ok() + PackageJson::load::(&*resolver, permissions, package_json_path).ok() } #[op] @@ -544,7 +545,7 @@ where ensure_read_permission::(state, &parent_path)?; let resolver = state.borrow::>().clone(); let permissions = state.borrow_mut::(); - let pkg = PackageJson::load( + let pkg = PackageJson::load::( &*resolver, permissions, parent_path.join("package.json"), @@ -553,7 +554,7 @@ where if pkg.imports.is_some() { let referrer = deno_core::url::Url::from_file_path(&parent_filename).unwrap(); - let r = resolution::package_imports_resolve( + let r = resolution::package_imports_resolve::( &request, &referrer, NodeModuleKind::Cjs, -- cgit v1.2.3