mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
feat(urlpattern): add ignoreCase option & hasRegExpGroups property, and fix spec discrepancies (#24741)
Fixes #20906 Fixes #24266 Closes #21073 --------- Signed-off-by: Leo Kettmeir <crowlkats@toaxl.com> Co-authored-by: Luca Casonato <lucacasonato@yahoo.com>
This commit is contained in:
parent
3f79db1486
commit
27ea23ea69
5 changed files with 65 additions and 358 deletions
9
Cargo.lock
generated
9
Cargo.lock
generated
|
@ -5497,9 +5497,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.10.4"
|
||||
version = "1.10.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
|
||||
checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
|
@ -7677,11 +7677,10 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "urlpattern"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609"
|
||||
checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"regex",
|
||||
"serde",
|
||||
"unic-ucd-ident",
|
||||
|
|
|
@ -137,33 +137,65 @@ class SampledLRUCache {
|
|||
|
||||
const matchInputCache = new SampledLRUCache(4096);
|
||||
|
||||
const _hasRegExpGroups = Symbol("[[hasRegExpGroups]]");
|
||||
|
||||
class URLPattern {
|
||||
/** @type {Components} */
|
||||
[_components];
|
||||
[_hasRegExpGroups];
|
||||
|
||||
#reusedResult;
|
||||
|
||||
/**
|
||||
* @param {URLPatternInput} input
|
||||
* @param {string} [baseURL]
|
||||
* @param {string} [baseURLOrOptions]
|
||||
* @param {string} [maybeOptions]
|
||||
*/
|
||||
constructor(input, baseURL = undefined) {
|
||||
constructor(
|
||||
input,
|
||||
baseURLOrOptions = undefined,
|
||||
maybeOptions = undefined,
|
||||
) {
|
||||
this[webidl.brand] = webidl.brand;
|
||||
const prefix = "Failed to construct 'URLPattern'";
|
||||
webidl.requiredArguments(arguments.length, 1, prefix);
|
||||
input = webidl.converters.URLPatternInput(input, prefix, "Argument 1");
|
||||
if (baseURL !== undefined) {
|
||||
baseURL = webidl.converters.USVString(baseURL, prefix, "Argument 2");
|
||||
|
||||
let baseURL;
|
||||
let options;
|
||||
if (webidl.type(baseURLOrOptions) === "String") {
|
||||
webidl.requiredArguments(arguments.length, 1, prefix);
|
||||
input = webidl.converters.URLPatternInput(input, prefix, "Argument 1");
|
||||
baseURL = webidl.converters.USVString(
|
||||
baseURLOrOptions,
|
||||
prefix,
|
||||
"Argument 2",
|
||||
);
|
||||
options = webidl.converters.URLPatternOptions(
|
||||
maybeOptions !== undefined ? maybeOptions : { __proto: null },
|
||||
prefix,
|
||||
"Argument 3",
|
||||
);
|
||||
} else {
|
||||
if (input !== undefined) {
|
||||
input = webidl.converters.URLPatternInput(input, prefix, "Argument 1");
|
||||
} else {
|
||||
input = { __proto__: null };
|
||||
}
|
||||
options = webidl.converters.URLPatternOptions(
|
||||
maybeOptions,
|
||||
prefix,
|
||||
"Argument 2",
|
||||
);
|
||||
}
|
||||
|
||||
const components = op_urlpattern_parse(input, baseURL);
|
||||
const components = op_urlpattern_parse(input, baseURL, options);
|
||||
this[_hasRegExpGroups] = components.hasRegexpGroups;
|
||||
|
||||
for (let i = 0; i < COMPONENTS_KEYS.length; ++i) {
|
||||
const key = COMPONENTS_KEYS[i];
|
||||
try {
|
||||
components[key].regexp = new SafeRegExp(
|
||||
components[key].regexpString,
|
||||
"u",
|
||||
options.ignoreCase ? "ui" : "u",
|
||||
);
|
||||
} catch (e) {
|
||||
throw new TypeError(`${prefix}: ${key} is invalid; ${e.message}`);
|
||||
|
@ -212,6 +244,11 @@ class URLPattern {
|
|||
return this[_components].hash.patternString;
|
||||
}
|
||||
|
||||
get hasRegExpGroups() {
|
||||
webidl.assertBranded(this, URLPatternPrototype);
|
||||
return this[_hasRegExpGroups];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {URLPatternInput} input
|
||||
* @param {string} [baseURL]
|
||||
|
@ -312,7 +349,7 @@ class URLPattern {
|
|||
const groups = res.groups;
|
||||
for (let i = 0; i < groupList.length; ++i) {
|
||||
// TODO(lucacasonato): this is vulnerable to override mistake
|
||||
groups[groupList[i]] = match[i + 1] ?? "";
|
||||
groups[groupList[i]] = match[i + 1];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -344,6 +381,7 @@ class URLPattern {
|
|||
"pathname",
|
||||
"search",
|
||||
"hash",
|
||||
"hasRegExpGroups",
|
||||
],
|
||||
}),
|
||||
inspectOptions,
|
||||
|
@ -375,4 +413,13 @@ webidl.converters["URLPatternInput"] = (V, prefix, context, opts) => {
|
|||
return webidl.converters.USVString(V, prefix, context, opts);
|
||||
};
|
||||
|
||||
webidl.converters.URLPatternOptions = webidl
|
||||
.createDictionaryConverter("URLPatternOptions", [
|
||||
{
|
||||
key: "ignoreCase",
|
||||
converter: webidl.converters.boolean,
|
||||
defaultValue: false,
|
||||
},
|
||||
]);
|
||||
|
||||
export { URLPattern };
|
||||
|
|
|
@ -15,7 +15,7 @@ path = "lib.rs"
|
|||
|
||||
[dependencies]
|
||||
deno_core.workspace = true
|
||||
urlpattern = "0.2.0"
|
||||
urlpattern = "0.3.0"
|
||||
|
||||
[dev-dependencies]
|
||||
deno_bench_util.workspace = true
|
||||
|
|
|
@ -14,6 +14,7 @@ use urlpattern::quirks::UrlPattern;
|
|||
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,
|
||||
|
@ -21,7 +22,7 @@ pub fn op_urlpattern_parse(
|
|||
)
|
||||
.map_err(|e| type_error(e.to_string()))?;
|
||||
|
||||
let pattern = urlpattern::quirks::parse_pattern(init)
|
||||
let pattern = urlpattern::quirks::parse_pattern(init, options)
|
||||
.map_err(|e| type_error(e.to_string()))?;
|
||||
|
||||
Ok(pattern)
|
||||
|
|
|
@ -12909,380 +12909,40 @@
|
|||
"Component: hash Left: {\"hash\":\"a\"} Right: {\"hash\":\"b\"}"
|
||||
],
|
||||
"urlpattern.any.html": [
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar/baz\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?otherquery#otherhash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?otherquery#otherhash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?query#hash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar/baz\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"http://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar/baz\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://other.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"http://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/*?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/**\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"./foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"/\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"{/bar}\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"\\\\/bar\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"b\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./b\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\":name.html\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo.html\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"}] Inputs: [\"./foo/bar\",\"https://example.com\"]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"http{s}?://{*.}?example.com/:product/:endpoint\"] Inputs: [\"https://sub.example.com/foo/bar\"]",
|
||||
"Pattern: [\"https://example.com?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com:8080?foo\"] Inputs: [\"https://example.com:8080/?foo\"]",
|
||||
"Pattern: [\"https://example.com:8080#foo\"] Inputs: [\"https://example.com:8080/#foo\"]",
|
||||
"Pattern: [\"https://example.com/?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com/*?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/*\\\\?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/\"] Inputs: [\"https://example.com:8080/\"]",
|
||||
"Pattern: [\"data\\\\:foobar\"] Inputs: [\"data:foobar\"]",
|
||||
"Pattern: [\"https://{sub.}?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example(.com/)foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub(?:.))?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"file:///foo/bar\"] Inputs: [\"file:///foo/bar\"]",
|
||||
"Pattern: [\"data:\"] Inputs: [\"data:\"]",
|
||||
"Pattern: [\"foo://bar\"] Inputs: [\"foo://bad_url_browser_interop\"]",
|
||||
"Pattern: [\"https://example.com/foo?bar#baz\"] Inputs: [{\"protocol\":\"https:\",\"search\":\"?bar\",\"hash\":\"#baz\",\"baseURL\":\"http://example.com/foo\"}]",
|
||||
"Pattern: [\"?bar#baz\",\"https://example.com/foo\"] Inputs: [\"?bar#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"?bar\",\"https://example.com/foo#baz\"] Inputs: [\"?bar\",\"https://example.com/foo#snafu\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo?bar\"] Inputs: [\"#baz\",\"https://example.com/foo?bar\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo\"] Inputs: [\"#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://foo\\\\:bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo@example.com\"] Inputs: [\"https://foo@example.com\"]",
|
||||
"Pattern: [\"https://\\\\:bar@example.com\"] Inputs: [\"https://:bar@example.com\"]",
|
||||
"Pattern: [\"https://:user::pass@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https\\\\:foo\\\\:bar@example.com\"] Inputs: [\"https:foo:bar@example.com\"]",
|
||||
"Pattern: [\"data\\\\:foo\\\\:bar@example.com\"] Inputs: [\"data:foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo{\\\\:}bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"data{\\\\:}channel.html\",\"https://example.com\"] Inputs: [\"https://example.com/data:channel.html\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]:8080/\"] Inputs: [\"http://[::1]:8080/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:a]/\"] Inputs: [\"http://[::a]/\"]",
|
||||
"Pattern: [\"http://[:address]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:AB\\\\::num]/\"] Inputs: [\"http://[::ab:1]/\"]",
|
||||
"Pattern: [\"data\\\\:text/javascript,let x = 100/:tens?5;\"] Inputs: [\"data:text/javascript,let x = 100/5;\"]",
|
||||
"Pattern: [{\"hostname\":\"bad\\\\:hostname\"}] Inputs: undefined",
|
||||
"Pattern: [] Inputs: [\"https://example.com/\"]",
|
||||
"Pattern: [] Inputs: [{}]",
|
||||
"Pattern: [] Inputs: []",
|
||||
"Pattern: [{\"pathname\":\"*{}**?\"}] Inputs: [{\"pathname\":\"foobar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"},{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO/BAR\"}]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}] Inputs: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}]",
|
||||
"Pattern: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}] Inputs: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}]",
|
||||
"Pattern: [\"#foo\",\"https://example.com/?q=*&v=?&hmm={}&umm=()\"] Inputs: [\"https://example.com/?q=*&v=?&hmm={}&umm=()#foo\"]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/a\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/z\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/0\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/3\"}]"
|
||||
],
|
||||
"urlpattern.any.worker.html": [
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar/baz\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?otherquery#otherhash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?otherquery#otherhash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?query#hash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar/baz\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"http://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar/baz\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://other.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"http://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/*?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/**\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"./foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"/\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"{/bar}\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"\\\\/bar\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"b\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./b\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\":name.html\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo.html\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"}] Inputs: [\"./foo/bar\",\"https://example.com\"]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"http{s}?://{*.}?example.com/:product/:endpoint\"] Inputs: [\"https://sub.example.com/foo/bar\"]",
|
||||
"Pattern: [\"https://example.com?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com:8080?foo\"] Inputs: [\"https://example.com:8080/?foo\"]",
|
||||
"Pattern: [\"https://example.com:8080#foo\"] Inputs: [\"https://example.com:8080/#foo\"]",
|
||||
"Pattern: [\"https://example.com/?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com/*?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/*\\\\?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/\"] Inputs: [\"https://example.com:8080/\"]",
|
||||
"Pattern: [\"data\\\\:foobar\"] Inputs: [\"data:foobar\"]",
|
||||
"Pattern: [\"https://{sub.}?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example(.com/)foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub(?:.))?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"file:///foo/bar\"] Inputs: [\"file:///foo/bar\"]",
|
||||
"Pattern: [\"data:\"] Inputs: [\"data:\"]",
|
||||
"Pattern: [\"foo://bar\"] Inputs: [\"foo://bad_url_browser_interop\"]",
|
||||
"Pattern: [\"https://example.com/foo?bar#baz\"] Inputs: [{\"protocol\":\"https:\",\"search\":\"?bar\",\"hash\":\"#baz\",\"baseURL\":\"http://example.com/foo\"}]",
|
||||
"Pattern: [\"?bar#baz\",\"https://example.com/foo\"] Inputs: [\"?bar#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"?bar\",\"https://example.com/foo#baz\"] Inputs: [\"?bar\",\"https://example.com/foo#snafu\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo?bar\"] Inputs: [\"#baz\",\"https://example.com/foo?bar\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo\"] Inputs: [\"#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://foo\\\\:bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo@example.com\"] Inputs: [\"https://foo@example.com\"]",
|
||||
"Pattern: [\"https://\\\\:bar@example.com\"] Inputs: [\"https://:bar@example.com\"]",
|
||||
"Pattern: [\"https://:user::pass@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https\\\\:foo\\\\:bar@example.com\"] Inputs: [\"https:foo:bar@example.com\"]",
|
||||
"Pattern: [\"data\\\\:foo\\\\:bar@example.com\"] Inputs: [\"data:foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo{\\\\:}bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"data{\\\\:}channel.html\",\"https://example.com\"] Inputs: [\"https://example.com/data:channel.html\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]:8080/\"] Inputs: [\"http://[::1]:8080/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:a]/\"] Inputs: [\"http://[::a]/\"]",
|
||||
"Pattern: [\"http://[:address]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:AB\\\\::num]/\"] Inputs: [\"http://[::ab:1]/\"]",
|
||||
"Pattern: [\"data\\\\:text/javascript,let x = 100/:tens?5;\"] Inputs: [\"data:text/javascript,let x = 100/5;\"]",
|
||||
"Pattern: [{\"hostname\":\"bad\\\\:hostname\"}] Inputs: undefined",
|
||||
"Pattern: [] Inputs: [\"https://example.com/\"]",
|
||||
"Pattern: [] Inputs: [{}]",
|
||||
"Pattern: [] Inputs: []",
|
||||
"Pattern: [{\"pathname\":\"*{}**?\"}] Inputs: [{\"pathname\":\"foobar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"},{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO/BAR\"}]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}] Inputs: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}]",
|
||||
"Pattern: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}] Inputs: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}]",
|
||||
"Pattern: [\"#foo\",\"https://example.com/?q=*&v=?&hmm={}&umm=()\"] Inputs: [\"https://example.com/?q=*&v=?&hmm={}&umm=()#foo\"]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/a\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/z\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/0\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/3\"}]"
|
||||
],
|
||||
"urlpattern.https.any.html": [
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar/baz\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?otherquery#otherhash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?otherquery#otherhash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?query#hash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar/baz\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"http://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar/baz\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://other.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"http://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/*?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/**\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"./foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"/\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"{/bar}\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"\\\\/bar\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"b\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./b\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\":name.html\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo.html\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"}] Inputs: [\"./foo/bar\",\"https://example.com\"]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"http{s}?://{*.}?example.com/:product/:endpoint\"] Inputs: [\"https://sub.example.com/foo/bar\"]",
|
||||
"Pattern: [\"https://example.com?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com:8080?foo\"] Inputs: [\"https://example.com:8080/?foo\"]",
|
||||
"Pattern: [\"https://example.com:8080#foo\"] Inputs: [\"https://example.com:8080/#foo\"]",
|
||||
"Pattern: [\"https://example.com/?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com/*?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/*\\\\?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/\"] Inputs: [\"https://example.com:8080/\"]",
|
||||
"Pattern: [\"data\\\\:foobar\"] Inputs: [\"data:foobar\"]",
|
||||
"Pattern: [\"https://{sub.}?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example(.com/)foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub(?:.))?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"file:///foo/bar\"] Inputs: [\"file:///foo/bar\"]",
|
||||
"Pattern: [\"data:\"] Inputs: [\"data:\"]",
|
||||
"Pattern: [\"foo://bar\"] Inputs: [\"foo://bad_url_browser_interop\"]",
|
||||
"Pattern: [\"https://example.com/foo?bar#baz\"] Inputs: [{\"protocol\":\"https:\",\"search\":\"?bar\",\"hash\":\"#baz\",\"baseURL\":\"http://example.com/foo\"}]",
|
||||
"Pattern: [\"?bar#baz\",\"https://example.com/foo\"] Inputs: [\"?bar#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"?bar\",\"https://example.com/foo#baz\"] Inputs: [\"?bar\",\"https://example.com/foo#snafu\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo?bar\"] Inputs: [\"#baz\",\"https://example.com/foo?bar\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo\"] Inputs: [\"#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://foo\\\\:bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo@example.com\"] Inputs: [\"https://foo@example.com\"]",
|
||||
"Pattern: [\"https://\\\\:bar@example.com\"] Inputs: [\"https://:bar@example.com\"]",
|
||||
"Pattern: [\"https://:user::pass@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https\\\\:foo\\\\:bar@example.com\"] Inputs: [\"https:foo:bar@example.com\"]",
|
||||
"Pattern: [\"data\\\\:foo\\\\:bar@example.com\"] Inputs: [\"data:foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo{\\\\:}bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"data{\\\\:}channel.html\",\"https://example.com\"] Inputs: [\"https://example.com/data:channel.html\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]:8080/\"] Inputs: [\"http://[::1]:8080/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:a]/\"] Inputs: [\"http://[::a]/\"]",
|
||||
"Pattern: [\"http://[:address]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:AB\\\\::num]/\"] Inputs: [\"http://[::ab:1]/\"]",
|
||||
"Pattern: [\"data\\\\:text/javascript,let x = 100/:tens?5;\"] Inputs: [\"data:text/javascript,let x = 100/5;\"]",
|
||||
"Pattern: [{\"hostname\":\"bad\\\\:hostname\"}] Inputs: undefined",
|
||||
"Pattern: [] Inputs: [\"https://example.com/\"]",
|
||||
"Pattern: [] Inputs: [{}]",
|
||||
"Pattern: [] Inputs: []",
|
||||
"Pattern: [{\"pathname\":\"*{}**?\"}] Inputs: [{\"pathname\":\"foobar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"},{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO/BAR\"}]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}] Inputs: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}]",
|
||||
"Pattern: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}] Inputs: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}]",
|
||||
"Pattern: [\"#foo\",\"https://example.com/?q=*&v=?&hmm={}&umm=()\"] Inputs: [\"https://example.com/?q=*&v=?&hmm={}&umm=()#foo\"]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/a\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/z\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/0\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/3\"}]"
|
||||
],
|
||||
"urlpattern.https.any.worker.html": [
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar/baz\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?otherquery#otherhash\"}] Inputs: [{\"protocol\":\"https\",\"hostname\":\"example.com\",\"pathname\":\"/foo/bar\",\"search\":\"otherquery\",\"hash\":\"otherhash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?otherquery#otherhash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar?query#hash\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://example.com/foo/bar/baz\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"https://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [\"http://other.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar/baz\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://other.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"https://example.com?query#hash\"}] Inputs: [{\"pathname\":\"/foo/bar\",\"baseURL\":\"http://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/:bar*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/*?\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/(.*)*\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/**\"}] Inputs: [{\"pathname\":\"/foo\"}]",
|
||||
"Pattern: [{\"pathname\":\"./foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"\",\"baseURL\":\"https://example.com\"}] Inputs: [{\"pathname\":\"/\",\"baseURL\":\"https://example.com\"}]",
|
||||
"Pattern: [{\"pathname\":\"{/bar}\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"\\\\/bar\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./bar\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"b\",\"baseURL\":\"https://example.com/foo/\"}] Inputs: [{\"pathname\":\"./b\",\"baseURL\":\"https://example.com/foo/\"}]",
|
||||
"Pattern: [{\"pathname\":\"foo/bar\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo/bar\"]",
|
||||
"Pattern: [{\"pathname\":\":name.html\",\"baseURL\":\"https://example.com\"}] Inputs: [\"https://example.com/foo.html\"]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"}] Inputs: [\"./foo/bar\",\"https://example.com\"]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\"] Inputs: [{\"pathname\":\"/foo\",\"search\":\"bar\",\"hash\":\"baz\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"http{s}?://{*.}?example.com/:product/:endpoint\"] Inputs: [\"https://sub.example.com/foo/bar\"]",
|
||||
"Pattern: [\"https://example.com?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com:8080?foo\"] Inputs: [\"https://example.com:8080/?foo\"]",
|
||||
"Pattern: [\"https://example.com:8080#foo\"] Inputs: [\"https://example.com:8080/#foo\"]",
|
||||
"Pattern: [\"https://example.com/?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/#foo\"] Inputs: [\"https://example.com/#foo\"]",
|
||||
"Pattern: [\"https://example.com/*?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/*\\\\?foo\"] Inputs: [\"https://example.com/?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/:name\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/(bar)\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/{bar}\\\\?foo\"] Inputs: [\"https://example.com/bar?foo\"]",
|
||||
"Pattern: [\"https://example.com/\"] Inputs: [\"https://example.com:8080/\"]",
|
||||
"Pattern: [\"data\\\\:foobar\"] Inputs: [\"data:foobar\"]",
|
||||
"Pattern: [\"https://{sub.}?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub.)?example(.com/)foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://(sub(?:.))?example.com/foo\"] Inputs: [\"https://example.com/foo\"]",
|
||||
"Pattern: [\"file:///foo/bar\"] Inputs: [\"file:///foo/bar\"]",
|
||||
"Pattern: [\"data:\"] Inputs: [\"data:\"]",
|
||||
"Pattern: [\"foo://bar\"] Inputs: [\"foo://bad_url_browser_interop\"]",
|
||||
"Pattern: [\"https://example.com/foo?bar#baz\"] Inputs: [{\"protocol\":\"https:\",\"search\":\"?bar\",\"hash\":\"#baz\",\"baseURL\":\"http://example.com/foo\"}]",
|
||||
"Pattern: [\"?bar#baz\",\"https://example.com/foo\"] Inputs: [\"?bar#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"?bar\",\"https://example.com/foo#baz\"] Inputs: [\"?bar\",\"https://example.com/foo#snafu\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo?bar\"] Inputs: [\"#baz\",\"https://example.com/foo?bar\"]",
|
||||
"Pattern: [\"#baz\",\"https://example.com/foo\"] Inputs: [\"#baz\",\"https://example.com/foo\"]",
|
||||
"Pattern: [\"https://foo\\\\:bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo@example.com\"] Inputs: [\"https://foo@example.com\"]",
|
||||
"Pattern: [\"https://\\\\:bar@example.com\"] Inputs: [\"https://:bar@example.com\"]",
|
||||
"Pattern: [\"https://:user::pass@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"https\\\\:foo\\\\:bar@example.com\"] Inputs: [\"https:foo:bar@example.com\"]",
|
||||
"Pattern: [\"data\\\\:foo\\\\:bar@example.com\"] Inputs: [\"data:foo:bar@example.com\"]",
|
||||
"Pattern: [\"https://foo{\\\\:}bar@example.com\"] Inputs: [\"https://foo:bar@example.com\"]",
|
||||
"Pattern: [\"data{\\\\:}channel.html\",\"https://example.com\"] Inputs: [\"https://example.com/data:channel.html\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:1]:8080/\"] Inputs: [\"http://[::1]:8080/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:a]/\"] Inputs: [\"http://[::a]/\"]",
|
||||
"Pattern: [\"http://[:address]/\"] Inputs: [\"http://[::1]/\"]",
|
||||
"Pattern: [\"http://[\\\\:\\\\:AB\\\\::num]/\"] Inputs: [\"http://[::ab:1]/\"]",
|
||||
"Pattern: [\"data\\\\:text/javascript,let x = 100/:tens?5;\"] Inputs: [\"data:text/javascript,let x = 100/5;\"]",
|
||||
"Pattern: [{\"hostname\":\"bad\\\\:hostname\"}] Inputs: undefined",
|
||||
"Pattern: [] Inputs: [\"https://example.com/\"]",
|
||||
"Pattern: [] Inputs: [{}]",
|
||||
"Pattern: [] Inputs: []",
|
||||
"Pattern: [{\"pathname\":\"*{}**?\"}] Inputs: [{\"pathname\":\"foobar\"}]",
|
||||
"Pattern: [{\"pathname\":\"/foo/bar\"},{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO/BAR\"}]",
|
||||
"Pattern: [\"https://example.com:8080/foo?bar#baz\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [\"/foo?bar#baz\",\"https://example.com:8080\",{\"ignoreCase\":true}] Inputs: [{\"pathname\":\"/FOO\",\"search\":\"BAR\",\"hash\":\"BAZ\",\"baseURL\":\"https://example.com:8080\"}]",
|
||||
"Pattern: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}] Inputs: [{\"search\":\"foo\",\"baseURL\":\"https://example.com/a/+/b\"}]",
|
||||
"Pattern: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}] Inputs: [{\"hash\":\"foo\",\"baseURL\":\"https://example.com/?q=*&v=?&hmm={}&umm=()\"}]",
|
||||
"Pattern: [\"#foo\",\"https://example.com/?q=*&v=?&hmm={}&umm=()\"] Inputs: [\"https://example.com/?q=*&v=?&hmm={}&umm=()#foo\"]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/a\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([[a-z]--a])\"}] Inputs: [{\"pathname\":\"/z\"}]",
|
||||
"Pattern: [{\"pathname\":\"/([\\\\d&&[0-1]])\"}] Inputs: [{\"pathname\":\"/0\"}]",
|
||||
|
@ -13292,10 +12952,10 @@
|
|||
"urlpattern-compare.any.sharedworker.html": false,
|
||||
"urlpattern-compare.https.any.serviceworker.html": false,
|
||||
"urlpattern-compare.https.any.sharedworker.html": false,
|
||||
"urlpattern-hasregexpgroups.any.html": false,
|
||||
"urlpattern-hasregexpgroups.any.html": true,
|
||||
"urlpattern-hasregexpgroups.any.serviceworker.html": false,
|
||||
"urlpattern-hasregexpgroups.any.sharedworker.html": false,
|
||||
"urlpattern-hasregexpgroups.any.worker.html": false,
|
||||
"urlpattern-hasregexpgroups.any.worker.html": true,
|
||||
"urlpattern.any.serviceworker.html": false,
|
||||
"urlpattern.any.sharedworker.html": false,
|
||||
"urlpattern.https.any.serviceworker.html": false,
|
||||
|
|
Loading…
Reference in a new issue