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. --- cli/node/mod.rs | 54 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 21 deletions(-) (limited to 'cli/node/mod.rs') diff --git a/cli/node/mod.rs b/cli/node/mod.rs index 3df217722..0906deed0 100644 --- a/cli/node/mod.rs +++ b/cli/node/mod.rs @@ -31,6 +31,7 @@ use deno_runtime::deno_node::NodePermissions; use deno_runtime::deno_node::NodeResolutionMode; use deno_runtime::deno_node::PackageJson; use deno_runtime::deno_node::PathClean; +use deno_runtime::deno_node::RealFs; use deno_runtime::deno_node::RequireNpmResolver; use deno_runtime::deno_node::DEFAULT_CONDITIONS; use deno_runtime::permissions::PermissionsContainer; @@ -227,10 +228,11 @@ pub fn node_resolve( let path = url.to_file_path().unwrap(); // todo(16370): the module kind is not correct here. I think we need // typescript to tell us if the referrer is esm or cjs - let path = match path_to_declaration_path(path, NodeModuleKind::Esm) { - Some(path) => path, - None => return Ok(None), - }; + let path = + match path_to_declaration_path::(path, NodeModuleKind::Esm) { + Some(path) => path, + None => return Ok(None), + }; ModuleSpecifier::from_file_path(path).unwrap() } }; @@ -273,7 +275,8 @@ pub fn node_resolve_npm_reference( let resolved_path = match mode { NodeResolutionMode::Execution => resolved_path, NodeResolutionMode::Types => { - match path_to_declaration_path(resolved_path, node_module_kind) { + match path_to_declaration_path::(resolved_path, node_module_kind) + { Some(path) => path, None => return Ok(None), } @@ -312,7 +315,7 @@ pub fn node_resolve_binary_commands( let package_folder = npm_resolver.resolve_package_folder_from_deno_module(pkg_nv)?; let package_json_path = package_folder.join("package.json"); - let package_json = PackageJson::load( + let package_json = PackageJson::load::( npm_resolver, &mut PermissionsContainer::allow_all(), package_json_path, @@ -335,7 +338,7 @@ pub fn node_resolve_binary_export( let package_folder = npm_resolver.resolve_package_folder_from_deno_module(pkg_nv)?; let package_json_path = package_folder.join("package.json"); - let package_json = PackageJson::load( + let package_json = PackageJson::load::( npm_resolver, &mut PermissionsContainer::allow_all(), package_json_path, @@ -424,10 +427,13 @@ fn package_config_resolve( ) -> Result, AnyError> { let package_json_path = package_dir.join("package.json"); let referrer = ModuleSpecifier::from_directory_path(package_dir).unwrap(); - let package_config = - PackageJson::load(npm_resolver, permissions, package_json_path.clone())?; + let package_config = PackageJson::load::( + npm_resolver, + permissions, + package_json_path.clone(), + )?; if let Some(exports) = &package_config.exports { - let result = package_exports_resolve( + let result = package_exports_resolve::( &package_json_path, package_subpath.to_string(), exports, @@ -443,7 +449,7 @@ fn package_config_resolve( Err(exports_err) => { if mode.is_types() && package_subpath == "." { if let Ok(Some(path)) = - legacy_main_resolve(&package_config, referrer_kind, mode) + legacy_main_resolve::(&package_config, referrer_kind, mode) { return Ok(Some(path)); } else { @@ -455,7 +461,7 @@ fn package_config_resolve( } } if package_subpath == "." { - return legacy_main_resolve(&package_config, referrer_kind, mode); + return legacy_main_resolve::(&package_config, referrer_kind, mode); } Ok(Some(package_dir.join(package_subpath))) @@ -469,7 +475,7 @@ pub fn url_to_node_resolution( if url_str.starts_with("http") { Ok(NodeResolution::Esm(url)) } else if url_str.ends_with(".js") || url_str.ends_with(".d.ts") { - let package_config = get_closest_package_json( + let package_config = get_closest_package_json::( &url, npm_resolver, &mut PermissionsContainer::allow_all(), @@ -556,7 +562,7 @@ fn module_resolve( // todo(dsherret): the node module kind is not correct and we // should use the value provided by typescript instead let declaration_path = - path_to_declaration_path(file_path, NodeModuleKind::Esm); + path_to_declaration_path::(file_path, NodeModuleKind::Esm); declaration_path.map(|declaration_path| { ModuleSpecifier::from_file_path(declaration_path).unwrap() }) @@ -565,7 +571,7 @@ fn module_resolve( } } else if specifier.starts_with('#') { Some( - package_imports_resolve( + package_imports_resolve::( specifier, referrer, NodeModuleKind::Esm, @@ -579,7 +585,7 @@ fn module_resolve( } else if let Ok(resolved) = Url::parse(specifier) { Some(resolved) } else { - package_resolve( + package_resolve::( specifier, referrer, NodeModuleKind::Esm, @@ -821,11 +827,14 @@ fn resolve( let package_json_path = module_dir.join("package.json"); if package_json_path.exists() { - let package_json = - PackageJson::load(npm_resolver, permissions, package_json_path.clone())?; + let package_json = PackageJson::load::( + npm_resolver, + permissions, + package_json_path.clone(), + )?; if let Some(exports) = &package_json.exports { - return package_exports_resolve( + return package_exports_resolve::( &package_json_path, package_subpath, exports, @@ -846,8 +855,11 @@ fn resolve( // subdir might have a package.json that specifies the entrypoint let package_json_path = d.join("package.json"); if package_json_path.exists() { - let package_json = - PackageJson::load(npm_resolver, permissions, package_json_path)?; + let package_json = PackageJson::load::( + npm_resolver, + permissions, + package_json_path, + )?; if let Some(main) = package_json.main(NodeModuleKind::Cjs) { return Ok(d.join(main).clean()); } -- cgit v1.2.3