Skip to content

Commit 1fb82be

Browse files
Extract Offline-only component provider (#3460)
1 parent 2dd560b commit 1fb82be

17 files changed

+440
-294
lines changed

packages/firestore/exp/dependencies.json

Lines changed: 59 additions & 40 deletions
Large diffs are not rendered by default.

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ import {
2323
} from '../../../src/core/firestore_client';
2424
import { Code, FirestoreError } from '../../../src/util/error';
2525
import {
26-
ComponentProvider,
27-
MemoryComponentProvider
26+
MemoryOfflineComponentProvider,
27+
OfflineComponentProvider,
28+
OnlineComponentProvider
2829
} from '../../../src/core/component_provider';
2930
import { DEFAULT_HOST, DEFAULT_SSL } from '../../../lite/src/api/components';
3031
import { logDebug } from '../../../src/util/log';
@@ -58,9 +59,14 @@ export function getFirestoreClient(
5859
}
5960
if (!firestoreClientInstances.has(firestore)) {
6061
// eslint-disable-next-line @typescript-eslint/no-floating-promises
61-
initializeFirestoreClient(firestore, new MemoryComponentProvider(), {
62-
durable: false
63-
});
62+
initializeFirestoreClient(
63+
firestore,
64+
new MemoryOfflineComponentProvider(),
65+
new OnlineComponentProvider(),
66+
{
67+
durable: false
68+
}
69+
);
6470
}
6571
return firestoreClientInstances.get(firestore)!;
6672
}
@@ -71,12 +77,16 @@ export function getFirestoreClient(
7177
*
7278
* @param firestore The Firestore instance for which to create the
7379
* FirestoreClient.
74-
* @param componentProvider The component provider to use.
80+
* @param offlineComponentProvider Provider that returns all components required
81+
* for memory-only or IndexedDB persistence.
82+
* @param onlineComponentProvider Provider that returns all components required
83+
* for online support.
7584
* @param persistenceSettings Settings for the component provider.
7685
*/
7786
export function initializeFirestoreClient(
7887
firestore: Firestore,
79-
componentProvider: ComponentProvider,
88+
offlineComponentProvider: OfflineComponentProvider,
89+
onlineComponentProvider: OnlineComponentProvider,
8090
persistenceSettings: PersistenceSettings
8191
): Promise<void> {
8292
if (firestoreClientInstances.has(firestore)) {
@@ -102,7 +112,8 @@ export function initializeFirestoreClient(
102112
);
103113
const initializationPromise = firestoreClient.start(
104114
databaseInfo,
105-
componentProvider,
115+
offlineComponentProvider,
116+
onlineComponentProvider,
106117
persistenceSettings
107118
);
108119
firestoreClientInstances.set(

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ import { Provider } from '@firebase/component';
2424
import { FirebaseAuthInternalName } from '@firebase/auth-interop-types';
2525
import { AsyncQueue } from '../../../src/util/async_queue';
2626
import {
27-
IndexedDbComponentProvider,
28-
MultiTabIndexedDbComponentProvider
27+
IndexedDbOfflineComponentProvider,
28+
MultiTabOfflineComponentProvider,
29+
OnlineComponentProvider
2930
} from '../../../src/core/component_provider';
3031

3132
import { Firestore as LiteFirestore } from '../../../lite/src/api/database';
@@ -110,7 +111,8 @@ export function enableIndexedDbPersistence(
110111
const settings = firestoreImpl._getSettings();
111112
return initializeFirestoreClient(
112113
firestoreImpl,
113-
new IndexedDbComponentProvider(),
114+
new IndexedDbOfflineComponentProvider(),
115+
new OnlineComponentProvider(),
114116
{
115117
durable: true,
116118
synchronizeTabs: false,
@@ -125,10 +127,15 @@ export function enableMultiTabIndexedDbPersistence(
125127
firestore: firestore.FirebaseFirestore
126128
): Promise<void> {
127129
const firestoreImpl = cast(firestore, Firestore);
130+
const onlineComponentProvider = new OnlineComponentProvider();
131+
const offlineComponentProvider = new MultiTabOfflineComponentProvider(
132+
onlineComponentProvider
133+
);
128134
const settings = firestoreImpl._getSettings();
129135
return initializeFirestoreClient(
130136
firestoreImpl,
131-
new MultiTabIndexedDbComponentProvider(),
137+
offlineComponentProvider,
138+
onlineComponentProvider,
132139
{
133140
durable: true,
134141
synchronizeTabs: true,

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: 16 additions & 6 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+
MultiTabOfflineComponentProvider,
23+
OnlineComponentProvider
24+
} from './src/core/component_provider';
2225
import { configureForFirebase } from './src/config';
2326

2427
import './register-module';
@@ -30,11 +33,18 @@ import { name, version } from './package.json';
3033
* Persistence can be enabled via `firebase.firestore().enablePersistence()`.
3134
*/
3235
export function registerFirestore(instance: FirebaseNamespace): void {
33-
configureForFirebase(
34-
instance,
35-
(app, auth) =>
36-
new Firestore(app, auth, new MultiTabIndexedDbComponentProvider())
37-
);
36+
configureForFirebase(instance, (app, auth) => {
37+
const onlineComponentProvider = new OnlineComponentProvider();
38+
const offlineComponentProvider = new MultiTabOfflineComponentProvider(
39+
onlineComponentProvider
40+
);
41+
return new Firestore(
42+
app,
43+
auth,
44+
offlineComponentProvider,
45+
onlineComponentProvider
46+
);
47+
});
3848
instance.registerVersion(name, version, 'node');
3949
}
4050

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: 16 additions & 6 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+
MultiTabOfflineComponentProvider,
23+
OnlineComponentProvider
24+
} from './src/core/component_provider';
2225
import { configureForFirebase } from './src/config';
2326

2427
import './register-module';
@@ -29,11 +32,18 @@ import { name, version } from './package.json';
2932
* Persistence can be enabled via `firebase.firestore().enablePersistence()`.
3033
*/
3134
export function registerFirestore(instance: FirebaseNamespace): void {
32-
configureForFirebase(
33-
instance,
34-
(app, auth) =>
35-
new Firestore(app, auth, new MultiTabIndexedDbComponentProvider())
36-
);
35+
configureForFirebase(instance, (app, auth) => {
36+
const onlineComponentProvider = new OnlineComponentProvider();
37+
const offlineComponentProvider = new MultiTabOfflineComponentProvider(
38+
onlineComponentProvider
39+
);
40+
return new Firestore(
41+
app,
42+
auth,
43+
offlineComponentProvider,
44+
onlineComponentProvider
45+
);
46+
});
3747
instance.registerVersion(name, version, 'rn');
3848
}
3949

packages/firestore/index.ts

Lines changed: 16 additions & 6 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+
MultiTabOfflineComponentProvider,
24+
OnlineComponentProvider
25+
} from './src/core/component_provider';
2326
import { configureForFirebase } from './src/config';
2427
import { name, version } from './package.json';
2528

@@ -30,11 +33,18 @@ import './register-module';
3033
* Persistence can be enabled via `firebase.firestore().enablePersistence()`.
3134
*/
3235
export function registerFirestore(instance: FirebaseNamespace): void {
33-
configureForFirebase(
34-
instance,
35-
(app, auth) =>
36-
new Firestore(app, auth, new MultiTabIndexedDbComponentProvider())
37-
);
36+
configureForFirebase(instance, (app, auth) => {
37+
const onlineComponentProvider = new OnlineComponentProvider();
38+
const offlineComponentProvider = new MultiTabOfflineComponentProvider(
39+
onlineComponentProvider
40+
);
41+
return new Firestore(
42+
app,
43+
auth,
44+
offlineComponentProvider,
45+
onlineComponentProvider
46+
);
47+
});
3848
instance.registerVersion(name, version);
3949
}
4050

packages/firestore/lite/dependencies.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@
861861
],
862862
"variables": []
863863
},
864-
"sizeInBytes": 55009
864+
"sizeInBytes": 55128
865865
},
866866
"arrayRemove": {
867867
"dependencies": {
@@ -1170,7 +1170,7 @@
11701170
],
11711171
"variables": []
11721172
},
1173-
"sizeInBytes": 24918
1173+
"sizeInBytes": 25037
11741174
},
11751175
"deleteField": {
11761176
"dependencies": {
@@ -1624,7 +1624,7 @@
16241624
],
16251625
"variables": []
16261626
},
1627-
"sizeInBytes": 45283
1627+
"sizeInBytes": 45402
16281628
},
16291629
"getDocs": {
16301630
"dependencies": {
@@ -1778,7 +1778,7 @@
17781778
],
17791779
"variables": []
17801780
},
1781-
"sizeInBytes": 57551
1781+
"sizeInBytes": 57670
17821782
},
17831783
"getFirestore": {
17841784
"dependencies": {
@@ -2357,7 +2357,7 @@
23572357
],
23582358
"variables": []
23592359
},
2360-
"sizeInBytes": 77137
2360+
"sizeInBytes": 77256
23612361
},
23622362
"serverTimestamp": {
23632363
"dependencies": {
@@ -2530,7 +2530,7 @@
25302530
],
25312531
"variables": []
25322532
},
2533-
"sizeInBytes": 51372
2533+
"sizeInBytes": 51491
25342534
},
25352535
"setLogLevel": {
25362536
"dependencies": {
@@ -3065,7 +3065,7 @@
30653065
],
30663066
"variables": []
30673067
},
3068-
"sizeInBytes": 54479
3068+
"sizeInBytes": 54598
30693069
},
30703070
"where": {
30713071
"dependencies": {
@@ -3345,6 +3345,6 @@
33453345
],
33463346
"variables": []
33473347
},
3348-
"sizeInBytes": 58180
3348+
"sizeInBytes": 58299
33493349
}
33503350
}

packages/firestore/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"dev": "rollup -c -w",
2020
"lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'",
2121
"lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'",
22-
"prettier": "prettier --write '*.js' '{,!(dist)}/**/*.ts'",
22+
"prettier": "prettier --write '*.js' '*.ts' '@(lite|exp|src|test)/**/*.ts'",
2323
"pregendeps:exp": "node scripts/build-bundle.js --input ./exp/index.ts --output ./dist/exp/tmp.js",
2424
"gendeps:exp": "../../scripts/exp/extract-deps.sh --types ./exp-types/index.d.ts --bundle ./dist/exp/tmp.js --output ./exp/dependencies.json",
2525
"pregendeps:lite": "node scripts/build-bundle.js --input ./lite/index.ts --output ./dist/lite/tmp.js",

0 commit comments

Comments
 (0)