Skip to content

Commit 74cf659

Browse files
committed
refactor: treat undefined args. more like other APIs
1 parent 02b5e7f commit 74cf659

File tree

1 file changed

+31
-26
lines changed

1 file changed

+31
-26
lines changed

jstz_api/src/urlpattern/mod.rs

+31-26
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,18 @@ use jstz_core::{
2626
};
2727
use urlpattern::quirks::StringOrInit as InnerStringOrQuirksInit;
2828
use urlpattern::quirks::UrlPatternInit as InnerUrlPatternQuirksInit;
29-
use urlpattern::Error;
3029
use urlpattern::UrlPattern as InnerUrlPattern;
3130
use urlpattern::UrlPatternComponentResult as InnerUrlPatternComponentResult;
3231
use urlpattern::UrlPatternResult as InnerUrlPatternResult;
3332

3433
pub struct UrlPatternInput(InnerStringOrQuirksInit);
34+
impl Default for UrlPatternInput {
35+
fn default() -> Self {
36+
Self(InnerStringOrQuirksInit::Init(
37+
InnerUrlPatternQuirksInit::default(),
38+
))
39+
}
40+
}
3541
#[derive(Default)]
3642
pub struct UrlPatternInit(InnerUrlPatternQuirksInit);
3743

@@ -70,13 +76,13 @@ impl UrlPattern {
7076
urlpattern::UrlPatternMatchInput,
7177
(InnerStringOrQuirksInit, Option<String>),
7278
)> {
73-
match
74-
urlpattern::quirks::process_match_input(string_or_init, base_url.as_deref())
79+
match urlpattern::quirks::process_match_input(string_or_init, base_url.as_deref())
7580
{
76-
Err(Error::BaseUrlWithInit) => Err(JsError::from_native(JsNativeError::typ()
77-
.with_message("Specifying both an init object, and a separate base URL is not valid"))),
81+
Err(e) => Err(JsError::from_native(
82+
JsNativeError::typ().with_message(e.to_string()),
83+
)),
7884
Ok(Some(input)) => Ok(input),
79-
_ => Err(JsError::from_native(JsNativeError::error()))
85+
Ok(None) => Err(JsError::from_native(JsNativeError::error())),
8086
}
8187
}
8288

@@ -148,11 +154,9 @@ impl UrlPattern {
148154
let UrlPatternInput(string_or_init) = input;
149155
let (url_pattern_match_input, _) = Self::process_input(string_or_init, base_url)?;
150156

151-
self.url_pattern.test(url_pattern_match_input).map_err(|_| {
152-
JsNativeError::typ()
153-
.with_message("Failed to run `test` on `UrlPattern`")
154-
.into()
155-
})
157+
self.url_pattern
158+
.test(url_pattern_match_input)
159+
.map_err(|e| JsNativeError::typ().with_message(e.to_string()).into())
156160
}
157161

158162
pub fn exec(
@@ -177,11 +181,7 @@ impl UrlPattern {
177181
url_pattern_result,
178182
})
179183
})
180-
.map_err(|_| {
181-
JsNativeError::typ()
182-
.with_message("Failed to run `exec` on `UrlPattern`")
183-
.into()
184-
})
184+
.map_err(|e| JsNativeError::typ().with_message(e.to_string()).into())
185185
}
186186
}
187187

@@ -281,7 +281,10 @@ impl UrlPatternClass {
281281
context: &mut Context<'_>,
282282
) -> JsResult<JsValue> {
283283
let url_pattern = UrlPattern::try_from_js(this)?;
284-
let input: UrlPatternInput = args.get(0).unwrap().try_js_into(context)?;
284+
let input: UrlPatternInput = match args.get(0) {
285+
Some(value) => value.try_js_into(context)?,
286+
None => UrlPatternInput::default(),
287+
};
285288
let base_url: Option<String> = args.get_or_undefined(1).try_js_into(context).ok();
286289
Ok(url_pattern.test(input, base_url)?.into_js(context))
287290
}
@@ -292,20 +295,19 @@ impl UrlPatternClass {
292295
context: &mut Context<'_>,
293296
) -> JsResult<JsValue> {
294297
let url_pattern = UrlPattern::try_from_js(this)?;
295-
let input: UrlPatternInput = args.get(0).unwrap().try_js_into(context)?;
298+
let input: UrlPatternInput = match args.get(0) {
299+
Some(value) => value.try_js_into(context)?,
300+
None => UrlPatternInput::default(),
301+
};
296302
let base_url: Option<String> = args.get_or_undefined(1).try_js_into(context).ok();
297303
url_pattern
298304
.exec(input, base_url)?
299-
.map_or(Ok(JsValue::Null), |e| Ok(e.into_js(context)))
305+
.map_or(Ok(JsValue::Null), |r| Ok(r.into_js(context)))
300306
}
301307
}
302308

303309
impl TryFromJs for UrlPatternInit {
304310
fn try_from_js(value: &JsValue, context: &mut Context<'_>) -> JsResult<Self> {
305-
if value.is_undefined() {
306-
return Ok(UrlPatternInit::default());
307-
}
308-
309311
let obj = value.as_object().ok_or_else(|| {
310312
JsError::from_native(JsNativeError::typ().with_message("Expected `JsObject`"))
311313
})?;
@@ -469,7 +471,10 @@ impl NativeClass for UrlPatternClass {
469471
args: &[JsValue],
470472
context: &mut Context<'_>,
471473
) -> JsResult<UrlPattern> {
472-
let input: UrlPatternInput = args.get_or_undefined(0).try_js_into(context)?;
474+
let input: UrlPatternInput = match args.get(0) {
475+
Some(value) => value.try_js_into(context)?,
476+
None => UrlPatternInput::default(),
477+
};
473478
let base_url: Option<String> = args.get_or_undefined(1).try_js_into(context)?;
474479

475480
UrlPattern::new(this, input, base_url, context)
@@ -496,12 +501,12 @@ impl NativeClass for UrlPatternClass {
496501
.accessor(js_string!("username"), username, Attribute::all())
497502
.method(
498503
js_string!("test"),
499-
0,
504+
2,
500505
NativeFunction::from_fn_ptr(UrlPatternClass::test),
501506
)
502507
.method(
503508
js_string!("exec"),
504-
0,
509+
2,
505510
NativeFunction::from_fn_ptr(UrlPatternClass::exec),
506511
);
507512
Ok(())

0 commit comments

Comments
 (0)