Skip to content

Commit 95ab732

Browse files
Tree-Shake RemoteStore Streams (#3568)
1 parent 565004d commit 95ab732

File tree

8 files changed

+447
-1030
lines changed

8 files changed

+447
-1030
lines changed

packages/firestore/exp/dependencies.json

+199-871
Large diffs are not rendered by default.

packages/firestore/exp/src/api/database.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ import {
5151
setOfflineComponentProvider,
5252
setOnlineComponentProvider
5353
} from './components';
54-
5554
import { DEFAULT_HOST, DEFAULT_SSL } from '../../../lite/src/api/components';
5655
import { DatabaseInfo } from '../../../src/core/database_info';
5756
import { AutoId } from '../../../src/util/misc';
@@ -209,9 +208,14 @@ export function enableIndexedDbPersistence(
209208
// `getOnlineComponentProvider()`
210209
const settings = firestoreImpl._getSettings();
211210

212-
return firestoreImpl._queue.enqueue(() =>
211+
const onlineComponentProvider = new OnlineComponentProvider();
212+
const offlineComponentProvider = new IndexedDbOfflineComponentProvider(
213+
onlineComponentProvider
214+
);
215+
216+
return firestoreImpl._queue.enqueue(async () => {
213217
// TODO(firestoreexp): Add forceOwningTab
214-
setOfflineComponentProvider(
218+
await setOfflineComponentProvider(
215219
firestoreImpl,
216220
{
217221
durable: true,
@@ -220,9 +224,10 @@ export function enableIndexedDbPersistence(
220224
settings.cacheSizeBytes || LruParams.DEFAULT_CACHE_SIZE_BYTES,
221225
forceOwningTab: false
222226
},
223-
new IndexedDbOfflineComponentProvider()
224-
)
225-
);
227+
offlineComponentProvider
228+
);
229+
await setOnlineComponentProvider(firestoreImpl, onlineComponentProvider);
230+
});
226231
}
227232

228233
export function enableMultiTabIndexedDbPersistence(

packages/firestore/lite/src/api/database.ts

-6
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,6 @@ export class Firestore
113113
removeComponents(this);
114114
return Promise.resolve();
115115
}
116-
117-
// TODO(firestoreexp): `deleteApp()` should call the delete method above,
118-
// but it still calls INTERNAL.delete().
119-
INTERNAL = {
120-
delete: () => this._delete()
121-
};
122116
}
123117

124118
export function initializeFirestore(

packages/firestore/src/core/component_provider.ts

+20-27
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,19 @@ import {
3333
applyPrimaryState,
3434
applyTargetState,
3535
getActiveClients,
36-
handleCredentialChange,
36+
syncEngineHandleCredentialChange,
3737
newSyncEngine,
38-
SyncEngine
38+
SyncEngine,
39+
ensureWriteCallbacks
3940
} from './sync_engine';
4041
import {
42+
fillWritePipeline,
4143
newRemoteStore,
4244
RemoteStore,
4345
remoteStoreApplyPrimaryState,
4446
remoteStoreShutdown
4547
} from '../remote/remote_store';
46-
import {
47-
EventManager,
48-
newEventManager,
49-
eventManagerOnOnlineStateChange,
50-
eventManagerOnWatchChange,
51-
eventManagerOnWatchError
52-
} from './event_manager';
48+
import { EventManager, newEventManager } from './event_manager';
5349
import { AsyncQueue } from '../util/async_queue';
5450
import { DatabaseId, DatabaseInfo } from './database_info';
5551
import { Datastore, newDatastore } from '../remote/datastore';
@@ -185,9 +181,21 @@ export class IndexedDbOfflineComponentProvider extends MemoryOfflineComponentPro
185181
localStore!: LocalStore;
186182
gcScheduler!: GarbageCollectionScheduler | null;
187183

184+
constructor(
185+
protected readonly onlineComponentProvider: OnlineComponentProvider
186+
) {
187+
super();
188+
}
189+
188190
async initialize(cfg: ComponentConfiguration): Promise<void> {
189191
await super.initialize(cfg);
190192
await synchronizeLastDocumentChangeReadTime(this.localStore);
193+
194+
await this.onlineComponentProvider.initialize(this, cfg);
195+
196+
// Enqueue writes from a previous session
197+
await ensureWriteCallbacks(this.onlineComponentProvider.syncEngine);
198+
await fillWritePipeline(this.onlineComponentProvider.remoteStore);
191199
}
192200

193201
createGarbageCollectionScheduler(
@@ -246,16 +254,9 @@ export class IndexedDbOfflineComponentProvider extends MemoryOfflineComponentPro
246254
* `synchronizeTabs` will be enabled.
247255
*/
248256
export class MultiTabOfflineComponentProvider extends IndexedDbOfflineComponentProvider {
249-
constructor(
250-
private readonly onlineComponentProvider: OnlineComponentProvider
251-
) {
252-
super();
253-
}
254-
255257
async initialize(cfg: ComponentConfiguration): Promise<void> {
256258
await super.initialize(cfg);
257259

258-
await this.onlineComponentProvider.initialize(this, cfg);
259260
const syncEngine = this.onlineComponentProvider.syncEngine;
260261

261262
if (this.sharedClientState instanceof WebStorageSharedClientState) {
@@ -342,17 +343,8 @@ export class OnlineComponentProvider {
342343
this.sharedClientState = offlineComponentProvider.sharedClientState;
343344
this.datastore = this.createDatastore(cfg);
344345
this.remoteStore = this.createRemoteStore(cfg);
345-
this.syncEngine = this.createSyncEngine(cfg);
346346
this.eventManager = this.createEventManager(cfg);
347-
348-
this.syncEngine.subscribe({
349-
onWatchChange: eventManagerOnWatchChange.bind(null, this.eventManager),
350-
onWatchError: eventManagerOnWatchError.bind(null, this.eventManager),
351-
onOnlineStateChange: eventManagerOnOnlineStateChange.bind(
352-
null,
353-
this.eventManager
354-
)
355-
});
347+
this.syncEngine = this.createSyncEngine(cfg);
356348

357349
this.sharedClientState.onlineStateHandler = onlineState =>
358350
applyOnlineStateChange(
@@ -361,7 +353,7 @@ export class OnlineComponentProvider {
361353
OnlineStateSource.SharedClientState
362354
);
363355

364-
this.remoteStore.remoteSyncer.handleCredentialChange = handleCredentialChange.bind(
356+
this.remoteStore.remoteSyncer.handleCredentialChange = syncEngineHandleCredentialChange.bind(
365357
null,
366358
this.syncEngine
367359
);
@@ -401,6 +393,7 @@ export class OnlineComponentProvider {
401393
return newSyncEngine(
402394
this.localStore,
403395
this.remoteStore,
396+
this.eventManager,
404397
this.sharedClientState,
405398
cfg.initialUser,
406399
cfg.maxConcurrentLimboResolutions,

0 commit comments

Comments
 (0)