@@ -273,54 +273,32 @@ class Blob {
273273 if ( ! isBlob ( this ) )
274274 return PromiseReject ( new ERR_INVALID_THIS ( 'Blob' ) ) ;
275275
276- const { promise, resolve, reject } = createDeferredPromise ( ) ;
277- const reader = this [ kHandle ] . getReader ( ) ;
278- const buffers = [ ] ;
279- const readNext = ( ) => {
280- reader . pull ( ( status , buffer ) => {
281- if ( status === 0 ) {
282- // EOS, concat & resolve
283- // buffer should be undefined here
284- resolve ( concat ( buffers ) ) ;
285- return ;
286- } else if ( status < 0 ) {
287- // The read could fail for many different reasons when reading
288- // from a non-memory resident blob part (e.g. file-backed blob).
289- // The error details the system error code.
290- const error = lazyDOMException ( 'The blob could not be read' , 'NotReadableError' ) ;
291- reject ( error ) ;
292- return ;
293- }
294- if ( buffer !== undefined )
295- buffers . push ( buffer ) ;
296- queueMicrotask ( ( ) => readNext ( ) ) ;
297- } ) ;
298- } ;
299- readNext ( ) ;
300- return promise ;
276+ return arrayBuffer ( this ) ;
301277 }
302278
303279 /**
304280 * @returns {Promise<string> }
305281 */
306- async text ( ) {
282+ text ( ) {
307283 if ( ! isBlob ( this ) )
308- throw new ERR_INVALID_THIS ( 'Blob' ) ;
284+ return PromiseReject ( new ERR_INVALID_THIS ( 'Blob' ) ) ;
309285
310286 dec ??= new TextDecoder ( ) ;
311287
312- return dec . decode ( await this . arrayBuffer ( ) ) ;
288+ return PromisePrototypeThen (
289+ arrayBuffer ( this ) ,
290+ ( buffer ) => dec . decode ( buffer ) ) ;
313291 }
314292
315293 /**
316294 * @returns {Promise<Uint8Array> }
317295 */
318296 bytes ( ) {
319297 if ( ! isBlob ( this ) )
320- throw new ERR_INVALID_THIS ( 'Blob' ) ;
298+ return PromiseReject ( new ERR_INVALID_THIS ( 'Blob' ) ) ;
321299
322300 return PromisePrototypeThen (
323- this . arrayBuffer ( ) ,
301+ arrayBuffer ( this ) ,
324302 ( buffer ) => new Uint8Array ( buffer ) ) ;
325303 }
326304
@@ -439,6 +417,7 @@ ObjectDefineProperties(Blob.prototype, {
439417 stream : kEnumerableProperty ,
440418 text : kEnumerableProperty ,
441419 arrayBuffer : kEnumerableProperty ,
420+ bytes : kEnumerableProperty ,
442421} ) ;
443422
444423function resolveObjectURL ( url ) {
@@ -490,6 +469,34 @@ function createBlobFromFilePath(path, options) {
490469 return res ;
491470}
492471
472+ function arrayBuffer ( blob ) {
473+ const { promise, resolve, reject } = createDeferredPromise ( ) ;
474+ const reader = blob [ kHandle ] . getReader ( ) ;
475+ const buffers = [ ] ;
476+ const readNext = ( ) => {
477+ reader . pull ( ( status , buffer ) => {
478+ if ( status === 0 ) {
479+ // EOS, concat & resolve
480+ // buffer should be undefined here
481+ resolve ( concat ( buffers ) ) ;
482+ return ;
483+ } else if ( status < 0 ) {
484+ // The read could fail for many different reasons when reading
485+ // from a non-memory resident blob part (e.g. file-backed blob).
486+ // The error details the system error code.
487+ const error = lazyDOMException ( 'The blob could not be read' , 'NotReadableError' ) ;
488+ reject ( error ) ;
489+ return ;
490+ }
491+ if ( buffer !== undefined )
492+ buffers . push ( buffer ) ;
493+ queueMicrotask ( ( ) => readNext ( ) ) ;
494+ } ) ;
495+ } ;
496+ readNext ( ) ;
497+ return promise ;
498+ }
499+
493500module . exports = {
494501 Blob,
495502 createBlob,
0 commit comments