mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 15:24:46 -05:00
refactor(core): remove "resolve_url_or_path_deprecated" (#18174)
Remove remaining usages of "resolve_url_or_path_deprecated" in favor of "resolve_url_or_path" with explicit calls to "std::env::current_dir()". Towards landing https://github.com/denoland/deno/pull/15454
This commit is contained in:
parent
485e12062c
commit
1930c09b04
6 changed files with 46 additions and 39 deletions
|
@ -495,13 +495,18 @@ impl ProcState {
|
||||||
referrer: &str,
|
referrer: &str,
|
||||||
permissions: &mut PermissionsContainer,
|
permissions: &mut PermissionsContainer,
|
||||||
) -> Result<ModuleSpecifier, AnyError> {
|
) -> Result<ModuleSpecifier, AnyError> {
|
||||||
if let Ok(referrer) = deno_core::resolve_url_or_path_deprecated(referrer) {
|
// TODO(bartlomieju): ideally we shouldn't need to call `current_dir()` on each
|
||||||
if self.npm_resolver.in_npm_package(&referrer) {
|
// call - maybe it should be caller's responsibility to pass it as an arg?
|
||||||
|
let cwd = std::env::current_dir().context("Unable to get CWD")?;
|
||||||
|
let referrer_result = deno_core::resolve_url_or_path(referrer, &cwd);
|
||||||
|
|
||||||
|
if let Ok(referrer) = referrer_result.as_ref() {
|
||||||
|
if self.npm_resolver.in_npm_package(referrer) {
|
||||||
// we're in an npm package, so use node resolution
|
// we're in an npm package, so use node resolution
|
||||||
return self
|
return self
|
||||||
.handle_node_resolve_result(node::node_resolve(
|
.handle_node_resolve_result(node::node_resolve(
|
||||||
specifier,
|
specifier,
|
||||||
&referrer,
|
referrer,
|
||||||
NodeResolutionMode::Execution,
|
NodeResolutionMode::Execution,
|
||||||
&self.npm_resolver,
|
&self.npm_resolver,
|
||||||
permissions,
|
permissions,
|
||||||
|
@ -512,7 +517,7 @@ impl ProcState {
|
||||||
}
|
}
|
||||||
|
|
||||||
let graph = self.graph_container.graph();
|
let graph = self.graph_container.graph();
|
||||||
let maybe_resolved = match graph.get(&referrer) {
|
let maybe_resolved = match graph.get(referrer) {
|
||||||
Some(Module::Esm(module)) => {
|
Some(Module::Esm(module)) => {
|
||||||
module.dependencies.get(specifier).map(|d| &d.maybe_code)
|
module.dependencies.get(specifier).map(|d| &d.maybe_code)
|
||||||
}
|
}
|
||||||
|
@ -565,9 +570,9 @@ impl ProcState {
|
||||||
// but sadly that's not the case due to missing APIs in V8.
|
// but sadly that's not the case due to missing APIs in V8.
|
||||||
let is_repl = matches!(self.options.sub_command(), DenoSubcommand::Repl(_));
|
let is_repl = matches!(self.options.sub_command(), DenoSubcommand::Repl(_));
|
||||||
let referrer = if referrer.is_empty() && is_repl {
|
let referrer = if referrer.is_empty() && is_repl {
|
||||||
deno_core::resolve_path("./$deno$repl.ts", self.options.initial_cwd())?
|
deno_core::resolve_path("./$deno$repl.ts", &cwd)?
|
||||||
} else {
|
} else {
|
||||||
deno_core::resolve_url_or_path_deprecated(referrer)?
|
referrer_result?
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME(bartlomieju): this is another hack way to provide NPM specifier
|
// FIXME(bartlomieju): this is another hack way to provide NPM specifier
|
||||||
|
|
|
@ -140,9 +140,12 @@ impl ModuleLoader for EmbeddedModuleLoader {
|
||||||
// Try to follow redirects when resolving.
|
// Try to follow redirects when resolving.
|
||||||
let referrer = match self.eszip.get_module(referrer) {
|
let referrer = match self.eszip.get_module(referrer) {
|
||||||
Some(eszip::Module { ref specifier, .. }) => {
|
Some(eszip::Module { ref specifier, .. }) => {
|
||||||
deno_core::resolve_url_or_path_deprecated(specifier)?
|
ModuleSpecifier::parse(specifier)?
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
let cwd = std::env::current_dir().context("Unable to get CWD")?;
|
||||||
|
deno_core::resolve_url_or_path(referrer, &cwd)?
|
||||||
}
|
}
|
||||||
None => deno_core::resolve_url_or_path_deprecated(referrer)?,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self.maybe_import_map_resolver.as_ref().map_or_else(
|
self.maybe_import_map_resolver.as_ref().map_or_else(
|
||||||
|
|
|
@ -13,7 +13,7 @@ use deno_core::anyhow::Context;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::located_script_name;
|
use deno_core::located_script_name;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::resolve_url_or_path_deprecated;
|
use deno_core::resolve_url_or_path;
|
||||||
use deno_core::serde::Deserialize;
|
use deno_core::serde::Deserialize;
|
||||||
use deno_core::serde::Deserializer;
|
use deno_core::serde::Deserializer;
|
||||||
use deno_core::serde::Serialize;
|
use deno_core::serde::Serialize;
|
||||||
|
@ -39,6 +39,7 @@ use once_cell::sync::Lazy;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
@ -378,6 +379,7 @@ struct State {
|
||||||
maybe_npm_resolver: Option<NpmPackageResolver>,
|
maybe_npm_resolver: Option<NpmPackageResolver>,
|
||||||
remapped_specifiers: HashMap<String, ModuleSpecifier>,
|
remapped_specifiers: HashMap<String, ModuleSpecifier>,
|
||||||
root_map: HashMap<String, ModuleSpecifier>,
|
root_map: HashMap<String, ModuleSpecifier>,
|
||||||
|
current_dir: PathBuf,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl State {
|
impl State {
|
||||||
|
@ -388,6 +390,7 @@ impl State {
|
||||||
maybe_tsbuildinfo: Option<String>,
|
maybe_tsbuildinfo: Option<String>,
|
||||||
root_map: HashMap<String, ModuleSpecifier>,
|
root_map: HashMap<String, ModuleSpecifier>,
|
||||||
remapped_specifiers: HashMap<String, ModuleSpecifier>,
|
remapped_specifiers: HashMap<String, ModuleSpecifier>,
|
||||||
|
current_dir: PathBuf,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
State {
|
State {
|
||||||
hash_data,
|
hash_data,
|
||||||
|
@ -397,12 +400,16 @@ impl State {
|
||||||
maybe_response: None,
|
maybe_response: None,
|
||||||
remapped_specifiers,
|
remapped_specifiers,
|
||||||
root_map,
|
root_map,
|
||||||
|
current_dir,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn normalize_specifier(specifier: &str) -> Result<ModuleSpecifier, AnyError> {
|
fn normalize_specifier(
|
||||||
resolve_url_or_path_deprecated(specifier).map_err(|err| err.into())
|
specifier: &str,
|
||||||
|
current_dir: &Path,
|
||||||
|
) -> Result<ModuleSpecifier, AnyError> {
|
||||||
|
resolve_url_or_path(specifier, current_dir).map_err(|err| err.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
|
@ -481,7 +488,7 @@ fn op_load(state: &mut OpState, args: Value) -> Result<Value, AnyError> {
|
||||||
let state = state.borrow_mut::<State>();
|
let state = state.borrow_mut::<State>();
|
||||||
let v: LoadArgs = serde_json::from_value(args)
|
let v: LoadArgs = serde_json::from_value(args)
|
||||||
.context("Invalid request from JavaScript for \"op_load\".")?;
|
.context("Invalid request from JavaScript for \"op_load\".")?;
|
||||||
let specifier = normalize_specifier(&v.specifier)
|
let specifier = normalize_specifier(&v.specifier, &state.current_dir)
|
||||||
.context("Error converting a string module specifier for \"op_load\".")?;
|
.context("Error converting a string module specifier for \"op_load\".")?;
|
||||||
let mut hash: Option<String> = None;
|
let mut hash: Option<String> = None;
|
||||||
let mut media_type = MediaType::Unknown;
|
let mut media_type = MediaType::Unknown;
|
||||||
|
@ -584,7 +591,7 @@ fn op_resolve(
|
||||||
} else if let Some(remapped_base) = state.root_map.get(&args.base) {
|
} else if let Some(remapped_base) = state.root_map.get(&args.base) {
|
||||||
remapped_base.clone()
|
remapped_base.clone()
|
||||||
} else {
|
} else {
|
||||||
normalize_specifier(&args.base).context(
|
normalize_specifier(&args.base, &state.current_dir).context(
|
||||||
"Error converting a string module specifier for \"op_resolve\".",
|
"Error converting a string module specifier for \"op_resolve\".",
|
||||||
)?
|
)?
|
||||||
};
|
};
|
||||||
|
@ -831,6 +838,9 @@ pub fn exec(request: Request) -> Result<Response, AnyError> {
|
||||||
request.maybe_tsbuildinfo.clone(),
|
request.maybe_tsbuildinfo.clone(),
|
||||||
root_map.clone(),
|
root_map.clone(),
|
||||||
remapped_specifiers.clone(),
|
remapped_specifiers.clone(),
|
||||||
|
std::env::current_dir()
|
||||||
|
.context("Unable to get CWD")
|
||||||
|
.unwrap(),
|
||||||
));
|
));
|
||||||
})
|
})
|
||||||
.build()],
|
.build()],
|
||||||
|
@ -943,6 +953,9 @@ mod tests {
|
||||||
maybe_tsbuildinfo,
|
maybe_tsbuildinfo,
|
||||||
HashMap::new(),
|
HashMap::new(),
|
||||||
HashMap::new(),
|
HashMap::new(),
|
||||||
|
std::env::current_dir()
|
||||||
|
.context("Unable to get CWD")
|
||||||
|
.unwrap(),
|
||||||
);
|
);
|
||||||
let mut op_state = OpState::new(1);
|
let mut op_state = OpState::new(1);
|
||||||
op_state.put(state);
|
op_state.put(state);
|
||||||
|
|
|
@ -72,7 +72,6 @@ pub use crate::module_specifier::resolve_import;
|
||||||
pub use crate::module_specifier::resolve_path;
|
pub use crate::module_specifier::resolve_path;
|
||||||
pub use crate::module_specifier::resolve_url;
|
pub use crate::module_specifier::resolve_url;
|
||||||
pub use crate::module_specifier::resolve_url_or_path;
|
pub use crate::module_specifier::resolve_url_or_path;
|
||||||
pub use crate::module_specifier::resolve_url_or_path_deprecated;
|
|
||||||
pub use crate::module_specifier::ModuleResolutionError;
|
pub use crate::module_specifier::ModuleResolutionError;
|
||||||
pub use crate::module_specifier::ModuleSpecifier;
|
pub use crate::module_specifier::ModuleSpecifier;
|
||||||
pub use crate::module_specifier::DUMMY_SPECIFIER;
|
pub use crate::module_specifier::DUMMY_SPECIFIER;
|
||||||
|
|
|
@ -117,24 +117,6 @@ pub fn resolve_url(
|
||||||
Url::parse(url_str).map_err(ModuleResolutionError::InvalidUrl)
|
Url::parse(url_str).map_err(ModuleResolutionError::InvalidUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Takes a string representing either an absolute URL or a file path,
|
|
||||||
/// as it may be passed to deno as a command line argument.
|
|
||||||
/// The string is interpreted as a URL if it starts with a valid URI scheme,
|
|
||||||
/// e.g. 'http:' or 'file:' or 'git+ssh:'. If not, it's interpreted as a
|
|
||||||
/// file path; if it is a relative path it's resolved relative to the current
|
|
||||||
/// working directory.
|
|
||||||
pub fn resolve_url_or_path_deprecated(
|
|
||||||
specifier: &str,
|
|
||||||
) -> Result<ModuleSpecifier, ModuleResolutionError> {
|
|
||||||
if specifier_has_uri_scheme(specifier) {
|
|
||||||
resolve_url(specifier)
|
|
||||||
} else {
|
|
||||||
let cwd = current_dir()
|
|
||||||
.map_err(|_| ModuleResolutionError::InvalidPath(specifier.into()))?;
|
|
||||||
resolve_path(specifier, &cwd)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Takes a string representing either an absolute URL or a file path,
|
/// Takes a string representing either an absolute URL or a file path,
|
||||||
/// as it may be passed to deno as a command line argument.
|
/// as it may be passed to deno as a command line argument.
|
||||||
/// The string is interpreted as a URL if it starts with a valid URI scheme,
|
/// The string is interpreted as a URL if it starts with a valid URI scheme,
|
||||||
|
@ -361,7 +343,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_resolve_url_or_path_deprecated() {
|
fn test_resolve_url_or_path() {
|
||||||
// Absolute URL.
|
// Absolute URL.
|
||||||
let mut tests: Vec<(&str, String)> = vec![
|
let mut tests: Vec<(&str, String)> = vec![
|
||||||
(
|
(
|
||||||
|
@ -457,9 +439,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (specifier, expected_url) in tests {
|
for (specifier, expected_url) in tests {
|
||||||
let url = resolve_url_or_path_deprecated(specifier)
|
let url = resolve_url_or_path(specifier, &cwd).unwrap().to_string();
|
||||||
.unwrap()
|
|
||||||
.to_string();
|
|
||||||
assert_eq!(url, expected_url);
|
assert_eq!(url, expected_url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -479,7 +459,8 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (specifier, expected_err) in tests {
|
for (specifier, expected_err) in tests {
|
||||||
let err = resolve_url_or_path_deprecated(specifier).unwrap_err();
|
let err =
|
||||||
|
resolve_url_or_path(specifier, &PathBuf::from("/")).unwrap_err();
|
||||||
assert_eq!(err, expected_err);
|
assert_eq!(err, expected_err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,13 +6,14 @@ use crate::error::range_error;
|
||||||
use crate::error::type_error;
|
use crate::error::type_error;
|
||||||
use crate::error::JsError;
|
use crate::error::JsError;
|
||||||
use crate::ops_builtin::WasmStreamingResource;
|
use crate::ops_builtin::WasmStreamingResource;
|
||||||
use crate::resolve_url_or_path_deprecated;
|
use crate::resolve_url_or_path;
|
||||||
use crate::serde_v8::from_v8;
|
use crate::serde_v8::from_v8;
|
||||||
use crate::source_map::apply_source_map as apply_source_map_;
|
use crate::source_map::apply_source_map as apply_source_map_;
|
||||||
use crate::JsRealm;
|
use crate::JsRealm;
|
||||||
use crate::JsRuntime;
|
use crate::JsRuntime;
|
||||||
use crate::OpDecl;
|
use crate::OpDecl;
|
||||||
use crate::ZeroCopyBuf;
|
use crate::ZeroCopyBuf;
|
||||||
|
use anyhow::Context;
|
||||||
use anyhow::Error;
|
use anyhow::Error;
|
||||||
use deno_ops::op;
|
use deno_ops::op;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
@ -165,7 +166,12 @@ fn op_eval_context<'a>(
|
||||||
let source = v8::Local::<v8::String>::try_from(source.v8_value)
|
let source = v8::Local::<v8::String>::try_from(source.v8_value)
|
||||||
.map_err(|_| type_error("Invalid source"))?;
|
.map_err(|_| type_error("Invalid source"))?;
|
||||||
let specifier = match specifier {
|
let specifier = match specifier {
|
||||||
Some(s) => resolve_url_or_path_deprecated(&s)?.to_string(),
|
Some(s) => {
|
||||||
|
// TODO(bartlomieju): ideally we shouldn't need to call `current_dir()` on each
|
||||||
|
// call - maybe it should be caller's responsibility to pass fully resolved URL?
|
||||||
|
let cwd = std::env::current_dir().context("Unable to get CWD")?;
|
||||||
|
resolve_url_or_path(&s, &cwd)?.to_string()
|
||||||
|
}
|
||||||
None => crate::DUMMY_SPECIFIER.to_string(),
|
None => crate::DUMMY_SPECIFIER.to_string(),
|
||||||
};
|
};
|
||||||
let specifier = v8::String::new(tc_scope, &specifier).unwrap();
|
let specifier = v8::String::new(tc_scope, &specifier).unwrap();
|
||||||
|
|
Loading…
Reference in a new issue