12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- /*
- Copyright 2019 Google LLC
- Use of this source code is governed by an MIT-style
- license that can be found in the LICENSE file or at
- https://opensource.org/licenses/MIT.
- */
- import { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';
- import './_version.js';
- /**
- * Allows developers to copy a response and modify its `headers`, `status`,
- * or `statusText` values (the values settable via a
- * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}
- * object in the constructor).
- * To modify these values, pass a function as the second argument. That
- * function will be invoked with a single object with the response properties
- * `{headers, status, statusText}`. The return value of this function will
- * be used as the `ResponseInit` for the new `Response`. To change the values
- * either modify the passed parameter(s) and return it, or return a totally
- * new object.
- *
- * @param {Response} response
- * @param {Function} modifier
- * @memberof module:workbox-core
- */
- async function copyResponse(response, modifier) {
- const clonedResponse = response.clone();
- // Create a fresh `ResponseInit` object by cloning the headers.
- const responseInit = {
- headers: new Headers(clonedResponse.headers),
- status: clonedResponse.status,
- statusText: clonedResponse.statusText,
- };
- // Apply any user modifications.
- const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;
- // Create the new response from the body stream and `ResponseInit`
- // modifications. Note: not all browsers support the Response.body stream,
- // so fall back to reading the entire body into memory as a blob.
- const body = canConstructResponseFromBodyStream() ?
- clonedResponse.body : await clonedResponse.blob();
- return new Response(body, modifiedResponseInit);
- }
- export { copyResponse };
|