summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock1
-rw-r--r--ext/url/Cargo.toml1
-rw-r--r--ext/url/lib.rs2
-rw-r--r--ext/url/urlpattern.rs28
-rw-r--r--runtime/errors.rs4
5 files changed, 22 insertions, 14 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a8e8608dd..504182136 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2163,6 +2163,7 @@ dependencies = [
"deno_console",
"deno_core",
"deno_webidl",
+ "thiserror",
"urlpattern",
]
diff --git a/ext/url/Cargo.toml b/ext/url/Cargo.toml
index 13aca9953..ca4fa444d 100644
--- a/ext/url/Cargo.toml
+++ b/ext/url/Cargo.toml
@@ -15,6 +15,7 @@ path = "lib.rs"
[dependencies]
deno_core.workspace = true
+thiserror.workspace = true
urlpattern = "0.3.0"
[dev-dependencies]
diff --git a/ext/url/lib.rs b/ext/url/lib.rs
index 6869d656b..f8946532a 100644
--- a/ext/url/lib.rs
+++ b/ext/url/lib.rs
@@ -15,6 +15,8 @@ use std::path::PathBuf;
use crate::urlpattern::op_urlpattern_parse;
use crate::urlpattern::op_urlpattern_process_match_input;
+pub use urlpattern::UrlPatternError;
+
deno_core::extension!(
deno_url,
deps = [deno_webidl],
diff --git a/ext/url/urlpattern.rs b/ext/url/urlpattern.rs
index b6d9a1382..7d4e8ee71 100644
--- a/ext/url/urlpattern.rs
+++ b/ext/url/urlpattern.rs
@@ -1,7 +1,5 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-use deno_core::error::type_error;
-use deno_core::error::AnyError;
use deno_core::op2;
use urlpattern::quirks;
@@ -9,21 +7,23 @@ use urlpattern::quirks::MatchInput;
use urlpattern::quirks::StringOrInit;
use urlpattern::quirks::UrlPattern;
+#[derive(Debug, thiserror::Error)]
+#[error(transparent)]
+pub struct UrlPatternError(urlpattern::Error);
+
#[op2]
#[serde]
pub fn op_urlpattern_parse(
#[serde] input: StringOrInit,
#[string] base_url: Option<String>,
#[serde] options: urlpattern::UrlPatternOptions,
-) -> Result<UrlPattern, AnyError> {
- let init = urlpattern::quirks::process_construct_pattern_input(
- input,
- base_url.as_deref(),
- )
- .map_err(|e| type_error(e.to_string()))?;
+) -> Result<UrlPattern, UrlPatternError> {
+ let init =
+ quirks::process_construct_pattern_input(input, base_url.as_deref())
+ .map_err(UrlPatternError)?;
- let pattern = urlpattern::quirks::parse_pattern(init, options)
- .map_err(|e| type_error(e.to_string()))?;
+ let pattern =
+ quirks::parse_pattern(init, options).map_err(UrlPatternError)?;
Ok(pattern)
}
@@ -33,14 +33,14 @@ pub fn op_urlpattern_parse(
pub fn op_urlpattern_process_match_input(
#[serde] input: StringOrInit,
#[string] base_url: Option<String>,
-) -> Result<Option<(MatchInput, quirks::Inputs)>, AnyError> {
- let res = urlpattern::quirks::process_match_input(input, base_url.as_deref())
- .map_err(|e| type_error(e.to_string()))?;
+) -> Result<Option<(MatchInput, quirks::Inputs)>, UrlPatternError> {
+ let res = quirks::process_match_input(input, base_url.as_deref())
+ .map_err(UrlPatternError)?;
let (input, inputs) = match res {
Some((input, inputs)) => (input, inputs),
None => return Ok(None),
};
- Ok(urlpattern::quirks::parse_match_input(input).map(|input| (input, inputs)))
+ Ok(quirks::parse_match_input(input).map(|input| (input, inputs)))
}
diff --git a/runtime/errors.rs b/runtime/errors.rs
index bc28339ad..573563595 100644
--- a/runtime/errors.rs
+++ b/runtime/errors.rs
@@ -245,6 +245,10 @@ pub fn get_error_class_name(e: &AnyError) -> Option<&'static str> {
.map(get_webstorage_class_name)
})
.or_else(|| {
+ e.downcast_ref::<deno_url::UrlPatternError>()
+ .map(|_| "TypeError")
+ })
+ .or_else(|| {
e.downcast_ref::<dlopen2::Error>()
.map(get_dlopen_error_class)
})