Skip to content

Commit 64870bf

Browse files
Split component provider
1 parent acd526d commit 64870bf

File tree

13 files changed

+392
-233
lines changed

13 files changed

+392
-233
lines changed

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

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ import {
2828
} from '../../../src/core/firestore_client';
2929
import { AsyncQueue } from '../../../src/util/async_queue';
3030
import {
31-
ComponentProvider,
32-
IndexedDbComponentProvider,
33-
MemoryComponentProvider,
34-
MultiTabIndexedDbComponentProvider
31+
OnlineComponentProvider,
32+
MultiTabOnlineComponentProvider,
33+
MemoryOfflineComponentProvider,
34+
OfflineComponentProvider,
35+
IndexedDbOfflineComponentProvider,
36+
MultiTabOfflineComponentProvider
3537
} from '../../../src/core/component_provider';
3638

3739
import {
@@ -60,7 +62,8 @@ export class Firestore extends LiteFirestore
6062
private readonly _queue = new AsyncQueue();
6163
private readonly _firestoreClient: FirestoreClient;
6264
private readonly _persistenceKey: string;
63-
private _componentProvider: ComponentProvider = new MemoryComponentProvider();
65+
private _offlineComponentProvider: OfflineComponentProvider = new MemoryOfflineComponentProvider();
66+
private _onlineComponentProvider = new OnlineComponentProvider();
6467

6568
// Assigned via _getFirestoreClient()
6669
private _deferredInitialization?: Promise<void>;
@@ -106,7 +109,8 @@ export class Firestore extends LiteFirestore
106109

107110
this._deferredInitialization = this._firestoreClient.start(
108111
databaseInfo,
109-
this._componentProvider,
112+
this._offlineComponentProvider,
113+
this._onlineComponentProvider,
110114
this._persistenceSettings
111115
);
112116
}
@@ -117,7 +121,8 @@ export class Firestore extends LiteFirestore
117121
// TODO(firestorexp): Factor out MultiTabComponentProvider and remove
118122
// `synchronizeTabs` argument
119123
_enablePersistence(
120-
persistenceProvider: ComponentProvider,
124+
offlineComponentProvider: OfflineComponentProvider,
125+
onlineComponentProvider: OnlineComponentProvider,
121126
synchronizeTabs: boolean
122127
): Promise<void> {
123128
if (this._deferredInitialization) {
@@ -137,7 +142,7 @@ export class Firestore extends LiteFirestore
137142
cacheSizeBytes:
138143
settings.cacheSizeBytes ?? LruParams.DEFAULT_CACHE_SIZE_BYTES
139144
};
140-
this._componentProvider = persistenceProvider;
145+
this._offlineComponentProvider = offlineComponentProvider;
141146

142147
// TODO(firestorexp): Add support for Persistence fallback
143148
return this._getFirestoreClient().then(() => {});
@@ -235,7 +240,8 @@ export function enableIndexedDbPersistence(
235240
): Promise<void> {
236241
const firestoreImpl = cast(firestore, Firestore);
237242
return firestoreImpl._enablePersistence(
238-
new IndexedDbComponentProvider(),
243+
new IndexedDbOfflineComponentProvider(),
244+
new OnlineComponentProvider(),
239245
/*synchronizeTabs=*/ false
240246
);
241247
}
@@ -245,7 +251,8 @@ export function enableMultiTabIndexedDbPersistence(
245251
): Promise<void> {
246252
const firestoreImpl = cast(firestore, Firestore);
247253
return firestoreImpl._enablePersistence(
248-
new MultiTabIndexedDbComponentProvider(),
254+
new MultiTabOfflineComponentProvider(),
255+
new MultiTabOnlineComponentProvider(),
249256
/*synchronizeTabs=*/ false
250257
);
251258
}

packages/firestore/index.memory.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import firebase from '@firebase/app';
1919
import { FirebaseNamespace } from '@firebase/app-types';
2020

2121
import { Firestore } from './src/api/database';
22-
import { MemoryComponentProvider } from './src/core/component_provider';
22+
import {
23+
MemoryOfflineComponentProvider,
24+
OnlineComponentProvider
25+
} from './src/core/component_provider';
2326
import { configureForFirebase } from './src/config';
2427

2528
import './register-module';
@@ -32,7 +35,13 @@ import { name, version } from './package.json';
3235
export function registerFirestore(instance: FirebaseNamespace): void {
3336
configureForFirebase(
3437
instance,
35-
(app, auth) => new Firestore(app, auth, new MemoryComponentProvider())
38+
(app, auth) =>
39+
new Firestore(
40+
app,
41+
auth,
42+
new MemoryOfflineComponentProvider(),
43+
new OnlineComponentProvider()
44+
)
3645
);
3746
instance.registerVersion(name, version);
3847
}

packages/firestore/index.node.memory.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import firebase from '@firebase/app';
1919
import { FirebaseNamespace } from '@firebase/app-types';
2020

2121
import { Firestore } from './src/api/database';
22-
import { MemoryComponentProvider } from './src/core/component_provider';
22+
import {
23+
MemoryOfflineComponentProvider,
24+
OnlineComponentProvider
25+
} from './src/core/component_provider';
2326
import { configureForFirebase } from './src/config';
2427
import './register-module';
2528

@@ -32,7 +35,13 @@ import { name, version } from './package.json';
3235
export function registerFirestore(instance: FirebaseNamespace): void {
3336
configureForFirebase(
3437
instance,
35-
(app, auth) => new Firestore(app, auth, new MemoryComponentProvider())
38+
(app, auth) =>
39+
new Firestore(
40+
app,
41+
auth,
42+
new MemoryOfflineComponentProvider(),
43+
new OnlineComponentProvider()
44+
)
3645
);
3746
instance.registerVersion(name, version, 'node');
3847
}

packages/firestore/index.node.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ import firebase from '@firebase/app';
1818
import { FirebaseNamespace } from '@firebase/app-types';
1919

2020
import { Firestore } from './src/api/database';
21-
import { MultiTabIndexedDbComponentProvider } from './src/core/component_provider';
21+
import {
22+
MultiTabOnlineComponentProvider,
23+
MultiTabOfflineComponentProvider
24+
} from './src/core/component_provider';
2225
import { configureForFirebase } from './src/config';
2326

2427
import './register-module';
@@ -33,7 +36,12 @@ export function registerFirestore(instance: FirebaseNamespace): void {
3336
configureForFirebase(
3437
instance,
3538
(app, auth) =>
36-
new Firestore(app, auth, new MultiTabIndexedDbComponentProvider())
39+
new Firestore(
40+
app,
41+
auth,
42+
new MultiTabOfflineComponentProvider(),
43+
new MultiTabOnlineComponentProvider()
44+
)
3745
);
3846
instance.registerVersion(name, version, 'node');
3947
}

packages/firestore/index.rn.memory.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import firebase from '@firebase/app';
1919
import { FirebaseNamespace } from '@firebase/app-types';
2020

2121
import { Firestore } from './src/api/database';
22-
import { MemoryComponentProvider } from './src/core/component_provider';
22+
import {
23+
MemoryOfflineComponentProvider,
24+
OnlineComponentProvider
25+
} from './src/core/component_provider';
2326
import { configureForFirebase } from './src/config';
2427

2528
import './register-module';
@@ -33,7 +36,13 @@ import { name, version } from './package.json';
3336
export function registerFirestore(instance: FirebaseNamespace): void {
3437
configureForFirebase(
3538
instance,
36-
(app, auth) => new Firestore(app, auth, new MemoryComponentProvider())
39+
(app, auth) =>
40+
new Firestore(
41+
app,
42+
auth,
43+
new MemoryOfflineComponentProvider(),
44+
new OnlineComponentProvider()
45+
)
3746
);
3847
instance.registerVersion(name, version, 'rn');
3948
}

packages/firestore/index.rn.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ import firebase from '@firebase/app';
1818
import { FirebaseNamespace } from '@firebase/app-types';
1919

2020
import { Firestore } from './src/api/database';
21-
import { MultiTabIndexedDbComponentProvider } from './src/core/component_provider';
21+
import {
22+
MultiTabOnlineComponentProvider,
23+
MultiTabOfflineComponentProvider
24+
} from './src/core/component_provider';
2225
import { configureForFirebase } from './src/config';
2326

2427
import './register-module';
@@ -32,7 +35,12 @@ export function registerFirestore(instance: FirebaseNamespace): void {
3235
configureForFirebase(
3336
instance,
3437
(app, auth) =>
35-
new Firestore(app, auth, new MultiTabIndexedDbComponentProvider())
38+
new Firestore(
39+
app,
40+
auth,
41+
new MultiTabOfflineComponentProvider(),
42+
new MultiTabOnlineComponentProvider()
43+
)
3644
);
3745
instance.registerVersion(name, version, 'rn');
3846
}

packages/firestore/index.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import firebase from '@firebase/app';
1919
import { FirebaseNamespace } from '@firebase/app-types';
2020

2121
import { Firestore } from './src/api/database';
22-
import { MultiTabIndexedDbComponentProvider } from './src/core/component_provider';
22+
import {
23+
MultiTabOnlineComponentProvider,
24+
MultiTabOfflineComponentProvider
25+
} from './src/core/component_provider';
2326
import { configureForFirebase } from './src/config';
2427
import { name, version } from './package.json';
2528

@@ -33,7 +36,12 @@ export function registerFirestore(instance: FirebaseNamespace): void {
3336
configureForFirebase(
3437
instance,
3538
(app, auth) =>
36-
new Firestore(app, auth, new MultiTabIndexedDbComponentProvider())
39+
new Firestore(
40+
app,
41+
auth,
42+
new MultiTabOfflineComponentProvider(),
43+
new MultiTabOnlineComponentProvider()
44+
)
3745
);
3846
instance.registerVersion(name, version);
3947
}

packages/firestore/src/api/database.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ import { _FirebaseApp, FirebaseService } from '@firebase/app-types/private';
2424
import { DatabaseId, DatabaseInfo } from '../core/database_info';
2525
import { ListenOptions } from '../core/event_manager';
2626
import {
27-
ComponentProvider,
28-
MemoryComponentProvider
27+
OnlineComponentProvider,
28+
MemoryOfflineComponentProvider,
29+
OfflineComponentProvider
2930
} from '../core/component_provider';
3031
import { FirestoreClient, PersistenceSettings } from '../core/firestore_client';
3132
import {
@@ -280,7 +281,6 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
280281
// underscore to discourage their use.
281282
readonly _databaseId: DatabaseId;
282283
private readonly _persistenceKey: string;
283-
private readonly _componentProvider: ComponentProvider;
284284
private _credentials: CredentialsProvider;
285285
private readonly _firebaseApp: FirebaseApp | null = null;
286286
private _settings: FirestoreSettings;
@@ -305,7 +305,8 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
305305
constructor(
306306
databaseIdOrApp: FirestoreDatabase | FirebaseApp,
307307
authProvider: Provider<FirebaseAuthInternalName>,
308-
componentProvider: ComponentProvider = new MemoryComponentProvider()
308+
private _offlineComponentProvider: OfflineComponentProvider = new MemoryOfflineComponentProvider(),
309+
private _onlineComponentProvider: OnlineComponentProvider = new OnlineComponentProvider()
309310
) {
310311
if (typeof (databaseIdOrApp as FirebaseApp).options === 'object') {
311312
// This is very likely a Firebase app object
@@ -330,7 +331,6 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
330331
this._credentials = new EmptyCredentialsProvider();
331332
}
332333

333-
this._componentProvider = componentProvider;
334334
this._settings = new FirestoreSettings({});
335335
}
336336

@@ -415,12 +415,16 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
415415
}
416416
}
417417

