Skip to content

Commit d92342c

Browse files
Cleanup
1 parent 5efbda2 commit d92342c

File tree

8 files changed

+66
-107
lines changed

8 files changed

+66
-107
lines changed

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

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,16 @@ export async function setOfflineComponentProvider(
6363
await offlineComponentProvider.initialize(configuration);
6464

6565
firestore._setCredentialChangeListener(user =>
66-
firestore._queue.enqueueRetryable(() =>
67-
handleUserChange(offlineComponentProvider.localStore, user).then(() => {})
68-
)
66+
firestore._queue.enqueueRetryable(async () => {
67+
await handleUserChange(offlineComponentProvider.localStore, user);
68+
})
6969
);
70-
7170
// When a user calls clearPersistence() in one client, all other clients
7271
// need to be terminated to allow the delete to succeed.
7372
offlineComponentProvider.persistence.setDatabaseDeletedListener(() =>
7473
firestore._delete()
7574
);
75+
7676
offlineComponentProviders.set(firestore, offlineComponentProvider);
7777
}
7878

@@ -90,7 +90,6 @@ export async function setOnlineComponentProvider(
9090
offlineComponentProvider,
9191
configuration
9292
);
93-
9493
// The CredentialChangeListener of the online component provider takes
9594
// precedence over the offline component provider.
9695
firestore._setCredentialChangeListener(user =>
@@ -101,6 +100,7 @@ export async function setOnlineComponentProvider(
101100
)
102101
)
103102
);
103+
104104
onlineComponentProviders.set(firestore, onlineComponentProvider);
105105
}
106106

@@ -117,6 +117,7 @@ export async function getOfflineComponentProvider(
117117
new MemoryOfflineComponentProvider()
118118
);
119119
}
120+
120121
return offlineComponentProviders.get(firestore)!;
121122
}
122123

@@ -130,53 +131,52 @@ export async function getOnlineComponentProvider(
130131
logDebug(LOG_TAG, 'Using default OnlineComponentProvider');
131132
await setOnlineComponentProvider(firestore, new OnlineComponentProvider());
132133
}
134+
133135
return onlineComponentProviders.get(firestore)!;
134136
}
135137

