Skip to content

Commit b5db566

Browse files
Fixes for Bundles@exp (#4355)
1 parent 8d0f686 commit b5db566

File tree

5 files changed

+42
-49
lines changed

5 files changed

+42
-49
lines changed

packages/firestore/exp/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ export {
3737
namedQuery
3838
} from '../src/exp/database';
3939

40+
export {
41+
LoadBundleTask,
42+
LoadBundleTaskProgress,
43+
TaskState
44+
} from '../src/exp/bundle';
45+
4046
export { Settings, PersistenceSettings } from '../src/exp/settings';
4147

4248
export {

packages/firestore/export.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ export { FieldPath } from './src/api/field_path';
3636
export { FieldValue } from './src/api/field_value';
3737
export { Timestamp } from './src/api/timestamp';
3838
export { FirebaseFirestore as ExpFirebaseFirestore } from './src/exp/database';
39-
export { loadBundle, namedQuery } from './src/api/bundle';
39+
export { loadBundle, namedQuery } from './src/exp/database';

packages/firestore/index.bundle.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { Firestore, loadBundle, namedQuery } from './export';
18+
import { Firestore, loadBundle, namedQuery, Query } from './export';
1919

2020
/**
2121
* Prototype patches bundle loading to Firestore.
@@ -25,13 +25,20 @@ export function registerBundle(instance: typeof Firestore): void {
2525
this: Firestore,
2626
data: ArrayBuffer | ReadableStream<Uint8Array> | string
2727
) {
28-
return loadBundle(this, data);
28+
return loadBundle(this._delegate, data);
2929
};
30-
instance.prototype.namedQuery = function (
30+
instance.prototype.namedQuery = async function (
3131
this: Firestore,
3232
queryName: string
3333
) {
34-
return namedQuery(this, queryName);
34+
const expQuery = await namedQuery(this._delegate, queryName);
35+
if (!expQuery) return null;
36+
return new Query(
37+
this,
38+
// We can pass the exp-query here directly since named queries don't have UserDataConverters
39+
// Otherwise we would have to create a new ExpQuery and pass the old UserDataConverter
40+
expQuery
41+
);
3542
};
3643
}
3744

packages/firestore/src/api/database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ import {
122122
import { setLogLevel as setClientLogLevel } from '../util/log';
123123

124124
import { Blob } from './blob';
125-
import { LoadBundleTask } from './bundle';
126125
import { Compat } from './compat';
127126
import {
128127
CompleteFn,
@@ -133,6 +132,7 @@ import {
133132
} from './observer';
134133
import { UntypedFirestoreDataConverter } from './user_data_reader';
135134
import { AbstractUserDataWriter } from './user_data_writer';
135+
import { LoadBundleTask } from '../exp/bundle';
136136

137137
/**
138138
* A persistence provider for either memory-only or IndexedDB persistence.

packages/firestore/src/api/bundle.ts renamed to packages/firestore/src/exp/bundle.ts

Lines changed: 23 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,30 @@
1515
* limitations under the License.
1616
*/
1717

18-
import {
19-
LoadBundleTask as ApiLoadBundleTask,
20-
LoadBundleTaskProgress
21-
} from '@firebase/firestore-types';
22-
23-
import { ensureFirestoreConfigured } from '../../src/exp/database';
24-
import { Query as ExpQuery } from '../../src/exp/reference';
25-
import {
26-
firestoreClientGetNamedQuery,
27-
firestoreClientLoadBundle
28-
} from '../core/firestore_client';
2918
import { debugAssert } from '../util/assert';
3019
import { FirestoreError } from '../util/error';
3120
import { Deferred } from '../util/promise';
21+
import { PartialObserver } from '../api/observer';
22+
23+
// I moved this filed to match the current pattern where api relies on exp.
24+
// I also added all interfaces here, since we want this file to be the source
25+
// of truth for the generated API (if you run yarn:build it should generate
26+
// a new API report with these changes)
27+
28+
// Add comments
29+
export type TaskState = 'Error' | 'Running' | 'Success';
30+
31+
// Add comments
32+
export interface LoadBundleTaskProgress {
33+
documentsLoaded: number;
34+
totalDocuments: number;
35+
bytesLoaded: number;
36+
totalBytes: number;
37+
taskState: TaskState;
38+
}
3239

33-
import { Query, Firestore } from './database';
34-
import { PartialObserver } from './observer';
35-
36-
export class LoadBundleTask
37-
implements ApiLoadBundleTask, PromiseLike<LoadBundleTaskProgress> {
40+
// Add comments
41+
export class LoadBundleTask implements PromiseLike<LoadBundleTaskProgress> {
3842
private _progressObserver: PartialObserver<LoadBundleTaskProgress> = {};
3943
private _taskCompletionResolver = new Deferred<LoadBundleTaskProgress>();
4044

@@ -46,6 +50,7 @@ export class LoadBundleTask
4650
documentsLoaded: 0
4751
};
4852

53+
// Add comments
4954
onProgress(
5055
next?: (progress: LoadBundleTaskProgress) => unknown,
5156
error?: (err: Error) => unknown,
@@ -58,12 +63,14 @@ export class LoadBundleTask
5863
};
5964
}
6065

66+
// Add comments
6167
catch<R>(
6268
onRejected: (a: Error) => R | PromiseLike<R>
6369
): Promise<R | LoadBundleTaskProgress> {
6470
return this._taskCompletionResolver.promise.catch(onRejected);
6571
}
6672

73+
// Add comments
6774
then<T, R>(
6875
onFulfilled?: (a: LoadBundleTaskProgress) => T | PromiseLike<T>,
6976
onRejected?: (a: Error) => R | PromiseLike<R>
@@ -122,30 +129,3 @@ export class LoadBundleTask
122129
}
123130
}
124131
}
125-
126-
export function loadBundle(
127-
db: Firestore,
128-
bundleData: ArrayBuffer | ReadableStream<Uint8Array> | string
129-
): LoadBundleTask {
130-
const resultTask = new LoadBundleTask();
131-
firestoreClientLoadBundle(
132-
ensureFirestoreConfigured(db._delegate),
133-
db._databaseId,
134-
bundleData,
135-
resultTask
136-
);
137-
return resultTask;
138-
}
139-
140-
export function namedQuery(db: Firestore, name: string): Promise<Query | null> {
141-
return firestoreClientGetNamedQuery(
142-
ensureFirestoreConfigured(db._delegate),
143-
name
144-
).then(namedQuery => {
145-
if (!namedQuery) {
146-
return null;
147-
}
148-
149-
return new Query(db, new ExpQuery(db._delegate, null, namedQuery.query));
150-
});
151-
}

0 commit comments

Comments
 (0)