summaryrefslogtreecommitdiff
path: root/js/fetch.ts
diff options
context:
space:
mode:
authorztplz <mysticzt@gmail.com>2018-10-22 05:42:18 +0800
committerRyan Dahl <ry@tinyclouds.org>2018-10-21 14:42:18 -0700
commitc4bddc4651f583241193b80634a4f22abb02d582 (patch)
treef70a819bd2bd26b80132f2821943b2e5fffb8861 /js/fetch.ts
parent47c96a61527f56aa6dfc5a8fc44b13a1db4f4da5 (diff)
Implemente clone for FetchResponse (#1054)
Diffstat (limited to 'js/fetch.ts')
-rw-r--r--js/fetch.ts17
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;