{"version":3,"file":"angular-fire-compat-storage.mjs","sources":["../../../src/compat/storage/observable/fromTask.ts","../../../src/compat/storage/task.ts","../../../src/compat/storage/ref.ts","../../../src/compat/storage/storage.ts","../../../src/compat/storage/pipes/storageUrl.pipe.ts","../../../src/compat/storage/storage.module.ts","../../../src/compat/storage/angular-fire-compat-storage.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { UploadTask, UploadTaskSnapshot } from '../interfaces';\n\n// need to import, else the types become import('firebase/compat/app').default.storage.UploadTask\n// and it no longer works w/Firebase v7\n\n// Things aren't working great, I'm having to put in a lot of work-arounds for what\n// appear to be Firebase JS SDK bugs https://github.com/firebase/firebase-js-sdk/issues/4158\nexport function fromTask(task: UploadTask) {\n  return new Observable<UploadTaskSnapshot>(subscriber => {\n    const progress = (snap: UploadTaskSnapshot) => subscriber.next(snap);\n    const error = e => subscriber.error(e);\n    const complete = () => subscriber.complete();\n    // emit the current snapshot, so they don't have to wait for state_changes\n    // to fire next... this is stale if the task is no longer running :(\n    progress(task.snapshot);\n    const unsub = task.on('state_changed', progress);\n    // it turns out that neither task snapshot nor 'state_changed' fire the last\n    // snapshot before completion, the one with status 'success\" and 100% progress\n    // so let's use the promise form of the task for that\n    task.then(snapshot => {\n      progress(snapshot);\n      complete();\n    }, e => {\n      // TODO investigate, again this is stale, we never fire a canceled or error it seems\n      progress(task.snapshot);\n      error(e);\n    });\n    // on's type if Function, rather than () => void, need to wrap\n    return function unsubscribe() {\n      unsub();\n    };\n  }).pipe(\n    // deal with sync emissions from first emitting `task.snapshot`, this makes sure\n    // that if the task is already finished we don't emit the old running state\n    debounceTime(0)\n  );\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { UploadTask, UploadTaskSnapshot } from './interfaces';\nimport { fromTask } from './observable/fromTask';\n\nexport interface AngularFireUploadTask {\n  task: UploadTask;\n  snapshotChanges(): Observable<UploadTaskSnapshot | undefined>;\n  percentageChanges(): Observable<number | undefined>;\n  pause(): boolean;\n  cancel(): boolean;\n  resume(): boolean;\n  then(\n    onFulfilled?: ((a: UploadTaskSnapshot) => any) | null,\n    onRejected?: ((a: Error) => any) | null\n  ): Promise<any>;\n  catch(onRejected: (a: Error) => any): Promise<any>;\n}\n\n/**\n * Create an AngularFireUploadTask from a regular UploadTask from the Storage SDK.\n * This method creates an observable of the upload and returns on object that provides\n * multiple methods for controlling and monitoring the file upload.\n */\nexport function createUploadTask(task: UploadTask): AngularFireUploadTask {\n  const inner$ = fromTask(task);\n  return {\n    task,\n    then: task.then.bind(task),\n    catch: task.catch.bind(task),\n    pause: task.pause.bind(task),\n    cancel: task.cancel.bind(task),\n    resume: task.resume.bind(task),\n    snapshotChanges: () => inner$,\n    percentageChanges: () => inner$.pipe(\n      map(s => s.bytesTransferred / s.totalBytes * 100)\n    )\n  };\n}\n","import { Injector } from '@angular/core';\nimport { pendingUntilEvent } from '@angular/core/rxjs-interop';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { Observable, from, of } from 'rxjs';\nimport { observeOn, switchMap } from 'rxjs/operators';\nimport { ListOptions, ListResult, Reference, SettableMetadata, StringFormat, UploadMetadata } from './interfaces';\nimport { AngularFireUploadTask, createUploadTask } from './task';\n\nexport interface AngularFireStorageReference {\n  getDownloadURL(): Observable<any>;\n  getMetadata(): Observable<any>;\n  delete(): Observable<any>;\n  child(path: string): AngularFireStorageReference;\n  updateMetadata(meta: SettableMetadata): Observable<any>;\n  put(data: any, metadata?: UploadMetadata | undefined): AngularFireUploadTask;\n  putString(data: string, format?: string | undefined, metadata?: UploadMetadata | undefined): AngularFireUploadTask;\n  list(options?: ListOptions): Observable<ListResult>;\n  listAll(): Observable<ListResult>;\n}\n\n/**\n * Create an AngularFire wrapped Storage Reference. This object\n * creates observable methods from promise based methods.\n */\nexport function createStorageRef(\n  ref: Reference,\n  injector?: Injector\n): AngularFireStorageReference {\n  return {\n    getDownloadURL: () => of(undefined).pipe(\n      observeOn(injector.get(ɵAngularFireSchedulers).outsideAngular),\n      switchMap(() => ref.getDownloadURL()),\n      pendingUntilEvent(injector)\n    ),\n    getMetadata: () => of(undefined).pipe(\n      observeOn(injector.get(ɵAngularFireSchedulers).outsideAngular),\n      switchMap(() => ref.getMetadata()),\n      pendingUntilEvent(injector)\n    ),\n    delete: () => from(ref.delete()),\n    child: (path: string) => createStorageRef(ref.child(path), injector),\n    updateMetadata: (meta: SettableMetadata) => from(ref.updateMetadata(meta)),\n    put: (data: any, metadata?: UploadMetadata) => {\n      const task = ref.put(data, metadata);\n      return createUploadTask(task);\n    },\n    putString: (data: string, format?: StringFormat, metadata?: UploadMetadata) => {\n      const task = ref.putString(data, format, metadata);\n      return createUploadTask(task);\n    },\n    list: (options?: ListOptions) => from(ref.list(options)),\n    listAll: () => from(ref.listAll())\n  };\n}\n","import { EnvironmentInjector, Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID, inject } from '@angular/core';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { AppCheckInstances } from '@angular/fire/app-check';\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';\nimport { FirebaseOptions } from 'firebase/app';\nimport firebase from 'firebase/compat/app';\nimport { UploadMetadata } from './interfaces';\nimport { createStorageRef } from './ref';\nimport 'firebase/compat/storage';\n\nexport const BUCKET = new InjectionToken<string>('angularfire2.storageBucket');\nexport const MAX_UPLOAD_RETRY_TIME = new InjectionToken<number>('angularfire2.storage.maxUploadRetryTime');\nexport const MAX_OPERATION_RETRY_TIME = new InjectionToken<number>('angularfire2.storage.maxOperationRetryTime');\n\ntype UseEmulatorArguments = Parameters<firebase.storage.Storage['useEmulator']>;\nexport const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.storage.use-emulator');\n\n/**\n * AngularFireStorage Service\n *\n * This service is the main entry point for this feature module. It provides\n * an API for uploading and downloading binary files from Cloud Storage for\n * Firebase.\n */\n@Injectable({\n  providedIn: 'any'\n})\nexport class AngularFireStorage {\n  public readonly storage: firebase.storage.Storage;\n  private readonly injector = inject(EnvironmentInjector);\n\n  constructor(\n    @Inject(FIREBASE_OPTIONS) options: FirebaseOptions,\n    @Optional() @Inject(FIREBASE_APP_NAME) name: string | null | undefined,\n    @Optional() @Inject(BUCKET) storageBucket: string | null,\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    @Inject(PLATFORM_ID) platformId: Object,\n    zone: NgZone,\n    schedulers: ɵAngularFireSchedulers,\n    @Optional() @Inject(MAX_UPLOAD_RETRY_TIME) maxUploadRetryTime: any,\n    @Optional() @Inject(MAX_OPERATION_RETRY_TIME) maxOperationRetryTime: any,\n    @Optional() @Inject(USE_EMULATOR) _useEmulator: any,\n    @Optional() _appCheckInstances: AppCheckInstances,\n  ) {\n    const app = ɵfirebaseAppFactory(options, zone, name);\n    this.storage = ɵcacheInstance(`${app.name}.storage.${storageBucket}`, 'AngularFireStorage', app.name, () => {\n      const storage = zone.runOutsideAngular(() => app.storage(storageBucket || undefined));\n      const useEmulator = _useEmulator as UseEmulatorArguments|null;\n      if (useEmulator) {\n        storage.useEmulator(...useEmulator);\n      }\n      if (maxUploadRetryTime) {\n        storage.setMaxUploadRetryTime(maxUploadRetryTime);\n      }\n      if (maxOperationRetryTime) {\n        storage.setMaxOperationRetryTime(maxOperationRetryTime);\n      }\n      return storage;\n    }, [maxUploadRetryTime, maxOperationRetryTime]);\n  }\n\n  ref(path: string) {\n    return createStorageRef(this.storage.ref(path), this.injector);\n  }\n\n  refFromURL(path: string) {\n    return createStorageRef(this.storage.refFromURL(path), this.injector);\n  }\n\n  upload(path: string, data: any, metadata?: UploadMetadata) {\n    const storageRef = this.storage.ref(path);\n    const ref = createStorageRef(storageRef, this.injector);\n    return ref.put(data, metadata);\n  }\n\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, NgModule, OnDestroy, Optional, Pipe, PipeTransform, TransferState, makeStateKey } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { AngularFireStorage } from '../storage';\n\n/** to be used with in combination with | async */\n@Pipe({\n  name: 'getDownloadURL',\n  pure: false,\n})\nexport class GetDownloadURLPipe implements PipeTransform, OnDestroy {\n\n  private asyncPipe: AsyncPipe;\n  private path: string;\n  private downloadUrl$: Observable<any>;\n\n  constructor(\n    private storage: AngularFireStorage,\n    cdr: ChangeDetectorRef,\n    @Optional() private state: TransferState\n  ) {\n    this.asyncPipe = new AsyncPipe(cdr);\n  }\n\n  transform(path: string) {\n    if (path !== this.path) {\n      this.path = path;\n      const key = makeStateKey<string>(`|getDownloadURL|${path}`);\n      const existing = this.state?.get(key, undefined);\n      this.downloadUrl$ = existing ? of(existing) : this.storage.ref(path).getDownloadURL().pipe(\n        tap(it => this.state?.set(key, it))\n      );\n    }\n    return this.asyncPipe.transform(this.downloadUrl$);\n  }\n\n  ngOnDestroy() {\n    this.asyncPipe.ngOnDestroy();\n  }\n\n}\n\n@NgModule({\n  imports: [ GetDownloadURLPipe ],\n  exports: [ GetDownloadURLPipe ],\n})\nexport class GetDownloadURLPipeModule {}\n","import { NgModule } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { GetDownloadURLPipeModule } from './pipes/storageUrl.pipe';\nimport { AngularFireStorage } from './storage';\n\n@NgModule({\n  imports: [ GetDownloadURLPipeModule ],\n  exports: [ GetDownloadURLPipeModule ],\n  providers: [ AngularFireStorage ]\n})\nexport class AngularFireStorageModule {\n  constructor() {\n    firebase.registerVersion('angularfire', VERSION.full, 'gcs-compat');\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵAngularFireSchedulers","ɵfirebaseAppFactory","ɵcacheInstance","i1.AngularFireStorage"],"mappings":"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"}