support reading blob with stream (#608)

This commit is contained in:
Jimmy Wärting 2019-04-16 12:29:17 +02:00 committed by David Frank
parent 0ad136d49f
commit 432c9b01ea
2 changed files with 25 additions and 11 deletions

View File

@ -1,6 +1,8 @@
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js // Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
// (MIT licensed) // (MIT licensed)
import { Readable } from 'stream';
export const BUFFER = Symbol('buffer'); export const BUFFER = Symbol('buffer');
const TYPE = Symbol('type'); const TYPE = Symbol('type');
@ -57,13 +59,16 @@ export default class Blob {
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
return Promise.resolve(ab); return Promise.resolve(ab);
} }
// stream() { stream() {
// const readable = new Readable() const readable = new Readable();
// readable._read = () => {} readable._read = () => {};
// readable.push(this[BUFFER]) readable.push(this[BUFFER]);
// readable.push(null) readable.push(null);
// return readable || whatwg stream? not decided return readable;
// } }
toString() {
return '[object Blob]'
}
slice() { slice() {
const size = this.size; const size = this.size;

View File

@ -1779,8 +1779,8 @@ describe('node-fetch', () => {
.then(blob => blob.text()) .then(blob => blob.text())
.then(body => { .then(body => {
expect(body).to.equal('hello'); expect(body).to.equal('hello');
}) });
}) });
it('should support reading blob as arrayBuffer', function() { it('should support reading blob as arrayBuffer', function() {
return new Response(`hello`) return new Response(`hello`)
@ -1789,8 +1789,17 @@ describe('node-fetch', () => {
.then(ab => { .then(ab => {
const str = String.fromCharCode.apply(null, new Uint8Array(ab)); const str = String.fromCharCode.apply(null, new Uint8Array(ab));
expect(str).to.equal('hello'); expect(str).to.equal('hello');
}) });
}) });
it('should support reading blob as stream', function() {
return new Response(`hello`)
.blob()
.then(blob => streamToPromise(blob.stream(), data => {
const str = data.toString();
expect(str).to.equal('hello');
}));
});
it('should support blob round-trip', function() { it('should support blob round-trip', function() {
const url = `${base}hello`; const url = `${base}hello`;