From e07f28d301b990ebf534cbb8d5fa9f507475c89f Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Wed, 8 Sep 2021 11:14:29 +0200 Subject: feat: add URLPattern API (#11941) This adds support for the URLPattern API. The API is added in --unstable only, as it has not yet shipped in any browser. It is targeted for shipping in Chrome 95. Spec: https://wicg.github.io/urlpattern/ Co-authored-by: crowlKats < crowlkats@toaxl.com > --- ext/url/urlpattern.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ext/url/urlpattern.rs (limited to 'ext/url/urlpattern.rs') diff --git a/ext/url/urlpattern.rs b/ext/url/urlpattern.rs new file mode 100644 index 000000000..b9f53665f --- /dev/null +++ b/ext/url/urlpattern.rs @@ -0,0 +1,40 @@ +use deno_core::error::type_error; +use deno_core::error::AnyError; + +use urlpattern::quirks; +use urlpattern::quirks::MatchInput; +use urlpattern::quirks::StringOrInit; +use urlpattern::quirks::UrlPattern; + +pub fn op_urlpattern_parse( + _state: &mut deno_core::OpState, + input: StringOrInit, + base_url: Option, +) -> Result { + let init = urlpattern::quirks::process_construct_pattern_input( + input, + base_url.as_deref(), + ) + .map_err(|e| type_error(e.to_string()))?; + + let pattern = urlpattern::quirks::parse_pattern(init) + .map_err(|e| type_error(e.to_string()))?; + + Ok(pattern) +} + +pub fn op_urlpattern_process_match_input( + _state: &mut deno_core::OpState, + input: StringOrInit, + base_url: Option, +) -> Result, AnyError> { + let res = urlpattern::quirks::process_match_input(input, base_url.as_deref()) + .map_err(|e| type_error(e.to_string()))?; + + 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))) +} -- cgit v1.2.3