summaryrefslogtreecommitdiff
path: root/ext/node
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node')
-rw-r--r--ext/node/analyze.rs17
-rw-r--r--ext/node/clippy.toml3
-rw-r--r--ext/node/lib.rs21
-rw-r--r--ext/node/ops/require.rs24
-rw-r--r--ext/node/resolution.rs16
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 }
}