Skip to content
Prev Previous commit
Next Next commit
Split out common steps into a separate algorithm
  • Loading branch information
lucacasonato committed Feb 11, 2022
commit b026a334a9e4a10be25f373f5f33d41dbfbc090e
61 changes: 27 additions & 34 deletions fetch.bs
Original file line number Diff line number Diff line change
Expand Up @@ -7399,11 +7399,8 @@ enum ResponseType { "basic", "cors", "default", "error", "opaque", "opaqueredire
<li><p>Return <var>responseObject</var>.
</ol>

<hr>

<p>The
<dfn constructor for=Response id=dom-response lt="Response(body, init)"><code>new Response(<var>body</var>, <var>init</var>)</code></dfn>
constructor steps are:
<p>To <dfn>initialize a response</dfn>, given a {{Response}} <var>response</var>, and
{{ResponseInit}} <var>init</var>, run these steps:

<ol>
<li><p>If <var>init</var>["{{ResponseInit/status}}"] is not in the range 200 to 599, inclusive,
Expand All @@ -7412,30 +7409,40 @@ constructor steps are:
<li><p>If <var>init</var>["{{ResponseInit/statusText}}"] does not match the
<a spec=http>reason-phrase</a> token production, then <a>throw</a> a {{TypeError}}.

<li><p>Set <var>response</var>'s <a for=Response>response</a>'s <a for=response>status</a> to
<var>init</var>["{{ResponseInit/status}}"].

<li><p>Set <var>response</var>'s <a for=Response>response</a>'s <a for=response>status message</a> to
<var>init</var>["{{ResponseInit/statusText}}"].

<li><p>If <var>init</var>["{{ResponseInit/headers}}"] <a for=map>exists</a>, then
<a for=Headers>fill</a> <var>response</var>'s <a for=Response>headers</a> with
<var>init</var>["{{ResponseInit/headers}}"].
</ol>

<hr>

<p>The
<dfn constructor for=Response id=dom-response lt="Response(body, init)"><code>new Response(<var>body</var>, <var>init</var>)</code></dfn>
constructor steps are:

<ol>
<li><p>Set <a>this</a>'s <a for=Response>response</a> to a new <a for=/>response</a>.

<li><p>Set <a>this</a>'s <a for=Response>headers</a> to a <a for=/>new</a> {{Headers}} object with
<a>this</a>'s <a>relevant Realm</a>, whose <a for=Headers>header list</a> is <a>this</a>'s
<a for=Response>response</a>'s <a for=response>header list</a> and <a for=Headers>guard</a> is
"<code>response</code>".

<li><p>Set <a>this</a>'s <a for=Response>response</a>'s <a for=response>status</a> to
<var>init</var>["{{ResponseInit/status}}"].

<li><p>Set <a>this</a>'s <a for=Response>response</a>'s <a for=response>status message</a> to
<var>init</var>["{{ResponseInit/statusText}}"].

<li><p>If <var>init</var>["{{ResponseInit/headers}}"] <a for=map>exists</a>, then
<a for=Headers>fill</a> <a>this</a>'s <a for=Response>headers</a> with
<var>init</var>["{{ResponseInit/headers}}"].
<li><p>Perform <a>initialize a response</a> given <a>this</a>, and <var>init</var>.

<li>
<p>If <var>body</var> is non-null, then:

<ol>
<li>
<p>If <var>init</var>["{{ResponseInit/status}}"] is a <a>null body status</a>, then <a>throw</a>
a {{TypeError}}.
<p>If <a>this</a>'s <a for=Response>response</a>'s <a for=response>status</a> is a
<a>null body status</a>, then <a>throw</a> a {{TypeError}}.

<p class="note no-backref">101 is included in <a>null body status</a> due to its use elsewhere.
It does not affect this step.
Expand Down Expand Up @@ -7491,31 +7498,17 @@ are:
are:

<ol>
<li><p>If <var>init</var>["{{ResponseInit/status}}"] is not in the range 200 to 599, inclusive,
then <a>throw</a> a {{RangeError}}.

<li><p>If <var>init</var>["{{ResponseInit/status}}"] is a <a>null body status</a>, then
<a>throw</a> a {{TypeError}}.

<li><p>If <var>init</var>["{{ResponseInit/statusText}}"] does not match the
<a spec=http>reason-phrase</a> token production, then <a>throw</a> a {{TypeError}}.

<li><p>Let <var>responseObject</var> be the result of <a for=Response>creating</a> a {{Response}}
object, given a new <a for=/>response</a>, "<code>response</code>", and <a>this</a>'s
<a>relevant Realm</a>.

<li><p>Set <var>responseObject</var>'s <a for=Response>response</a>'s <a for=response>status</a> to
<var>init</var>["{{ResponseInit/status}}"].

<li><p>Set <var>responseObject</var>'s <a for=Response>response</a>'s
<a for=response>status message</a> to <var>init</var>["{{ResponseInit/statusText}}"].
<li><p>Perform <a>initialize a response</a> given <var>responseObject</var>, and <var>init</var>.

<li><p>If <var>init</var>["{{ResponseInit/headers}}"] <a for=map>exists</a>, then
<a for=Headers>fill</a> <var>responseObject</var>'s <a for=Response>headers</a> with
<var>init</var>["{{ResponseInit/headers}}"].
<li><p>If <var>responseObject</var>'s <a for=Response>response</a>'s <a for=response>status</a> is
a <a>null body status</a>, then <a>throw</a> a {{TypeError}}.

<li><p>Set <var>responseObject</var>'s <a for=Response>response</a>'s <a for=response>body</a> to
the result of running <a>serialize a JavaScript value to a JSON bytes</a> on <var>data</var>.
the result of running <a>serialize a JavaScript value to JSON bytes</a> on <var>data</var>.

<li><p>If <var>responseObject</var>'s <a for=Response>response</a>'s <a for=response>header list</a>
<a for="header list">does not contain</a> `<code>Content-Type</code>`, then
Expand Down