This question comes from the Node.js implementation, refs: nodejs/node#11093
The URL constructor specifies:
Set result's query object to a new
{{URLSearchParams}} object using query, and then set that query object's
url object to result
And the URLSearchParams constructor specifies:
If init is given, is a string, and starts with "?", remove the first
code point from init.
But referencing the getter spec of url.search:
Return "?", followed by context object's url's query.
one can infer that the query of an url should not have the leading ?, this means:
- The URL constructor would pass an query with leading
? stripped to new URLSearchParams
- The
new URLSearchParams would strip a leading ? again, in any, but the WPT tests expect ??a=b&c=d to be serialized as %3Fa=b&c=d
AFAICT the URL constructor should prepend a ? here, if we don't introduce a special way to notify the URLSearchParams constructor not to strip the leading ?:
diff --git a/url.bs b/url.bs
index 7988aa2..f1a9c9d 100644
--- a/url.bs
+++ b/url.bs
@@ -2648,7 +2648,8 @@ when invoked, must run these steps:
<li><p>Set <var>result</var>'s <a for=URL>url</a> to <var>parsedURL</var>.
<li><p>Set <var>result</var>'s <a for=URL>query object</a> to a <a for=URLSearchParams>new</a>
- {{URLSearchParams}} object using <var>query</var>, and then set that <a for=URL>query object</a>'s
+ {{URLSearchParams}} object using <var>query</var> prepended with the
+ leading <code>?</code>, and then set that <a for=URL>query object</a>'s
<a for=URLSearchParams>url object</a> to <var>result</var>.
<li><p>Return <var>result</var>.
Also the definition of url.query in 4.1. URL representation can be a little bit more explicit about the leading ?. I can put up a PR if this is confirmed.
This question comes from the Node.js implementation, refs: nodejs/node#11093
The
URLconstructor specifies:And the
URLSearchParamsconstructor specifies:But referencing the getter spec of
url.search:one can infer that the
queryof an url should not have the leading?, this means:?stripped tonew URLSearchParamsnew URLSearchParamswould strip a leading?again, in any, but the WPT tests expect??a=b&c=dto be serialized as%3Fa=b&c=dAFAICT the
URLconstructor should prepend a?here, if we don't introduce a special way to notify theURLSearchParamsconstructor not to strip the leading?:Also the definition of
url.queryin4.1. URL representationcan be a little bit more explicit about the leading?. I can put up a PR if this is confirmed.