136-
export function getSyncEngine(
138+
export async function getSyncEngine(
137139
firestore: FirebaseFirestore
138140
): Promise<SyncEngine> {
139-
return getOnlineComponentProvider(firestore).then(
140-
components => components.syncEngine
141-
);
141+
const onlineComponentProvider = await getOnlineComponentProvider(firestore);
142+
return onlineComponentProvider.syncEngine;
142143
}
143144

144-
export function getRemoteStore(
145-
firestore: FirestoreCompat
145+
export async function getRemoteStore(
146+
firestore: FirebaseFirestore
146147
): Promise<RemoteStore> {
147-
return getOnlineComponentProvider(firestore).then(
148-
components => components.remoteStore
149-
);
148+
const onlineComponentProvider = await getOnlineComponentProvider(firestore);
149+
return onlineComponentProvider.remoteStore;
150150
}
151151

152-
export function getEventManager(
152+
export async function getEventManager(
153153
firestore: FirebaseFirestore
154154
): Promise<EventManager> {
155-
return getOnlineComponentProvider(firestore).then(components => {
156-
const eventManager = components.eventManager;
157-
eventManager.onListen = syncEngineListen.bind(null, components.syncEngine);
158-
eventManager.onUnlisten = syncEngineUnlisten.bind(
159-
null,
160-
components.syncEngine
161-
);
162-
return eventManager;
163-
});
155+
const onlineComponentProvider = await getOnlineComponentProvider(firestore);
156+
const eventManager = onlineComponentProvider.eventManager;
157+
eventManager.onListen = syncEngineListen.bind(
158+
null,
159+
onlineComponentProvider.syncEngine
160+
);
161+
eventManager.onUnlisten = syncEngineUnlisten.bind(
162+
null,
163+
onlineComponentProvider.syncEngine
164+
);
165+
return eventManager;
164166
}
165167

166-
export function getPersistence(
168+
export async function getPersistence(
167169
firestore: FirebaseFirestore
168170
): Promise<Persistence> {
169-
return getOfflineComponentProvider(firestore).then(
170-
components => components.persistence
171-
);
171+
const offlineComponentProvider = await getOfflineComponentProvider(firestore);
172+
return offlineComponentProvider.persistence;
172173
}
173174

174-
export function getLocalStore(
175+
export async function getLocalStore(
175176
firestore: FirebaseFirestore
176177
): Promise<LocalStore> {
177-
return getOfflineComponentProvider(firestore).then(
178-
provider => provider.localStore
179-
);
178+
const offlineComponentProvider = await getOfflineComponentProvider(firestore);
179+
return offlineComponentProvider.localStore;
180180
}
181181

182182
/**

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ export function enableIndexedDbPersistence(
283283
const offlineComponentProvider = new IndexedDbOfflineComponentProvider(
284284
onlineComponentProvider,
285285
settings.cacheSizeBytes,
286-
!!persistenceSettings?.forceOwnership
286+
persistenceSettings?.forceOwnership
287287
);
288288
return setPersistenceProviders(
289289
firestore,
@@ -356,12 +356,12 @@ function setPersistenceProviders(
356356
await setOnlineComponentProvider(firestore, onlineComponentProvider);
357357
persistenceResult.resolve();
358358
} catch (e) {
359-
if (!canRecoverFromIndexedDbError(e)) {
359+
if (!canFallbackFromIndexedDbError(e)) {
360360
throw e;
361361
}
362362
console.warn(
363-
'Error enabling offline persistence. Falling back to persistenc' +
364-
'disabled: ' +
363+
'Error enabling offline persistence. Falling back to ' +
364+
'persistence disabled: ' +
365365
e
366366
);
367367
persistenceResult.reject(e);
@@ -374,7 +374,9 @@ function setPersistenceProviders(
374374
* Decides whether the provided error allows us to gracefully disable
375375
* persistence (as opposed to crashing the client).
376376
*/
377-
function canRecoverFromIndexedDbError(
377+
// TODO(schmidt-sebastian): Remove `export` in
378+
// https://github.com/firebase/firebase-js-sdk/pull/3901
379+
export function canFallbackFromIndexedDbError(
378380
error: FirestoreError | DOMException
379381
): boolean {
380382
if (error.name === 'FirebaseError') {

packages/firestore/index.node.ts

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

20-
import {
21-
Firestore,
22-
MultiTabIndexedDbPersistenceProvider
23-
} from './src/api/database';
20+
import { Firestore, IndexedDbPersistenceProvider } from './src/api/database';
2421
import { configureForFirebase } from './src/config';
2522

2623
import './register-module';
@@ -33,7 +30,7 @@ import { name, version } from './package.json';
3330
*/
3431
export function registerFirestore(instance: FirebaseNamespace): void {
3532
configureForFirebase(instance, (app, auth) => {
36-
return new Firestore(app, auth, new MultiTabIndexedDbPersistenceProvider());
33+
return new Firestore(app, auth, new IndexedDbPersistenceProvider());
3734
});
3835
instance.registerVersion(name, version, 'node');
3936
}

packages/firestore/index.rn.ts

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

20-
import {
21-
Firestore,
22-
MultiTabIndexedDbPersistenceProvider
23-
} from './src/api/database';
20+
import { Firestore, IndexedDbPersistenceProvider } from './src/api/database';
2421
import { configureForFirebase } from './src/config';
2522

2623
import './register-module';
@@ -32,7 +29,7 @@ import { name, version } from './package.json';
3229
*/
3330
export function registerFirestore(instance: FirebaseNamespace): void {
3431
configureForFirebase(instance, (app, auth) => {
35-
return new Firestore(app, auth, new MultiTabIndexedDbPersistenceProvider());
32+
return new Firestore(app, auth, new IndexedDbPersistenceProvider());
3633
});
3734
instance.registerVersion(name, version, 'rn');
3835
}

packages/firestore/index.ts

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

21-
import {
22-
Firestore,
23-
MultiTabIndexedDbPersistenceProvider
24-
} from './src/api/database';
21+
import { Firestore, IndexedDbPersistenceProvider } from './src/api/database';
2522
import { configureForFirebase } from './src/config';
2623
import { name, version } from './package.json';
2724

@@ -33,7 +30,7 @@ import './register-module';
3330
*/
3431
export function registerFirestore(instance: FirebaseNamespace): void {
3532
configureForFirebase(instance, (app, auth) => {
36-
return new Firestore(app, auth, new MultiTabIndexedDbPersistenceProvider());
33+
return new Firestore(app, auth, new IndexedDbPersistenceProvider());
3734
});
3835
instance.registerVersion(name, version);
3936
}

packages/firestore/src/api/database.ts

Lines changed: 15 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ import {
163163
// settings() defaults:
164164
const DEFAULT_HOST = 'firestore.googleapis.com';
165165
const DEFAULT_SSL = true;
166-
const DEFAULT_TIMESTAMPS_IN_SNAPSHOTS = true;
167166
const DEFAULT_FORCE_LONG_POLLING = false;
168167
const DEFAULT_FORCE_AUTO_DETECT_LONG_POLLING = false;
169168
const DEFAULT_IGNORE_UNDEFINED_PROPERTIES = false;
@@ -177,6 +176,7 @@ export const CACHE_SIZE_UNLIMITED = LruParams.COLLECTION_DISABLED;
177176

178177
// enablePersistence() defaults:
179178
const DEFAULT_SYNCHRONIZE_TABS = false;
179+
const DEFAULT_FORCE_OWNING_TAB = false;
180180

181181
/** Undocumented, private additional settings not exposed in our public API. */
182182
interface PrivateSettings extends PublicSettings {
@@ -205,8 +205,6 @@ class FirestoreSettings {
205205
/** Whether to use SSL when connecting. */
206206
readonly ssl: boolean;
207207

208-
readonly timestampsInSnapshots: boolean;
209-
210208
readonly cacheSizeBytes: number;
211209

212210
readonly experimentalForceLongPolling: boolean;
@@ -240,7 +238,6 @@ class FirestoreSettings {
240238
'host',
241239
'ssl',
242240
'credentials',
243-
'timestampsInSnapshots',
244241
'cacheSizeBytes',
245242
'experimentalForceLongPolling',
246243
'experimentalAutoDetectLongPolling',
@@ -255,35 +252,13 @@ class FirestoreSettings {
255252
);
256253
this.credentials = settings.credentials;
257254

258-
validateNamedOptionalType(
259-
'settings',
260-
'boolean',
261-
'timestampsInSnapshots',
262-
settings.timestampsInSnapshots
263-
);
264-
265255
validateNamedOptionalType(
266256
'settings',
267257
'boolean',
268258
'ignoreUndefinedProperties',
269259
settings.ignoreUndefinedProperties
270260
);
271261

272-
// Nobody should set timestampsInSnapshots anymore, but the error depends on
273-
// whether they set it to true or false...
274-
if (settings.timestampsInSnapshots === true) {
275-
logError(
276-
"The setting 'timestampsInSnapshots: true' is no longer required " +
277-
'and should be removed.'
278-
);
279-
} else if (settings.timestampsInSnapshots === false) {
280-
logError(
281-
"Support for 'timestampsInSnapshots: false' will be removed soon. " +
282-
'You must update your code to handle Timestamp objects.'
283-
);
284-
}
285-
this.timestampsInSnapshots =
286-
settings.timestampsInSnapshots ?? DEFAULT_TIMESTAMPS_IN_SNAPSHOTS;
287262
this.ignoreUndefinedProperties =
288263
settings.ignoreUndefinedProperties ?? DEFAULT_IGNORE_UNDEFINED_PROPERTIES;
289264

@@ -340,7 +315,6 @@ class FirestoreSettings {
340315
return (
341316
this.host === other.host &&
342317
this.ssl === other.ssl &&
343-
this.timestampsInSnapshots === other.timestampsInSnapshots &&
344318
this.credentials === other.credentials &&
345319
this.cacheSizeBytes === other.cacheSizeBytes &&
346320
this.experimentalForceLongPolling ===
@@ -354,8 +328,7 @@ class FirestoreSettings {
354328

355329
/**
356330
* A persistence provider for either memory-only or IndexedDB persistence.
357-
* Mainly used to ensure that IndexedDB code is not included in memory-only
358-
* builds.
331+
* Mainly used to allow optional inclusion of IndexedDB code.
359332
*/
360333
export interface PersistenceProvider {
361334
enableIndexedDbPersistence(
@@ -385,6 +358,7 @@ export class MemoryPersistenceProvider implements PersistenceProvider {
385358
MEMORY_ONLY_PERSISTENCE_ERROR_MESSAGE
386359
);
387360
}
361+
388362
enableMultiTabIndexedDbPersistence(
389363
firestore: FirestoreCompat
390364
): Promise<void> {
@@ -393,6 +367,7 @@ export class MemoryPersistenceProvider implements PersistenceProvider {
393367
MEMORY_ONLY_PERSISTENCE_ERROR_MESSAGE
394368
);
395369
}
370+
396371
clearIndexedDbPersistence(firestore: FirestoreCompat): Promise<void> {
397372
throw new FirestoreError(
398373
Code.FAILED_PRECONDITION,
@@ -446,6 +421,7 @@ export class Firestore
446421
// Public for use in tests.
447422
// TODO(mikelehen): Use modularized initialization instead.
448423
readonly _queue = new AsyncQueue();
424+
449425
_userDataReader: UserDataReader | undefined;
450426

451427
// Note: We are using `MemoryPersistenceProvider` as a default
@@ -582,26 +558,16 @@ export class Firestore
582558
let experimentalForceOwningTab = false;
583559

584560
if (settings) {
585-
if (settings.experimentalTabSynchronization !== undefined) {
586-
logError(
587-
"The 'experimentalTabSynchronization' setting will be removed. Use 'synchronizeTabs' instead."
588-
);
589-
}
590-
synchronizeTabs =
591-
settings.synchronizeTabs ??
592-
settings.experimentalTabSynchronization ??
593-
DEFAULT_SYNCHRONIZE_TABS;
594-
595-
experimentalForceOwningTab = settings.experimentalForceOwningTab
596-
? settings.experimentalForceOwningTab
597-
: false;
598-
599-
if (synchronizeTabs && experimentalForceOwningTab) {
600-
throw new FirestoreError(
601-
Code.INVALID_ARGUMENT,
602-
"The 'experimentalForceOwningTab' setting cannot be used with 'synchronizeTabs'."
603-
);
604-
}
561+
synchronizeTabs = settings.synchronizeTabs ?? DEFAULT_SYNCHRONIZE_TABS;
562+
experimentalForceOwningTab =
563+
settings.experimentalForceOwningTab ?? DEFAULT_FORCE_OWNING_TAB;
564+
565+
validateIsNotUsedTogether(
566+
'synchronizeTabs',
567+
synchronizeTabs,
568+
'experimentalForceOwningTab',
569+
experimentalForceOwningTab
570+
);
605571
}
606572

607573
return synchronizeTabs

packages/firestore/src/core/component_provider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ export class IndexedDbOfflineComponentProvider extends MemoryOfflineComponentPro
156156

157157
constructor(
158158
protected readonly onlineComponentProvider: OnlineComponentProvider,
159-
protected readonly cacheSizeBytes?: number,
160-
protected readonly forceOwnership?: boolean
159+
protected readonly cacheSizeBytes: number | undefined,
160+
protected readonly forceOwnership: boolean | undefined
161161
) {
162162
super();
163163
}
@@ -224,7 +224,7 @@ export class MultiTabOfflineComponentProvider extends IndexedDbOfflineComponentP
224224

225225
constructor(
226226
protected readonly onlineComponentProvider: OnlineComponentProvider,
227-
protected readonly cacheSizeBytes?: number
227+
protected readonly cacheSizeBytes: number | undefined
228228
) {
229229
super(onlineComponentProvider, cacheSizeBytes, /* forceOwnership= */ false);
230230
}

0 commit comments

Comments
 (0)