@@ -21,12 +21,27 @@ import { FirebaseApp, deleteApp } from '@firebase/app';
21
21
import { getStream , ref , uploadBytes } from '../../src/index.node' ;
22
22
import * as types from '../../src/public-types' ;
23
23
24
- async function readData ( reader : NodeJS . ReadableStream ) : Promise < number [ ] > {
25
- return new Promise < number [ ] > ( ( resolve , reject ) => {
26
- const data : number [ ] = [ ] ;
27
- reader . on ( 'error' , e => reject ( e ) ) ;
28
- reader . on ( 'data' , chunk => data . push ( ...Array . from ( chunk as Buffer ) ) ) ;
29
- reader . on ( 'end' , ( ) => resolve ( data ) ) ;
24
+ // See: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/getReader
25
+ async function readData ( readableStream : ReadableStream ) : Promise < Uint8Array > {
26
+ return new Promise < Uint8Array > ( ( resolve , reject ) => {
27
+ const reader : ReadableStreamDefaultReader = readableStream . getReader ( ) ;
28
+ const result : any [ ] = [ ] ;
29
+ reader
30
+ . read ( )
31
+ . then ( function processBytes ( { done, value } ) : any {
32
+ if ( done ) {
33
+ resolve ( new Uint8Array ( result ) ) ;
34
+ return ;
35
+ }
36
+
37
+ result . push ( ...value ) ;
38
+ return reader . read ( ) . then ( processBytes ) ;
39
+ } )
40
+ . catch ( err => {
41
+ console . error ( err ) ;
42
+ reject ( err ) ;
43
+ return ;
44
+ } ) ;
30
45
} ) ;
31
46
}
32
47
@@ -46,19 +61,17 @@ describe('Firebase Storage > getStream', () => {
46
61
it ( 'can get stream' , async ( ) => {
47
62
const reference = ref ( storage , 'public/exp-bytes' ) ;
48
63
await uploadBytes ( reference , new Uint8Array ( [ 0 , 1 , 3 , 128 , 255 ] ) ) ;
49
- const stream = await getStream ( reference ) ;
64
+ const stream = getStream ( reference ) ;
50
65
const data = await readData ( stream ) ;
51
- expect ( new Uint8Array ( data ) ) . to . deep . equal (
52
- new Uint8Array ( [ 0 , 1 , 3 , 128 , 255 ] )
53
- ) ;
66
+ expect ( data ) . to . deep . equal ( new Uint8Array ( [ 0 , 1 , 3 , 128 , 255 ] ) ) ;
54
67
} ) ;
55
68
56
69
it ( 'can get first n bytes of stream' , async ( ) => {
57
70
const reference = ref ( storage , 'public/exp-bytes' ) ;
58
71
await uploadBytes ( reference , new Uint8Array ( [ 0 , 1 , 3 ] ) ) ;
59
- const stream = await getStream ( reference , 2 ) ;
72
+ const stream = getStream ( reference , 2 ) ;
60
73
const data = await readData ( stream ) ;
61
- expect ( new Uint8Array ( data ) ) . to . deep . equal ( new Uint8Array ( [ 0 , 1 ] ) ) ;
74
+ expect ( data ) . to . deep . equal ( new Uint8Array ( [ 0 , 1 ] ) ) ;
62
75
} ) ;
63
76
64
77
it ( 'getStream() throws for missing file' , async ( ) => {
0 commit comments