diff options
Diffstat (limited to 'js/fetch.ts')
-rw-r--r-- | js/fetch.ts | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/js/fetch.ts b/js/fetch.ts index 3559f3db8..25db32d1d 100644 --- a/js/fetch.ts +++ b/js/fetch.ts @@ -128,6 +128,7 @@ class FetchResponse implements domTypes.Response { readonly trailer: Promise<domTypes.Headers>; //private bodyChunks: Uint8Array[] = []; private first = true; + private bodyData: ArrayBuffer; private bodyWaiter: Resolvable<ArrayBuffer>; constructor( @@ -138,6 +139,7 @@ class FetchResponse implements domTypes.Response { this.bodyWaiter = createResolvable(); this.trailer = createResolvable(); this.headers = new DenoHeaders(headersList); + this.bodyData = body_; setTimeout(() => { this.bodyWaiter.resolve(body_); }, 0); @@ -175,8 +177,19 @@ class FetchResponse implements domTypes.Response { } clone(): domTypes.Response { - notImplemented(); - return {} as domTypes.Response; + if (this.bodyUsed) { + throw new TypeError( + "Failed to execute 'clone' on 'Response': Response body is already used" + ); + } + + const iterators = this.headers.entries(); + const headersList: Array<[string, string]> = []; + for (const header of iterators) { + headersList.push(header); + } + + return new FetchResponse(this.status, this.bodyData.slice(0), headersList); } onHeader?: (res: FetchResponse) => void; |