all files / firebase/modules/storage/ reference.js

46.15% Statements 6/13
50% Branches 1/2
36.36% Functions 4/11
46.15% Lines 6/13
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                                12× 12×                                                                                                                                                                          
/**
 * @flow
 * StorageReference representation wrapper
 */
import ReferenceBase from '../../utils/ReferenceBase';
import StorageTask, { UPLOAD_TASK, DOWNLOAD_TASK } from './task';
import { getNativeModule } from '../../utils/native';
import type Storage from './';
 
/**
 * @url https://firebase.google.com/docs/reference/js/firebase.storage.Reference
 */
export default class StorageReference extends ReferenceBase {
  _storage: Storage;
 
  constructor(storage: Storage, path: string) {
    super(path);
    this._storage = storage;
  }
 
  get fullPath(): string {
    return this.path;
  }
 
  toString(): string {
    return `gs://${this._storage.app.options.storageBucket}${this.path}`;
  }
 
  /**
   * @url https://firebase.google.com/docs/reference/js/firebase.storage.Reference#child
   * @param path
   * @returns {StorageReference}
   */
  child(path: string): StorageReference {
    return new StorageReference(this._storage, `${this.path}/${path}`);
  }
 
  /**
   * @url https://firebase.google.com/docs/reference/js/firebase.storage.Reference#delete
   * @returns {Promise.<T>|*}
   */
  delete(): Promise<void> {
    return getNativeModule(this._storage).delete(this.path);
  }
 
  /**
   * @url https://firebase.google.com/docs/reference/js/firebase.storage.Reference#getDownloadURL
   * @returns {Promise.<T>|*}
   */
  getDownloadURL(): Promise<string> {
    return getNativeModule(this._storage).getDownloadURL(this.path);
  }
 
  /**
   * @url https://firebase.google.com/docs/reference/js/firebase.storage.Reference#getMetadata
   * @returns {Promise.<T>|*}
   */
  getMetadata(): Promise<Object> {
    return getNativeModule(this._storage).getMetadata(this.path);
  }
 
  /**
   * @url https://firebase.google.com/docs/reference/js/firebase.storage.Reference#updateMetadata
   * @param metadata
   * @returns {Promise.<T>|*}
   */
  updateMetadata(metadata: Object = {}): Promise<Object> {
    return getNativeModule(this._storage).updateMetadata(this.path, metadata);
  }
 
  /**
   * Downloads a reference to the device
   * @param {String} filePath Where to store the file
   * @return {Promise}
   */
  downloadFile(filePath: string): Promise<Object> {
    return new StorageTask(
      DOWNLOAD_TASK,
      getNativeModule(this._storage).downloadFile(this.path, filePath),
      this
    );
  }
 
  /**
   * Alias to putFile
   * @returns {StorageReference.putFile}
   */
  get put(): (Object, Object) => Promise<Object> {
    return this.putFile;
  }
 
  /**
   * Upload a file path
   * @param  {string} filePath The local path of the file
   * @param  {object} metadata An object containing metadata
   * @return {Promise}
   */
  putFile(filePath: Object, metadata: Object = {}): Promise<Object> {
    const _filePath = filePath.replace('file://', '');
    return new StorageTask(
      UPLOAD_TASK,
      getNativeModule(this._storage).putFile(this.path, _filePath, metadata),
      this
    );
  }
}