418-
return this.configureClient(this._componentProvider, {
419-
durable: true,
420-
cacheSizeBytes: this._settings.cacheSizeBytes,
421-
synchronizeTabs,
422-
forceOwningTab: experimentalForceOwningTab
423-
});
418+
return this.configureClient(
419+
this._offlineComponentProvider,
420+
this._onlineComponentProvider,
421+
{
422+
durable: true,
423+
cacheSizeBytes: this._settings.cacheSizeBytes,
424+
synchronizeTabs,
425+
forceOwningTab: experimentalForceOwningTab
426+
}
427+
);
424428
}
425429

426430
async clearPersistence(): Promise<void> {
@@ -438,7 +442,7 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
438442
const deferred = new Deferred<void>();
439443
this._queue.enqueueAndForgetEvenAfterShutdown(async () => {
440444
try {
441-
await this._componentProvider.clearPersistence(
445+
await this._offlineComponentProvider.clearPersistence(
442446
this._databaseId,
443447
this._persistenceKey
444448
);
@@ -488,9 +492,13 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
488492
if (!this._firestoreClient) {
489493
// Kick off starting the client but don't actually wait for it.
490494
// eslint-disable-next-line @typescript-eslint/no-floating-promises
491-
this.configureClient(new MemoryComponentProvider(), {
492-
durable: false
493-
});
495+
this.configureClient(
496+
new MemoryOfflineComponentProvider(),
497+
new OnlineComponentProvider(),
498+
{
499+
durable: false
500+
}
501+
);
494502
}
495503
return this._firestoreClient as FirestoreClient;
496504
}
@@ -506,7 +514,8 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
506514
}
507515

508516
private configureClient(
509-
componentProvider: ComponentProvider,
517+
offlineComponentProvider: OfflineComponentProvider,
518+
onlineComponentProvider: OnlineComponentProvider,
510519
persistenceSettings: PersistenceSettings
511520
): Promise<void> {
512521
debugAssert(!!this._settings.host, 'FirestoreSettings.host is not set');
@@ -522,7 +531,8 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
522531

523532
return this._firestoreClient.start(
524533
databaseInfo,
525-
componentProvider,
534+
offlineComponentProvider,
535+
onlineComponentProvider,
526536
persistenceSettings
527537
);
528538
}

0 commit comments

Comments
 (0)