summaryrefslogtreecommitdiff
path: root/ext/node/lib.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-03-30 03:20:31 +0200
committerGitHub <noreply@github.com>2023-03-30 03:20:31 +0200
commit913e2875c1c31d5ffbc9c0c9ed0e8c63f6143024 (patch)
tree439fa7eef067893fde75dfe386d801a090e6c057 /ext/node/lib.rs
parent89bbbd102c6050763105be39a49494a5ffdce35b (diff)
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.
Diffstat (limited to 'ext/node/lib.rs')
-rw-r--r--ext/node/lib.rs31
1 files changed, 25 insertions, 6 deletions
diff --git a/ext/node/lib.rs b/ext/node/lib.rs
index 1693a82ef..f3bdb7e5b 100644
--- a/ext/node/lib.rs
+++ b/ext/node/lib.rs
@@ -6,6 +6,7 @@ use deno_core::op;
use deno_core::JsRuntime;
use once_cell::sync::Lazy;
use std::collections::HashSet;
+use std::io;
use std::path::Path;
use std::path::PathBuf;
use std::rc::Rc;
@@ -41,18 +42,36 @@ pub use resolution::DEFAULT_CONDITIONS;
pub trait NodeEnv {
type P: NodePermissions;
- // TODO(bartlomieju):
- // type Fs: NodeFs;
+ type Fs: NodeFs;
}
pub trait NodePermissions {
fn check_read(&mut self, path: &Path) -> Result<(), AnyError>;
}
-// TODO(bartlomieju):
-// pub trait NodeFs {
-// fn current_dir() -> Result<PathBuf, AnyError>;
-// }
+pub trait NodeFs {
+ fn current_dir() -> io::Result<PathBuf>;
+ fn metadata<P: AsRef<Path>>(path: P) -> io::Result<std::fs::Metadata>;
+ fn read_to_string<P: AsRef<Path>>(path: P) -> io::Result<String>;
+}
+
+pub struct RealFs;
+impl NodeFs for RealFs {
+ fn current_dir() -> io::Result<PathBuf> {
+ #[allow(clippy::disallowed_methods)]
+ std::env::current_dir()
+ }
+
+ fn metadata<P: AsRef<Path>>(path: P) -> io::Result<std::fs::Metadata> {
+ #[allow(clippy::disallowed_methods)]
+ std::fs::metadata(path)
+ }
+
+ fn read_to_string<P: AsRef<Path>>(path: P) -> io::Result<String> {
+ #[allow(clippy::disallowed_methods)]
+ std::fs::read_to_string(path)
+ }
+}
pub trait RequireNpmResolver {
fn resolve_package_folder_from_package(