diff --git a/js/fetch.ts b/js/fetch.ts index 4f225b507a..48429ca19c 100644 --- a/js/fetch.ts +++ b/js/fetch.ts @@ -20,6 +20,7 @@ import { FormData } from "./dom_types"; import { TextDecoder } from "./text_encoding"; +import { DenoBlob } from "./blob"; interface Header { name: string; @@ -134,8 +135,10 @@ class FetchResponse implements Response { } async blob(): Promise { - notImplemented(); - return {} as Blob; + const arrayBuffer = await this.arrayBuffer(); + return new DenoBlob([arrayBuffer], { + type: this.headers.get("content-type") || "" + }); } async formData(): Promise { diff --git a/js/fetch_test.ts b/js/fetch_test.ts index 2b7f32099f..25d8c2ed01 100644 --- a/js/fetch_test.ts +++ b/js/fetch_test.ts @@ -35,3 +35,11 @@ test(async function headersAppend() { } assert(err instanceof TypeError); }); + +testPerm({ net: true }, async function fetchBlob() { + const response = await fetch("http://localhost:4545/package.json"); + const headers = response.headers; + const blob = await response.blob(); + assertEqual(blob.type, headers.get("Content-Type")); + assertEqual(blob.size, Number(headers.get("Content-Length"))); +}); diff --git a/js/util.ts b/js/util.ts index c4bada5890..bfde019084 100644 --- a/js/util.ts +++ b/js/util.ts @@ -9,7 +9,7 @@ export function setLogDebug(debug: boolean): void { } /** - * Debug logging for deno. + * Debug logging for deno. * Enable with the `--log-debug` or `-D` command line flag. * @internal */