You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -2021,15 +2026,15 @@ If a specification has an Infra value (e.g., after using [=parse a JSON string t
2021
2026
To <dfn export>build a [=URL pattern=] from an Infra value</dfn> |rawPattern| given [=/URL=] |baseURL|, perform the following steps.
2022
2027
2023
2028
1. Let |serializedBaseURL| be the [=URL serializer|serialization=] of |baseURL|.
2024
-
1. If |rawPattern| is a [=string=], then:
2029
+
1. If |rawPattern| is a [=/string=], then:
2025
2030
1. Return the result of [=creating=] a URL pattern given |rawPattern|, |serializedBaseURL|, and an empty [=map=].
2026
2031
2027
2032
<div class="note">It may become necessary in the future to plumb non-empty options here.</div>
2028
2033
2029
2034
1. Otherwise, if |rawPattern| is a [=map=], then:
2030
2035
1. Let |init| be «[ "{{URLPatternInit/baseURL}}" → |serializedBaseURL| ]», representing a dictionary of type {{URLPatternInit}}.
2031
2036
1. [=map/For each=] |key| → |value| of |rawPattern|:
2032
-
1. If |key| is not the <a spec=webidl>identifier</a> of a <a spec=webidl>dictionary member</a> of {{URLPatternInit}} or one of its <a spec=webidl>inherited dictionaries</a>, |value| is not a [=string=], or the member's type is not declared to be {{USVString}}, then return null.
2037
+
1. If |key| is not the <a spec=webidl>identifier</a> of a <a spec=webidl>dictionary member</a> of {{URLPatternInit}} or one of its <a spec=webidl>inherited dictionaries</a>, |value| is not a [=/string=], or the member's type is not declared to be {{USVString}}, then return null.
2033
2038
2034
2039
<div class="note">This will need to be updated if {{URLPatternInit}} gains members of other types.</div>
2035
2040
<div class="note">A future version of this specification might also have a less strict mode, if that proves useful to other specifications.</div>
@@ -2044,6 +2049,24 @@ If a specification has an Infra value (e.g., after using [=parse a JSON string t
2044
2049
2045
2050
Specifications may wish to leave room in their formats to accept options for {{URLPatternOptions}}, override the base URL, or similar, since it is not possible to construct a {{URLPattern}} object directly in this case, unlike in a JavaScript API. For example, <cite>Speculation Rules</cite> accepts a "`relative_to`" key which can be used to switch to using the [=document base URL=] instead of the JSON resource's URL. [[SPECULATION-RULES]]
2046
2051
2052
+
<h3 id=other-specs-http>Integrating with HTTP header fields</h3>
2053
+
2054
+
HTTP headers which include URL patterns should accept a string in the constructor string syntax, likely as part of a structured field [[RFC8941]].
2055
+
2056
+
<div class="note">No known header accepts the dictionary syntax for URL patterns. If that changes, this specification will be updated to define it, likely by processing [[RFC8941]] inner lists.</div>
2057
+
2058
+
Specifications for HTTP headers should operate on [=URL patterns=] (e.g., using the [=URL pattern/match=] algorithm) rather than {{URLPattern}} objects (which imply the existence of a JavaScript [=ECMAScript/realm=]).
2059
+
2060
+
<div algorithm>
2061
+
To <dfn export>build a [=URL pattern=] from an HTTP structured field value</dfn> |rawPattern| given [=/URL=] |baseURL|, perform the following steps.
2062
+
2063
+
1. Let |serializedBaseURL| be the [=URL serializer|serialization=] of |baseURL|.
2064
+
1. [=Assert=]: |rawPattern| is a [=structured header/string=].
2065
+
1. Return the result of [=creating=] a URL pattern given |rawPattern|, |serializedBaseURL|, and an empty [=map=].
2066
+
</div>
2067
+
2068
+
<div class="note">Specifications might consider accepting only patterns which do not [=URL pattern/has regexp groups|have regexp groups=] if evaluating the pattern, since the performance of such patterns might be more reliable, and may not require a [[ECMA-262]] regular expression implementation, which may have security, code size, or other implications for implementations. On the other hand, JavaScript APIs run in environments where such an implementation is readily available.</div>
0 commit comments