diff --git a/packages/firestore/exp-types/index.d.ts b/packages/firestore/exp-types/index.d.ts index f27b50dea99..170a553a506 100644 --- a/packages/firestore/exp-types/index.d.ts +++ b/packages/firestore/exp-types/index.d.ts @@ -536,6 +536,11 @@ export interface LoadBundleTaskProgress { export type TaskState = 'Error' | 'Running' | 'Success'; +export function loadBundle( + firestore: FirebaseFirestore, + bundleData: ArrayBuffer | ReadableStream | string +): LoadBundleTask; + export type FirestoreErrorCode = | 'cancelled' | 'unknown' diff --git a/packages/firestore/exp/src/api/database.ts b/packages/firestore/exp/src/api/database.ts index 13e4be085dc..d0004141c16 100644 --- a/packages/firestore/exp/src/api/database.ts +++ b/packages/firestore/exp/src/api/database.ts @@ -50,6 +50,7 @@ import { indexedDbStoragePrefix, indexedDbClearPersistence } from '../../../src/local/indexeddb_persistence'; +import { LoadBundleTask } from '../../../src/api/bundle'; /** * The root reference to the Firestore database and the entry point for the @@ -299,9 +300,13 @@ export function terminate( export function loadBundle( firestore: firestore.FirebaseFirestore, bundleData: ArrayBuffer | ReadableStream | string -): firestore.LoadBundleTask | null { - return null; - // const firestoreImpl = cast(firestore, Firestore); - // return firestoreImpl._getFirestoreClient() - // .then(firestoreClient => firestoreClient.loadBundle(bundleData)); +): LoadBundleTask { + const firestoreImpl = cast(firestore, Firestore); + const resultTask = new LoadBundleTask(); + // eslint-disable-next-line @typescript-eslint/no-floating-promises + firestoreImpl._getFirestoreClient().then(firestoreClient => { + firestoreClient.loadBundle(bundleData, resultTask); + }); + + return resultTask; } diff --git a/packages/firestore/exp/test/shim.ts b/packages/firestore/exp/test/shim.ts index 618c176cedb..592ffa9c60b 100644 --- a/packages/firestore/exp/test/shim.ts +++ b/packages/firestore/exp/test/shim.ts @@ -72,6 +72,7 @@ import { import { UntypedFirestoreDataConverter } from '../../src/api/user_data_reader'; import { isPartialObserver, PartialObserver } from '../../src/api/observer'; import { isPlainObject } from '../../src/util/input_validation'; +import { LoadBundleTask } from '../../exp-types'; export { GeoPoint, Blob, Timestamp } from '../index'; diff --git a/packages/firestore/src/api/database.ts b/packages/firestore/src/api/database.ts index 9c496ee23e6..e196a56e5b7 100644 --- a/packages/firestore/src/api/database.ts +++ b/packages/firestore/src/api/database.ts @@ -112,6 +112,7 @@ import { import { UserDataWriter } from './user_data_writer'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { Provider } from '@firebase/component'; +import { LoadBundleTask } from './bundle'; // settings() defaults: const DEFAULT_HOST = 'firestore.googleapis.com'; @@ -498,7 +499,9 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService { bundleData: ArrayBuffer | ReadableStream | string ): firestore.LoadBundleTask { this.ensureClientConfigured(); - return this._firestoreClient!.loadBundle(bundleData); + const resultTask = new LoadBundleTask(); + this._firestoreClient!.loadBundle(bundleData, resultTask); + return resultTask; } ensureClientConfigured(): FirestoreClient { diff --git a/packages/firestore/src/core/firestore_client.ts b/packages/firestore/src/core/firestore_client.ts index d597e459a45..011c92500b0 100644 --- a/packages/firestore/src/core/firestore_client.ts +++ b/packages/firestore/src/core/firestore_client.ts @@ -15,7 +15,6 @@ * limitations under the License. */ -import * as firestore from '@firebase/firestore-types'; import { CredentialsProvider } from '../api/credentials'; import { User } from '../auth/user'; import { LocalStore } from '../local/local_store'; @@ -515,8 +514,9 @@ export class FirestoreClient { } loadBundle( - data: ReadableStream | ArrayBuffer | string - ): firestore.LoadBundleTask { + data: ReadableStream | ArrayBuffer | string, + resultTask: LoadBundleTask + ): void { this.verifyNotTerminated(); let content: ReadableStream | ArrayBuffer; @@ -526,14 +526,11 @@ export class FirestoreClient { content = data; } const reader = new BundleReader(toByteStreamReader(content)); - const task = new LoadBundleTask(); this.asyncQueue.enqueueAndForget(async () => { - loadBundle(this.syncEngine, reader, task); - return task.catch(e => { + loadBundle(this.syncEngine, reader, resultTask); + return resultTask.catch(e => { logWarn(LOG_TAG, `Loading bundle failed with ${e}`); }); }); - - return task; } }