mirror of
https://github.com/denoland/deno.git
synced 2024-12-11 10:07:54 -05:00
refactor: cleanup Node compatibility code (#15766)
- move errors related to Node compat from cli/node/errors.rs to "ext/node" crate - remove dependency on "node_resolver" crate - make some of structures private to the "cli/node" module
This commit is contained in:
parent
d908032dbb
commit
6c80cacb58
6 changed files with 32 additions and 75 deletions
13
Cargo.lock
generated
13
Cargo.lock
generated
|
@ -831,7 +831,6 @@ dependencies = [
|
||||||
"mitata",
|
"mitata",
|
||||||
"monch",
|
"monch",
|
||||||
"nix",
|
"nix",
|
||||||
"node_resolver",
|
|
||||||
"notify",
|
"notify",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"os_pipe",
|
"os_pipe",
|
||||||
|
@ -2790,18 +2789,6 @@ dependencies = [
|
||||||
"memoffset",
|
"memoffset",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "node_resolver"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f1012fcb4f5cc14c272731f4baf6ba8a2d40c650908f4d2531f7ed17f214e5ae"
|
|
||||||
dependencies = [
|
|
||||||
"anyhow",
|
|
||||||
"path-clean",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "notify"
|
name = "notify"
|
||||||
version = "5.0.0-pre.15"
|
version = "5.0.0-pre.15"
|
||||||
|
|
|
@ -80,7 +80,6 @@ libc = "=0.2.126"
|
||||||
log = { version = "=0.4.17", features = ["serde"] }
|
log = { version = "=0.4.17", features = ["serde"] }
|
||||||
mitata = "=0.0.7"
|
mitata = "=0.0.7"
|
||||||
monch = "=0.2.0"
|
monch = "=0.2.0"
|
||||||
node_resolver = "=0.1.1"
|
|
||||||
notify = "=5.0.0-pre.15"
|
notify = "=5.0.0-pre.15"
|
||||||
once_cell = "=1.12.0"
|
once_cell = "=1.12.0"
|
||||||
os_pipe = "=1.0.1"
|
os_pipe = "=1.0.1"
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
|
||||||
|
|
||||||
use deno_core::error::generic_error;
|
|
||||||
use deno_core::error::type_error;
|
|
||||||
use deno_core::error::AnyError;
|
|
||||||
use deno_core::url::Url;
|
|
||||||
|
|
||||||
pub fn err_invalid_module_specifier(
|
|
||||||
request: &str,
|
|
||||||
reason: &str,
|
|
||||||
maybe_base: Option<String>,
|
|
||||||
) -> AnyError {
|
|
||||||
let mut msg = format!(
|
|
||||||
"[ERR_INVALID_MODULE_SPECIFIER] Invalid module \"{}\" {}",
|
|
||||||
request, reason
|
|
||||||
);
|
|
||||||
|
|
||||||
if let Some(base) = maybe_base {
|
|
||||||
msg = format!("{} imported from {}", msg, base);
|
|
||||||
}
|
|
||||||
|
|
||||||
type_error(msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn err_module_not_found(path: &str, base: &str, typ: &str) -> AnyError {
|
|
||||||
generic_error(format!(
|
|
||||||
"[ERR_MODULE_NOT_FOUND] Cannot find {} \"{}\" imported from \"{}\"",
|
|
||||||
typ, path, base
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn err_unsupported_dir_import(path: &str, base: &str) -> AnyError {
|
|
||||||
generic_error(format!("[ERR_UNSUPPORTED_DIR_IMPORT] Directory import '{}' is not supported resolving ES modules imported from {}", path, base))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn err_unsupported_esm_url_scheme(url: &Url) -> AnyError {
|
|
||||||
let mut msg =
|
|
||||||
"[ERR_UNSUPPORTED_ESM_URL_SCHEME] Only file and data URLS are supported by the default ESM loader"
|
|
||||||
.to_string();
|
|
||||||
|
|
||||||
if cfg!(window) && url.scheme().len() == 2 {
|
|
||||||
msg = format!(
|
|
||||||
"{}. On Windows, absolute path must be valid file:// URLs",
|
|
||||||
msg
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
msg = format!("{}. Received protocol '{}'", msg, url.scheme());
|
|
||||||
generic_error(msg)
|
|
||||||
}
|
|
|
@ -17,6 +17,7 @@ use deno_core::serde_json::Value;
|
||||||
use deno_core::url::Url;
|
use deno_core::url::Url;
|
||||||
use deno_core::JsRuntime;
|
use deno_core::JsRuntime;
|
||||||
use deno_graph::source::ResolveResponse;
|
use deno_graph::source::ResolveResponse;
|
||||||
|
use deno_runtime::deno_node::errors;
|
||||||
use deno_runtime::deno_node::get_closest_package_json;
|
use deno_runtime::deno_node::get_closest_package_json;
|
||||||
use deno_runtime::deno_node::legacy_main_resolve;
|
use deno_runtime::deno_node::legacy_main_resolve;
|
||||||
use deno_runtime::deno_node::package_exports_resolve;
|
use deno_runtime::deno_node::package_exports_resolve;
|
||||||
|
@ -37,19 +38,18 @@ use crate::npm::NpmPackageReq;
|
||||||
use crate::npm::NpmPackageResolver;
|
use crate::npm::NpmPackageResolver;
|
||||||
|
|
||||||
mod analyze;
|
mod analyze;
|
||||||
pub mod errors;
|
|
||||||
|
|
||||||
pub use analyze::esm_code_with_node_globals;
|
pub use analyze::esm_code_with_node_globals;
|
||||||
|
|
||||||
pub struct NodeModulePolyfill {
|
struct NodeModulePolyfill {
|
||||||
/// Name of the module like "assert" or "timers/promises"
|
/// Name of the module like "assert" or "timers/promises"
|
||||||
pub name: &'static str,
|
name: &'static str,
|
||||||
|
|
||||||
/// Specifier relative to the root of `deno_std` repo, like "node/asser.ts"
|
/// Specifier relative to the root of `deno_std` repo, like "node/asser.ts"
|
||||||
pub specifier: &'static str,
|
specifier: &'static str,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) static SUPPORTED_MODULES: &[NodeModulePolyfill] = &[
|
static SUPPORTED_MODULES: &[NodeModulePolyfill] = &[
|
||||||
NodeModulePolyfill {
|
NodeModulePolyfill {
|
||||||
name: "assert",
|
name: "assert",
|
||||||
specifier: "node/assert.ts",
|
specifier: "node/assert.ts",
|
||||||
|
@ -224,7 +224,7 @@ pub(crate) static SUPPORTED_MODULES: &[NodeModulePolyfill] = &[
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
pub(crate) static NODE_COMPAT_URL: Lazy<Url> = Lazy::new(|| {
|
static NODE_COMPAT_URL: Lazy<Url> = Lazy::new(|| {
|
||||||
if let Ok(url_str) = std::env::var("DENO_NODE_COMPAT_URL") {
|
if let Ok(url_str) = std::env::var("DENO_NODE_COMPAT_URL") {
|
||||||
let url = Url::parse(&url_str).expect(
|
let url = Url::parse(&url_str).expect(
|
||||||
"Malformed DENO_NODE_COMPAT_URL value, make sure it's a file URL ending with a slash"
|
"Malformed DENO_NODE_COMPAT_URL value, make sure it's a file URL ending with a slash"
|
||||||
|
@ -238,7 +238,7 @@ pub(crate) static NODE_COMPAT_URL: Lazy<Url> = Lazy::new(|| {
|
||||||
pub static MODULE_ALL_URL: Lazy<Url> =
|
pub static MODULE_ALL_URL: Lazy<Url> =
|
||||||
Lazy::new(|| NODE_COMPAT_URL.join("node/module_all.ts").unwrap());
|
Lazy::new(|| NODE_COMPAT_URL.join("node/module_all.ts").unwrap());
|
||||||
|
|
||||||
pub fn try_resolve_builtin_module(specifier: &str) -> Option<Url> {
|
fn try_resolve_builtin_module(specifier: &str) -> Option<Url> {
|
||||||
for module in SUPPORTED_MODULES {
|
for module in SUPPORTED_MODULES {
|
||||||
if module.name == specifier {
|
if module.name == specifier {
|
||||||
let module_url = NODE_COMPAT_URL.join(module.specifier).unwrap();
|
let module_url = NODE_COMPAT_URL.join(module.specifier).unwrap();
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
use deno_core::error::generic_error;
|
use deno_core::error::generic_error;
|
||||||
use deno_core::error::type_error;
|
use deno_core::error::type_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
|
use deno_core::url::Url;
|
||||||
|
|
||||||
pub fn err_invalid_module_specifier(
|
pub fn err_invalid_module_specifier(
|
||||||
request: &str,
|
request: &str,
|
||||||
|
@ -120,3 +121,23 @@ pub fn err_package_import_not_defined(
|
||||||
|
|
||||||
type_error(msg)
|
type_error(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn err_unsupported_dir_import(path: &str, base: &str) -> AnyError {
|
||||||
|
generic_error(format!("[ERR_UNSUPPORTED_DIR_IMPORT] Directory import '{}' is not supported resolving ES modules imported from {}", path, base))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn err_unsupported_esm_url_scheme(url: &Url) -> AnyError {
|
||||||
|
let mut msg =
|
||||||
|
"[ERR_UNSUPPORTED_ESM_URL_SCHEME] Only file and data URLS are supported by the default ESM loader"
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
if cfg!(window) && url.scheme().len() == 2 {
|
||||||
|
msg = format!(
|
||||||
|
"{}. On Windows, absolute path must be valid file:// URLs",
|
||||||
|
msg
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
msg = format!("{}. Received protocol '{}'", msg, url.scheme());
|
||||||
|
generic_error(msg)
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,10 @@ use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
pub mod errors;
|
||||||
|
mod package_json;
|
||||||
|
mod resolution;
|
||||||
|
|
||||||
pub use package_json::PackageJson;
|
pub use package_json::PackageJson;
|
||||||
pub use resolution::get_closest_package_json;
|
pub use resolution::get_closest_package_json;
|
||||||
pub use resolution::get_package_scope_config;
|
pub use resolution::get_package_scope_config;
|
||||||
|
@ -42,10 +46,6 @@ pub trait DenoDirNpmResolver {
|
||||||
fn ensure_read_permission(&self, path: &Path) -> Result<(), AnyError>;
|
fn ensure_read_permission(&self, path: &Path) -> Result<(), AnyError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
mod errors;
|
|
||||||
mod package_json;
|
|
||||||
mod resolution;
|
|
||||||
|
|
||||||
pub const MODULE_ES_SHIM: &str = include_str!("./module_es_shim.js");
|
pub const MODULE_ES_SHIM: &str = include_str!("./module_es_shim.js");
|
||||||
|
|
||||||
struct Unstable(pub bool);
|
struct Unstable(pub bool);
|
||||||
|
|
Loading…
Reference in a new issue