Skip to content

Commit 76e0e1e

Browse files
Merge master
2 parents 165d227 + dc9a5d1 commit 76e0e1e

25 files changed

+111
-86
lines changed

integration/browserify/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"test": "karma start --single-run"
88
},
99
"dependencies": {
10-
"firebase": "5.3.0"
10+
"firebase": "5.3.1"
1111
},
1212
"devDependencies": {
1313
"@babel/core": "7.0.0-beta.47",

integration/firebase-typings/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"test": "tsc index.ts --outDir dist"
77
},
88
"dependencies": {
9-
"firebase": "5.3.0"
9+
"firebase": "5.3.1"
1010
},
1111
"devDependencies": {
1212
"typescript": "2.8.1"

integration/messaging/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"test:manual": "mocha --exit"
99
},
1010
"dependencies": {
11-
"firebase": "5.3.0"
11+
"firebase": "5.3.1"
1212
},
1313
"devDependencies": {
1414
"chai": "4.1.2",

integration/typescript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"test": "karma start --single-run"
77
},
88
"dependencies": {
9-
"firebase": "5.3.0"
9+
"firebase": "5.3.1"
1010
},
1111
"devDependencies": {
1212
"@babel/core": "7.0.0-beta.47",

integration/webpack/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"test": "karma start --single-run"
88
},
99
"dependencies": {
10-
"firebase": "5.3.0"
10+
"firebase": "5.3.1"
1111
},
1212
"devDependencies": {
1313
"@babel/core": "7.0.0-beta.47",

packages/auth/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/auth",
3-
"version": "0.7.1",
3+
"version": "0.7.2",
44
"main": "dist/auth.js",
55
"module": "dist/auth.esm.js",
66
"description": "Javascript library for Firebase Auth SDK",

packages/firebase/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "firebase",
3-
"version": "5.3.0",
3+
"version": "5.3.1",
44
"description": "Firebase JavaScript library for web and Node.js",
55
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
66
"license": "Apache-2.0",
@@ -36,9 +36,9 @@
3636
"react-native": "dist/index.rn.cjs.js",
3737
"dependencies": {
3838
"@firebase/app": "0.3.3",
39-
"@firebase/auth": "0.7.1",
39+
"@firebase/auth": "0.7.2",
4040
"@firebase/database": "0.3.4",
41-
"@firebase/firestore": "0.6.0",
41+
"@firebase/firestore": "0.6.1",
4242
"@firebase/functions": "0.3.0",
4343
"@firebase/messaging": "0.3.5",
4444
"@firebase/polyfill": "0.3.3",

packages/firestore/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/firestore",
3-
"version": "0.6.0",
3+
"version": "0.6.1",
44
"description": "",
55
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
66
"scripts": {

packages/firestore/src/api/database.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,8 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
344344

345345
ensureClientConfigured(): FirestoreClient {
346346
if (!this._firestoreClient) {
347+
// Kick off starting the client but don't actually wait for it.
348+
// tslint:disable-next-line:no-floating-promises
347349
this.configureClient(new PersistenceSettings(/* enabled= */ false));
348350
}
349351
return this._firestoreClient as FirestoreClient;

packages/firestore/src/core/firestore_client.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,14 +171,14 @@ export class FirestoreClient {
171171
.then(() => this.initializeRest(user))
172172
.then(initializationDone.resolve, initializationDone.reject);
173173
} else {
174-
this.asyncQueue.enqueue(() => {
174+
this.asyncQueue.enqueueAndForget(() => {
175175
return this.handleUserChange(user);
176176
});
177177
}
178178
});
179179

180180
// Block the async queue until initialization is done
181-
this.asyncQueue.enqueue(() => {
181+
this.asyncQueue.enqueueAndForget(() => {
182182
return initializationDone.promise;
183183
});
184184

@@ -457,14 +457,14 @@ export class FirestoreClient {
457457
options: ListenOptions
458458
): QueryListener {
459459
const listener = new QueryListener(query, observer, options);
460-
this.asyncQueue.enqueue(() => {
460+
this.asyncQueue.enqueueAndForget(() => {
461461
return this.eventMgr.listen(listener);
462462
});
463463
return listener;
464464
}
465465

466466
unlisten(listener: QueryListener): void {
467-
this.asyncQueue.enqueue(() => {
467+
this.asyncQueue.enqueueAndForget(() => {
468468
return this.eventMgr.unlisten(listener);
469469
});
470470
}
@@ -510,7 +510,9 @@ export class FirestoreClient {
510510

511511
write(mutations: Mutation[]): Promise<void> {
512512
const deferred = new Deferred<void>();
513-
this.asyncQueue.enqueue(() => this.syncEngine.write(mutations, deferred));
513+
this.asyncQueue.enqueueAndForget(() =>
514+
this.syncEngine.write(mutations, deferred)
515+
);
514516
return deferred.promise;
515517
}
516518

packages/firestore/src/local/indexeddb_persistence.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ export class IndexedDbPersistence implements Persistence {
232232
this.networkEnabled = networkEnabled;
233233
// Schedule a primary lease refresh for immediate execution. The eventual
234234
// lease update will be propagated via `primaryStateListener`.
235-
this.queue.enqueue(async () => {
235+
this.queue.enqueueAndForget(async () => {
236236
if (this.started) {
237237
await this.updateClientMetadataAndTryBecomePrimary();
238238
}
@@ -264,7 +264,7 @@ export class IndexedDbPersistence implements Persistence {
264264
this.isPrimary = canActAsPrimary;
265265

266266
if (wasPrimary !== this.isPrimary) {
267-
this.queue.enqueue(async () => {
267+
this.queue.enqueueAndForget(async () => {
268268
// Verify that `shutdown()` hasn't been called yet by the time
269269
// we invoke the `primaryStateListener`.
270270
if (this.started) {
@@ -519,7 +519,9 @@ export class IndexedDbPersistence implements Persistence {
519519
`Failed to obtain primary lease for action '${action}'.`
520520
);
521521
this.isPrimary = false;
522-
this.queue.enqueue(() => this.primaryStateListener(false));
522+
this.queue.enqueueAndForget(() =>
523+
this.primaryStateListener(false)
524+
);
523525
throw new FirestoreError(
524526
Code.FAILED_PRECONDITION,
525527
PRIMARY_LEASE_LOST_ERROR_MSG
@@ -647,7 +649,7 @@ export class IndexedDbPersistence implements Persistence {
647649
typeof this.document.addEventListener === 'function'
648650
) {
649651
this.documentVisibilityHandler = () => {
650-
this.queue.enqueue<DbOwner | void>(() => {
652+
this.queue.enqueueAndForget<DbOwner | void>(() => {
651653
this.inForeground = this.document.visibilityState === 'visible';
652654
return this.updateClientMetadataAndTryBecomePrimary();
653655
});
@@ -694,7 +696,7 @@ export class IndexedDbPersistence implements Persistence {
694696
// to make sure it gets a chance to run.
695697
this.markClientZombied();
696698

697-
this.queue.enqueue(() => {
699+
this.queue.enqueueAndForget(() => {
698700
// Attempt graceful shutdown (including releasing our owner lease), but
699701
// there's no guarantee it will complete.
700702
return this.shutdown();

packages/firestore/src/local/shared_client_state.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,7 @@ export class WebStorageSharedClientState implements SharedClientState {
862862

863863
debug(LOG_TAG, 'EVENT', event.key, event.newValue);
864864

865-
this.queue.enqueue(async () => {
865+
this.queue.enqueueAndForget(async () => {
866866
if (!this.started) {
867867
this.earlyEvents.push(event);
868868
return;

packages/firestore/src/remote/persistent_stream.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,9 @@ export abstract class PersistentStream<
241241
*
242242
* When stop returns, isStarted() and isOpen() will both return false.
243243
*/
244-
stop(): void {
244+
async stop(): Promise<void> {
245245
if (this.isStarted()) {
246-
this.close(PersistentStreamState.Initial);
246+
await this.close(PersistentStreamState.Initial);
247247
}
248248
}
249249

@@ -502,7 +502,7 @@ export abstract class PersistentStream<
502502
startCloseCount: number
503503
): (fn: () => Promise<void>) => void {
504504
return (fn: () => Promise<void>): void => {
505-
this.queue.enqueue(() => {
505+
this.queue.enqueueAndForget(() => {
506506
if (this.closeCount === startCloseCount) {
507507
return fn();
508508
} else {

packages/firestore/src/remote/remote_store.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,15 @@ export class RemoteStore implements TargetMetadataProvider {
187187
*/
188188
async disableNetwork(): Promise<void> {
189189
this.networkEnabled = false;
190-
this.disableNetworkInternal();
190+
await this.disableNetworkInternal();
191191

192192
// Set the OnlineState to Offline so get()s return from cache, etc.
193193
this.onlineStateTracker.set(OnlineState.Offline);
194194
}
195195

196-
private disableNetworkInternal(): void {
197-
this.writeStream.stop();
198-
this.watchStream.stop();
196+
private async disableNetworkInternal(): Promise<void> {
197+
await this.writeStream.stop();
198+
await this.watchStream.stop();
199199

200200
if (this.writePipeline.length > 0) {
201201
log.debug(
@@ -208,15 +208,14 @@ export class RemoteStore implements TargetMetadataProvider {
208208
this.cleanUpWatchStreamState();
209209
}
210210

211-
shutdown(): Promise<void> {
211+
async shutdown(): Promise<void> {
212212
log.debug(LOG_TAG, 'RemoteStore shutting down.');
213213
this.networkEnabled = false;
214-
this.disableNetworkInternal();
214+
await this.disableNetworkInternal();
215215

216216
// Set the OnlineState to Unknown (rather than Offline) to avoid potentially
217217
// triggering spurious listener events with cached data, etc.
218218
this.onlineStateTracker.set(OnlineState.Unknown);
219-
return Promise.resolve();
220219
}
221220

222221
/** Starts new listen for the given query. Uses resume token if provided */
@@ -691,7 +690,7 @@ export class RemoteStore implements TargetMetadataProvider {
691690
// for the new user and re-fill the write pipeline with new mutations from the LocalStore
692691
// (since mutations are per-user).
693692
this.networkEnabled = false;
694-
this.disableNetworkInternal();
693+
await this.disableNetworkInternal();
695694
this.onlineStateTracker.set(OnlineState.Unknown);
696695
await this.enableNetwork();
697696
}
@@ -706,7 +705,7 @@ export class RemoteStore implements TargetMetadataProvider {
706705
if (isPrimary && this.networkEnabled) {
707706
await this.enableNetwork();
708707
} else if (!isPrimary) {
709-
this.disableNetworkInternal();
708+
await this.disableNetworkInternal();
710709
this.onlineStateTracker.set(OnlineState.Unknown);
711710
}
712711
}

packages/firestore/src/util/async_queue.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ class DelayedOperation<T extends Unknown> implements CancelablePromise<T> {
160160
catch = this.deferred.promise.catch.bind(this.deferred.promise);
161161

162162
private handleDelayElapsed(): void {
163-
this.asyncQueue.enqueue(() => {
163+
this.asyncQueue.enqueueAndForget(() => {
164164
if (this.timerHandle !== null) {
165165
this.clearTimeout();
166166
return this.op().then(result => {
@@ -196,6 +196,15 @@ export class AsyncQueue {
196196
// assertion sanity-checks.
197197
private operationInProgress = false;
198198

199+
/**
200+
* Adds a new operation to the queue without waiting for it to complete (i.e.
201+
* we ignore the Promise result).
202+
*/
203+
enqueueAndForget<T extends Unknown>(op: () => Promise<T>): void {
204+
// tslint:disable-next-line:no-floating-promises
205+
this.enqueue(op);
206+
}
207+
199208
/**
200209
* Adds a new operation to the queue. Returns a promise that will be resolved
201210
* when the promise returned by the new operation is (with its value).

packages/firestore/test/integration/api/array_transforms.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ apiDescribe('Array Transforms:', persistence => {
8484
it('create document with arrayUnion()', async () => {
8585
await withTestSetup(async () => {
8686
await docRef.set({ array: FieldValue.arrayUnion(1, 2) });
87-
expectLocalAndRemoteEvent({ array: [1, 2] });
87+
await expectLocalAndRemoteEvent({ array: [1, 2] });
8888
});
8989
});
9090

packages/firestore/test/integration/remote/stream.test.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,10 @@ describe('Watch Stream', () => {
144144
watchStream = ds.newPersistentWatchStream(streamListener);
145145
watchStream.start();
146146

147-
return streamListener.awaitCallback('open').then(() => {
148-
watchStream.stop();
147+
return streamListener.awaitCallback('open').then(async () => {
148+
await watchStream.stop();
149149

150-
return streamListener.awaitCallback('close');
150+
await streamListener.awaitCallback('close');
151151
});
152152
});
153153
});
@@ -193,10 +193,10 @@ describe('Write Stream', () => {
193193
writeStream = ds.newPersistentWriteStream(streamListener);
194194
writeStream.start();
195195
return streamListener.awaitCallback('open');
196-
}).then(() => {
197-
writeStream.stop();
196+
}).then(async () => {
197+
await writeStream.stop();
198198

199-
return streamListener.awaitCallback('close');
199+
await streamListener.awaitCallback('close');
200200
});
201201
});
202202

@@ -221,10 +221,10 @@ describe('Write Stream', () => {
221221
writeStream.writeMutations(SINGLE_MUTATION);
222222
return streamListener.awaitCallback('mutationResult');
223223
})
224-
.then(() => {
225-
writeStream.stop();
224+
.then(async () => {
225+
await writeStream.stop();
226226

227-
return streamListener.awaitCallback('close');
227+
await streamListener.awaitCallback('close');
228228
});
229229
});
230230

@@ -295,9 +295,11 @@ describe('Write Stream', () => {
295295
.then(() => {
296296
// Simulate callback from GRPC with an unauthenticated error -- this should invalidate
297297
// the token.
298-
writeStream.handleStreamClose(
298+
return writeStream.handleStreamClose(
299299
new FirestoreError(Code.UNAUTHENTICATED, '')
300300
);
301+
})
302+
.then(() => {
301303
return streamListener.awaitCallback('close');
302304
})
303305
.then(() => {
@@ -306,9 +308,11 @@ describe('Write Stream', () => {
306308
})
307309
.then(() => {
308310
// Simulate a different error -- token should not be invalidated this time.
309-
writeStream.handleStreamClose(
311+
return writeStream.handleStreamClose(
310312
new FirestoreError(Code.UNAVAILABLE, '')
311313
);
314+
})
315+
.then(() => {
312316
return streamListener.awaitCallback('close');
313317
})
314318
.then(() => {

0 commit comments

Comments
 (0)