diff options
author | Luca Casonato <hello@lcas.dev> | 2021-09-08 11:14:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-08 11:14:29 +0200 |
commit | e07f28d301b990ebf534cbb8d5fa9f507475c89f (patch) | |
tree | 6a00f6a0abe0a7833a7d0feadf4e5d8c3509c12e /ext/url/urlpattern.rs | |
parent | 2de5587547247e3acdffecae1c74caf52a021580 (diff) |
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 >
Diffstat (limited to 'ext/url/urlpattern.rs')
-rw-r--r-- | ext/url/urlpattern.rs | 40 |
1 files changed, 40 insertions, 0 deletions
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<String>, +) -> Result<UrlPattern, AnyError> { + 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<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()))?; + + 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))) +} |