Files
ladybird/Libraries/LibWeb/URLPattern/URLPattern.idl
Shannon Booth f3ec727555 LibWeb/Bindings: Support returning nullable types in dictionaries
We were previously assuming that dictionary members were always
required when being returned.

This is a bit of a weird case, because unlike _input_ dictionaries
which the spec marks as required, 'result' dictionaries do not seem to
be marked in spec IDL as required. This is still fine from the POV that
the spec is written as it states that we should only be putting the
values into the dictionary if the value exists.

We could do this through some metaprogramming constexpr type checks.
For example, if the type in our C++ representation was not an
Optional, we can skip the has_value check.

Instead of doing that, change the IDL of the result dictionaries to
annotate these members so that the IDL generator knows this
information up front. While all current cases have every single
member returned or not returned, it is conceivable that the spec
could have a situation that one member is always returned (and
should get marked as required), while the others are optionally
returned. Therefore, this new GenerateAsRequired attribute is
applied for each individual member.
2025-02-10 17:05:15 +00:00

62 lines
2.3 KiB
Plaintext

typedef (USVString or URLPatternInit) URLPatternInput;
// https://urlpattern.spec.whatwg.org/#urlpattern
[Exposed=(Window,Worker)]
interface URLPattern {
constructor(URLPatternInput input, USVString baseURL, optional URLPatternOptions options = {});
constructor(optional URLPatternInput input = {}, optional URLPatternOptions options = {});
[FIXME] boolean test(optional URLPatternInput input = {}, optional USVString baseURL);
[FIXME] URLPatternResult? exec(optional URLPatternInput input = {}, optional USVString baseURL);
[FIXME] readonly attribute USVString protocol;
[FIXME] readonly attribute USVString username;
[FIXME] readonly attribute USVString password;
[FIXME] readonly attribute USVString hostname;
[FIXME] readonly attribute USVString port;
[FIXME] readonly attribute USVString pathname;
[FIXME] readonly attribute USVString search;
[FIXME] readonly attribute USVString hash;
[FIXME] readonly attribute boolean hasRegExpGroups;
};
// https://urlpattern.spec.whatwg.org/#dictdef-urlpatterninit
dictionary URLPatternInit {
USVString protocol;
USVString username;
USVString password;
USVString hostname;
USVString port;
USVString pathname;
USVString search;
USVString hash;
USVString baseURL;
};
// https://urlpattern.spec.whatwg.org/#dictdef-urlpatternoptions
dictionary URLPatternOptions {
boolean ignoreCase = false;
};
// https://urlpattern.spec.whatwg.org/#dictdef-urlpatternresult
dictionary URLPatternResult {
[GenerateAsRequired] sequence<URLPatternInput> inputs;
[GenerateAsRequired] URLPatternComponentResult protocol;
[GenerateAsRequired] URLPatternComponentResult username;
[GenerateAsRequired] URLPatternComponentResult password;
[GenerateAsRequired] URLPatternComponentResult hostname;
[GenerateAsRequired] URLPatternComponentResult port;
[GenerateAsRequired] URLPatternComponentResult pathname;
[GenerateAsRequired] URLPatternComponentResult search;
[GenerateAsRequired] URLPatternComponentResult hash;
};
// https://urlpattern.spec.whatwg.org/#dictdef-urlpatterncomponentresult
dictionary URLPatternComponentResult {
[GenerateAsRequired] USVString input;
[GenerateAsRequired] record<USVString, (USVString or undefined)> groups;
};