diff options
Diffstat (limited to 'ext/node')
-rw-r--r-- | ext/node/analyze.rs | 17 | ||||
-rw-r--r-- | ext/node/clippy.toml | 3 | ||||
-rw-r--r-- | ext/node/lib.rs | 21 | ||||
-rw-r--r-- | ext/node/ops/require.rs | 24 | ||||
-rw-r--r-- | ext/node/resolution.rs | 16 |
5 files changed, 44 insertions, 37 deletions
diff --git a/ext/node/analyze.rs b/ext/node/analyze.rs index bad0906c5..6d32c68be 100644 --- a/ext/node/analyze.rs +++ b/ext/node/analyze.rs @@ -5,7 +5,6 @@ use std::collections::VecDeque; use std::fmt::Write; use std::path::Path; use std::path::PathBuf; -use std::sync::Arc; use deno_core::anyhow::Context; use deno_core::ModuleSpecifier; @@ -13,11 +12,11 @@ use once_cell::sync::Lazy; use deno_core::error::AnyError; +use crate::resolution::NodeResolverRc; use crate::NodeModuleKind; use crate::NodePermissions; use crate::NodeResolutionMode; -use crate::NodeResolver; -use crate::NpmResolver; +use crate::NpmResolverRc; use crate::PackageJson; use crate::PathClean; use crate::NODE_GLOBAL_THIS_NAME; @@ -66,9 +65,9 @@ pub trait CjsEsmCodeAnalyzer { pub struct NodeCodeTranslator<TCjsEsmCodeAnalyzer: CjsEsmCodeAnalyzer> { cjs_esm_code_analyzer: TCjsEsmCodeAnalyzer, - fs: Arc<dyn deno_fs::FileSystem>, - node_resolver: Arc<NodeResolver>, - npm_resolver: Arc<dyn NpmResolver>, + fs: deno_fs::FileSystemRc, + node_resolver: NodeResolverRc, + npm_resolver: NpmResolverRc, } impl<TCjsEsmCodeAnalyzer: CjsEsmCodeAnalyzer> @@ -76,9 +75,9 @@ impl<TCjsEsmCodeAnalyzer: CjsEsmCodeAnalyzer> { pub fn new( cjs_esm_code_analyzer: TCjsEsmCodeAnalyzer, - fs: Arc<dyn deno_fs::FileSystem>, - node_resolver: Arc<NodeResolver>, - npm_resolver: Arc<dyn NpmResolver>, + fs: deno_fs::FileSystemRc, + node_resolver: NodeResolverRc, + npm_resolver: NpmResolverRc, ) -> Self { Self { cjs_esm_code_analyzer, diff --git a/ext/node/clippy.toml b/ext/node/clippy.toml index 31d9d7d47..02fd259d0 100644 --- a/ext/node/clippy.toml +++ b/ext/node/clippy.toml @@ -38,3 +38,6 @@ disallowed-methods = [ { path = "std::fs::symlink_metadata", reason = "File system operations should be done using FileSystem trait" }, { path = "std::fs::write", reason = "File system operations should be done using FileSystem trait" }, ] +disallowed-types = [ + { path = "std::sync::Arc", reason = "use deno_fs::sync::MaybeArc instead" }, +] diff --git a/ext/node/lib.rs b/ext/node/lib.rs index 03ec730d8..e01954109 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -1,11 +1,18 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +use std::collections::HashSet; +use std::path::Path; +use std::path::PathBuf; +use std::rc::Rc; + use deno_core::error::AnyError; use deno_core::located_script_name; use deno_core::op; use deno_core::serde_json; use deno_core::JsRuntime; use deno_core::ModuleSpecifier; +use deno_fs::sync::MaybeSend; +use deno_fs::sync::MaybeSync; use deno_npm::resolution::PackageReqNotFoundError; use deno_npm::NpmPackageId; use deno_semver::npm::NpmPackageNv; @@ -13,11 +20,6 @@ use deno_semver::npm::NpmPackageNvReference; use deno_semver::npm::NpmPackageReq; use deno_semver::npm::NpmPackageReqReference; use once_cell::sync::Lazy; -use std::collections::HashSet; -use std::path::Path; -use std::path::PathBuf; -use std::rc::Rc; -use std::sync::Arc; pub mod analyze; pub mod errors; @@ -50,7 +52,10 @@ impl NodePermissions for AllowAllNodePermissions { } } -pub trait NpmResolver: std::fmt::Debug + Send + Sync { +#[allow(clippy::disallowed_types)] +pub type NpmResolverRc = deno_fs::sync::MaybeArc<dyn NpmResolver>; + +pub trait NpmResolver: std::fmt::Debug + MaybeSend + MaybeSync { /// Resolves an npm package folder path from an npm package referrer. fn resolve_package_folder_from_package( &self, @@ -449,8 +454,8 @@ deno_core::extension!(deno_node, "zlib.ts", ], options = { - maybe_npm_resolver: Option<Arc<dyn NpmResolver>>, - fs: Arc<dyn deno_fs::FileSystem>, + maybe_npm_resolver: Option<NpmResolverRc>, + fs: deno_fs::FileSystemRc, }, state = |state, options| { let fs = options.fs; diff --git a/ext/node/ops/require.rs b/ext/node/ops/require.rs index 972815995..9e13681ae 100644 --- a/ext/node/ops/require.rs +++ b/ext/node/ops/require.rs @@ -9,18 +9,18 @@ use deno_core::url::Url; use deno_core::JsRuntimeInspector; use deno_core::ModuleSpecifier; use deno_core::OpState; +use deno_fs::FileSystemRc; use std::cell::RefCell; use std::path::Path; use std::path::PathBuf; use std::rc::Rc; -use std::sync::Arc; use crate::resolution; use crate::NodeModuleKind; use crate::NodePermissions; use crate::NodeResolutionMode; use crate::NodeResolver; -use crate::NpmResolver; +use crate::NpmResolverRc; use crate::PackageJson; fn ensure_read_permission<P>( @@ -30,7 +30,7 @@ fn ensure_read_permission<P>( where P: NodePermissions + 'static, { - let resolver = state.borrow::<Arc<dyn NpmResolver>>(); + let resolver = state.borrow::<NpmResolverRc>(); let permissions = state.borrow::<P>(); resolver.ensure_read_permission(permissions, file_path) } @@ -93,7 +93,7 @@ pub fn op_require_node_module_paths<P>( where P: NodePermissions + 'static, { - let fs = state.borrow::<Arc<dyn deno_fs::FileSystem>>(); + let fs = state.borrow::<FileSystemRc>(); // Guarantee that "from" is absolute. let from = deno_core::resolve_path( &from, @@ -189,7 +189,7 @@ fn op_require_resolve_deno_dir( request: String, parent_filename: String, ) -> Option<String> { - let resolver = state.borrow::<Arc<dyn NpmResolver>>(); + let resolver = state.borrow::<NpmResolverRc>(); resolver .resolve_package_folder_from_package( &request, @@ -202,7 +202,7 @@ fn op_require_resolve_deno_dir( #[op] fn op_require_is_deno_dir_package(state: &mut OpState, path: String) -> bool { - let resolver = state.borrow::<Arc<dyn NpmResolver>>(); + let resolver = state.borrow::<NpmResolverRc>(); resolver.in_npm_package_at_path(&PathBuf::from(path)) } @@ -262,7 +262,7 @@ where { let path = PathBuf::from(path); ensure_read_permission::<P>(state, &path)?; - let fs = state.borrow::<Arc<dyn deno_fs::FileSystem>>(); + let fs = state.borrow::<FileSystemRc>(); if let Ok(metadata) = fs.stat_sync(&path) { if metadata.is_file { return Ok(0); @@ -284,7 +284,7 @@ where { let path = PathBuf::from(request); ensure_read_permission::<P>(state, &path)?; - let fs = state.borrow::<Arc<dyn deno_fs::FileSystem>>(); + let fs = state.borrow::<FileSystemRc>(); let canonicalized_path = deno_core::strip_unc_prefix(fs.realpath_sync(&path)?); Ok(canonicalized_path.to_string_lossy().to_string()) @@ -346,7 +346,7 @@ where if let Some(parent_id) = maybe_parent_id { if parent_id == "<repl>" || parent_id == "internal/preload" { - let fs = state.borrow::<Arc<dyn deno_fs::FileSystem>>(); + let fs = state.borrow::<FileSystemRc>(); if let Ok(cwd) = fs.cwd() { ensure_read_permission::<P>(state, &cwd)?; return Ok(Some(cwd.to_string_lossy().to_string())); @@ -429,7 +429,7 @@ where { let file_path = PathBuf::from(file_path); ensure_read_permission::<P>(state, &file_path)?; - let fs = state.borrow::<Arc<dyn deno_fs::FileSystem>>(); + let fs = state.borrow::<FileSystemRc>(); Ok(fs.read_to_string(&file_path)?) } @@ -457,8 +457,8 @@ fn op_require_resolve_exports<P>( where P: NodePermissions + 'static, { - let fs = state.borrow::<Arc<dyn deno_fs::FileSystem>>(); - let npm_resolver = state.borrow::<Arc<dyn NpmResolver>>(); + let fs = state.borrow::<FileSystemRc>(); + let npm_resolver = state.borrow::<NpmResolverRc>(); let node_resolver = state.borrow::<Rc<NodeResolver>>(); let permissions = state.borrow::<P>(); diff --git a/ext/node/resolution.rs b/ext/node/resolution.rs index 71b988c19..16720f22c 100644 --- a/ext/node/resolution.rs +++ b/ext/node/resolution.rs @@ -2,7 +2,6 @@ use std::path::Path; use std::path::PathBuf; -use std::sync::Arc; use deno_core::anyhow::bail; use deno_core::anyhow::Context; @@ -12,6 +11,7 @@ use deno_core::serde_json::Map; use deno_core::serde_json::Value; use deno_core::url::Url; use deno_core::ModuleSpecifier; +use deno_fs::FileSystemRc; use deno_media_type::MediaType; use deno_semver::npm::NpmPackageNv; use deno_semver::npm::NpmPackageNvReference; @@ -20,7 +20,7 @@ use deno_semver::npm::NpmPackageReqReference; use crate::errors; use crate::AllowAllNodePermissions; use crate::NodePermissions; -use crate::NpmResolver; +use crate::NpmResolverRc; use crate::PackageJson; use crate::PathClean; @@ -104,17 +104,17 @@ impl NodeResolution { } } +#[allow(clippy::disallowed_types)] +pub type NodeResolverRc = deno_fs::sync::MaybeArc<NodeResolver>; + #[derive(Debug)] pub struct NodeResolver { - fs: Arc<dyn deno_fs::FileSystem>, - npm_resolver: Arc<dyn NpmResolver>, + fs: FileSystemRc, + npm_resolver: NpmResolverRc, } impl NodeResolver { - pub fn new( - fs: Arc<dyn deno_fs::FileSystem>, - npm_resolver: Arc<dyn NpmResolver>, - ) -> Self { + pub fn new(fs: FileSystemRc, npm_resolver: NpmResolverRc) -> Self { Self { fs, npm_resolver } } |