1+ /* @flow */
12
23import { NativeModules , NativeEventEmitter } from 'react-native' ;
34const FirestackStorage = NativeModules . FirestackStorage ;
@@ -13,17 +14,22 @@ class StorageRef extends ReferenceBase {
1314 this . storage = storage ;
1415 }
1516
16- downloadUrl ( ) {
17+ downloadUrl ( ) : Promise < Object > {
1718 const path = this . pathToString ( ) ;
18- return promisify ( 'downloadUrl' , FirestackStorage ) ( this . storage . storageUrl , path ) ;
19+ this . log . debug ( 'downloadUrl(' , path , ')' ) ;
20+ return promisify ( 'downloadUrl' , FirestackStorage ) ( this . storage . storageUrl , path )
21+ . catch ( err => {
22+ this . log . error ( 'Error downloading URL for ' , path , '. Error: ' , err ) ;
23+ throw err ;
24+ } ) ;
1925 }
2026
2127 /**
2228 * Downloads a reference to the device
2329 * @param {String } downloadPath Where to store the file
2430 * @return {Promise }
2531 */
26- download ( downloadPath , cb ) {
32+ download ( downloadPath : string , cb : ( evt : Object ) = > Object ) : Promise < Object > {
2733 let callback = cb ;
2834 if ( ! callback || typeof callback !== 'function' ) {
2935 callback = ( evt ) => { } ;
@@ -35,20 +41,25 @@ class StorageRef extends ReferenceBase {
3541 listeners . push ( this . storage . _addListener ( 'download_resumed' , callback ) ) ;
3642
3743 const path = this . pathToString ( ) ;
44+ this . log . debug ( 'download(' , path , ') -> ' , downloadPath ) ;
3845 return promisify ( 'downloadFile' , FirestackStorage ) ( this . storage . storageUrl , path , downloadPath )
3946 . then ( ( res ) => {
40- console . log ( 'res --->' , res ) ;
41- listeners . forEach ( this . storage . _removeListener ) ;
47+ this . log . debug ( 'res --->' , res ) ;
48+ listeners . forEach ( listener => listener . remove ( ) ) ;
4249 return res ;
4350 } )
4451 . catch ( err => {
45- console . log ( 'Got an error ->' , err ) ;
46- } )
52+ this . log . error ( 'Error downloading ' , path , ' to ' , downloadPath , '. Error: ' , err ) ;
53+ throw err ;
54+ } ) ;
4755 }
4856}
4957
58+ type StorageOptionsType = {
59+ storageBucket ?: ?string ,
60+ } ;
5061export default class Storage extends Base {
51- constructor ( firestack , options = { } ) {
62+ constructor ( firestack : Object , options : StorageOptionsType = { } ) {
5263 super ( firestack , options ) ;
5364
5465 if ( this . options . storageBucket ) {
@@ -58,8 +69,8 @@ export default class Storage extends Base {
5869 this . refs = { } ;
5970 }
6071
61- ref ( ...path ) {
62- const key = this . _pathKey ( path ) ;
72+ ref ( ...path : Array < string > ) : StorageRef {
73+ const key = this . _pathKey ( ... path ) ;
6374 if ( ! this . refs [ key ] ) {
6475 const ref = new StorageRef ( this , path ) ;
6576 this . refs [ key ] = ref ;
@@ -74,43 +85,45 @@ export default class Storage extends Base {
7485 * @param {object } metadata An object containing metadata
7586 * @return {Promise }
7687 */
77- uploadFile ( name , filepath , metadata = { } , cb ) {
88+ uploadFile ( name : string , filepath : string , metadata : Object = { } , cb : ( evt : Object ) = > Object ) : Promise < Object > {
89+ this. log . debug ( 'uploadFile(' , filepath , ') -> ' , name ) ;
7890 let callback = cb ;
7991 if ( ! callback || typeof callback !== 'function' ) {
80- callback = ( evt ) => { }
92+ callback = ( evt : Object ) = > ( { } ) ;
8193 }
8294
83- filepath = filepath . replace ( " file://" , "" ) ;
95+ filepath = filepath . replace ( ' file://' , '' ) ;
8496
8597 const listeners = [ ] ;
8698 listeners . push ( this . _addListener ( 'upload_progress' , callback ) ) ;
8799 listeners . push ( this . _addListener ( 'upload_paused' , callback ) ) ;
88100 listeners . push ( this . _addListener ( 'upload_resumed' , callback ) ) ;
89101 return promisify ( 'uploadFile' , FirestackStorage ) ( this . storageUrl , name , filepath , metadata )
90102 . then ( ( res ) => {
91- listeners . forEach ( this . _removeListener ) ;
103+ listeners . forEach ( listener => listener . remove ( ) ) ;
92104 return res ;
105+ } )
106+ . catch ( err => {
107+ this . log . error ( 'Error uploading file ' , name , ' to ' , filepath , '. Error: ' , err ) ;
108+ throw err ;
93109 } ) ;
94110 }
95111
96- getRealPathFromURI ( uri ) {
112+ getRealPathFromURI ( uri : string ) : Promise < string > {
97113 return promisify ( 'getRealPathFromURI' , FirestackStorage ) ( uri ) ;
98114 }
99115
100- _addListener ( evt , cb ) {
101- return FirestackStorageEvt . addListener ( evt , cb ) ;
102- }
103-
104- _removeListener ( evt ) {
105- return FirestackStorageEvt . removeListener ( evt ) ;
116+ _addListener ( evt : string , cb : ( evt : Object ) = > Object ) : { remove : ( ) = > void } {
117+ let listener = FirestackStorageEvt . addListener ( evt , cb ) ;
118+ return listener ;
106119 }
107120
108- setStorageUrl ( url ) {
121+ setStorageUrl ( url : string ) : void {
109122 // return promisify('setStorageUrl', FirestackStorage)(url);
110123 this . storageUrl = `gs://${ url } ` ;
111124 }
112125
113- _pathKey ( ...path ) {
126+ _pathKey ( ...path : Array < string > ) : string {
114127 return path . join ( '-' ) ;
115128 }
116129
@@ -126,7 +139,7 @@ export default class Storage extends Base {
126139 'FILETYPE_DIRECTORY' : FirestackStorage . FILETYPE_DIRECTORY
127140 } ;
128141
129- get namespace ( ) {
142+ get namespace ( ) : string {
130143 return 'firestack :storage '
131144 }
132145}
0 commit comments