From 86363d66ab1e1d5a263768389aa90f3f38d7853b Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 18 Sep 2020 14:35:49 -0700 Subject: [PATCH 01/37] Query get() method for RTDB --- packages/database/src/api/Query.ts | 24 ++++++++ .../database/src/core/PersistentConnection.ts | 58 +++++++++++++++++++ packages/database/src/core/Repo.ts | 21 +++++++ packages/database/src/core/ServerActions.ts | 7 +++ 4 files changed, 110 insertions(+) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 6ebf6567bcf..97f1a2f4717 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -54,6 +54,10 @@ export interface SnapshotCallback { (a: DataSnapshot, b?: string | null): unknown; } +export interface FailureCallback { + (a: Error): void; +} + /** * A Query represents a filter to be applied to a firebase location. This object purely represents the * query expression (and exposes our public API to build the query). The actual query logic is in ViewBase.js. @@ -295,6 +299,26 @@ export class Query { this.repo.removeEventCallbackForQuery(this, container); } + get( + onComplete?: SnapshotCallback, + onCancelled?: FailureCallback + ): Promise { + const deferred = new Deferred(); + const callback = (snapshot: DataSnapshot) => { + if (onComplete) { + onComplete(snapshot); + } + deferred.resolve(snapshot); + }; + this.repo.get(this, callback, err => { + if (onCancelled) { + onCancelled(err); + } + deferred.reject(err); + }); + return deferred.promise; + } + /** * Attaches a listener, waits for the first event, and then removes the listener * @param {!string} eventType diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index 30f08c93470..5bfc84edff5 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -75,6 +75,13 @@ interface OutstandingPut { onComplete: (a: string, b?: string) => void; } +interface OutstandingGet { + action: string; + request: object; + queued?: boolean; + onComplete: (a: string, b?: string) => void; +} + /** * Firebase connection. Abstracts wire protocol and handles reconnecting. * @@ -92,6 +99,8 @@ export class PersistentConnection extends ServerActions { /* path */ string, Map > = new Map(); + private outstandingGets_: OutstandingGet[] = []; + private outstandingGetCount_ = 0; private outstandingPuts_: OutstandingPut[] = []; private outstandingPutCount_ = 0; private onDisconnectRequestQueue_: OnDisconnectRequest[] = []; @@ -184,6 +193,29 @@ export class PersistentConnection extends ServerActions { } } + get(query: Query, onComplete: (a: string, b: unknown) => void) { + const action = 'g'; + + const req: { [k: string]: unknown } = { + p: query.path.toString(), + q: query.queryObject() + }; + + this.outstandingGets_.push({ + action, + request: req, + onComplete + }); + + this.outstandingGetCount_++; + + if (this.connected_) { + this.sendGet_(this.outstandingGets_.length - 1); + } else { + this.log_('Buffering get: ' + query.path.toString()); + } + } + /** * @inheritDoc */ @@ -221,6 +253,26 @@ export class PersistentConnection extends ServerActions { } } + private sendGet_(index: number) { + const action = this.outstandingGets_[index].action; + const request = this.outstandingGets_[index].request; + const onComplete = this.outstandingGets_[index].onComplete; + this.outstandingGets_[index].queued = this.connected_; + + this.sendRequest(action, request, (message: { [k: string]: unknown }) => { + delete this.outstandingGets_[index]; + this.outstandingGetCount_--; + + if (this.outstandingGetCount_ == 0) { + this.outstandingGets_ = []; + } + + if (onComplete) { + onComplete(message['s'] as string, message['d'] as string); + } + }); + } + private sendListen_(listenSpec: ListenSpec) { const query = listenSpec.query; const pathString = query.path.toString(); @@ -935,6 +987,12 @@ export class PersistentConnection extends ServerActions { } } + for (let i = 0; i < this.outstandingGets_.length; i++) { + if (this.outstandingGets_[i]) { + this.sendGet_(i); + } + } + for (let i = 0; i < this.outstandingPuts_.length; i++) { if (this.outstandingPuts_[i]) { this.sendPut_(i); diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 95a96954626..e73e9674503 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -25,6 +25,7 @@ import { Path } from './util/Path'; import { SparseSnapshotTree } from './SparseSnapshotTree'; import { SyncTree } from './SyncTree'; import { SnapshotHolder } from './SnapshotHolder'; +import { SnapshotCallback, FailureCallback } from '../api/Query'; import { stringify, map, isEmpty } from '@firebase/util'; import { beingCrawled, each, exceptionGuard, warn, log } from './util/util'; @@ -38,6 +39,7 @@ import { ReadonlyRestClient } from './ReadonlyRestClient'; import { FirebaseApp } from '@firebase/app-types'; import { RepoInfo } from './RepoInfo'; import { Database } from '../api/Database'; +import { DataSnapshot } from '../api/DataSnapshot'; import { ServerActions } from './ServerActions'; import { Query } from '../api/Query'; import { EventRegistration } from './view/EventRegistration'; @@ -296,6 +298,25 @@ export class Repo { return this.nextWriteId_++; } + get(query: Query, onComplete: SnapshotCallback, onFailure: FailureCallback) { + this.server_.get(query, (status, payload) => { + if (status === 'ok') { + // TODO(wyszynski): How do we update catch so that + // future queries use the results we got here? + const newNode = nodeFromJSON(payload as string); + onComplete( + new DataSnapshot( + newNode, + query.getRef(), + query.getQueryParams().getIndex() + ) + ); + } else { + onFailure(Error(payload as string)); + } + }); + } + setWithPriority( path: Path, newVal: unknown, diff --git a/packages/database/src/core/ServerActions.ts b/packages/database/src/core/ServerActions.ts index 5cbc38b591b..51951f6bcc3 100644 --- a/packages/database/src/core/ServerActions.ts +++ b/packages/database/src/core/ServerActions.ts @@ -45,6 +45,13 @@ export abstract class ServerActions { */ abstract unlisten(query: Query, tag: number | null): void; + /** + * Get the server value satisfying this query. + * @param query + * @param onComplete + */ + get(query: Query, onComplete: (a: string, b: unknown) => void): void {} + /** * @param {string} pathString * @param {*} data From 0abd55c6f24d2fd7c2f9d9a9c28321e711e5ce3e Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 18 Sep 2020 14:41:59 -0700 Subject: [PATCH 02/37] Fix yarn test --- .../database/src/core/PersistentConnection.ts | 16 ++++++++-------- packages/database/src/core/Repo.ts | 5 ++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index 5bfc84edff5..dca6a2ef99a 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -233,7 +233,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -263,7 +263,7 @@ export class PersistentConnection extends ServerActions { delete this.outstandingGets_[index]; this.outstandingGetCount_--; - if (this.outstandingGetCount_ == 0) { + if (this.outstandingGetCount_ === 0) { this.outstandingGets_ = []; } @@ -325,8 +325,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -344,7 +344,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => {}); + this.sendRequest('unauth', {}, () => { }); } } @@ -408,7 +408,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -666,8 +666,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index e73e9674503..fffeae19fce 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -25,7 +25,6 @@ import { Path } from './util/Path'; import { SparseSnapshotTree } from './SparseSnapshotTree'; import { SyncTree } from './SyncTree'; import { SnapshotHolder } from './SnapshotHolder'; -import { SnapshotCallback, FailureCallback } from '../api/Query'; import { stringify, map, isEmpty } from '@firebase/util'; import { beingCrawled, each, exceptionGuard, warn, log } from './util/util'; @@ -41,7 +40,7 @@ import { RepoInfo } from './RepoInfo'; import { Database } from '../api/Database'; import { DataSnapshot } from '../api/DataSnapshot'; import { ServerActions } from './ServerActions'; -import { Query } from '../api/Query'; +import { FailureCallback, SnapshotCallback, Query } from '../api/Query'; import { EventRegistration } from './view/EventRegistration'; import { StatsCollection } from './stats/StatsCollection'; import { Event } from './view/Event'; @@ -159,7 +158,7 @@ export class Repo { } return infoEvents; }, - stopListening: () => {} + stopListening: () => { } }); this.updateInfo_('connected', false); From 437b8a7e58acbfd7d88b958c28f14d09a61129ff Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 18 Sep 2020 16:25:56 -0700 Subject: [PATCH 03/37] Call onDataUpdate_ to simulater server push --- packages/database/src/api/Query.ts | 24 +++++++++---------- .../database/src/core/PersistentConnection.ts | 1 + packages/database/src/core/Repo.ts | 9 +++++-- .../src/realtime/WebSocketConnection.ts | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 97f1a2f4717..4b456585fa9 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -79,7 +79,7 @@ export class Query { public path: Path, private queryParams_: QueryParams, private orderByCalled_: boolean - ) {} + ) { } /** * Validates start/end values for queries. @@ -126,13 +126,13 @@ export class Query { ) { throw new Error( 'Query: When ordering by priority, the first argument passed to startAt(), ' + - 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' + 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' ); } } else { assert( params.getIndex() instanceof PathIndex || - params.getIndex() === VALUE_INDEX, + params.getIndex() === VALUE_INDEX, 'unknown index type.' ); if ( @@ -141,7 +141,7 @@ export class Query { ) { throw new Error( 'Query: First argument passed to startAt(), endAt(), or equalTo() cannot be ' + - 'an object.' + 'an object.' ); } } @@ -351,7 +351,7 @@ export class Query { const deferred = new Deferred(); // A dummy error handler in case a user wasn't expecting promises - deferred.promise.catch(() => {}); + deferred.promise.catch(() => { }); const onceCallback = (snapshot: DataSnapshot) => { // NOTE: Even though we unsubscribe, we may get called multiple times if a single action (e.g. set() with JSON) @@ -401,7 +401,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToFirst: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -432,7 +432,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToLast: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -534,7 +534,7 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.startAt: Starting point was already set (by another call to startAt ' + - 'or equalTo).' + 'or equalTo).' ); } @@ -565,7 +565,7 @@ export class Query { if (this.queryParams_.hasEnd()) { throw new Error( 'Query.endAt: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } @@ -586,13 +586,13 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.equalTo: Starting point was already set (by another call to startAt or ' + - 'equalTo).' + 'equalTo).' ); } if (this.queryParams_.hasEnd()) { throw new Error( 'Query.equalTo: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } return this.startAt(value, name).endAt(value, name); @@ -686,7 +686,7 @@ export class Query { } else { throw new Error( errorPrefix(fnName, 3, true) + - ' must either be a cancel callback or a context object.' + ' must either be a cancel callback or a context object.' ); } } diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index dca6a2ef99a..377ca4e8fc3 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -636,6 +636,7 @@ export class PersistentConnection extends ServerActions { } private onDataPush_(action: string, body: { [k: string]: unknown }) { + console.log("onDataPush action: " + action + " body: " + JSON.stringify(body)); this.log_('handleServerMessage', action, body); if (action === 'd') { this.onDataUpdate_( diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index fffeae19fce..28ee4735d00 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -300,8 +300,13 @@ export class Repo { get(query: Query, onComplete: SnapshotCallback, onFailure: FailureCallback) { this.server_.get(query, (status, payload) => { if (status === 'ok') { - // TODO(wyszynski): How do we update catch so that - // future queries use the results we got here? + // TODO(wyszynski): Is this the correct way to update client SDK caches + // with the data that we've received from get()? + this.onDataUpdate_( + query.path.toString(), + payload, + /*isMerge=*/false, + /*tag=*/null); const newNode = nodeFromJSON(payload as string); onComplete( new DataSnapshot( diff --git a/packages/database/src/realtime/WebSocketConnection.ts b/packages/database/src/realtime/WebSocketConnection.ts index 07295460334..e715c1ae9f3 100644 --- a/packages/database/src/realtime/WebSocketConnection.ts +++ b/packages/database/src/realtime/WebSocketConnection.ts @@ -221,7 +221,7 @@ export class WebSocketConnection implements Transport { /** * No-op for websockets, we don't need to do anything once the connection is confirmed as open */ - start() {} + start() { } static forceDisallow_: boolean; From 8b289f81b96c5c5bed3b638bc84a75977bd46b8c Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 18 Sep 2020 16:27:18 -0700 Subject: [PATCH 04/37] Run yarn prettier --- packages/database/src/api/Query.ts | 24 +++++++++---------- .../database/src/core/PersistentConnection.ts | 18 +++++++------- packages/database/src/core/Repo.ts | 7 +++--- .../src/realtime/WebSocketConnection.ts | 2 +- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 4b456585fa9..97f1a2f4717 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -79,7 +79,7 @@ export class Query { public path: Path, private queryParams_: QueryParams, private orderByCalled_: boolean - ) { } + ) {} /** * Validates start/end values for queries. @@ -126,13 +126,13 @@ export class Query { ) { throw new Error( 'Query: When ordering by priority, the first argument passed to startAt(), ' + - 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' + 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' ); } } else { assert( params.getIndex() instanceof PathIndex || - params.getIndex() === VALUE_INDEX, + params.getIndex() === VALUE_INDEX, 'unknown index type.' ); if ( @@ -141,7 +141,7 @@ export class Query { ) { throw new Error( 'Query: First argument passed to startAt(), endAt(), or equalTo() cannot be ' + - 'an object.' + 'an object.' ); } } @@ -351,7 +351,7 @@ export class Query { const deferred = new Deferred(); // A dummy error handler in case a user wasn't expecting promises - deferred.promise.catch(() => { }); + deferred.promise.catch(() => {}); const onceCallback = (snapshot: DataSnapshot) => { // NOTE: Even though we unsubscribe, we may get called multiple times if a single action (e.g. set() with JSON) @@ -401,7 +401,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToFirst: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -432,7 +432,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToLast: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -534,7 +534,7 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.startAt: Starting point was already set (by another call to startAt ' + - 'or equalTo).' + 'or equalTo).' ); } @@ -565,7 +565,7 @@ export class Query { if (this.queryParams_.hasEnd()) { throw new Error( 'Query.endAt: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } @@ -586,13 +586,13 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.equalTo: Starting point was already set (by another call to startAt or ' + - 'equalTo).' + 'equalTo).' ); } if (this.queryParams_.hasEnd()) { throw new Error( 'Query.equalTo: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } return this.startAt(value, name).endAt(value, name); @@ -686,7 +686,7 @@ export class Query { } else { throw new Error( errorPrefix(fnName, 3, true) + - ' must either be a cancel callback or a context object.' + ' must either be a cancel callback or a context object.' ); } } diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index 377ca4e8fc3..d1a78464d3a 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -233,7 +233,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -325,8 +325,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -344,7 +344,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => { }); + this.sendRequest('unauth', {}, () => {}); } } @@ -408,7 +408,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -636,7 +636,9 @@ export class PersistentConnection extends ServerActions { } private onDataPush_(action: string, body: { [k: string]: unknown }) { - console.log("onDataPush action: " + action + " body: " + JSON.stringify(body)); + console.log( + 'onDataPush action: ' + action + ' body: ' + JSON.stringify(body) + ); this.log_('handleServerMessage', action, body); if (action === 'd') { this.onDataUpdate_( @@ -667,8 +669,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 28ee4735d00..4307e048d3a 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -158,7 +158,7 @@ export class Repo { } return infoEvents; }, - stopListening: () => { } + stopListening: () => {} }); this.updateInfo_('connected', false); @@ -305,8 +305,9 @@ export class Repo { this.onDataUpdate_( query.path.toString(), payload, - /*isMerge=*/false, - /*tag=*/null); + /*isMerge=*/ false, + /*tag=*/ null + ); const newNode = nodeFromJSON(payload as string); onComplete( new DataSnapshot( diff --git a/packages/database/src/realtime/WebSocketConnection.ts b/packages/database/src/realtime/WebSocketConnection.ts index e715c1ae9f3..07295460334 100644 --- a/packages/database/src/realtime/WebSocketConnection.ts +++ b/packages/database/src/realtime/WebSocketConnection.ts @@ -221,7 +221,7 @@ export class WebSocketConnection implements Transport { /** * No-op for websockets, we don't need to do anything once the connection is confirmed as open */ - start() { } + start() {} static forceDisallow_: boolean; From 153dbcf36255455c49af764933f5da085629182b Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 18 Sep 2020 16:30:04 -0700 Subject: [PATCH 05/37] cleanup --- packages/database/src/core/PersistentConnection.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index d1a78464d3a..ca220f7dd16 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -636,9 +636,6 @@ export class PersistentConnection extends ServerActions { } private onDataPush_(action: string, body: { [k: string]: unknown }) { - console.log( - 'onDataPush action: ' + action + ' body: ' + JSON.stringify(body) - ); this.log_('handleServerMessage', action, body); if (action === 'd') { this.onDataUpdate_( From 61665bf7c891057fc0c7b9b9c7c1671534cb8cd7 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 23 Sep 2020 10:14:47 -0700 Subject: [PATCH 06/37] Add basic tests for get --- packages/database/test/query.test.ts | 43 ++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index ea778b623d1..c9d9b7d3f5a 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -2191,6 +2191,49 @@ describe('Query Tests', () => { }); }); + it('get() at empty root returns null', done => { + const node = getRandomNode() as Reference; + node.get().then(snapshot => { + const val = snapshot.val(); + expect(val).to.be.null; + done(); + }); + }); + + it('get() at non-empty root returns correct value', done => { + const nodes = getRandomNode(2) as Reference; + const reader = nodes[0]; + const writer = nodes[1]; + writer.set({ foo: 'a', bar: 'b' }, (err, dummy) => { + reader.get().then(snapshot => { + const val = snapshot.val(); + expect(val['foo']).to.equal('a'); + expect(val['bar']).to.equal('b'); + done(); + }); + }); + }); + + it('get() for removed node returns correct value', done => { + const nodes = getRandomNode(2) as Reference; + const reader = nodes[0]; + const writer = nodes[1]; + writer.set({ foo: 'a', bar: 'b' }, (err, dummy) => { + reader.get().then(snapshot => { + const val = snapshot.val(); + expect(val['foo']).to.equal('a'); + expect(val['bar']).to.equal('b'); + writer.remove().then(err => { + reader.get().then(snapshot => { + const val = snapshot.val(); + expect(val).to.be.null; + done(); + }); + }); + }); + }); + }); + it('set() at query root raises correct value event', done => { const nodePair = getRandomNode(2); const writer = nodePair[0]; From 9b2cf00035742b9feb5b5d61269415c828f4b9e9 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 23 Sep 2020 10:18:24 -0700 Subject: [PATCH 07/37] remove callback arguments to get() --- packages/database/src/api/Query.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 97f1a2f4717..88bd61c6ef2 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -299,21 +299,12 @@ export class Query { this.repo.removeEventCallbackForQuery(this, container); } - get( - onComplete?: SnapshotCallback, - onCancelled?: FailureCallback - ): Promise { + get(): Promise { const deferred = new Deferred(); const callback = (snapshot: DataSnapshot) => { - if (onComplete) { - onComplete(snapshot); - } deferred.resolve(snapshot); }; this.repo.get(this, callback, err => { - if (onCancelled) { - onCancelled(err); - } deferred.reject(err); }); return deferred.promise; From ab34805e2e0fab973d1362c20d31ba2cc40448e0 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 23 Sep 2020 11:09:28 -0700 Subject: [PATCH 08/37] get rid of todo --- packages/database/src/core/Repo.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 4307e048d3a..b7ea06dbdcd 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -300,8 +300,6 @@ export class Repo { get(query: Query, onComplete: SnapshotCallback, onFailure: FailureCallback) { this.server_.get(query, (status, payload) => { if (status === 'ok') { - // TODO(wyszynski): Is this the correct way to update client SDK caches - // with the data that we've received from get()? this.onDataUpdate_( query.path.toString(), payload, From f20c90357aac6341b3f168b2d3dbd4997bd0ad4f Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 5 Oct 2020 21:25:24 -0700 Subject: [PATCH 09/37] Use promises instead + caching test --- packages/database/src/api/Query.ts | 9 +- .../database/src/core/PersistentConnection.ts | 32 +- .../database/src/core/ReadonlyRestClient.ts | 45 +- packages/database/src/core/Repo.ts | 25 +- packages/database/src/core/ServerActions.ts | 3 +- packages/database/test/query.test.ts | 6481 +++++++++-------- 6 files changed, 3325 insertions(+), 3270 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 88bd61c6ef2..5c97df01a5b 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -300,14 +300,7 @@ export class Query { } get(): Promise { - const deferred = new Deferred(); - const callback = (snapshot: DataSnapshot) => { - deferred.resolve(snapshot); - }; - this.repo.get(this, callback, err => { - deferred.reject(err); - }); - return deferred.promise; + return this.repo.get(this); } /** diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index ca220f7dd16..b14ec22a434 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -26,7 +26,8 @@ import { isValidFormat, isMobileCordova, isReactNative, - isNodeSdk + isNodeSdk, + Deferred } from '@firebase/util'; import { error, log, logWrapper, warn, ObjectToUniqueKey } from './util/util'; @@ -36,6 +37,8 @@ import { OnlineMonitor } from './util/OnlineMonitor'; import { Connection } from '../realtime/Connection'; +import { DataSnapshot } from '../api/DataSnapshot'; + import { ServerActions } from './ServerActions'; import { AuthTokenProvider } from './AuthTokenProvider'; import { RepoInfo } from './RepoInfo'; @@ -79,7 +82,7 @@ interface OutstandingGet { action: string; request: object; queued?: boolean; - onComplete: (a: string, b?: string) => void; + deferred: Deferred; } /** @@ -193,7 +196,7 @@ export class PersistentConnection extends ServerActions { } } - get(query: Query, onComplete: (a: string, b: unknown) => void) { + get(query: Query): Promise { const action = 'g'; const req: { [k: string]: unknown } = { @@ -201,10 +204,12 @@ export class PersistentConnection extends ServerActions { q: query.queryObject() }; + const deferred = new Deferred(); + this.outstandingGets_.push({ action, request: req, - onComplete + deferred: deferred }); this.outstandingGetCount_++; @@ -214,6 +219,8 @@ export class PersistentConnection extends ServerActions { } else { this.log_('Buffering get: ' + query.path.toString()); } + + return deferred.promise; } /** @@ -256,7 +263,7 @@ export class PersistentConnection extends ServerActions { private sendGet_(index: number) { const action = this.outstandingGets_[index].action; const request = this.outstandingGets_[index].request; - const onComplete = this.outstandingGets_[index].onComplete; + const deferred = this.outstandingGets_[index].deferred; this.outstandingGets_[index].queued = this.connected_; this.sendRequest(action, request, (message: { [k: string]: unknown }) => { @@ -267,8 +274,19 @@ export class PersistentConnection extends ServerActions { this.outstandingGets_ = []; } - if (onComplete) { - onComplete(message['s'] as string, message['d'] as string); + if (deferred) { + const payload = message['d'] as string; + if (message['s'] == 'ok') { + this.onDataUpdate_( + request['p'], + payload, + /*isMerge*/ false, + /*tag*/ null + ); + deferred.resolve(payload); + } else { + deferred.reject(payload); + } } }); } diff --git a/packages/database/src/core/ReadonlyRestClient.ts b/packages/database/src/core/ReadonlyRestClient.ts index d74124b0551..267db975a26 100644 --- a/packages/database/src/core/ReadonlyRestClient.ts +++ b/packages/database/src/core/ReadonlyRestClient.ts @@ -15,12 +15,19 @@ * limitations under the License. */ -import { assert, jsonEval, safeGet, querystring } from '@firebase/util'; +import { + assert, + jsonEval, + safeGet, + querystring, + Deferred +} from '@firebase/util'; import { logWrapper, warn } from './util/util'; import { ServerActions } from './ServerActions'; import { RepoInfo } from './RepoInfo'; import { AuthTokenProvider } from './AuthTokenProvider'; +import { DataSnapshot } from '../api/DataSnapshot'; import { Query } from '../api/Query'; /** @@ -139,6 +146,42 @@ export class ReadonlyRestClient extends ServerActions { delete this.listens_[listenId]; } + get(query: Query): Promise { + const queryStringParameters = query + .getQueryParams() + .toRestQueryStringParameters(); + + const pathString = query.path.toString(); + + const deferred = new Deferred(); + + this.restRequest_( + pathString + '.json', + queryStringParameters, + (error, result) => { + let data = result; + + if (error === 404) { + data = null; + error = null; + } + + if (error === null) { + this.onDataUpdate_( + pathString, + data, + /*isMerge=*/ false, + /*tag=*/ null + ); + deferred.resolve(data as string); + } else { + deferred.reject(new Error(data as string)); + } + } + ); + return deferred.promise; + } + /** @inheritDoc */ refreshAuthToken(token: string) { // no-op since we just always call getToken. diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index b7ea06dbdcd..4cc584b6329 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -47,6 +47,7 @@ import { Event } from './view/Event'; import { Node } from './snap/Node'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { Provider } from '@firebase/component'; +import { Deferred } from '@firebase/util'; import { Indexable } from './util/misc'; const INTERRUPT_REASON = 'repo_interrupt'; @@ -297,27 +298,21 @@ export class Repo { return this.nextWriteId_++; } - get(query: Query, onComplete: SnapshotCallback, onFailure: FailureCallback) { - this.server_.get(query, (status, payload) => { - if (status === 'ok') { - this.onDataUpdate_( - query.path.toString(), - payload, - /*isMerge=*/ false, - /*tag=*/ null - ); - const newNode = nodeFromJSON(payload as string); - onComplete( + get(query: Query): Promise { + return this.server_.get(query).then( + payload => { + return Promise.resolve( new DataSnapshot( - newNode, + nodeFromJSON(payload as string), query.getRef(), query.getQueryParams().getIndex() ) ); - } else { - onFailure(Error(payload as string)); + }, + err => { + return Promise.reject(new Error(err as string)); } - }); + ); } setWithPriority( diff --git a/packages/database/src/core/ServerActions.ts b/packages/database/src/core/ServerActions.ts index 51951f6bcc3..894aa64d1d7 100644 --- a/packages/database/src/core/ServerActions.ts +++ b/packages/database/src/core/ServerActions.ts @@ -16,6 +16,7 @@ */ import { Query } from '../api/Query'; +import { DataSnapshot } from '../api/DataSnapshot'; /** * Interface defining the set of actions that can be performed against the Firebase server @@ -50,7 +51,7 @@ export abstract class ServerActions { * @param query * @param onComplete */ - get(query: Query, onComplete: (a: string, b: unknown) => void): void {} + abstract get(query: Query): Promise; /** * @param {string} pathString diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index c9d9b7d3f5a..3cb26828220 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -26,6 +26,9 @@ import { } from './helpers/EventAccumulator'; import * as _ from 'lodash'; +import { getFreshRepo } from './helpers/util'; +import { SnapshotHolder } from '../src/core/SnapshotHolder'; + type TaskList = Array<[Query, any]>; describe('Query Tests', () => { @@ -41,3258 +44,3260 @@ describe('Query Tests', () => { this.gotChildAdded = true; }; - it('Can create basic queries.', () => { - const path = getRandomNode() as Reference; - - path.limitToLast(10); - path.startAt('199').limitToFirst(10); - path.startAt('199', 'test').limitToFirst(10); - path.endAt('199').limitToLast(1); - path.startAt('50', 'test').endAt('100', 'tree'); - path.startAt('4').endAt('10'); - path.startAt().limitToFirst(10); - path.endAt().limitToLast(10); - path.orderByKey().startAt('foo'); - path.orderByKey().endAt('foo'); - path.orderByKey().equalTo('foo'); - path.orderByChild('child'); - path.orderByChild('child/deep/path'); - path.orderByValue(); - path.orderByPriority(); - }); - - it('Exposes database as read-only property', () => { - const path = getRandomNode() as Reference; - const child = path.child('child'); - - const db = path.database; - const dbChild = child.database; - - expect(db).to.equal(dbChild); - /** - * TS throws an error here (as is expected) - * casting to any to allow the code to run - */ - expect(() => ((path as any).database = "can't overwrite")).to.throw(); - expect(path.database).to.equal(db); - }); - - it('Invalid queries throw', () => { - const path = getRandomNode() as Reference; - - /** - * Because we are testing invalid queries, I am casting - * to `any` to avoid the typechecking error. This can - * occur when a user uses the SDK through a pure JS - * client, rather than typescript - */ - expect(() => { - (path as any).limitToLast(); - }).to.throw(); - expect(() => { - (path as any).limitToLast('100'); - }).to.throw(); - expect(() => { - (path as any).limitToLast({ x: 5 }); - }).to.throw(); - expect(() => { - path.limitToLast(100).limitToLast(100); - }).to.throw(); - expect(() => { - path.limitToLast(100).limitToFirst(100); - }).to.throw(); - expect(() => { - path.limitToLast(100).limitToLast(100); - }).to.throw(); - expect(() => { - path.limitToFirst(100).limitToLast(100); - }).to.throw(); - expect(() => { - path.limitToFirst(100).limitToFirst(100); - }).to.throw(); - expect(() => { - path.limitToFirst(100).limitToLast(100); - }).to.throw(); - expect(() => { - path.limitToLast(100).limitToLast(100); - }).to.throw(); - expect(() => { - path.limitToLast(100).limitToFirst(100); - }).to.throw(); - expect(() => { - path.limitToLast(100).limitToLast(100); - }).to.throw(); - expect(() => { - path.orderByPriority().orderByPriority(); - }).to.throw(); - expect(() => { - path.orderByPriority().orderByKey(); - }).to.throw(); - expect(() => { - path.orderByPriority().orderByChild('foo'); - }).to.throw(); - expect(() => { - path.orderByPriority().startAt(true); - }).to.throw(); - expect(() => { - path.orderByPriority().endAt(false); - }).to.throw(); - expect(() => { - path.orderByPriority().equalTo(true); - }).to.throw(); - expect(() => { - path.orderByKey().orderByPriority(); - }).to.throw(); - expect(() => { - path.orderByKey().orderByKey(); - }).to.throw(); - expect(() => { - path.orderByKey().orderByChild('foo'); - }).to.throw(); - expect(() => { - path.orderByChild('foo').orderByPriority(); - }).to.throw(); - expect(() => { - path.orderByChild('foo').orderByKey(); - }).to.throw(); - expect(() => { - path.orderByChild('foo').orderByChild('foo'); - }).to.throw(); - expect(() => { - (path as any).orderByChild('foo').startAt({ a: 1 }); - }).to.throw(); - expect(() => { - (path as any).orderByChild('foo').endAt({ a: 1 }); - }).to.throw(); - expect(() => { - (path as any).orderByChild('foo').equalTo({ a: 1 }); - }).to.throw(); - expect(() => { - path.startAt('foo').startAt('foo'); - }).to.throw(); - expect(() => { - path.startAt('foo').equalTo('foo'); - }).to.throw(); - expect(() => { - path.endAt('foo').endAt('foo'); - }).to.throw(); - expect(() => { - path.endAt('foo').equalTo('foo'); - }).to.throw(); - expect(() => { - path.equalTo('foo').startAt('foo'); - }).to.throw(); - expect(() => { - path.equalTo('foo').endAt('foo'); - }).to.throw(); - expect(() => { - path.equalTo('foo').equalTo('foo'); - }).to.throw(); - expect(() => { - path.orderByKey().startAt('foo', 'foo'); - }).to.throw(); - expect(() => { - path.orderByKey().endAt('foo', 'foo'); - }).to.throw(); - expect(() => { - path.orderByKey().equalTo('foo', 'foo'); - }).to.throw(); - expect(() => { - path.orderByKey().startAt(1); - }).to.throw(); - expect(() => { - path.orderByKey().startAt(true); - }).to.throw(); - expect(() => { - path.orderByKey().startAt(null); - }).to.throw(); - expect(() => { - path.orderByKey().endAt(1); - }).to.throw(); - expect(() => { - path.orderByKey().endAt(true); - }).to.throw(); - expect(() => { - path.orderByKey().endAt(null); - }).to.throw(); - expect(() => { - path.orderByKey().equalTo(1); - }).to.throw(); - expect(() => { - path.orderByKey().equalTo(true); - }).to.throw(); - expect(() => { - path.orderByKey().equalTo(null); - }).to.throw(); - expect(() => { - path.startAt('foo', 'foo').orderByKey(); - }).to.throw(); - expect(() => { - path.endAt('foo', 'foo').orderByKey(); - }).to.throw(); - expect(() => { - path.equalTo('foo', 'foo').orderByKey(); - }).to.throw(); - expect(() => { - path.startAt(1).orderByKey(); - }).to.throw(); - expect(() => { - path.startAt(true).orderByKey(); - }).to.throw(); - expect(() => { - path.endAt(1).orderByKey(); - }).to.throw(); - expect(() => { - path.endAt(true).orderByKey(); - }).to.throw(); - }); - - it('can produce a valid ref', () => { - const path = getRandomNode() as Reference; - - const query = path.limitToLast(1); - const ref = query.ref; - - expect(ref.toString()).to.equal(path.toString()); - }); - - it('Passing invalidKeys to startAt / endAt throws.', () => { - const f = getRandomNode() as Reference; - const badKeys = [ - '.test', - 'test.', - 'fo$o', - '[what', - 'ever]', - 'ha#sh', - '/thing', - 'th/ing', - 'thing/' - ]; - // Changed from basic array iteration to avoid closure issues accessing mutable state - _.each(badKeys, badKey => { - expect(() => { - f.startAt(null, badKey); - }).to.throw(); - expect(() => { - f.endAt(null, badKey); - }).to.throw(); - }); - }); - - it('Passing invalid paths to orderBy throws', () => { - const ref = getRandomNode() as Reference; - expect(() => { - ref.orderByChild('$child/foo'); - }).to.throw(); - expect(() => { - ref.orderByChild('$key'); - }).to.throw(); - expect(() => { - ref.orderByChild('$priority'); - }).to.throw(); - }); - - it('Query.queryIdentifier works.', () => { - const path = getRandomNode() as Reference; - const queryId = function (query) { - return query.queryIdentifier(query); - }; - - expect(queryId(path)).to.equal('default'); - - expect(queryId(path.startAt('pri', 'name'))).to.equal( - '{"sn":"name","sp":"pri"}' - ); - expect(queryId(path.startAt('spri').endAt('epri'))).to.equal( - '{"ep":"epri","sp":"spri"}' - ); - expect( - queryId(path.startAt('spri', 'sname').endAt('epri', 'ename')) - ).to.equal('{"en":"ename","ep":"epri","sn":"sname","sp":"spri"}'); - expect(queryId(path.startAt('pri').limitToFirst(100))).to.equal( - '{"l":100,"sp":"pri","vf":"l"}' - ); - expect(queryId(path.startAt('bar').orderByChild('foo'))).to.equal( - '{"i":"foo","sp":"bar"}' - ); - }); - - it('Passing invalid queries to isEqual throws', () => { - const ref = getRandomNode() as Reference; - expect(() => { - (ref as any).isEqual(); - }).to.throw(); - expect(() => { - (ref as any).isEqual(''); - }).to.throw(); - expect(() => { - (ref as any).isEqual('foo'); - }).to.throw(); - expect(() => { - (ref as any).isEqual({}); - }).to.throw(); - expect(() => { - (ref as any).isEqual([]); - }).to.throw(); - expect(() => { - (ref as any).isEqual(0); - }).to.throw(); - expect(() => { - (ref as any).isEqual(1); - }).to.throw(); - expect(() => { - (ref as any).isEqual(NaN); - }).to.throw(); - expect(() => { - ref.isEqual(null); - }).to.throw(); - expect(() => { - (ref as any).isEqual({ a: 1 }); - }).to.throw(); - expect(() => { - (ref as any).isEqual(ref, 'extra'); - }).to.throw(); - }); - - it('Query.isEqual works.', () => { - const path = getRandomNode() as Reference; - const rootRef = path.root; - const childRef = rootRef.child('child'); - - // Equivalent refs - expect(path.isEqual(path), 'Query.isEqual - 1').to.be.true; - expect(rootRef.isEqual(rootRef), 'Query.isEqual - 2').to.be.true; - expect(rootRef.isEqual(childRef.parent), 'Query.isEqual - 3').to.be.true; - expect(rootRef.child('child').isEqual(childRef), 'Query.isEqual - 4').to.be - .true; - - // Refs with different repos - // NOTE: getFreshRepo() no longer takes a hostname, so this test needs to be reworked. - // Same in info.test.ts. - // var rootRefDifferentRepo = TESTS.getFreshRepo(TEST_ALT_NAMESPACE); - // rootRefDifferentRepo.database.goOffline(); - - // expect(rootRef.isEqual(rootRefDifferentRepo), 'Query.isEqual - 5').to.be.false; - // expect(childRef.isEqual(rootRefDifferentRepo.child('child')), 'Query.isEqual - 6').to.be.false; - - // Refs with different paths - expect(rootRef.isEqual(childRef), 'Query.isEqual - 7').to.be.false; - expect(childRef.isEqual(rootRef.child('otherChild')), 'Query.isEqual - 8') - .to.be.false; - - const childQueryLast25 = childRef.limitToLast(25); - const childQueryOrderedByKey = childRef.orderByKey(); - const childQueryOrderedByPriority = childRef.orderByPriority(); - const childQueryOrderedByTimestamp = childRef.orderByChild('timestamp'); - const childQueryStartAt1 = childQueryOrderedByTimestamp.startAt(1); - const childQueryStartAt2 = childQueryOrderedByTimestamp.startAt(2); - const childQueryEndAt2 = childQueryOrderedByTimestamp.endAt(2); - const childQueryStartAt1EndAt2 = childQueryOrderedByTimestamp - .startAt(1) - .endAt(2); - - // Equivalent queries - expect(childRef.isEqual(childQueryLast25.ref), 'Query.isEqual - 9').to.be - .true; - expect( - childQueryLast25.isEqual(childRef.limitToLast(25)), - 'Query.isEqual - 10' - ).to.be.true; - expect( - childQueryStartAt1EndAt2.isEqual( - childQueryOrderedByTimestamp.startAt(1).endAt(2) - ), - 'Query.isEqual - 11' - ).to.be.true; - - // Non-equivalent queries - expect(childQueryLast25.isEqual(childRef), 'Query.isEqual - 12').to.be - .false; - expect( - childQueryLast25.isEqual(childQueryOrderedByKey), - 'Query.isEqual - 13' - ).to.be.false; - expect( - childQueryLast25.isEqual(childQueryOrderedByPriority), - 'Query.isEqual - 14' - ).to.be.false; - expect( - childQueryLast25.isEqual(childQueryOrderedByTimestamp), - 'Query.isEqual - 15' - ).to.be.false; - expect( - childQueryOrderedByKey.isEqual(childQueryOrderedByPriority), - 'Query.isEqual - 16' - ).to.be.false; - expect( - childQueryOrderedByKey.isEqual(childQueryOrderedByTimestamp), - 'Query.isEqual - 17' - ).to.be.false; - expect(childQueryStartAt1.isEqual(childQueryStartAt2), 'Query.isEqual - 18') - .to.be.false; - expect( - childQueryStartAt1.isEqual(childQueryStartAt1EndAt2), - 'Query.isEqual - 19' - ).to.be.false; - expect(childQueryEndAt2.isEqual(childQueryStartAt2), 'Query.isEqual - 20') - .to.be.false; - expect( - childQueryEndAt2.isEqual(childQueryStartAt1EndAt2), - 'Query.isEqual - 21' - ).to.be.false; - }); - - it('Query.off can be called on the default query.', () => { - const path = getRandomNode() as Reference; - let eventFired = false; - - const callback = function () { - eventFired = true; - }; - path.limitToLast(5).on('value', callback); - - path.set({ a: 5, b: 6 }); - expect(eventFired).to.be.true; - eventFired = false; - - path.off('value', callback); - path.set({ a: 6, b: 5 }); - expect(eventFired).to.be.false; - }); - - it('Query.off can be called on the specific query.', () => { - const path = getRandomNode() as Reference; - let eventFired = false; - - const callback = function () { - eventFired = true; - }; - path.limitToLast(5).on('value', callback); - - path.set({ a: 5, b: 6 }); - expect(eventFired).to.be.true; - eventFired = false; - - path.limitToLast(5).off('value', callback); - path.set({ a: 6, b: 5 }); - expect(eventFired).to.be.false; - }); - - it('Query.off can be called without a callback specified.', () => { - const path = getRandomNode() as Reference; - let eventFired = false; - - const callback1 = function () { - eventFired = true; - }; - const callback2 = function () { - eventFired = true; - }; - path.on('value', callback1); - path.limitToLast(5).on('value', callback2); - - path.set({ a: 5, b: 6 }); - expect(eventFired).to.be.true; - eventFired = false; - - path.off('value'); - path.set({ a: 6, b: 5 }); - expect(eventFired).to.be.false; - }); - - it('Query.off can be called without an event type or callback specified.', () => { - const path = getRandomNode() as Reference; - let eventFired = false; - - const callback1 = function () { - eventFired = true; - }; - const callback2 = function () { - eventFired = true; - }; - path.on('value', callback1); - path.limitToLast(5).on('value', callback2); - - path.set({ a: 5, b: 6 }); - expect(eventFired).to.be.true; - eventFired = false; - - path.off(); - path.set({ a: 6, b: 5 }); - expect(eventFired).to.be.false; - }); - - it('Query.off respects provided context (for value events).', () => { - const ref = getRandomNode() as Reference; - - const a = new EventReceiver(), - b = new EventReceiver(); - - ref.on('value', a.onValue, a); - ref.on('value', b.onValue, b); - - ref.set('hello!'); - expect(a.gotValue).to.be.true; - expect(b.gotValue).to.be.true; - a.gotValue = b.gotValue = false; - - // unsubscribe b - ref.off('value', b.onValue, b); - - // Only a should get this event. - ref.set(42); - expect(a.gotValue).to.be.true; - expect(b.gotValue).to.be.false; - - ref.off('value', a.onValue, a); - }); - - it('Query.off respects provided context (for child events).', () => { - const ref = getRandomNode() as Reference; - - const a = new EventReceiver(), - b = new EventReceiver(); - - ref.on('child_added', a.onChildAdded, a); - ref.on('child_added', b.onChildAdded, b); - - ref.push('hello!'); - expect(a.gotChildAdded).to.be.true; - expect(b.gotChildAdded).to.be.true; - a.gotChildAdded = b.gotChildAdded = false; - - // unsubscribe b. - ref.off('child_added', b.onChildAdded, b); - - // Only a should get this event. - ref.push(42); - expect(a.gotChildAdded).to.be.true; - expect(b.gotChildAdded).to.be.false; - - ref.off('child_added', a.onChildAdded, a); - }); - - it('Query.off with no callback/context removes all callbacks, even with contexts (for value events).', () => { - const ref = getRandomNode() as Reference; - - const a = new EventReceiver(), - b = new EventReceiver(); - - ref.on('value', a.onValue, a); - ref.on('value', b.onValue, b); - - ref.set('hello!'); - expect(a.gotValue).to.be.true; - expect(b.gotValue).to.be.true; - a.gotValue = b.gotValue = false; - - // unsubscribe value events. - ref.off('value'); - - // Should get no events. - ref.set(42); - expect(a.gotValue).to.be.false; - expect(b.gotValue).to.be.false; - }); - - it('Query.off with no callback/context removes all callbacks, even with contexts (for child events).', () => { - const ref = getRandomNode() as Reference; - - const a = new EventReceiver(), - b = new EventReceiver(); - - ref.on('child_added', a.onChildAdded, a); - ref.on('child_added', b.onChildAdded, b); - - ref.push('hello!'); - expect(a.gotChildAdded).to.be.true; - expect(b.gotChildAdded).to.be.true; - a.gotChildAdded = b.gotChildAdded = false; - - // unsubscribe child_added. - ref.off('child_added'); - - // Should get no events. - ref.push(42); - expect(a.gotChildAdded).to.be.false; - expect(b.gotChildAdded).to.be.false; - }); - - it('Query.off with no event type / callback removes all callbacks (even those with contexts).', () => { - const ref = getRandomNode() as Reference; - - const a = new EventReceiver(), - b = new EventReceiver(); - - ref.on('value', a.onValue, a); - ref.on('value', b.onValue, b); - ref.on('child_added', a.onChildAdded, a); - ref.on('child_added', b.onChildAdded, b); - - ref.set(null); - ref.push('hello!'); - expect(a.gotChildAdded).to.be.true; - expect(a.gotValue).to.be.true; - expect(b.gotChildAdded).to.be.true; - expect(b.gotValue).to.be.true; - a.gotValue = b.gotValue = a.gotChildAdded = b.gotChildAdded = false; - - // unsubscribe all events. - ref.off(); - - // We should get no events. - ref.push(42); - expect(a.gotChildAdded).to.be.false; - expect(b.gotChildAdded).to.be.false; - expect(a.gotValue).to.be.false; - expect(b.gotValue).to.be.false; - }); - - it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are kept.', () => { - const node = getRandomNode() as Reference; - let snap = null; - node.limitToLast(5).on('value', s => { - snap = s; - }); - - node.set({}); - for (let i = 0; i < 10; i++) { - node.push().set(i); - } - - let expected = 5; - snap.forEach(child => { - expect(child.val()).to.equal(expected); - expected++; - }); - - expect(expected).to.equal(10); - }); - - it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are sent from server.', async () => { - const node = getRandomNode() as Reference; - await node.set({}); - - const pushPromises = []; - - for (let i = 0; i < 10; i++) { - const promise = node.push().set(i); - pushPromises.push(promise); - } - - await Promise.all(pushPromises); - - const ea = EventAccumulatorFactory.waitsForCount(1); - - node.limitToLast(5).on('value', snap => { - ea.addEvent(snap); - }); - - const [snap] = await ea.promise; - - let expected = 5; - - snap.forEach(child => { - expect(child.val()).to.equal(expected); - expected++; - }); - - expect(expected).to.equal(10); - }); - - it('Set various limits, ensure resulting data is correct.', async () => { - const node = getRandomNode() as Reference; - - await node.set({ a: 1, b: 2, c: 3 }); - - const tasks: TaskList = [ - [node.limitToLast(1), { c: 3 }], - [node.endAt().limitToLast(1), { c: 3 }], - [node.limitToLast(2), { b: 2, c: 3 }], - [node.limitToLast(3), { a: 1, b: 2, c: 3 }], - [node.limitToLast(4), { a: 1, b: 2, c: 3 }] - ]; - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Set various limits with a startAt name, ensure resulting data is correct.', async () => { - const node = getRandomNode() as Reference; - - await node.set({ a: 1, b: 2, c: 3 }); - - const tasks: TaskList = [ - [node.startAt().limitToFirst(1), { a: 1 }], - [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], - [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], - [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], - [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }], - [node.startAt(null, 'b').limitToLast(1), { c: 3 }], - [node.startAt(null, 'b').limitToLast(1), { c: 3 }], - [node.startAt(null, 'b').limitToLast(2), { b: 2, c: 3 }], - [node.startAt(null, 'b').limitToLast(3), { b: 2, c: 3 }], - [node.limitToFirst(1).startAt(null, 'c'), { c: 3 }], - [node.limitToFirst(1).startAt(null, 'b'), { b: 2 }], - [node.limitToFirst(2).startAt(null, 'b'), { b: 2, c: 3 }], - [node.limitToFirst(3).startAt(null, 'b'), { b: 2, c: 3 }], - [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], - [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], - [node.limitToLast(2).startAt(null, 'b'), { b: 2, c: 3 }], - [node.limitToLast(3).startAt(null, 'b'), { b: 2, c: 3 }] - ]; - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Set various limits with a endAt name, ensure resulting data is correct.', async () => { - const node = getRandomNode() as Reference; - - await node.set({ a: 1, b: 2, c: 3 }); - - const tasks: TaskList = [ - [node.endAt().limitToFirst(1), { a: 1 }], - [node.endAt(null, 'c').limitToFirst(1), { a: 1 }], - [node.endAt(null, 'b').limitToFirst(1), { a: 1 }], - [node.endAt(null, 'b').limitToFirst(2), { a: 1, b: 2 }], - [node.endAt(null, 'b').limitToFirst(3), { a: 1, b: 2 }], - [node.endAt(null, 'c').limitToLast(1), { c: 3 }], - [node.endAt(null, 'b').limitToLast(1), { b: 2 }], - [node.endAt(null, 'b').limitToLast(2), { a: 1, b: 2 }], - [node.endAt(null, 'b').limitToLast(3), { a: 1, b: 2 }], - [node.limitToFirst(1).endAt(null, 'c'), { a: 1 }], - [node.limitToFirst(1).endAt(null, 'b'), { a: 1 }], - [node.limitToFirst(2).endAt(null, 'b'), { a: 1, b: 2 }], - [node.limitToFirst(3).endAt(null, 'b'), { a: 1, b: 2 }], - [node.limitToLast(1).endAt(null, 'c'), { c: 3 }], - [node.limitToLast(1).endAt(null, 'b'), { b: 2 }], - [node.limitToLast(2).endAt(null, 'b'), { a: 1, b: 2 }], - [node.limitToLast(3).endAt(null, 'b'), { a: 1, b: 2 }] - ]; - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Set various limits with a startAt name, ensure resulting data is correct from the server.', async () => { - const node = getRandomNode() as Reference; - - await node.set({ a: 1, b: 2, c: 3 }); - - const tasks: TaskList = [ - [node.startAt().limitToFirst(1), { a: 1 }], - [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], - [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], - // NOTE: technically there is a race condition here. The limitToFirst(1) query will return a single value, which will be - // raised for the limitToFirst(2) callback as well, if it exists already. However, once the server gets the limitToFirst(2) - // query, it will send more data and the correct state will be returned. - [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], - [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }] - ]; - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Set limit, ensure child_removed and child_added events are fired when limit is hit.', () => { - const node = getRandomNode() as Reference; - let added = '', - removed = ''; - node.limitToLast(2).on('child_added', snap => { - added += snap.key + ' '; - }); - node.limitToLast(2).on('child_removed', snap => { - removed += snap.key + ' '; - }); - node.set({ a: 1, b: 2, c: 3 }); - - expect(added).to.equal('b c '); - expect(removed).to.equal(''); - - added = ''; - node.child('d').set(4); - expect(added).to.equal('d '); - expect(removed).to.equal('b '); - }); - - it('Set limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { - const node = getRandomNode() as Reference; - - await node.set({ a: 1, b: 2, c: 3 }); - - const ea = EventAccumulatorFactory.waitsForCount(2); - - let added = '', - removed = ''; - node.limitToLast(2).on('child_added', snap => { - added += snap.key + ' '; - ea.addEvent(); - }); - node.limitToLast(2).on('child_removed', snap => { - removed += snap.key + ' '; - }); - - await ea.promise; - - expect(added).to.equal('b c '); - expect(removed).to.equal(''); - - added = ''; - await node.child('d').set(4); - - expect(added).to.equal('d '); - expect(removed).to.equal('b '); - }); - - it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit.', () => { - const node = getRandomNode() as Reference; - - let added = '', - removed = ''; - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_added', snap => { - added += snap.key + ' '; - }); - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_removed', snap => { - removed += snap.key + ' '; - }); - node.set({ a: 1, b: 2, c: 3 }); - expect(added).to.equal('a b '); - expect(removed).to.equal(''); - - added = ''; - node.child('aa').set(4); - expect(added).to.equal('aa '); - expect(removed).to.equal('b '); - }); - - it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { - const node = getRandomNode() as Reference; - - await node.set({ a: 1, b: 2, c: 3 }); - const ea = EventAccumulatorFactory.waitsForCount(2); - - let added = '', - removed = ''; - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_added', snap => { - added += snap.key + ' '; - ea.addEvent(); - }); - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_removed', snap => { - removed += snap.key + ' '; - }); - - await ea.promise; - - expect(added).to.equal('a b '); - expect(removed).to.equal(''); - - added = ''; - await node.child('aa').set(4); - - expect(added).to.equal('aa '); - expect(removed).to.equal('b '); - }); - - it("Set start and limit, ensure child_added events are fired when limit isn't hit yet.", () => { - const node = getRandomNode() as Reference; - - let added = '', - removed = ''; - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_added', snap => { - added += snap.key + ' '; - }); - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_removed', snap => { - removed += snap.key + ' '; - }); - node.set({ c: 3 }); - expect(added).to.equal('c '); - expect(removed).to.equal(''); - - added = ''; - node.child('b').set(4); - expect(added).to.equal('b '); - expect(removed).to.equal(''); - }); - - it("Set start and limit, ensure child_added events are fired when limit isn't hit yet, using server data", async () => { - const node = getRandomNode() as Reference; - - await node.set({ c: 3 }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - - let added = ''; - let removed = ''; - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_added', snap => { - added += snap.key + ' '; - ea.addEvent(); - }); - node - .startAt(null, 'a') - .limitToFirst(2) - .on('child_removed', snap => { - removed += snap.key + ' '; - }); - - await ea.promise; - - expect(added).to.equal('c '); - expect(removed).to.equal(''); - - added = ''; - await node.child('b').set(4); - - expect(added).to.equal('b '); - expect(removed).to.equal(''); - }); - - it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item.', async () => { - const node = getRandomNode() as Reference; - const ea = EventAccumulatorFactory.waitsForCount(1); - - let added = '', - removed = ''; - node.limitToLast(2).on('child_added', snap => { - added += snap.key + ' '; - ea.addEvent(); - }); - node.limitToLast(2).on('child_removed', snap => { - removed += snap.key + ' '; - }); - node.set({ a: 1, b: 2, c: 3 }); - expect(added).to.equal('b c '); - expect(removed).to.equal(''); - - added = ''; - node.child('b').remove(); - expect(removed).to.equal('b '); - - await ea.promise; - }); - - it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item. Using server data', async () => { - const node = getRandomNode() as Reference; - - await node.set({ a: 1, b: 2, c: 3 }); - - let ea = EventAccumulatorFactory.waitsForCount(2); - let added = '', - removed = ''; - node.limitToLast(2).on('child_added', snap => { - added += snap.key + ' '; - ea.addEvent(); - }); - node.limitToLast(2).on('child_removed', snap => { - removed += snap.key + ' '; - }); - - await ea.promise; - - expect(added).to.equal('b c '); - expect(removed).to.equal(''); - - // We are going to wait for one more event before closing - ea = EventAccumulatorFactory.waitsForCount(1); - added = ''; - await node.child('b').remove(); - - expect(removed).to.equal('b '); - - await ea.promise; - expect(added).to.equal('a '); - }); - - it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more.', () => { - const node = getRandomNode() as Reference; - - let added = '', - removed = ''; - node.limitToLast(2).on('child_added', snap => { - added += snap.key + ' '; - }); - node.limitToLast(2).on('child_removed', snap => { - removed += snap.key + ' '; - }); - node.set({ b: 2, c: 3 }); - expect(added).to.equal('b c '); - expect(removed).to.equal(''); - - added = ''; - node.child('b').remove(); - expect(added).to.equal(''); - expect(removed).to.equal('b '); - node.child('c').remove(); - expect(removed).to.equal('b c '); - }); - - it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more. Using server data', async () => { - const node = getRandomNode() as Reference; - const ea = EventAccumulatorFactory.waitsForCount(2); - let added = ''; - let removed = ''; - await node.set({ b: 2, c: 3 }); - - node.limitToLast(2).on('child_added', snap => { - added += snap.key + ' '; - ea.addEvent(); - }); - node.limitToLast(2).on('child_removed', snap => { - removed += snap.key + ' '; - }); - - await ea.promise; - - expect(added).to.equal('b c '); - expect(removed).to.equal(''); - - added = ''; - - await node.child('b').remove(); - - expect(added).to.equal(''); - expect(removed).to.equal('b '); - }); - - it('Ensure startAt / endAt with priority works.', async () => { - const node = getRandomNode() as Reference; - - const tasks: TaskList = [ - [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], - [node.startAt('w').endAt('w'), { d: 4 }], - [node.startAt('a').endAt('c'), null] - ]; - - await node.set({ - a: { '.value': 1, '.priority': 'z' }, - b: { '.value': 2, '.priority': 'y' }, - c: { '.value': 3, '.priority': 'x' }, - d: { '.value': 4, '.priority': 'w' } - }); - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Ensure startAt / endAt with priority work with server data.', async () => { - const node = getRandomNode() as Reference; - - await node.set({ - a: { '.value': 1, '.priority': 'z' }, - b: { '.value': 2, '.priority': 'y' }, - c: { '.value': 3, '.priority': 'x' }, - d: { '.value': 4, '.priority': 'w' } - }); - - const tasks: TaskList = [ - [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], - [node.startAt('w').endAt('w'), { d: 4 }], - [node.startAt('a').endAt('c'), null] - ]; - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Ensure startAt / endAt with priority and name works.', async () => { - const node = getRandomNode() as Reference; - - await node.set({ - a: { '.value': 1, '.priority': 1 }, - b: { '.value': 2, '.priority': 1 }, - c: { '.value': 3, '.priority': 2 }, - d: { '.value': 4, '.priority': 2 } - }); - - const tasks: TaskList = [ - [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], - [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], - [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] - ]; - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Ensure startAt / endAt with priority and name work with server data', async () => { - const node = getRandomNode() as Reference; - - await node.set({ - a: { '.value': 1, '.priority': 1 }, - b: { '.value': 2, '.priority': 1 }, - c: { '.value': 3, '.priority': 2 }, - d: { '.value': 4, '.priority': 2 } - }); - const tasks: TaskList = [ - [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], - [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], - [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] - ]; - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Ensure startAt / endAt with priority and name works (2).', () => { - const node = getRandomNode() as Reference; - - const tasks: TaskList = [ - [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], - [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], - [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] - ]; - - node.set({ - c: { '.value': 3, '.priority': 1 }, - d: { '.value': 4, '.priority': 1 }, - a: { '.value': 1, '.priority': 2 }, - b: { '.value': 2, '.priority': 2 } - }); - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Ensure startAt / endAt with priority and name works (2). With server data', async () => { - const node = getRandomNode() as Reference; - - await node.set({ - c: { '.value': 3, '.priority': 1 }, - d: { '.value': 4, '.priority': 1 }, - a: { '.value': 1, '.priority': 2 }, - b: { '.value': 2, '.priority': 2 } - }); - - const tasks: TaskList = [ - [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], - [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], - [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] - ]; - - return Promise.all( - tasks.map(async task => { - const [query, val] = task; - const ea = EventAccumulatorFactory.waitsForCount(1); - query.on('value', snap => { - ea.addEvent(snap.val()); - }); - const [newVal] = await ea.promise; - expect(newVal).to.deep.equal(val); - }) - ); - }); - - it('Set a limit, add some nodes, ensure prevName works correctly.', () => { - const node = getRandomNode() as Reference; - - let added = ''; - node.limitToLast(2).on('child_added', (snap, prevName) => { - added += snap.key + ' ' + prevName + ', '; - }); - - node.child('a').set(1); - expect(added).to.equal('a null, '); + // it('Can create basic queries.', () => { + // const path = getRandomNode() as Reference; + + // path.limitToLast(10); + // path.startAt('199').limitToFirst(10); + // path.startAt('199', 'test').limitToFirst(10); + // path.endAt('199').limitToLast(1); + // path.startAt('50', 'test').endAt('100', 'tree'); + // path.startAt('4').endAt('10'); + // path.startAt().limitToFirst(10); + // path.endAt().limitToLast(10); + // path.orderByKey().startAt('foo'); + // path.orderByKey().endAt('foo'); + // path.orderByKey().equalTo('foo'); + // path.orderByChild('child'); + // path.orderByChild('child/deep/path'); + // path.orderByValue(); + // path.orderByPriority(); + // }); + + // it('Exposes database as read-only property', () => { + // const path = getRandomNode() as Reference; + // const child = path.child('child'); + + // const db = path.database; + // const dbChild = child.database; + + // expect(db).to.equal(dbChild); + // /** + // * TS throws an error here (as is expected) + // * casting to any to allow the code to run + // */ + // expect(() => ((path as any).database = "can't overwrite")).to.throw(); + // expect(path.database).to.equal(db); + // }); + + // it('Invalid queries throw', () => { + // const path = getRandomNode() as Reference; + + // /** + // * Because we are testing invalid queries, I am casting + // * to `any` to avoid the typechecking error. This can + // * occur when a user uses the SDK through a pure JS + // * client, rather than typescript + // */ + // expect(() => { + // (path as any).limitToLast(); + // }).to.throw(); + // expect(() => { + // (path as any).limitToLast('100'); + // }).to.throw(); + // expect(() => { + // (path as any).limitToLast({ x: 5 }); + // }).to.throw(); + // expect(() => { + // path.limitToLast(100).limitToLast(100); + // }).to.throw(); + // expect(() => { + // path.limitToLast(100).limitToFirst(100); + // }).to.throw(); + // expect(() => { + // path.limitToLast(100).limitToLast(100); + // }).to.throw(); + // expect(() => { + // path.limitToFirst(100).limitToLast(100); + // }).to.throw(); + // expect(() => { + // path.limitToFirst(100).limitToFirst(100); + // }).to.throw(); + // expect(() => { + // path.limitToFirst(100).limitToLast(100); + // }).to.throw(); + // expect(() => { + // path.limitToLast(100).limitToLast(100); + // }).to.throw(); + // expect(() => { + // path.limitToLast(100).limitToFirst(100); + // }).to.throw(); + // expect(() => { + // path.limitToLast(100).limitToLast(100); + // }).to.throw(); + // expect(() => { + // path.orderByPriority().orderByPriority(); + // }).to.throw(); + // expect(() => { + // path.orderByPriority().orderByKey(); + // }).to.throw(); + // expect(() => { + // path.orderByPriority().orderByChild('foo'); + // }).to.throw(); + // expect(() => { + // path.orderByPriority().startAt(true); + // }).to.throw(); + // expect(() => { + // path.orderByPriority().endAt(false); + // }).to.throw(); + // expect(() => { + // path.orderByPriority().equalTo(true); + // }).to.throw(); + // expect(() => { + // path.orderByKey().orderByPriority(); + // }).to.throw(); + // expect(() => { + // path.orderByKey().orderByKey(); + // }).to.throw(); + // expect(() => { + // path.orderByKey().orderByChild('foo'); + // }).to.throw(); + // expect(() => { + // path.orderByChild('foo').orderByPriority(); + // }).to.throw(); + // expect(() => { + // path.orderByChild('foo').orderByKey(); + // }).to.throw(); + // expect(() => { + // path.orderByChild('foo').orderByChild('foo'); + // }).to.throw(); + // expect(() => { + // (path as any).orderByChild('foo').startAt({ a: 1 }); + // }).to.throw(); + // expect(() => { + // (path as any).orderByChild('foo').endAt({ a: 1 }); + // }).to.throw(); + // expect(() => { + // (path as any).orderByChild('foo').equalTo({ a: 1 }); + // }).to.throw(); + // expect(() => { + // path.startAt('foo').startAt('foo'); + // }).to.throw(); + // expect(() => { + // path.startAt('foo').equalTo('foo'); + // }).to.throw(); + // expect(() => { + // path.endAt('foo').endAt('foo'); + // }).to.throw(); + // expect(() => { + // path.endAt('foo').equalTo('foo'); + // }).to.throw(); + // expect(() => { + // path.equalTo('foo').startAt('foo'); + // }).to.throw(); + // expect(() => { + // path.equalTo('foo').endAt('foo'); + // }).to.throw(); + // expect(() => { + // path.equalTo('foo').equalTo('foo'); + // }).to.throw(); + // expect(() => { + // path.orderByKey().startAt('foo', 'foo'); + // }).to.throw(); + // expect(() => { + // path.orderByKey().endAt('foo', 'foo'); + // }).to.throw(); + // expect(() => { + // path.orderByKey().equalTo('foo', 'foo'); + // }).to.throw(); + // expect(() => { + // path.orderByKey().startAt(1); + // }).to.throw(); + // expect(() => { + // path.orderByKey().startAt(true); + // }).to.throw(); + // expect(() => { + // path.orderByKey().startAt(null); + // }).to.throw(); + // expect(() => { + // path.orderByKey().endAt(1); + // }).to.throw(); + // expect(() => { + // path.orderByKey().endAt(true); + // }).to.throw(); + // expect(() => { + // path.orderByKey().endAt(null); + // }).to.throw(); + // expect(() => { + // path.orderByKey().equalTo(1); + // }).to.throw(); + // expect(() => { + // path.orderByKey().equalTo(true); + // }).to.throw(); + // expect(() => { + // path.orderByKey().equalTo(null); + // }).to.throw(); + // expect(() => { + // path.startAt('foo', 'foo').orderByKey(); + // }).to.throw(); + // expect(() => { + // path.endAt('foo', 'foo').orderByKey(); + // }).to.throw(); + // expect(() => { + // path.equalTo('foo', 'foo').orderByKey(); + // }).to.throw(); + // expect(() => { + // path.startAt(1).orderByKey(); + // }).to.throw(); + // expect(() => { + // path.startAt(true).orderByKey(); + // }).to.throw(); + // expect(() => { + // path.endAt(1).orderByKey(); + // }).to.throw(); + // expect(() => { + // path.endAt(true).orderByKey(); + // }).to.throw(); + // }); + + // it('can produce a valid ref', () => { + // const path = getRandomNode() as Reference; + + // const query = path.limitToLast(1); + // const ref = query.ref; + + // expect(ref.toString()).to.equal(path.toString()); + // }); + + // it('Passing invalidKeys to startAt / endAt throws.', () => { + // const f = getRandomNode() as Reference; + // const badKeys = [ + // '.test', + // 'test.', + // 'fo$o', + // '[what', + // 'ever]', + // 'ha#sh', + // '/thing', + // 'th/ing', + // 'thing/' + // ]; + // // Changed from basic array iteration to avoid closure issues accessing mutable state + // _.each(badKeys, badKey => { + // expect(() => { + // f.startAt(null, badKey); + // }).to.throw(); + // expect(() => { + // f.endAt(null, badKey); + // }).to.throw(); + // }); + // }); + + // it('Passing invalid paths to orderBy throws', () => { + // const ref = getRandomNode() as Reference; + // expect(() => { + // ref.orderByChild('$child/foo'); + // }).to.throw(); + // expect(() => { + // ref.orderByChild('$key'); + // }).to.throw(); + // expect(() => { + // ref.orderByChild('$priority'); + // }).to.throw(); + // }); + + // it('Query.queryIdentifier works.', () => { + // const path = getRandomNode() as Reference; + // const queryId = function (query) { + // return query.queryIdentifier(query); + // }; + + // expect(queryId(path)).to.equal('default'); + + // expect(queryId(path.startAt('pri', 'name'))).to.equal( + // '{"sn":"name","sp":"pri"}' + // ); + // expect(queryId(path.startAt('spri').endAt('epri'))).to.equal( + // '{"ep":"epri","sp":"spri"}' + // ); + // expect( + // queryId(path.startAt('spri', 'sname').endAt('epri', 'ename')) + // ).to.equal('{"en":"ename","ep":"epri","sn":"sname","sp":"spri"}'); + // expect(queryId(path.startAt('pri').limitToFirst(100))).to.equal( + // '{"l":100,"sp":"pri","vf":"l"}' + // ); + // expect(queryId(path.startAt('bar').orderByChild('foo'))).to.equal( + // '{"i":"foo","sp":"bar"}' + // ); + // }); + + // it('Passing invalid queries to isEqual throws', () => { + // const ref = getRandomNode() as Reference; + // expect(() => { + // (ref as any).isEqual(); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual(''); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual('foo'); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual({}); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual([]); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual(0); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual(1); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual(NaN); + // }).to.throw(); + // expect(() => { + // ref.isEqual(null); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual({ a: 1 }); + // }).to.throw(); + // expect(() => { + // (ref as any).isEqual(ref, 'extra'); + // }).to.throw(); + // }); + + // it('Query.isEqual works.', () => { + // const path = getRandomNode() as Reference; + // const rootRef = path.root; + // const childRef = rootRef.child('child'); + + // // Equivalent refs + // expect(path.isEqual(path), 'Query.isEqual - 1').to.be.true; + // expect(rootRef.isEqual(rootRef), 'Query.isEqual - 2').to.be.true; + // expect(rootRef.isEqual(childRef.parent), 'Query.isEqual - 3').to.be.true; + // expect(rootRef.child('child').isEqual(childRef), 'Query.isEqual - 4').to.be + // .true; + + // // Refs with different repos + // // NOTE: getFreshRepo() no longer takes a hostname, so this test needs to be reworked. + // // Same in info.test.ts. + // // var rootRefDifferentRepo = TESTS.getFreshRepo(TEST_ALT_NAMESPACE); + // // rootRefDifferentRepo.database.goOffline(); + + // // expect(rootRef.isEqual(rootRefDifferentRepo), 'Query.isEqual - 5').to.be.false; + // // expect(childRef.isEqual(rootRefDifferentRepo.child('child')), 'Query.isEqual - 6').to.be.false; + + // // Refs with different paths + // expect(rootRef.isEqual(childRef), 'Query.isEqual - 7').to.be.false; + // expect(childRef.isEqual(rootRef.child('otherChild')), 'Query.isEqual - 8') + // .to.be.false; + + // const childQueryLast25 = childRef.limitToLast(25); + // const childQueryOrderedByKey = childRef.orderByKey(); + // const childQueryOrderedByPriority = childRef.orderByPriority(); + // const childQueryOrderedByTimestamp = childRef.orderByChild('timestamp'); + // const childQueryStartAt1 = childQueryOrderedByTimestamp.startAt(1); + // const childQueryStartAt2 = childQueryOrderedByTimestamp.startAt(2); + // const childQueryEndAt2 = childQueryOrderedByTimestamp.endAt(2); + // const childQueryStartAt1EndAt2 = childQueryOrderedByTimestamp + // .startAt(1) + // .endAt(2); + + // // Equivalent queries + // expect(childRef.isEqual(childQueryLast25.ref), 'Query.isEqual - 9').to.be + // .true; + // expect( + // childQueryLast25.isEqual(childRef.limitToLast(25)), + // 'Query.isEqual - 10' + // ).to.be.true; + // expect( + // childQueryStartAt1EndAt2.isEqual( + // childQueryOrderedByTimestamp.startAt(1).endAt(2) + // ), + // 'Query.isEqual - 11' + // ).to.be.true; + + // // Non-equivalent queries + // expect(childQueryLast25.isEqual(childRef), 'Query.isEqual - 12').to.be + // .false; + // expect( + // childQueryLast25.isEqual(childQueryOrderedByKey), + // 'Query.isEqual - 13' + // ).to.be.false; + // expect( + // childQueryLast25.isEqual(childQueryOrderedByPriority), + // 'Query.isEqual - 14' + // ).to.be.false; + // expect( + // childQueryLast25.isEqual(childQueryOrderedByTimestamp), + // 'Query.isEqual - 15' + // ).to.be.false; + // expect( + // childQueryOrderedByKey.isEqual(childQueryOrderedByPriority), + // 'Query.isEqual - 16' + // ).to.be.false; + // expect( + // childQueryOrderedByKey.isEqual(childQueryOrderedByTimestamp), + // 'Query.isEqual - 17' + // ).to.be.false; + // expect(childQueryStartAt1.isEqual(childQueryStartAt2), 'Query.isEqual - 18') + // .to.be.false; + // expect( + // childQueryStartAt1.isEqual(childQueryStartAt1EndAt2), + // 'Query.isEqual - 19' + // ).to.be.false; + // expect(childQueryEndAt2.isEqual(childQueryStartAt2), 'Query.isEqual - 20') + // .to.be.false; + // expect( + // childQueryEndAt2.isEqual(childQueryStartAt1EndAt2), + // 'Query.isEqual - 21' + // ).to.be.false; + // }); + + // it('Query.off can be called on the default query.', () => { + // const path = getRandomNode() as Reference; + // let eventFired = false; + + // const callback = function () { + // eventFired = true; + // }; + // path.limitToLast(5).on('value', callback); + + // path.set({ a: 5, b: 6 }); + // expect(eventFired).to.be.true; + // eventFired = false; + + // path.off('value', callback); + // path.set({ a: 6, b: 5 }); + // expect(eventFired).to.be.false; + // }); + + // it('Query.off can be called on the specific query.', () => { + // const path = getRandomNode() as Reference; + // let eventFired = false; + + // const callback = function () { + // eventFired = true; + // }; + // path.limitToLast(5).on('value', callback); + + // path.set({ a: 5, b: 6 }); + // expect(eventFired).to.be.true; + // eventFired = false; + + // path.limitToLast(5).off('value', callback); + // path.set({ a: 6, b: 5 }); + // expect(eventFired).to.be.false; + // }); + + // it('Query.off can be called without a callback specified.', () => { + // const path = getRandomNode() as Reference; + // let eventFired = false; + + // const callback1 = function () { + // eventFired = true; + // }; + // const callback2 = function () { + // eventFired = true; + // }; + // path.on('value', callback1); + // path.limitToLast(5).on('value', callback2); + + // path.set({ a: 5, b: 6 }); + // expect(eventFired).to.be.true; + // eventFired = false; + + // path.off('value'); + // path.set({ a: 6, b: 5 }); + // expect(eventFired).to.be.false; + // }); + + // it('Query.off can be called without an event type or callback specified.', () => { + // const path = getRandomNode() as Reference; + // let eventFired = false; + + // const callback1 = function () { + // eventFired = true; + // }; + // const callback2 = function () { + // eventFired = true; + // }; + // path.on('value', callback1); + // path.limitToLast(5).on('value', callback2); + + // path.set({ a: 5, b: 6 }); + // expect(eventFired).to.be.true; + // eventFired = false; + + // path.off(); + // path.set({ a: 6, b: 5 }); + // expect(eventFired).to.be.false; + // }); + + // it('Query.off respects provided context (for value events).', () => { + // const ref = getRandomNode() as Reference; + + // const a = new EventReceiver(), + // b = new EventReceiver(); + + // ref.on('value', a.onValue, a); + // ref.on('value', b.onValue, b); + + // ref.set('hello!'); + // expect(a.gotValue).to.be.true; + // expect(b.gotValue).to.be.true; + // a.gotValue = b.gotValue = false; + + // // unsubscribe b + // ref.off('value', b.onValue, b); + + // // Only a should get this event. + // ref.set(42); + // expect(a.gotValue).to.be.true; + // expect(b.gotValue).to.be.false; + + // ref.off('value', a.onValue, a); + // }); + + // it('Query.off respects provided context (for child events).', () => { + // const ref = getRandomNode() as Reference; + + // const a = new EventReceiver(), + // b = new EventReceiver(); + + // ref.on('child_added', a.onChildAdded, a); + // ref.on('child_added', b.onChildAdded, b); + + // ref.push('hello!'); + // expect(a.gotChildAdded).to.be.true; + // expect(b.gotChildAdded).to.be.true; + // a.gotChildAdded = b.gotChildAdded = false; + + // // unsubscribe b. + // ref.off('child_added', b.onChildAdded, b); + + // // Only a should get this event. + // ref.push(42); + // expect(a.gotChildAdded).to.be.true; + // expect(b.gotChildAdded).to.be.false; + + // ref.off('child_added', a.onChildAdded, a); + // }); + + // it('Query.off with no callback/context removes all callbacks, even with contexts (for value events).', () => { + // const ref = getRandomNode() as Reference; + + // const a = new EventReceiver(), + // b = new EventReceiver(); + + // ref.on('value', a.onValue, a); + // ref.on('value', b.onValue, b); + + // ref.set('hello!'); + // expect(a.gotValue).to.be.true; + // expect(b.gotValue).to.be.true; + // a.gotValue = b.gotValue = false; + + // // unsubscribe value events. + // ref.off('value'); + + // // Should get no events. + // ref.set(42); + // expect(a.gotValue).to.be.false; + // expect(b.gotValue).to.be.false; + // }); - added = ''; - node.child('c').set(3); - expect(added).to.equal('c a, '); + // it('Query.off with no callback/context removes all callbacks, even with contexts (for child events).', () => { + // const ref = getRandomNode() as Reference; - added = ''; - node.child('b').set(2); - expect(added).to.equal('b null, '); + // const a = new EventReceiver(), + // b = new EventReceiver(); - added = ''; - node.child('d').set(4); - expect(added).to.equal('d c, '); - }); - - it('Set a limit, add some nodes, ensure prevName works correctly. With server data', async () => { - const node = getRandomNode() as Reference; - - let added = ''; - await node.child('a').set(1); - - const ea = EventAccumulatorFactory.waitsForCount(1); - node.limitToLast(2).on('child_added', (snap, prevName) => { - added += snap.key + ' ' + prevName + ', '; - ea.addEvent(); - }); - - await ea.promise; - - expect(added).to.equal('a null, '); + // ref.on('child_added', a.onChildAdded, a); + // ref.on('child_added', b.onChildAdded, b); - added = ''; - await node.child('c').set(3); + // ref.push('hello!'); + // expect(a.gotChildAdded).to.be.true; + // expect(b.gotChildAdded).to.be.true; + // a.gotChildAdded = b.gotChildAdded = false; - expect(added).to.equal('c a, '); + // // unsubscribe child_added. + // ref.off('child_added'); - added = ''; - await node.child('b').set(2); + // // Should get no events. + // ref.push(42); + // expect(a.gotChildAdded).to.be.false; + // expect(b.gotChildAdded).to.be.false; + // }); - expect(added).to.equal('b null, '); + // it('Query.off with no event type / callback removes all callbacks (even those with contexts).', () => { + // const ref = getRandomNode() as Reference; - added = ''; - await node.child('d').set(4); - - expect(added).to.equal('d c, '); - }); - - it('Set a limit, move some nodes, ensure prevName works correctly.', () => { + // const a = new EventReceiver(), + // b = new EventReceiver(); + + // ref.on('value', a.onValue, a); + // ref.on('value', b.onValue, b); + // ref.on('child_added', a.onChildAdded, a); + // ref.on('child_added', b.onChildAdded, b); + + // ref.set(null); + // ref.push('hello!'); + // expect(a.gotChildAdded).to.be.true; + // expect(a.gotValue).to.be.true; + // expect(b.gotChildAdded).to.be.true; + // expect(b.gotValue).to.be.true; + // a.gotValue = b.gotValue = a.gotChildAdded = b.gotChildAdded = false; + + // // unsubscribe all events. + // ref.off(); + + // // We should get no events. + // ref.push(42); + // expect(a.gotChildAdded).to.be.false; + // expect(b.gotChildAdded).to.be.false; + // expect(a.gotValue).to.be.false; + // expect(b.gotValue).to.be.false; + // }); + + // it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are kept.', () => { + // const node = getRandomNode() as Reference; + // let snap = null; + // node.limitToLast(5).on('value', s => { + // snap = s; + // }); + + // node.set({}); + // for (let i = 0; i < 10; i++) { + // node.push().set(i); + // } + + // let expected = 5; + // snap.forEach(child => { + // expect(child.val()).to.equal(expected); + // expected++; + // }); + + // expect(expected).to.equal(10); + // }); + + // it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are sent from server.', async () => { + // const node = getRandomNode() as Reference; + // await node.set({}); + + // const pushPromises = []; + + // for (let i = 0; i < 10; i++) { + // const promise = node.push().set(i); + // pushPromises.push(promise); + // } + + // await Promise.all(pushPromises); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + + // node.limitToLast(5).on('value', snap => { + // ea.addEvent(snap); + // }); + + // const [snap] = await ea.promise; + + // let expected = 5; + + // snap.forEach(child => { + // expect(child.val()).to.equal(expected); + // expected++; + // }); + + // expect(expected).to.equal(10); + // }); + + // it('Set various limits, ensure resulting data is correct.', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ a: 1, b: 2, c: 3 }); + + // const tasks: TaskList = [ + // [node.limitToLast(1), { c: 3 }], + // [node.endAt().limitToLast(1), { c: 3 }], + // [node.limitToLast(2), { b: 2, c: 3 }], + // [node.limitToLast(3), { a: 1, b: 2, c: 3 }], + // [node.limitToLast(4), { a: 1, b: 2, c: 3 }] + // ]; + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Set various limits with a startAt name, ensure resulting data is correct.', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ a: 1, b: 2, c: 3 }); + + // const tasks: TaskList = [ + // [node.startAt().limitToFirst(1), { a: 1 }], + // [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], + // [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], + // [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], + // [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }], + // [node.startAt(null, 'b').limitToLast(1), { c: 3 }], + // [node.startAt(null, 'b').limitToLast(1), { c: 3 }], + // [node.startAt(null, 'b').limitToLast(2), { b: 2, c: 3 }], + // [node.startAt(null, 'b').limitToLast(3), { b: 2, c: 3 }], + // [node.limitToFirst(1).startAt(null, 'c'), { c: 3 }], + // [node.limitToFirst(1).startAt(null, 'b'), { b: 2 }], + // [node.limitToFirst(2).startAt(null, 'b'), { b: 2, c: 3 }], + // [node.limitToFirst(3).startAt(null, 'b'), { b: 2, c: 3 }], + // [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], + // [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], + // [node.limitToLast(2).startAt(null, 'b'), { b: 2, c: 3 }], + // [node.limitToLast(3).startAt(null, 'b'), { b: 2, c: 3 }] + // ]; + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Set various limits with a endAt name, ensure resulting data is correct.', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ a: 1, b: 2, c: 3 }); + + // const tasks: TaskList = [ + // [node.endAt().limitToFirst(1), { a: 1 }], + // [node.endAt(null, 'c').limitToFirst(1), { a: 1 }], + // [node.endAt(null, 'b').limitToFirst(1), { a: 1 }], + // [node.endAt(null, 'b').limitToFirst(2), { a: 1, b: 2 }], + // [node.endAt(null, 'b').limitToFirst(3), { a: 1, b: 2 }], + // [node.endAt(null, 'c').limitToLast(1), { c: 3 }], + // [node.endAt(null, 'b').limitToLast(1), { b: 2 }], + // [node.endAt(null, 'b').limitToLast(2), { a: 1, b: 2 }], + // [node.endAt(null, 'b').limitToLast(3), { a: 1, b: 2 }], + // [node.limitToFirst(1).endAt(null, 'c'), { a: 1 }], + // [node.limitToFirst(1).endAt(null, 'b'), { a: 1 }], + // [node.limitToFirst(2).endAt(null, 'b'), { a: 1, b: 2 }], + // [node.limitToFirst(3).endAt(null, 'b'), { a: 1, b: 2 }], + // [node.limitToLast(1).endAt(null, 'c'), { c: 3 }], + // [node.limitToLast(1).endAt(null, 'b'), { b: 2 }], + // [node.limitToLast(2).endAt(null, 'b'), { a: 1, b: 2 }], + // [node.limitToLast(3).endAt(null, 'b'), { a: 1, b: 2 }] + // ]; + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Set various limits with a startAt name, ensure resulting data is correct from the server.', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ a: 1, b: 2, c: 3 }); + + // const tasks: TaskList = [ + // [node.startAt().limitToFirst(1), { a: 1 }], + // [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], + // [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], + // // NOTE: technically there is a race condition here. The limitToFirst(1) query will return a single value, which will be + // // raised for the limitToFirst(2) callback as well, if it exists already. However, once the server gets the limitToFirst(2) + // // query, it will send more data and the correct state will be returned. + // [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], + // [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }] + // ]; + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Set limit, ensure child_removed and child_added events are fired when limit is hit.', () => { + // const node = getRandomNode() as Reference; + // let added = '', + // removed = ''; + // node.limitToLast(2).on('child_added', snap => { + // added += snap.key + ' '; + // }); + // node.limitToLast(2).on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + // node.set({ a: 1, b: 2, c: 3 }); + + // expect(added).to.equal('b c '); + // expect(removed).to.equal(''); + + // added = ''; + // node.child('d').set(4); + // expect(added).to.equal('d '); + // expect(removed).to.equal('b '); + // }); + + // it('Set limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ a: 1, b: 2, c: 3 }); + + // const ea = EventAccumulatorFactory.waitsForCount(2); + + // let added = '', + // removed = ''; + // node.limitToLast(2).on('child_added', snap => { + // added += snap.key + ' '; + // ea.addEvent(); + // }); + // node.limitToLast(2).on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + + // await ea.promise; + + // expect(added).to.equal('b c '); + // expect(removed).to.equal(''); + + // added = ''; + // await node.child('d').set(4); + + // expect(added).to.equal('d '); + // expect(removed).to.equal('b '); + // }); + + // it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit.', () => { + // const node = getRandomNode() as Reference; + + // let added = '', + // removed = ''; + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_added', snap => { + // added += snap.key + ' '; + // }); + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + // node.set({ a: 1, b: 2, c: 3 }); + // expect(added).to.equal('a b '); + // expect(removed).to.equal(''); + + // added = ''; + // node.child('aa').set(4); + // expect(added).to.equal('aa '); + // expect(removed).to.equal('b '); + // }); + + // it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ a: 1, b: 2, c: 3 }); + // const ea = EventAccumulatorFactory.waitsForCount(2); + + // let added = '', + // removed = ''; + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_added', snap => { + // added += snap.key + ' '; + // ea.addEvent(); + // }); + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + + // await ea.promise; + + // expect(added).to.equal('a b '); + // expect(removed).to.equal(''); + + // added = ''; + // await node.child('aa').set(4); + + // expect(added).to.equal('aa '); + // expect(removed).to.equal('b '); + // }); + + // it("Set start and limit, ensure child_added events are fired when limit isn't hit yet.", () => { + // const node = getRandomNode() as Reference; + + // let added = '', + // removed = ''; + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_added', snap => { + // added += snap.key + ' '; + // }); + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + // node.set({ c: 3 }); + // expect(added).to.equal('c '); + // expect(removed).to.equal(''); + + // added = ''; + // node.child('b').set(4); + // expect(added).to.equal('b '); + // expect(removed).to.equal(''); + // }); + + // it("Set start and limit, ensure child_added events are fired when limit isn't hit yet, using server data", async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ c: 3 }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + + // let added = ''; + // let removed = ''; + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_added', snap => { + // added += snap.key + ' '; + // ea.addEvent(); + // }); + // node + // .startAt(null, 'a') + // .limitToFirst(2) + // .on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + + // await ea.promise; + + // expect(added).to.equal('c '); + // expect(removed).to.equal(''); + + // added = ''; + // await node.child('b').set(4); + + // expect(added).to.equal('b '); + // expect(removed).to.equal(''); + // }); + + // it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item.', async () => { + // const node = getRandomNode() as Reference; + // const ea = EventAccumulatorFactory.waitsForCount(1); + + // let added = '', + // removed = ''; + // node.limitToLast(2).on('child_added', snap => { + // added += snap.key + ' '; + // ea.addEvent(); + // }); + // node.limitToLast(2).on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + // node.set({ a: 1, b: 2, c: 3 }); + // expect(added).to.equal('b c '); + // expect(removed).to.equal(''); + + // added = ''; + // node.child('b').remove(); + // expect(removed).to.equal('b '); + + // await ea.promise; + // }); + + // it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item. Using server data', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ a: 1, b: 2, c: 3 }); + + // let ea = EventAccumulatorFactory.waitsForCount(2); + // let added = '', + // removed = ''; + // node.limitToLast(2).on('child_added', snap => { + // added += snap.key + ' '; + // ea.addEvent(); + // }); + // node.limitToLast(2).on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + + // await ea.promise; + + // expect(added).to.equal('b c '); + // expect(removed).to.equal(''); + + // // We are going to wait for one more event before closing + // ea = EventAccumulatorFactory.waitsForCount(1); + // added = ''; + // await node.child('b').remove(); + + // expect(removed).to.equal('b '); + + // await ea.promise; + // expect(added).to.equal('a '); + // }); + + // it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more.', () => { + // const node = getRandomNode() as Reference; + + // let added = '', + // removed = ''; + // node.limitToLast(2).on('child_added', snap => { + // added += snap.key + ' '; + // }); + // node.limitToLast(2).on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + // node.set({ b: 2, c: 3 }); + // expect(added).to.equal('b c '); + // expect(removed).to.equal(''); + + // added = ''; + // node.child('b').remove(); + // expect(added).to.equal(''); + // expect(removed).to.equal('b '); + // node.child('c').remove(); + // expect(removed).to.equal('b c '); + // }); + + // it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more. Using server data', async () => { + // const node = getRandomNode() as Reference; + // const ea = EventAccumulatorFactory.waitsForCount(2); + // let added = ''; + // let removed = ''; + // await node.set({ b: 2, c: 3 }); + + // node.limitToLast(2).on('child_added', snap => { + // added += snap.key + ' '; + // ea.addEvent(); + // }); + // node.limitToLast(2).on('child_removed', snap => { + // removed += snap.key + ' '; + // }); + + // await ea.promise; + + // expect(added).to.equal('b c '); + // expect(removed).to.equal(''); + + // added = ''; + + // await node.child('b').remove(); + + // expect(added).to.equal(''); + // expect(removed).to.equal('b '); + // }); + + // it('Ensure startAt / endAt with priority works.', async () => { + // const node = getRandomNode() as Reference; + + // const tasks: TaskList = [ + // [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], + // [node.startAt('w').endAt('w'), { d: 4 }], + // [node.startAt('a').endAt('c'), null] + // ]; + + // await node.set({ + // a: { '.value': 1, '.priority': 'z' }, + // b: { '.value': 2, '.priority': 'y' }, + // c: { '.value': 3, '.priority': 'x' }, + // d: { '.value': 4, '.priority': 'w' } + // }); + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Ensure startAt / endAt with priority work with server data.', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ + // a: { '.value': 1, '.priority': 'z' }, + // b: { '.value': 2, '.priority': 'y' }, + // c: { '.value': 3, '.priority': 'x' }, + // d: { '.value': 4, '.priority': 'w' } + // }); + + // const tasks: TaskList = [ + // [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], + // [node.startAt('w').endAt('w'), { d: 4 }], + // [node.startAt('a').endAt('c'), null] + // ]; + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Ensure startAt / endAt with priority and name works.', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ + // a: { '.value': 1, '.priority': 1 }, + // b: { '.value': 2, '.priority': 1 }, + // c: { '.value': 3, '.priority': 2 }, + // d: { '.value': 4, '.priority': 2 } + // }); + + // const tasks: TaskList = [ + // [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], + // [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], + // [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] + // ]; + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Ensure startAt / endAt with priority and name work with server data', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ + // a: { '.value': 1, '.priority': 1 }, + // b: { '.value': 2, '.priority': 1 }, + // c: { '.value': 3, '.priority': 2 }, + // d: { '.value': 4, '.priority': 2 } + // }); + // const tasks: TaskList = [ + // [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], + // [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], + // [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] + // ]; + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Ensure startAt / endAt with priority and name works (2).', () => { + // const node = getRandomNode() as Reference; + + // const tasks: TaskList = [ + // [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], + // [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], + // [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] + // ]; + + // node.set({ + // c: { '.value': 3, '.priority': 1 }, + // d: { '.value': 4, '.priority': 1 }, + // a: { '.value': 1, '.priority': 2 }, + // b: { '.value': 2, '.priority': 2 } + // }); + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Ensure startAt / endAt with priority and name works (2). With server data', async () => { + // const node = getRandomNode() as Reference; + + // await node.set({ + // c: { '.value': 3, '.priority': 1 }, + // d: { '.value': 4, '.priority': 1 }, + // a: { '.value': 1, '.priority': 2 }, + // b: { '.value': 2, '.priority': 2 } + // }); + + // const tasks: TaskList = [ + // [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], + // [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], + // [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] + // ]; + + // return Promise.all( + // tasks.map(async task => { + // const [query, val] = task; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // query.on('value', snap => { + // ea.addEvent(snap.val()); + // }); + // const [newVal] = await ea.promise; + // expect(newVal).to.deep.equal(val); + // }) + // ); + // }); + + // it('Set a limit, add some nodes, ensure prevName works correctly.', () => { + // const node = getRandomNode() as Reference; + + // let added = ''; + // node.limitToLast(2).on('child_added', (snap, prevName) => { + // added += snap.key + ' ' + prevName + ', '; + // }); + + // node.child('a').set(1); + // expect(added).to.equal('a null, '); + + // added = ''; + // node.child('c').set(3); + // expect(added).to.equal('c a, '); + + // added = ''; + // node.child('b').set(2); + // expect(added).to.equal('b null, '); + + // added = ''; + // node.child('d').set(4); + // expect(added).to.equal('d c, '); + // }); + + // it('Set a limit, add some nodes, ensure prevName works correctly. With server data', async () => { + // const node = getRandomNode() as Reference; + + // let added = ''; + // await node.child('a').set(1); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // node.limitToLast(2).on('child_added', (snap, prevName) => { + // added += snap.key + ' ' + prevName + ', '; + // ea.addEvent(); + // }); + + // await ea.promise; + + // expect(added).to.equal('a null, '); + + // added = ''; + // await node.child('c').set(3); + + // expect(added).to.equal('c a, '); + + // added = ''; + // await node.child('b').set(2); + + // expect(added).to.equal('b null, '); + + // added = ''; + // await node.child('d').set(4); + + // expect(added).to.equal('d c, '); + // }); + + // it('Set a limit, move some nodes, ensure prevName works correctly.', () => { + // const node = getRandomNode() as Reference; + // let moved = ''; + // node.limitToLast(2).on('child_moved', (snap, prevName) => { + // moved += snap.key + ' ' + prevName + ', '; + // }); + + // node.child('a').setWithPriority('a', 10); + // node.child('b').setWithPriority('b', 20); + // node.child('c').setWithPriority('c', 30); + // node.child('d').setWithPriority('d', 40); + + // node.child('c').setPriority(50); + // expect(moved).to.equal('c d, '); + + // moved = ''; + // node.child('c').setPriority(35); + // expect(moved).to.equal('c null, '); + + // moved = ''; + // node.child('b').setPriority(33); + // expect(moved).to.equal(''); + // }); + + // it('Set a limit, move some nodes, ensure prevName works correctly, with server data', async () => { + // const node = getRandomNode() as Reference; + // let moved = ''; + + // node.child('a').setWithPriority('a', 10); + // node.child('b').setWithPriority('b', 20); + // node.child('c').setWithPriority('c', 30); + // await node.child('d').setWithPriority('d', 40); + + // node.limitToLast(2).on('child_moved', async (snap, prevName) => { + // moved += snap.key + ' ' + prevName + ', '; + // }); + // // Need to load the data before the set so we'll see the move + // await node.limitToLast(2).once('value'); + + // await node.child('c').setPriority(50); + + // expect(moved).to.equal('c d, '); + + // moved = ''; + // await node.child('c').setPriority(35); + + // expect(moved).to.equal('c null, '); + // moved = ''; + // await node.child('b').setPriority(33); + + // expect(moved).to.equal(''); + // }); + + // it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly.', () => { + // const node = getRandomNode() as Reference; + + // let moved = ''; + // node.limitToLast(2).on('child_moved', (snap, prevName) => { + // moved += snap.key + ' ' + prevName + ', '; + // }); + + // node.child('a').setWithPriority('a', 1); + // node.child('b').setWithPriority('b', 2); + // node.child('c').setWithPriority('c', 3); + // node.child('d').setWithPriority('d', 4); + + // node.child('c').setPriority(10); + // expect(moved).to.equal('c d, '); + // }); + + // it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly. With server data', async () => { + // const node = getRandomNode() as Reference; + // let moved = ''; + + // node.child('a').setWithPriority('a', 1); + // node.child('b').setWithPriority('b', 2); + // node.child('c').setWithPriority('c', 3); + // await node.child('d').setWithPriority('d', 4); + + // node.limitToLast(2).on('child_moved', (snap, prevName) => { + // moved += snap.key + ' ' + prevName + ', '; + // }); + // // Need to load the data before the set so we'll see the move + // await node.limitToLast(2).once('value'); + + // await node.child('c').setPriority(10); + + // expect(moved).to.equal('c d, '); + // }); + + // it('Set a limit, add a bunch of nodes, ensure local events are correct.', () => { + // const node = getRandomNode() as Reference; + // node.set({}); + // let eventHistory = ''; + + // node.limitToLast(2).on('child_added', snap => { + // eventHistory = eventHistory + snap.val() + ' added, '; + // }); + // node.limitToLast(2).on('child_removed', snap => { + // eventHistory = eventHistory + snap.val() + ' removed, '; + // }); + + // for (let i = 0; i < 5; i++) { + // const n = node.push(); + // n.set(i); + // } + + // expect(eventHistory).to.equal( + // '0 added, 1 added, 0 removed, 2 added, 1 removed, 3 added, 2 removed, 4 added, ' + // ); + // }); + + // it('Set a limit, add a bunch of nodes, ensure remote events are correct.', async () => { + // const nodePair = getRandomNode(2); + // const writeNode = nodePair[0]; + // const readNode = nodePair[1]; + // const ea = new EventAccumulator(() => { + // try { + // expect(eventHistory).to.equal('3 added, 4 added, '); + // return true; + // } catch (err) { + // return false; + // } + // }); + // let eventHistory = ''; + + // readNode.limitToLast(2).on('child_added', snap => { + // eventHistory = eventHistory + snap.val() + ' added, '; + // ea.addEvent(); + // }); + // readNode.limitToLast(2).on('child_removed', snap => { + // eventHistory = eventHistory.replace(snap.val() + ' added, ', ''); + // /** + // * This test expects this code NOT to fire, so by adding this + // * I trigger the resolve early if it happens to fire and fail + // * the expect at the end + // */ + // ea.addEvent(); + // }); + + // const promises = []; + // for (let i = 0; i < 5; i++) { + // const n = writeNode.push(); + // n.set(i); + // } + + // await ea.promise; + // }); + + // it('Ensure on() returns callback function.', () => { + // const node = getRandomNode() as Reference; + // const callback = function () { }; + // const ret = node.on('value', callback); + // expect(ret).to.equal(callback); + // }); + + // it("Limit on unsynced node fires 'value'.", done => { + // const f = getRandomNode() as Reference; + // f.limitToLast(1).on('value', () => { + // done(); + // }); + // }); + + // it('Filtering to only null priorities works.', async () => { + // const f = getRandomNode() as Reference; + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // f.root.child('.info/connected').on('value', snap => { + // ea.addEvent(); + // }); + + // await ea.promise; + + // f.set({ + // a: { '.priority': null, '.value': 0 }, + // b: { '.priority': null, '.value': 1 }, + // c: { '.priority': '2', '.value': 2 }, + // d: { '.priority': 3, '.value': 3 }, + // e: { '.priority': 'hi', '.value': 4 } + // }); + + // const snapAcc = EventAccumulatorFactory.waitsForCount(1); + // f.startAt(null) + // .endAt(null) + // .on('value', snap => { + // snapAcc.addEvent(snap.val()); + // }); + + // const [val] = await snapAcc.promise; + // expect(val).to.deep.equal({ a: 0, b: 1 }); + // }); + + // it('null priorities included in endAt(2).', async () => { + // const f = getRandomNode() as Reference; + + // f.set({ + // a: { '.priority': null, '.value': 0 }, + // b: { '.priority': null, '.value': 1 }, + // c: { '.priority': 2, '.value': 2 }, + // d: { '.priority': 3, '.value': 3 }, + // e: { '.priority': 'hi', '.value': 4 } + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // f.endAt(2).on('value', snap => { + // ea.addEvent(snap.val()); + // }); + + // const [val] = await ea.promise; + // expect(val).to.deep.equal({ a: 0, b: 1, c: 2 }); + // }); + + // it('null priorities not included in startAt(2).', async () => { + // const f = getRandomNode() as Reference; + + // f.set({ + // a: { '.priority': null, '.value': 0 }, + // b: { '.priority': null, '.value': 1 }, + // c: { '.priority': 2, '.value': 2 }, + // d: { '.priority': 3, '.value': 3 }, + // e: { '.priority': 'hi', '.value': 4 } + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + + // f.startAt(2).on('value', snap => { + // ea.addEvent(snap.val()); + // }); + + // const [val] = await ea.promise; + // expect(val).to.deep.equal({ c: 2, d: 3, e: 4 }); + // }); + + // function dumpListens(node: Query) { + // const listens: Map> = (node.repo + // .persistentConnection_ as any).listens; + // const nodePath = getPath(node); + // const listenPaths = []; + // for (const path of listens.keys()) { + // if (path.substring(0, nodePath.length) === nodePath) { + // listenPaths.push(path); + // } + // } + + // listenPaths.sort(); + // const dumpPieces = []; + // for (let i = 0; i < listenPaths.length; i++) { + // const queryIds = []; + // for (const queryId of listens.get(listenPaths[i]).keys()) { + // queryIds.push(queryId); + // } + // queryIds.sort(); + // if (queryIds.length > 0) { + // dumpPieces.push( + // listenPaths[i].substring(nodePath.length) + ':' + queryIds.join(',') + // ); + // } + // } + + // return dumpPieces.join(';'); + // } + + // it('Dedupe listens: listen on parent.', () => { + // const node = getRandomNode() as Reference; + // expect(dumpListens(node)).to.equal(''); + + // const aOn = node.child('a').on('value', () => { }); + // expect(dumpListens(node)).to.equal('/a:default'); + + // const rootOn = node.on('value', () => { }); + // expect(dumpListens(node)).to.equal(':default'); + + // node.off('value', rootOn); + // expect(dumpListens(node)).to.equal('/a:default'); + + // node.child('a').off('value', aOn); + // expect(dumpListens(node)).to.equal(''); + // }); + + // it('Dedupe listens: listen on grandchild.', () => { + // const node = getRandomNode() as Reference; + + // const rootOn = node.on('value', () => { }); + // expect(dumpListens(node)).to.equal(':default'); + + // const aaOn = node.child('a/aa').on('value', () => { }); + // expect(dumpListens(node)).to.equal(':default'); + + // node.off('value', rootOn); + // node.child('a/aa').off('value', aaOn); + // expect(dumpListens(node)).to.equal(''); + // }); + + // it('Dedupe listens: listen on grandparent of two children.', () => { + // const node = getRandomNode() as Reference; + // expect(dumpListens(node)).to.equal(''); + + // const aaOn = node.child('a/aa').on('value', () => { }); + // expect(dumpListens(node)).to.equal('/a/aa:default'); + + // const bbOn = node.child('a/bb').on('value', () => { }); + // expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); + + // const rootOn = node.on('value', () => { }); + // expect(dumpListens(node)).to.equal(':default'); + + // node.off('value', rootOn); + // expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); + + // node.child('a/aa').off('value', aaOn); + // expect(dumpListens(node)).to.equal('/a/bb:default'); + + // node.child('a/bb').off('value', bbOn); + // expect(dumpListens(node)).to.equal(''); + // }); + + // it('Dedupe queried listens: multiple queried listens; no dupes', () => { + // const node = getRandomNode() as Reference; + // expect(dumpListens(node)).to.equal(''); + + // const aLim1On = node + // .child('a') + // .limitToLast(1) + // .on('value', () => { }); + // expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); + + // const rootLim1On = node.limitToLast(1).on('value', () => { }); + // expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); + + // const aLim5On = node + // .child('a') + // .limitToLast(5) + // .on('value', () => { }); + // expect(dumpListens(node)).to.equal( + // ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' + // ); + + // node.limitToLast(1).off('value', rootLim1On); + // expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}'); + + // node.child('a').limitToLast(1).off('value', aLim1On); + // node.child('a').limitToLast(5).off('value', aLim5On); + // expect(dumpListens(node)).to.equal(''); + // }); + + // it('Dedupe queried listens: listen on parent of queried children.', () => { + // const node = getRandomNode() as Reference; + + // const aLim1On = node + // .child('a') + // .limitToLast(1) + // .on('value', () => { }); + // expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); + + // const bLim1On = node + // .child('b') + // .limitToLast(1) + // .on('value', () => { }); + // expect(dumpListens(node)).to.equal( + // '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' + // ); + + // const rootOn = node.on('value', () => { }); + // expect(dumpListens(node)).to.equal(':default'); + + // // remove in slightly random order. + // node.child('a').limitToLast(1).off('value', aLim1On); + // expect(dumpListens(node)).to.equal(':default'); + + // node.off('value', rootOn); + // expect(dumpListens(node)).to.equal('/b:{"l":1,"vf":"r"}'); + + // node.child('b').limitToLast(1).off('value', bLim1On); + // expect(dumpListens(node)).to.equal(''); + // }); + + // it('Limit with mix of null and non-null priorities.', () => { + // const node = getRandomNode() as Reference; + + // const children = []; + // node.limitToLast(5).on('child_added', childSnap => { + // children.push(childSnap.key); + // }); + + // node.set({ + // Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, + // Mike: { '.priority': 500, score: 500, name: 'Mike' }, + // Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, + // James: { '.priority': 7, score: 7, name: 'James' }, + // Sally: { '.priority': -7, score: -7, name: 'Sally' }, + // Fred: { score: 0, name: 'Fred' } + // }); + + // expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); + // }); + + // it('Limit with mix of null and non-null priorities using server data', async () => { + // const node = getRandomNode() as Reference; + + // const children = []; + // await node.set({ + // Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, + // Mike: { '.priority': 500, score: 500, name: 'Mike' }, + // Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, + // James: { '.priority': 7, score: 7, name: 'James' }, + // Sally: { '.priority': -7, score: -7, name: 'Sally' }, + // Fred: { score: 0, name: 'Fred' } + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(5); + // node.limitToLast(5).on('child_added', childSnap => { + // children.push(childSnap.key); + // ea.addEvent(); + // }); + + // await ea.promise; + + // expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); + // }); + + // it('.on() with a context works.', () => { + // const ref = getRandomNode() as Reference; + + // const ListenerDoohickey = function () { + // this.snap = null; + // }; + // ListenerDoohickey.prototype.onEvent = function (snap) { + // this.snap = snap; + // }; + + // const l = new ListenerDoohickey(); + // ref.on('value', l.onEvent, l); + + // ref.set('test'); + // expect(l.snap.val()).to.equal('test'); + + // ref.off('value', l.onEvent, l); + + // // Ensure we don't get any more events. + // ref.set('blah'); + // expect(l.snap.val()).to.equal('test'); + // }); + + // it('.once() with a context works.', () => { + // const ref = getRandomNode() as Reference; + + // const ListenerDoohickey = function () { + // this.snap = null; + // }; + // ListenerDoohickey.prototype.onEvent = function (snap) { + // this.snap = snap; + // }; + + // const l = new ListenerDoohickey(); + // ref.once('value', l.onEvent, l); + + // ref.set('test'); + // expect(l.snap.val()).to.equal('test'); + + // // Shouldn't get any more events. + // ref.set('blah'); + // expect(l.snap.val()).to.equal('test'); + // }); + + // it('handles an update that deletes the entire window in a query', () => { + // const ref = getRandomNode() as Reference; + + // const snaps = []; + // ref.limitToLast(2).on('value', snap => { + // snaps.push(snap.val()); + // }); + + // ref.set({ + // a: { '.value': 1, '.priority': 1 }, + // b: { '.value': 2, '.priority': 2 }, + // c: { '.value': 3, '.priority': 3 } + // }); + // ref.update({ + // b: null, + // c: null + // }); + + // expect(snaps.length).to.equal(2); + // expect(snaps[0]).to.deep.equal({ b: 2, c: 3 }); + // // The original set is still outstanding (synchronous API), so we have a full cache to re-window against + // expect(snaps[1]).to.deep.equal({ a: 1 }); + // }); + + // it('handles an out-of-view query on a child', () => { + // const ref = getRandomNode() as Reference; + + // let parent = null; + // ref.limitToLast(1).on('value', snap => { + // parent = snap.val(); + // }); + + // let child = null; + // ref.child('a').on('value', snap => { + // child = snap.val(); + // }); + + // ref.set({ a: 1, b: 2 }); + // expect(parent).to.deep.equal({ b: 2 }); + // expect(child).to.equal(1); + + // ref.update({ c: 3 }); + // expect(parent).to.deep.equal({ c: 3 }); + // expect(child).to.equal(1); + // }); + + // it('handles a child query going out of view of the parent', () => { + // const ref = getRandomNode() as Reference; + + // let parent = null; + // ref.limitToLast(1).on('value', snap => { + // parent = snap.val(); + // }); + + // let child = null; + // ref.child('a').on('value', snap => { + // child = snap.val(); + // }); + + // ref.set({ a: 1 }); + // expect(parent).to.deep.equal({ a: 1 }); + // expect(child).to.equal(1); + // ref.child('b').set(2); + // expect(parent).to.deep.equal({ b: 2 }); + // expect(child).to.equal(1); + // ref.child('b').remove(); + // expect(parent).to.deep.equal({ a: 1 }); + // expect(child).to.equal(1); + // }); + + // it('handles diverging views', () => { + // const ref = getRandomNode() as Reference; + + // let c = null; + // ref + // .limitToLast(1) + // .endAt(null, 'c') + // .on('value', snap => { + // c = snap.val(); + // }); + + // let d = null; + // ref + // .limitToLast(1) + // .endAt(null, 'd') + // .on('value', snap => { + // d = snap.val(); + // }); + + // ref.set({ a: 1, b: 2, c: 3 }); + // expect(c).to.deep.equal({ c: 3 }); + // expect(d).to.deep.equal({ c: 3 }); + // ref.child('d').set(4); + // expect(c).to.deep.equal({ c: 3 }); + // expect(d).to.deep.equal({ d: 4 }); + // }); + + // it('handles removing a queried element', async () => { + // const ref = getRandomNode() as Reference; + + // let val; + // const ea = EventAccumulatorFactory.waitsForCount(1); + // ref.limitToLast(1).on('child_added', snap => { + // val = snap.val(); + // ea.addEvent(); + // }); + + // ref.set({ a: 1, b: 2 }); + // expect(val).to.equal(2); + + // ref.child('b').remove(); + + // await ea.promise; + + // expect(val).to.equal(1); + // }); + + // it('.startAt().limitToFirst(1) works.', done => { + // const ref = getRandomNode() as Reference; + // ref.set({ a: 1, b: 2 }); + + // let val; + // ref + // .startAt() + // .limitToFirst(1) + // .on('child_added', snap => { + // val = snap.val(); + // if (val === 1) { + // done(); + // } + // }); + // }); + + // it('.startAt().limitToFirst(1) and then remove first child (case 1664).', async () => { + // const ref = getRandomNode() as Reference; + // ref.set({ a: 1, b: 2 }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // let val; + // ref + // .startAt() + // .limitToFirst(1) + // .on('child_added', snap => { + // val = snap.val(); + // ea.addEvent(); + // }); + + // await ea.promise; + // expect(val).to.equal(1); + + // ea.reset(); + // ref.child('a').remove(); + + // await ea.promise; + // expect(val).to.equal(2); + // }); + + // it('.startAt() with two arguments works properly (case 1169).', done => { + // const ref = getRandomNode() as Reference; + // const data = { + // Walker: { + // name: 'Walker', + // score: 20, + // '.priority': 20 + // }, + // Michael: { + // name: 'Michael', + // score: 100, + // '.priority': 100 + // } + // }; + // ref.set(data, () => { + // ref + // .startAt(20, 'Walker') + // .limitToFirst(2) + // .on('value', s => { + // const childNames = []; + // s.forEach(node => { + // childNames.push(node.key); + // }); + // expect(childNames).to.deep.equal(['Walker', 'Michael']); + // done(); + // }); + // }); + // }); + + // it('handles multiple queries on the same node', async () => { + // const ref = getRandomNode() as Reference; + + // await ref.set({ + // a: 1, + // b: 2, + // c: 3, + // d: 4, + // e: 5, + // f: 6 + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + + // let firstListen = false; + // ref.limitToLast(2).on('value', snap => { + // // This shouldn't get called twice, we don't update the values here + // expect(firstListen).to.be.false; + // firstListen = true; + // ea.addEvent(); + // }); + + // await ea.promise; + + // // now do consecutive once calls + // await ref.limitToLast(1).once('value'); + // const snap = await ref.limitToLast(1).once('value'); + // const val = snap.val(); + // expect(val).to.deep.equal({ f: 6 }); + // }); + + // it('handles once called on a node with a default listener', async () => { + // const ref = getRandomNode() as Reference; + + // await ref.set({ + // a: 1, + // b: 2, + // c: 3, + // d: 4, + // e: 5, + // f: 6 + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // // Setup value listener + // ref.on('value', snap => { + // ea.addEvent(); + // }); + + // await ea.promise; + + // // now do the once call + // const snap = await ref.limitToLast(1).once('child_added'); + // const val = snap.val(); + // expect(val).to.equal(6); + // }); + + // it('handles once called on a node with a default listener and non-complete limit', async () => { + // const ref = getRandomNode() as Reference; + + // await ref.set({ + // a: 1, + // b: 2, + // c: 3 + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // // Setup value listener + // ref.on('value', snap => { + // ea.addEvent(); + // }); + + // await ea.promise; + + // // now do the once call + // const snap = await ref.limitToLast(5).once('value'); + // const val = snap.val(); + // expect(val).to.deep.equal({ a: 1, b: 2, c: 3 }); + // }); + + // it('Remote remove triggers events.', done => { + // const refPair = getRandomNode(2), + // writeRef = refPair[0], + // readRef = refPair[1]; + + // writeRef.set({ a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }, () => { + // // Wait to get the initial data, and then remove 'c' remotely and wait for new data. + // let count = 0; + // readRef.limitToLast(5).on('value', s => { + // count++; + // if (count === 1) { + // expect(s.val()).to.deep.equal({ + // a: 'a', + // b: 'b', + // c: 'c', + // d: 'd', + // e: 'e' + // }); + // writeRef.child('c').remove(); + // } else { + // expect(count).to.equal(2); + // expect(s.val()).to.deep.equal({ a: 'a', b: 'b', d: 'd', e: 'e' }); + // done(); + // } + // }); + // }); + // }); + + // it(".endAt(null, 'f').limitToLast(5) returns the right set of children.", done => { + // const ref = getRandomNode() as Reference; + // ref.set( + // { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e', f: 'f', g: 'g', h: 'h' }, + // () => { + // ref + // .endAt(null, 'f') + // .limitToLast(5) + // .on('value', s => { + // expect(s.val()).to.deep.equal({ + // b: 'b', + // c: 'c', + // d: 'd', + // e: 'e', + // f: 'f' + // }); + // done(); + // }); + // } + // ); + // }); + + // it('complex update() at query root raises correct value event', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let readerLoaded = false; + // writer + // .child('foo') + // .set({ a: 1, b: 2, c: 3, d: 4, e: 5 }, (error, dummy) => { + // reader + // .child('foo') + // .startAt() + // .limitToFirst(4) + // .on('value', snapshot => { + // const val = snapshot.val(); + // if (!readerLoaded) { + // readerLoaded = true; + // expect(val).to.deep.equal({ a: 1, b: 2, c: 3, d: 4 }); + + // // This update causes the following to happen: + // // 1. An in-view child is set to null (b) + // // 2. An in-view child has its value changed (c) + // // 3. An in-view child is changed and bumped out-of-view (d) + // // We expect to get null values for b and d, along with the new children and updated value for c + // writer + // .child('foo') + // .update({ b: null, c: 'a', cc: 'new', cd: 'new2', d: 'gone' }); + // } else { + // done(); + // expect(val).to.deep.equal({ + // a: 1, + // c: 'a', + // cc: 'new', + // cd: 'new2' + // }); + // } + // }); + // }); + // }); + + // it('update() at query root raises correct value event', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let readerLoaded = false; + // writer + // .child('foo') + // .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { + // reader + // .child('foo') + // .limitToLast(10) + // .on('value', snapshot => { + // const val = snapshot.val(); + // if (!readerLoaded) { + // readerLoaded = true; + // expect(val.bar).to.equal('a'); + // expect(val.baz).to.equal('b'); + // expect(val.bam).to.equal('c'); + // writer.child('foo').update({ bar: 'd', bam: null, bat: 'e' }); + // } else { + // expect(val.bar).to.equal('d'); + // expect(val.baz).to.equal('b'); + // expect(val.bat).to.equal('e'); + // expect(val.bam).to.equal(undefined); + // done(); + // } + // }); + // }); + // }); + + it('get() at empty root returns null', async () => { const node = getRandomNode() as Reference; - let moved = ''; - node.limitToLast(2).on('child_moved', (snap, prevName) => { - moved += snap.key + ' ' + prevName + ', '; - }); - - node.child('a').setWithPriority('a', 10); - node.child('b').setWithPriority('b', 20); - node.child('c').setWithPriority('c', 30); - node.child('d').setWithPriority('d', 40); - - node.child('c').setPriority(50); - expect(moved).to.equal('c d, '); - - moved = ''; - node.child('c').setPriority(35); - expect(moved).to.equal('c null, '); - - moved = ''; - node.child('b').setPriority(33); - expect(moved).to.equal(''); + const snapshot = await node.get(); + const val = snapshot.val(); + expect(val).to.be.null; }); - it('Set a limit, move some nodes, ensure prevName works correctly, with server data', async () => { - const node = getRandomNode() as Reference; - let moved = ''; - - node.child('a').setWithPriority('a', 10); - node.child('b').setWithPriority('b', 20); - node.child('c').setWithPriority('c', 30); - await node.child('d').setWithPriority('d', 40); - - node.limitToLast(2).on('child_moved', async (snap, prevName) => { - moved += snap.key + ' ' + prevName + ', '; - }); - // Need to load the data before the set so we'll see the move - await node.limitToLast(2).once('value'); - - await node.child('c').setPriority(50); - - expect(moved).to.equal('c d, '); - - moved = ''; - await node.child('c').setPriority(35); - - expect(moved).to.equal('c null, '); - moved = ''; - await node.child('b').setPriority(33); - - expect(moved).to.equal(''); + it('get() at non-empty root returns correct value', async () => { + const nodes = getRandomNode(2) as Reference; + const reader = nodes[0]; + const writer = nodes[1]; + await writer.set({ foo: 'a', bar: 'b' }); + const snapshot = await reader.get(); + const val = snapshot.val(); + expect(val['foo']).to.equal('a'); + expect(val['bar']).to.equal('b'); }); - it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly.', () => { - const node = getRandomNode() as Reference; - - let moved = ''; - node.limitToLast(2).on('child_moved', (snap, prevName) => { - moved += snap.key + ' ' + prevName + ', '; - }); - - node.child('a').setWithPriority('a', 1); - node.child('b').setWithPriority('b', 2); - node.child('c').setWithPriority('c', 3); - node.child('d').setWithPriority('d', 4); - - node.child('c').setPriority(10); - expect(moved).to.equal('c d, '); - }); - - it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly. With server data', async () => { - const node = getRandomNode() as Reference; - let moved = ''; - - node.child('a').setWithPriority('a', 1); - node.child('b').setWithPriority('b', 2); - node.child('c').setWithPriority('c', 3); - await node.child('d').setWithPriority('d', 4); - - node.limitToLast(2).on('child_moved', (snap, prevName) => { - moved += snap.key + ' ' + prevName + ', '; - }); - // Need to load the data before the set so we'll see the move - await node.limitToLast(2).once('value'); - - await node.child('c').setPriority(10); - - expect(moved).to.equal('c d, '); - }); - - it('Set a limit, add a bunch of nodes, ensure local events are correct.', () => { - const node = getRandomNode() as Reference; - node.set({}); - let eventHistory = ''; - - node.limitToLast(2).on('child_added', snap => { - eventHistory = eventHistory + snap.val() + ' added, '; - }); - node.limitToLast(2).on('child_removed', snap => { - eventHistory = eventHistory + snap.val() + ' removed, '; - }); - - for (let i = 0; i < 5; i++) { - const n = node.push(); - n.set(i); - } - - expect(eventHistory).to.equal( - '0 added, 1 added, 0 removed, 2 added, 1 removed, 3 added, 2 removed, 4 added, ' - ); - }); - - it('Set a limit, add a bunch of nodes, ensure remote events are correct.', async () => { - const nodePair = getRandomNode(2); - const writeNode = nodePair[0]; - const readNode = nodePair[1]; - const ea = new EventAccumulator(() => { - try { - expect(eventHistory).to.equal('3 added, 4 added, '); - return true; - } catch (err) { - return false; - } - }); - let eventHistory = ''; - - readNode.limitToLast(2).on('child_added', snap => { - eventHistory = eventHistory + snap.val() + ' added, '; - ea.addEvent(); - }); - readNode.limitToLast(2).on('child_removed', snap => { - eventHistory = eventHistory.replace(snap.val() + ' added, ', ''); - /** - * This test expects this code NOT to fire, so by adding this - * I trigger the resolve early if it happens to fire and fail - * the expect at the end - */ - ea.addEvent(); - }); - - const promises = []; - for (let i = 0; i < 5; i++) { - const n = writeNode.push(); - n.set(i); - } - - await ea.promise; - }); - - it('Ensure on() returns callback function.', () => { - const node = getRandomNode() as Reference; - const callback = function () {}; - const ret = node.on('value', callback); - expect(ret).to.equal(callback); - }); - - it("Limit on unsynced node fires 'value'.", done => { - const f = getRandomNode() as Reference; - f.limitToLast(1).on('value', () => { - done(); - }); - }); - - it('Filtering to only null priorities works.', async () => { - const f = getRandomNode() as Reference; - - const ea = EventAccumulatorFactory.waitsForCount(1); - f.root.child('.info/connected').on('value', snap => { - ea.addEvent(); - }); - - await ea.promise; - - f.set({ - a: { '.priority': null, '.value': 0 }, - b: { '.priority': null, '.value': 1 }, - c: { '.priority': '2', '.value': 2 }, - d: { '.priority': 3, '.value': 3 }, - e: { '.priority': 'hi', '.value': 4 } - }); - - const snapAcc = EventAccumulatorFactory.waitsForCount(1); - f.startAt(null) - .endAt(null) - .on('value', snap => { - snapAcc.addEvent(snap.val()); - }); - - const [val] = await snapAcc.promise; - expect(val).to.deep.equal({ a: 0, b: 1 }); - }); - - it('null priorities included in endAt(2).', async () => { - const f = getRandomNode() as Reference; - - f.set({ - a: { '.priority': null, '.value': 0 }, - b: { '.priority': null, '.value': 1 }, - c: { '.priority': 2, '.value': 2 }, - d: { '.priority': 3, '.value': 3 }, - e: { '.priority': 'hi', '.value': 4 } - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - f.endAt(2).on('value', snap => { - ea.addEvent(snap.val()); - }); - - const [val] = await ea.promise; - expect(val).to.deep.equal({ a: 0, b: 1, c: 2 }); - }); - - it('null priorities not included in startAt(2).', async () => { - const f = getRandomNode() as Reference; - - f.set({ - a: { '.priority': null, '.value': 0 }, - b: { '.priority': null, '.value': 1 }, - c: { '.priority': 2, '.value': 2 }, - d: { '.priority': 3, '.value': 3 }, - e: { '.priority': 'hi', '.value': 4 } - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - - f.startAt(2).on('value', snap => { - ea.addEvent(snap.val()); - }); - - const [val] = await ea.promise; - expect(val).to.deep.equal({ c: 2, d: 3, e: 4 }); - }); - - function dumpListens(node: Query) { - const listens: Map> = (node.repo - .persistentConnection_ as any).listens; - const nodePath = getPath(node); - const listenPaths = []; - for (const path of listens.keys()) { - if (path.substring(0, nodePath.length) === nodePath) { - listenPaths.push(path); - } - } - - listenPaths.sort(); - const dumpPieces = []; - for (let i = 0; i < listenPaths.length; i++) { - const queryIds = []; - for (const queryId of listens.get(listenPaths[i]).keys()) { - queryIds.push(queryId); - } - queryIds.sort(); - if (queryIds.length > 0) { - dumpPieces.push( - listenPaths[i].substring(nodePath.length) + ':' + queryIds.join(',') - ); - } - } - - return dumpPieces.join(';'); - } - - it('Dedupe listens: listen on parent.', () => { - const node = getRandomNode() as Reference; - expect(dumpListens(node)).to.equal(''); - - const aOn = node.child('a').on('value', () => {}); - expect(dumpListens(node)).to.equal('/a:default'); - - const rootOn = node.on('value', () => {}); - expect(dumpListens(node)).to.equal(':default'); - - node.off('value', rootOn); - expect(dumpListens(node)).to.equal('/a:default'); - - node.child('a').off('value', aOn); - expect(dumpListens(node)).to.equal(''); - }); - - it('Dedupe listens: listen on grandchild.', () => { - const node = getRandomNode() as Reference; - - const rootOn = node.on('value', () => {}); - expect(dumpListens(node)).to.equal(':default'); - - const aaOn = node.child('a/aa').on('value', () => {}); - expect(dumpListens(node)).to.equal(':default'); - - node.off('value', rootOn); - node.child('a/aa').off('value', aaOn); - expect(dumpListens(node)).to.equal(''); - }); - - it('Dedupe listens: listen on grandparent of two children.', () => { - const node = getRandomNode() as Reference; - expect(dumpListens(node)).to.equal(''); - - const aaOn = node.child('a/aa').on('value', () => {}); - expect(dumpListens(node)).to.equal('/a/aa:default'); - - const bbOn = node.child('a/bb').on('value', () => {}); - expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - - const rootOn = node.on('value', () => {}); - expect(dumpListens(node)).to.equal(':default'); - - node.off('value', rootOn); - expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - - node.child('a/aa').off('value', aaOn); - expect(dumpListens(node)).to.equal('/a/bb:default'); - - node.child('a/bb').off('value', bbOn); - expect(dumpListens(node)).to.equal(''); - }); - - it('Dedupe queried listens: multiple queried listens; no dupes', () => { - const node = getRandomNode() as Reference; - expect(dumpListens(node)).to.equal(''); - - const aLim1On = node - .child('a') - .limitToLast(1) - .on('value', () => {}); - expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - - const rootLim1On = node.limitToLast(1).on('value', () => {}); - expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); - - const aLim5On = node - .child('a') - .limitToLast(5) - .on('value', () => {}); - expect(dumpListens(node)).to.equal( - ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' - ); - - node.limitToLast(1).off('value', rootLim1On); - expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}'); - - node.child('a').limitToLast(1).off('value', aLim1On); - node.child('a').limitToLast(5).off('value', aLim5On); - expect(dumpListens(node)).to.equal(''); - }); - - it('Dedupe queried listens: listen on parent of queried children.', () => { - const node = getRandomNode() as Reference; - - const aLim1On = node - .child('a') - .limitToLast(1) - .on('value', () => {}); - expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - - const bLim1On = node - .child('b') - .limitToLast(1) - .on('value', () => {}); - expect(dumpListens(node)).to.equal( - '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' - ); - - const rootOn = node.on('value', () => {}); - expect(dumpListens(node)).to.equal(':default'); - - // remove in slightly random order. - node.child('a').limitToLast(1).off('value', aLim1On); - expect(dumpListens(node)).to.equal(':default'); - - node.off('value', rootOn); - expect(dumpListens(node)).to.equal('/b:{"l":1,"vf":"r"}'); - - node.child('b').limitToLast(1).off('value', bLim1On); - expect(dumpListens(node)).to.equal(''); - }); - - it('Limit with mix of null and non-null priorities.', () => { - const node = getRandomNode() as Reference; - - const children = []; - node.limitToLast(5).on('child_added', childSnap => { - children.push(childSnap.key); - }); - - node.set({ - Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, - Mike: { '.priority': 500, score: 500, name: 'Mike' }, - Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, - James: { '.priority': 7, score: 7, name: 'James' }, - Sally: { '.priority': -7, score: -7, name: 'Sally' }, - Fred: { score: 0, name: 'Fred' } - }); - - expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); - }); - - it('Limit with mix of null and non-null priorities using server data', async () => { - const node = getRandomNode() as Reference; - - const children = []; - await node.set({ - Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, - Mike: { '.priority': 500, score: 500, name: 'Mike' }, - Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, - James: { '.priority': 7, score: 7, name: 'James' }, - Sally: { '.priority': -7, score: -7, name: 'Sally' }, - Fred: { score: 0, name: 'Fred' } - }); - - const ea = EventAccumulatorFactory.waitsForCount(5); - node.limitToLast(5).on('child_added', childSnap => { - children.push(childSnap.key); - ea.addEvent(); - }); - - await ea.promise; - - expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); - }); - - it('.on() with a context works.', () => { - const ref = getRandomNode() as Reference; - - const ListenerDoohickey = function () { - this.snap = null; - }; - ListenerDoohickey.prototype.onEvent = function (snap) { - this.snap = snap; - }; - - const l = new ListenerDoohickey(); - ref.on('value', l.onEvent, l); - - ref.set('test'); - expect(l.snap.val()).to.equal('test'); - - ref.off('value', l.onEvent, l); - - // Ensure we don't get any more events. - ref.set('blah'); - expect(l.snap.val()).to.equal('test'); - }); - - it('.once() with a context works.', () => { - const ref = getRandomNode() as Reference; - - const ListenerDoohickey = function () { - this.snap = null; - }; - ListenerDoohickey.prototype.onEvent = function (snap) { - this.snap = snap; - }; - - const l = new ListenerDoohickey(); - ref.once('value', l.onEvent, l); - - ref.set('test'); - expect(l.snap.val()).to.equal('test'); - - // Shouldn't get any more events. - ref.set('blah'); - expect(l.snap.val()).to.equal('test'); - }); - - it('handles an update that deletes the entire window in a query', () => { - const ref = getRandomNode() as Reference; - - const snaps = []; - ref.limitToLast(2).on('value', snap => { - snaps.push(snap.val()); - }); - - ref.set({ - a: { '.value': 1, '.priority': 1 }, - b: { '.value': 2, '.priority': 2 }, - c: { '.value': 3, '.priority': 3 } - }); - ref.update({ - b: null, - c: null - }); - - expect(snaps.length).to.equal(2); - expect(snaps[0]).to.deep.equal({ b: 2, c: 3 }); - // The original set is still outstanding (synchronous API), so we have a full cache to re-window against - expect(snaps[1]).to.deep.equal({ a: 1 }); - }); - - it('handles an out-of-view query on a child', () => { - const ref = getRandomNode() as Reference; - - let parent = null; - ref.limitToLast(1).on('value', snap => { - parent = snap.val(); - }); - - let child = null; - ref.child('a').on('value', snap => { - child = snap.val(); - }); - - ref.set({ a: 1, b: 2 }); - expect(parent).to.deep.equal({ b: 2 }); - expect(child).to.equal(1); - - ref.update({ c: 3 }); - expect(parent).to.deep.equal({ c: 3 }); - expect(child).to.equal(1); - }); - - it('handles a child query going out of view of the parent', () => { - const ref = getRandomNode() as Reference; - - let parent = null; - ref.limitToLast(1).on('value', snap => { - parent = snap.val(); - }); - - let child = null; - ref.child('a').on('value', snap => { - child = snap.val(); - }); - - ref.set({ a: 1 }); - expect(parent).to.deep.equal({ a: 1 }); - expect(child).to.equal(1); - ref.child('b').set(2); - expect(parent).to.deep.equal({ b: 2 }); - expect(child).to.equal(1); - ref.child('b').remove(); - expect(parent).to.deep.equal({ a: 1 }); - expect(child).to.equal(1); - }); - - it('handles diverging views', () => { - const ref = getRandomNode() as Reference; - - let c = null; - ref - .limitToLast(1) - .endAt(null, 'c') - .on('value', snap => { - c = snap.val(); - }); - - let d = null; - ref - .limitToLast(1) - .endAt(null, 'd') - .on('value', snap => { - d = snap.val(); - }); - - ref.set({ a: 1, b: 2, c: 3 }); - expect(c).to.deep.equal({ c: 3 }); - expect(d).to.deep.equal({ c: 3 }); - ref.child('d').set(4); - expect(c).to.deep.equal({ c: 3 }); - expect(d).to.deep.equal({ d: 4 }); - }); - - it('handles removing a queried element', async () => { - const ref = getRandomNode() as Reference; - - let val; - const ea = EventAccumulatorFactory.waitsForCount(1); - ref.limitToLast(1).on('child_added', snap => { - val = snap.val(); - ea.addEvent(); - }); - - ref.set({ a: 1, b: 2 }); - expect(val).to.equal(2); - - ref.child('b').remove(); - - await ea.promise; - - expect(val).to.equal(1); - }); - - it('.startAt().limitToFirst(1) works.', done => { - const ref = getRandomNode() as Reference; - ref.set({ a: 1, b: 2 }); - - let val; - ref - .startAt() - .limitToFirst(1) - .on('child_added', snap => { - val = snap.val(); - if (val === 1) { - done(); - } - }); - }); - - it('.startAt().limitToFirst(1) and then remove first child (case 1664).', async () => { - const ref = getRandomNode() as Reference; - ref.set({ a: 1, b: 2 }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - let val; - ref - .startAt() - .limitToFirst(1) - .on('child_added', snap => { - val = snap.val(); - ea.addEvent(); - }); - - await ea.promise; - expect(val).to.equal(1); - - ea.reset(); - ref.child('a').remove(); - - await ea.promise; - expect(val).to.equal(2); - }); - - it('.startAt() with two arguments works properly (case 1169).', done => { - const ref = getRandomNode() as Reference; - const data = { - Walker: { - name: 'Walker', - score: 20, - '.priority': 20 - }, - Michael: { - name: 'Michael', - score: 100, - '.priority': 100 - } - }; - ref.set(data, () => { - ref - .startAt(20, 'Walker') - .limitToFirst(2) - .on('value', s => { - const childNames = []; - s.forEach(node => { - childNames.push(node.key); - }); - expect(childNames).to.deep.equal(['Walker', 'Michael']); - done(); - }); - }); - }); - - it('handles multiple queries on the same node', async () => { - const ref = getRandomNode() as Reference; - - await ref.set({ - a: 1, - b: 2, - c: 3, - d: 4, - e: 5, - f: 6 - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - - let firstListen = false; - ref.limitToLast(2).on('value', snap => { - // This shouldn't get called twice, we don't update the values here - expect(firstListen).to.be.false; - firstListen = true; - ea.addEvent(); - }); - - await ea.promise; - - // now do consecutive once calls - await ref.limitToLast(1).once('value'); - const snap = await ref.limitToLast(1).once('value'); - const val = snap.val(); - expect(val).to.deep.equal({ f: 6 }); - }); - - it('handles once called on a node with a default listener', async () => { - const ref = getRandomNode() as Reference; - - await ref.set({ - a: 1, - b: 2, - c: 3, - d: 4, - e: 5, - f: 6 - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - // Setup value listener - ref.on('value', snap => { - ea.addEvent(); - }); - - await ea.promise; - - // now do the once call - const snap = await ref.limitToLast(1).once('child_added'); - const val = snap.val(); - expect(val).to.equal(6); - }); - - it('handles once called on a node with a default listener and non-complete limit', async () => { - const ref = getRandomNode() as Reference; - - await ref.set({ - a: 1, - b: 2, - c: 3 - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - // Setup value listener - ref.on('value', snap => { - ea.addEvent(); - }); - - await ea.promise; - - // now do the once call - const snap = await ref.limitToLast(5).once('value'); - const val = snap.val(); - expect(val).to.deep.equal({ a: 1, b: 2, c: 3 }); - }); - - it('Remote remove triggers events.', done => { - const refPair = getRandomNode(2), - writeRef = refPair[0], - readRef = refPair[1]; - - writeRef.set({ a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }, () => { - // Wait to get the initial data, and then remove 'c' remotely and wait for new data. - let count = 0; - readRef.limitToLast(5).on('value', s => { - count++; - if (count === 1) { - expect(s.val()).to.deep.equal({ - a: 'a', - b: 'b', - c: 'c', - d: 'd', - e: 'e' - }); - writeRef.child('c').remove(); - } else { - expect(count).to.equal(2); - expect(s.val()).to.deep.equal({ a: 'a', b: 'b', d: 'd', e: 'e' }); - done(); - } - }); - }); - }); - - it(".endAt(null, 'f').limitToLast(5) returns the right set of children.", done => { - const ref = getRandomNode() as Reference; - ref.set( - { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e', f: 'f', g: 'g', h: 'h' }, - () => { - ref - .endAt(null, 'f') - .limitToLast(5) - .on('value', s => { - expect(s.val()).to.deep.equal({ - b: 'b', - c: 'c', - d: 'd', - e: 'e', - f: 'f' - }); - done(); - }); - } - ); - }); - - it('complex update() at query root raises correct value event', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let readerLoaded = false; - writer - .child('foo') - .set({ a: 1, b: 2, c: 3, d: 4, e: 5 }, (error, dummy) => { - reader - .child('foo') - .startAt() - .limitToFirst(4) - .on('value', snapshot => { - const val = snapshot.val(); - if (!readerLoaded) { - readerLoaded = true; - expect(val).to.deep.equal({ a: 1, b: 2, c: 3, d: 4 }); - - // This update causes the following to happen: - // 1. An in-view child is set to null (b) - // 2. An in-view child has its value changed (c) - // 3. An in-view child is changed and bumped out-of-view (d) - // We expect to get null values for b and d, along with the new children and updated value for c - writer - .child('foo') - .update({ b: null, c: 'a', cc: 'new', cd: 'new2', d: 'gone' }); - } else { - done(); - expect(val).to.deep.equal({ - a: 1, - c: 'a', - cc: 'new', - cd: 'new2' - }); - } - }); - }); - }); - - it('update() at query root raises correct value event', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let readerLoaded = false; - writer - .child('foo') - .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { - reader - .child('foo') - .limitToLast(10) - .on('value', snapshot => { - const val = snapshot.val(); - if (!readerLoaded) { - readerLoaded = true; - expect(val.bar).to.equal('a'); - expect(val.baz).to.equal('b'); - expect(val.bam).to.equal('c'); - writer.child('foo').update({ bar: 'd', bam: null, bat: 'e' }); - } else { - expect(val.bar).to.equal('d'); - expect(val.baz).to.equal('b'); - expect(val.bat).to.equal('e'); - expect(val.bam).to.equal(undefined); - done(); - } - }); - }); - }); - - it('get() at empty root returns null', done => { - const node = getRandomNode() as Reference; - node.get().then(snapshot => { - const val = snapshot.val(); - expect(val).to.be.null; - done(); - }); - }); - - it('get() at non-empty root returns correct value', done => { - const nodes = getRandomNode(2) as Reference; - const reader = nodes[0]; - const writer = nodes[1]; - writer.set({ foo: 'a', bar: 'b' }, (err, dummy) => { - reader.get().then(snapshot => { - const val = snapshot.val(); - expect(val['foo']).to.equal('a'); - expect(val['bar']).to.equal('b'); - done(); - }); - }); - }); - - it('get() for removed node returns correct value', done => { + it('get() for removed node returns correct value', async () => { const nodes = getRandomNode(2) as Reference; const reader = nodes[0]; const writer = nodes[1]; - writer.set({ foo: 'a', bar: 'b' }, (err, dummy) => { - reader.get().then(snapshot => { - const val = snapshot.val(); - expect(val['foo']).to.equal('a'); - expect(val['bar']).to.equal('b'); - writer.remove().then(err => { - reader.get().then(snapshot => { - const val = snapshot.val(); - expect(val).to.be.null; - done(); - }); - }); - }); - }); - }); - - it('set() at query root raises correct value event', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let readerLoaded = false; - writer - .child('foo') - .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { - reader - .child('foo') - .limitToLast(10) - .on('value', snapshot => { - const val = snapshot.val(); - if (!readerLoaded) { - readerLoaded = true; - expect(val.bar).to.equal('a'); - expect(val.baz).to.equal('b'); - expect(val.bam).to.equal('c'); - writer.child('foo').set({ bar: 'd', baz: 'b', bat: 'e' }); - } else { - expect(val.bar).to.equal('d'); - expect(val.baz).to.equal('b'); - expect(val.bat).to.equal('e'); - expect(val.bam).to.equal(undefined); - done(); - } - }); - }); - }); - - it('listen for child_added events with limit and different types fires properly', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let numEventsReceived = 0, - gotA = false, - gotB = false, - gotC = false; - writer.child('a').set(1, (error, dummy) => { - writer.child('b').set('b', (error, dummy) => { - writer - .child('c') - .set({ deep: 'path', of: { stuff: true } }, (error, dummy) => { - reader.limitToLast(3).on('child_added', snap => { - const val = snap.val(); - switch (snap.key) { - case 'a': - gotA = true; - expect(val).to.equal(1); - break; - case 'b': - gotB = true; - expect(val).to.equal('b'); - break; - case 'c': - gotC = true; - expect(val.deep).to.equal('path'); - expect(val.of.stuff).to.be.true; - break; - default: - expect(false).to.be.true; - } - numEventsReceived += 1; - expect(numEventsReceived).to.be.lessThan(4); - if (gotA && gotB && gotC) { - done(); - } - }); - }); - }); - }); - }); - - it('listen for child_changed events with limit and different types fires properly', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let numEventsReceived = 0, - gotA = false, - gotB = false, - gotC = false, - readerLoaded = false; - writer.set( - { a: 'something', b: "we'll", c: 'overwrite ' }, - (error, dummy) => { - reader.limitToLast(3).on('value', snapshot => { - if (!readerLoaded) { - readerLoaded = true; - // Set up listener for upcoming change events - reader.limitToLast(3).on('child_changed', snap => { - const val = snap.val(); - switch (snap.key) { - case 'a': - gotA = true; - expect(val).to.equal(1); - break; - case 'b': - gotB = true; - expect(val).to.equal('b'); - break; - case 'c': - gotC = true; - expect(val.deep).to.equal('path'); - expect(val.of.stuff).to.be.true; - break; - default: - expect(false).to.be.true; - } - numEventsReceived += 1; - expect(numEventsReceived).to.be.lessThan(4); - if (gotA && gotB && gotC) { - done(); - } - }); - - // Begin changing every key - writer.child('a').set(1); - writer.child('b').set('b'); - writer.child('c').set({ deep: 'path', of: { stuff: true } }); - } - }); - } - ); - }); - - it('listen for child_remove events with limit and different types fires properly', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let numEventsReceived = 0, - gotA = false, - gotB = false, - gotC = false, - readerLoaded = false; - writer.set( - { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, - (error, dummy) => { - reader.limitToLast(3).on('value', snapshot => { - if (!readerLoaded) { - readerLoaded = true; - - // Set up listener for upcoming change events - reader.limitToLast(3).on('child_removed', snap => { - const val = snap.val(); - switch (snap.key) { - case 'a': - gotA = true; - expect(val).to.equal(1); - break; - case 'b': - gotB = true; - expect(val).to.equal('b'); - break; - case 'c': - gotC = true; - expect(val.deep).to.equal('path'); - expect(val.of.stuff).to.be.true; - break; - default: - expect(false).to.be.true; - } - numEventsReceived += 1; - expect(numEventsReceived).to.be.lessThan(4); - if (gotA && gotB && gotC) { - done(); - } - }); - - // Begin removing every key - writer.child('a').remove(); - writer.child('b').remove(); - writer.child('c').remove(); - } - }); - } - ); - }); - - it('listen for child_remove events when parent removed', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let numEventsReceived = 0, - gotA = false, - gotB = false, - gotC = false, - readerLoaded = false; - writer.set( - { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, - (error, dummy) => { - reader.limitToLast(3).on('value', snapshot => { - if (!readerLoaded) { - readerLoaded = true; - - // Set up listener for upcoming change events - reader.limitToLast(3).on('child_removed', snap => { - const val = snap.val(); - switch (snap.key) { - case 'a': - gotA = true; - expect(val).to.equal(1); - break; - case 'b': - gotB = true; - expect(val).to.equal('b'); - break; - case 'c': - gotC = true; - expect(val.deep).to.equal('path'); - expect(val.of.stuff).to.be.true; - break; - default: - expect(false).to.be.true; - } - numEventsReceived += 1; - expect(numEventsReceived).to.be.lessThan(4); - if (gotA && gotB && gotC) { - done(); - } - }); - - // Remove the query parent - writer.remove(); - } - }); - } - ); - }); - - it('listen for child_remove events when parent set to scalar', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let numEventsReceived = 0, - gotA = false, - gotB = false, - gotC = false, - readerLoaded = false; - writer.set( - { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, - (error, dummy) => { - reader.limitToLast(3).on('value', snapshot => { - if (!readerLoaded) { - readerLoaded = true; - - // Set up listener for upcoming change events - reader.limitToLast(3).on('child_removed', snap => { - const val = snap.val(); - switch (snap.key) { - case 'a': - gotA = true; - expect(val).to.equal(1); - break; - case 'b': - gotB = true; - expect(val).to.equal('b'); - break; - case 'c': - gotC = true; - expect(val.deep).to.equal('path'); - expect(val.of.stuff).to.be.true; - break; - default: - expect(false).to.be.true; - } - numEventsReceived += 1; - expect(numEventsReceived).to.be.lessThan(4); - if (gotA && gotB && gotC) { - done(); - } - }); - - // Set the parent to a scalar - writer.set('scalar'); - } - }); - } - ); - }); - - it('Queries behave wrong after .once().', async () => { - const refPair = getRandomNode(2), - writeRef = refPair[0], - readRef = refPair[1]; - let startAtCount, defaultCount; - - await writeRef.set({ a: 1, b: 2, c: 3, d: 4 }); - - await readRef.once('value'); - - const ea = EventAccumulatorFactory.waitsForCount(5); - startAtCount = 0; - readRef.startAt(null, 'd').on('child_added', () => { - startAtCount++; - ea.addEvent(); - }); - expect(startAtCount).to.equal(0); - - defaultCount = 0; - readRef.on('child_added', () => { - defaultCount++; - ea.addEvent(); - }); - expect(defaultCount).to.equal(0); - - readRef.on('child_removed', () => { - expect(false).to.be.true; - }); - - return ea.promise; - }); - - it('Case 2003: Correctly get events for startAt/endAt queries when priority changes.', () => { - const ref = getRandomNode() as Reference; - const addedFirst = [], - removedFirst = [], - addedSecond = [], - removedSecond = []; - ref - .startAt(0) - .endAt(10) - .on('child_added', snap => { - addedFirst.push(snap.key); - }); - ref - .startAt(0) - .endAt(10) - .on('child_removed', snap => { - removedFirst.push(snap.key); - }); - ref - .startAt(10) - .endAt(20) - .on('child_added', snap => { - addedSecond.push(snap.key); - }); - ref - .startAt(10) - .endAt(20) - .on('child_removed', snap => { - removedSecond.push(snap.key); - }); - - ref.child('a').setWithPriority('a', 5); - expect(addedFirst).to.deep.equal(['a']); - ref.child('a').setWithPriority('a', 15); - expect(removedFirst).to.deep.equal(['a']); - expect(addedSecond).to.deep.equal(['a']); - - ref.child('a').setWithPriority('a', 10); - expect(addedFirst).to.deep.equal(['a', 'a']); - - ref.child('a').setWithPriority('a', 5); - expect(removedSecond).to.deep.equal(['a']); - }); - - it('Behaves with diverging queries', async () => { - const refs = getRandomNode(2); - const writer = refs[0]; - const reader = refs[1]; - - await writer.set({ - a: { b: 1, c: 2 }, - e: 3 - }); - - let childCount = 0; - - reader.child('a/b').on('value', snap => { - const val = snap.val(); - childCount++; - if (childCount === 1) { - expect(val).to.equal(1); - } else { - // fail this, nothing should have changed - expect(true).to.be.false; - } - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - let count = 0; - reader.limitToLast(2).on('value', snap => { - ea.addEvent(); - const val = snap.val(); - count++; - if (count === 1) { - expect(val).to.deep.equal({ a: { b: 1, c: 2 }, e: 3 }); - } else if (count === 2) { - expect(val).to.deep.equal({ d: 4, e: 3 }); - } - }); - - await ea.promise; - - ea.reset(); - writer.child('d').set(4); - - return ea.promise; - }); - - it('Priority-only updates are processed correctly by server.', async () => { - const refPair = getRandomNode(2) as Reference[], - readRef = refPair[0], - writeRef = refPair[1]; - - const ea = EventAccumulatorFactory.waitsForCount(1); - let readVal; - readRef.limitToLast(2).on('value', s => { - readVal = s.val(); - if (readVal) { - ea.addEvent(); - } - }); - writeRef.set({ - a: { '.priority': 10, '.value': 1 }, - b: { '.priority': 20, '.value': 2 }, - c: { '.priority': 30, '.value': 3 } - }); - - await ea.promise; - expect(readVal).to.deep.equal({ b: 2, c: 3 }); - - ea.reset(); - writeRef.child('a').setPriority(25); - - await ea.promise; - expect(readVal).to.deep.equal({ a: 1, c: 3 }); - }); - - it('Server: Test re-listen', done => { - const refPair = getRandomNode(2) as Reference[], - ref = refPair[0], - ref2 = refPair[1]; - ref.set({ - a: 'a', - b: 'b', - c: 'c', - d: 'd', - e: 'e', - f: 'f', - g: 'g' - }); - - let before; - ref - .startAt(null, 'a') - .endAt(null, 'b') - .on('value', b => { - before = b.val(); - }); - - ref.child('aa').set('aa', () => { - ref2 - .startAt(null, 'a') - .endAt(null, 'b') - .on('value', b => { - expect(b.val()).to.deep.equal(before); - done(); - }); - }); - }); - - it('Server: Test re-listen 2', done => { - const refPair = getRandomNode(2), - ref = refPair[0], - ref2 = refPair[1]; - ref.set({ - a: 'a', - b: 'b', - c: 'c', - d: 'd', - e: 'e', - f: 'f', - g: 'g' - }); - - let before; - ref - .startAt(null, 'b') - .limitToFirst(3) - .on('value', b => { - before = b.val(); - }); - - ref.child('aa').update({ a: 5, aa: 4, b: 7, c: 4, d: 4, dd: 3 }, () => { - ref2 - .startAt(null, 'b') - .limitToFirst(3) - .on('value', b => { - expect(b.val()).to.deep.equal(before); - done(); - }); - }); - }); - - it('Server: Test re-listen 3', done => { - const refPair = getRandomNode(2), - ref = refPair[0], - ref2 = refPair[1]; - ref.set({ - a: 'a', - b: 'b', - c: 'c', - d: 'd', - e: 'e', - f: 'f', - g: 'g' - }); - - let before; - ref.limitToLast(3).on('value', b => { - before = b.val(); - }); - - ref.child('h').set('h', () => { - ref2.limitToLast(3).on('value', b => { - expect(b.val()).to.deep.equal(before); - done(); - }); - }); - }); - - it('Server limit below limit works properly.', async () => { - const refPair = getRandomNode(2) as Reference[], - readRef = refPair[0], - writeRef = refPair[1]; - let childData; - - await writeRef.set({ - a: { - aa: { '.priority': 1, '.value': 1 }, - ab: { '.priority': 1, '.value': 1 } - } - }); - - readRef.limitToLast(1).on('value', s => { - expect(s.val()).to.deep.equal({ a: { aa: 1, ab: 1 } }); - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - readRef - .child('a') - .startAt(1) - .endAt(1) - .on('value', s => { - childData = s.val(); - if (childData) { - ea.addEvent(); - } - }); - - await ea.promise; - expect(childData).to.deep.equal({ aa: 1, ab: 1 }); - - // This should remove an item from the child query, but *not* the parent query. - ea.reset(); - writeRef.child('a/ab').setWithPriority(1, 2); - - await ea.promise; - - expect(childData).to.deep.equal({ aa: 1 }); - }); - - it('Server: Setting grandchild of item in limit works.', async () => { - const refPair = getRandomNode(2), - ref = refPair[0], - ref2 = refPair[1]; - - ref.set({ - a: { - name: 'Mike' - } - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - const snaps = []; - ref2.limitToLast(1).on('value', s => { - const val = s.val(); - if (val !== null) { - snaps.push(val); - ea.addEvent(); - } - }); - - await ea.promise; - expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); - - ea.reset(); - ref.child('a/name').set('Fred'); - - await ea.promise; - expect(snaps).to.deep.equal([ - { a: { name: 'Mike' } }, - { a: { name: 'Fred' } } - ]); - }); - - it('Server: Updating grandchildren of item in limit works.', async () => { - const refPair = getRandomNode(2), - ref = refPair[0], - ref2 = refPair[1]; - - ref.set({ - a: { - name: 'Mike' - } - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - const snaps = []; - ref2.limitToLast(1).on('value', s => { - const val = s.val(); - if (val !== null) { - snaps.push(val); - ea.addEvent(); - } - }); - - /** - * If I put this artificial pause here, this test works however - * something about the timing is broken - */ - await ea.promise; - expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); - - ea.reset(); - ref.child('a').update({ name: null, Name: 'Fred' }); - await ea.promise; - - expect(snaps).to.deep.equal([ - { a: { name: 'Mike' } }, - { a: { Name: 'Fred' } } - ]); - }); - - it('Server: New child at end of limit shows up.', async () => { - const refPair = getRandomNode(2), - ref = refPair[0], - ref2 = refPair[1]; - - const ea = EventAccumulatorFactory.waitsForCount(1); - let snap; - ref2.limitToLast(1).on('value', s => { - snap = s.val(); - ea.addEvent(); - }); - - await ea.promise; - expect(snap).to.be.null; - ea.reset(); - - ref.child('a').set('new child'); - - /** - * If I put this artificial pause here, this test works however - * something about the timing is broken - */ - await ea.promise; - expect(snap).to.deep.equal({ a: 'new child' }); - }); - - it('Server: Priority-only updates are processed correctly by server (1).', async () => { - const refPair = getRandomNode(2), - readRef = refPair[0], - writeRef = refPair[1]; - - const ea = EventAccumulatorFactory.waitsForCount(1); - let readVal; - readRef.limitToLast(2).on('value', s => { - readVal = s.val(); - if (readVal) { - ea.addEvent(); - } - }); - writeRef.set({ - a: { '.priority': 10, '.value': 1 }, - b: { '.priority': 20, '.value': 2 }, - c: { '.priority': 30, '.value': 3 } - }); - - await ea.promise; - expect(readVal).to.deep.equal({ b: 2, c: 3 }); - - ea.reset(); - writeRef.child('a').setPriority(25); - - await ea.promise; - expect(readVal).to.deep.equal({ a: 1, c: 3 }); - }); - - // Same as above but with an endAt() so we hit CompoundQueryView instead of SimpleLimitView. - it('Server: Priority-only updates are processed correctly by server (2).', async () => { - const refPair = getRandomNode(2), - readRef = refPair[0], - writeRef = refPair[1]; - - const ea = EventAccumulatorFactory.waitsForCount(1); - let readVal; - readRef - .endAt(50) - .limitToLast(2) - .on('value', s => { - readVal = s.val(); - if (readVal) { - ea.addEvent(); - } - }); - - writeRef.set({ - a: { '.priority': 10, '.value': 1 }, - b: { '.priority': 20, '.value': 2 }, - c: { '.priority': 30, '.value': 3 } - }); - - await ea.promise; - expect(readVal).to.deep.equal({ b: 2, c: 3 }); - - ea.reset(); - writeRef.child('a').setPriority(25); - - await ea.promise; - expect(readVal).to.deep.equal({ a: 1, c: 3 }); - }); - - it('Latency compensation works with limit and pushed object.', () => { - const ref = getRandomNode() as Reference; - const events = []; - ref.limitToLast(3).on('child_added', s => { - events.push(s.val()); - }); - - // If you change this to ref.push('foo') it works. - ref.push({ a: 'foo' }); - - // Should have synchronously gotten an event. - expect(events.length).to.equal(1); - }); - - it("Cache doesn't remove items that have fallen out of view.", async () => { - const refPair = getRandomNode(2), - readRef = refPair[0], - writeRef = refPair[1]; - - let ea = EventAccumulatorFactory.waitsForCount(1); - let readVal; - readRef.limitToLast(2).on('value', s => { - readVal = s.val(); - ea.addEvent(); - }); - - await ea.promise; - expect(readVal).to.be.null; - - ea = EventAccumulatorFactory.waitsForCount(4); - for (let i = 0; i < 4; i++) { - writeRef.child('k' + i).set(i); - } - - await ea.promise; - - await pause(500); - expect(readVal).to.deep.equal({ k2: 2, k3: 3 }); - - ea = EventAccumulatorFactory.waitsForCount(1); - writeRef.remove(); - - await ea.promise; - expect(readVal).to.be.null; - }); - - it('handles an update that moves another child that has a deeper listener out of view', async () => { - const refs = getRandomNode(2); - const reader = refs[0]; - const writer = refs[1]; - - await writer.set({ - a: { '.priority': 10, '.value': 1 }, - b: { '.priority': 20, d: 4 }, - c: { '.priority': 30, '.value': 3 } - }); - - reader.child('b/d').on('value', snap => { - expect(snap.val()).to.equal(4); - }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - let val; - reader.limitToLast(2).on('value', snap => { - val = snap.val(); - if (val) { - ea.addEvent(); - } - }); - - await ea.promise; - expect(val).to.deep.equal({ b: { d: 4 }, c: 3 }); - - ea.reset(); - writer.child('a').setWithPriority(1, 40); - - await ea.promise; - expect(val).to.deep.equal({ c: 3, a: 1 }); - }); - - it('Integer keys behave numerically 1.', done => { - const ref = getRandomNode() as Reference; - ref.set( - { - 1: true, - 50: true, - 550: true, - 6: true, - 600: true, - 70: true, - 8: true, - 80: true - }, - () => { - ref.startAt(null, '80').once('value', s => { - expect(s.val()).to.deep.equal({ 80: true, 550: true, 600: true }); - done(); - }); - } - ); - }); - - it('Integer keys behave numerically 2.', done => { - const ref = getRandomNode() as Reference; - ref.set( - { - 1: true, - 50: true, - 550: true, - 6: true, - 600: true, - 70: true, - 8: true, - 80: true - }, - () => { - ref.endAt(null, '50').once('value', s => { - expect(s.val()).to.deep.equal({ - 1: true, - 6: true, - 8: true, - 50: true - }); - done(); - }); - } - ); - }); - - it('Integer keys behave numerically 3.', done => { - const ref = getRandomNode() as Reference; - ref.set( - { - 1: true, - 50: true, - 550: true, - 6: true, - 600: true, - 70: true, - 8: true, - 80: true - }, - () => { - ref - .startAt(null, '50') - .endAt(null, '80') - .once('value', s => { - expect(s.val()).to.deep.equal({ 50: true, 70: true, 80: true }); - done(); - }); - } - ); - }); - - it('.limitToLast() on node with priority.', done => { - const ref = getRandomNode() as Reference; - ref.set({ a: 'blah', '.priority': 'priority' }, () => { - ref.limitToLast(2).once('value', s => { - expect(s.exportVal()).to.deep.equal({ a: 'blah' }); - done(); - }); - }); - }); - - it('.equalTo works', async () => { - const ref = getRandomNode() as Reference; - const done = false; - - await ref.set({ - a: 1, - b: { '.priority': 2, '.value': 2 }, - c: { '.priority': '3', '.value': 3 } - }); - - const snap1 = await ref.equalTo(2).once('value'); - const val1 = snap1.exportVal(); - expect(val1).to.deep.equal({ b: { '.priority': 2, '.value': 2 } }); - - const snap2 = await ref.equalTo('3', 'c').once('value'); - - const val2 = snap2.exportVal(); - expect(val2).to.deep.equal({ c: { '.priority': '3', '.value': 3 } }); - - const snap3 = await ref.equalTo(null, 'c').once('value'); - const val3 = snap3.exportVal(); - expect(val3).to.be.null; - }); - - it('Handles fallback for orderBy', async () => { - const ref = getRandomNode() as Reference; - - const children = []; - - ref.orderByChild('foo').on('child_added', snap => { - children.push(snap.key); - }); - - // Set initial data - await ref.set({ - a: { foo: 3 }, - b: { foo: 1 }, - c: { foo: 2 } - }); - - expect(children).to.deep.equal(['b', 'c', 'a']); - }); - - it('Get notified of deletes that happen while offline.', async () => { - const refPair = getRandomNode(2); - const queryRef = refPair[0]; - const writerRef = refPair[1]; - let readSnapshot = null; - - // Write 3 children and then start our limit query. - await writerRef.set({ a: 1, b: 2, c: 3 }); - - const ea = EventAccumulatorFactory.waitsForCount(1); - queryRef.limitToLast(3).on('value', s => { - readSnapshot = s; - if (readSnapshot) { - ea.addEvent(); - } - }); - - // Wait for us to read the 3 children. - await ea.promise; - - expect(readSnapshot.val()).to.deep.equal({ a: 1, b: 2, c: 3 }); - - queryRef.database.goOffline(); - - // Delete an item in the query and then bring our connection back up. - ea.reset(); - await writerRef.child('b').remove(); - queryRef.database.goOnline(); - - await ea.promise; - expect(readSnapshot.child('b').val()).to.be.null; - }); - - it('Snapshot children respect default ordering', done => { - const refPair = getRandomNode(2); - const queryRef = refPair[0], - writerRef = refPair[1]; - - const list = { - a: { - thisvaluefirst: { '.value': true, '.priority': 1 }, - name: { '.value': 'Michael', '.priority': 2 }, - thisvaluelast: { '.value': true, '.priority': 3 } - }, - b: { - thisvaluefirst: { '.value': true, '.priority': null }, - name: { '.value': 'Rob', '.priority': 2 }, - thisvaluelast: { '.value': true, '.priority': 3 } - }, - c: { - thisvaluefirst: { '.value': true, '.priority': 1 }, - name: { '.value': 'Jonny', '.priority': 2 }, - thisvaluelast: { '.value': true, '.priority': 'somestring' } - } - }; - - writerRef.set(list, () => { - queryRef.orderByChild('name').once('value', snap => { - const expectedKeys = ['thisvaluefirst', 'name', 'thisvaluelast']; - const expectedNames = ['Jonny', 'Michael', 'Rob']; - - // Validate that snap.child() resets order to default for child snaps - const orderedKeys = []; - snap.child('b').forEach(childSnap => { - orderedKeys.push(childSnap.key); - }); - expect(orderedKeys).to.deep.equal(expectedKeys); - - // Validate that snap.forEach() resets ordering to default for child snaps - const orderedNames = []; - snap.forEach(childSnap => { - orderedNames.push(childSnap.child('name').val()); - const orderedKeys = []; - childSnap.forEach(grandchildSnap => { - orderedKeys.push(grandchildSnap.key); - }); - expect(orderedKeys).to.deep.equal([ - 'thisvaluefirst', - 'name', - 'thisvaluelast' - ]); - }); - expect(orderedNames).to.deep.equal(expectedNames); - done(); - }); - }); - }); - - it('Adding listens for the same paths does not check fail', done => { - // This bug manifests itself if there's a hierarchy of query listener, default listener and one-time listener - // underneath. During one-time listener registration, sync-tree traversal stopped as soon as it found a complete - // server cache (this is the case for not indexed query view). The problem is that the same traversal was - // looking for a ancestor default view, and the early exit prevented from finding the default listener above the - // one-time listener. Event removal code path wasn't removing the listener because it stopped as soon as it - // found the default view. This left the zombie one-time listener and check failed on the second attempt to - // create a listener for the same path (asana#61028598952586). - const ref = getRandomNode(1)[0]; - - ref.child('child').set({ name: 'John' }, () => { - ref - .orderByChild('name') - .equalTo('John') - .on('value', snap => { - ref.child('child').on('value', snap => { - ref - .child('child') - .child('favoriteToy') - .once('value', snap => { - ref - .child('child') - .child('favoriteToy') - .once('value', snap => { - done(); - }); - }); - }); - }); - }); - }); - - it('Can JSON serialize refs', () => { - const ref = getRandomNode() as Reference; - expect(JSON.stringify(ref)).to.equal('"' + ref.toString() + '"'); - }); + await writer.set({ foo: 'a', bar: 'b' }); + var snapshot = await reader.get(); + var val = snapshot.val(); + expect(val['foo']).to.equal('a'); + expect(val['bar']).to.equal('b'); + await writer.remove(); + snapshot = await reader.get(); + val = snapshot.val(); + expect(val).to.be.null; + }); + + it('get() LATEST', async () => { + const reader = getFreshRepo('reader'); + const writer = getFreshRepo('writer'); + + await writer.set({ foo: 'bar' }); + const snapshot = await reader.get(); + reader.database.goOffline(); + reader.once('value', snap => { + expect(snap.val()).to.equal(snapshot.val()); + }); + }); + + // it('set() at query root raises correct value event', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let readerLoaded = false; + // writer + // .child('foo') + // .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { + // reader + // .child('foo') + // .limitToLast(10) + // .on('value', snapshot => { + // const val = snapshot.val(); + // if (!readerLoaded) { + // readerLoaded = true; + // expect(val.bar).to.equal('a'); + // expect(val.baz).to.equal('b'); + // expect(val.bam).to.equal('c'); + // writer.child('foo').set({ bar: 'd', baz: 'b', bat: 'e' }); + // } else { + // expect(val.bar).to.equal('d'); + // expect(val.baz).to.equal('b'); + // expect(val.bat).to.equal('e'); + // expect(val.bam).to.equal(undefined); + // done(); + // } + // }); + // }); + // }); + + // it('listen for child_added events with limit and different types fires properly', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let numEventsReceived = 0, + // gotA = false, + // gotB = false, + // gotC = false; + // writer.child('a').set(1, (error, dummy) => { + // writer.child('b').set('b', (error, dummy) => { + // writer + // .child('c') + // .set({ deep: 'path', of: { stuff: true } }, (error, dummy) => { + // reader.limitToLast(3).on('child_added', snap => { + // const val = snap.val(); + // switch (snap.key) { + // case 'a': + // gotA = true; + // expect(val).to.equal(1); + // break; + // case 'b': + // gotB = true; + // expect(val).to.equal('b'); + // break; + // case 'c': + // gotC = true; + // expect(val.deep).to.equal('path'); + // expect(val.of.stuff).to.be.true; + // break; + // default: + // expect(false).to.be.true; + // } + // numEventsReceived += 1; + // expect(numEventsReceived).to.be.lessThan(4); + // if (gotA && gotB && gotC) { + // done(); + // } + // }); + // }); + // }); + // }); + // }); + + // it('listen for child_changed events with limit and different types fires properly', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let numEventsReceived = 0, + // gotA = false, + // gotB = false, + // gotC = false, + // readerLoaded = false; + // writer.set( + // { a: 'something', b: "we'll", c: 'overwrite ' }, + // (error, dummy) => { + // reader.limitToLast(3).on('value', snapshot => { + // if (!readerLoaded) { + // readerLoaded = true; + // // Set up listener for upcoming change events + // reader.limitToLast(3).on('child_changed', snap => { + // const val = snap.val(); + // switch (snap.key) { + // case 'a': + // gotA = true; + // expect(val).to.equal(1); + // break; + // case 'b': + // gotB = true; + // expect(val).to.equal('b'); + // break; + // case 'c': + // gotC = true; + // expect(val.deep).to.equal('path'); + // expect(val.of.stuff).to.be.true; + // break; + // default: + // expect(false).to.be.true; + // } + // numEventsReceived += 1; + // expect(numEventsReceived).to.be.lessThan(4); + // if (gotA && gotB && gotC) { + // done(); + // } + // }); + + // // Begin changing every key + // writer.child('a').set(1); + // writer.child('b').set('b'); + // writer.child('c').set({ deep: 'path', of: { stuff: true } }); + // } + // }); + // } + // ); + // }); + + // it('listen for child_remove events with limit and different types fires properly', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let numEventsReceived = 0, + // gotA = false, + // gotB = false, + // gotC = false, + // readerLoaded = false; + // writer.set( + // { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, + // (error, dummy) => { + // reader.limitToLast(3).on('value', snapshot => { + // if (!readerLoaded) { + // readerLoaded = true; + + // // Set up listener for upcoming change events + // reader.limitToLast(3).on('child_removed', snap => { + // const val = snap.val(); + // switch (snap.key) { + // case 'a': + // gotA = true; + // expect(val).to.equal(1); + // break; + // case 'b': + // gotB = true; + // expect(val).to.equal('b'); + // break; + // case 'c': + // gotC = true; + // expect(val.deep).to.equal('path'); + // expect(val.of.stuff).to.be.true; + // break; + // default: + // expect(false).to.be.true; + // } + // numEventsReceived += 1; + // expect(numEventsReceived).to.be.lessThan(4); + // if (gotA && gotB && gotC) { + // done(); + // } + // }); + + // // Begin removing every key + // writer.child('a').remove(); + // writer.child('b').remove(); + // writer.child('c').remove(); + // } + // }); + // } + // ); + // }); + + // it('listen for child_remove events when parent removed', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let numEventsReceived = 0, + // gotA = false, + // gotB = false, + // gotC = false, + // readerLoaded = false; + // writer.set( + // { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, + // (error, dummy) => { + // reader.limitToLast(3).on('value', snapshot => { + // if (!readerLoaded) { + // readerLoaded = true; + + // // Set up listener for upcoming change events + // reader.limitToLast(3).on('child_removed', snap => { + // const val = snap.val(); + // switch (snap.key) { + // case 'a': + // gotA = true; + // expect(val).to.equal(1); + // break; + // case 'b': + // gotB = true; + // expect(val).to.equal('b'); + // break; + // case 'c': + // gotC = true; + // expect(val.deep).to.equal('path'); + // expect(val.of.stuff).to.be.true; + // break; + // default: + // expect(false).to.be.true; + // } + // numEventsReceived += 1; + // expect(numEventsReceived).to.be.lessThan(4); + // if (gotA && gotB && gotC) { + // done(); + // } + // }); + + // // Remove the query parent + // writer.remove(); + // } + // }); + // } + // ); + // }); + + // it('listen for child_remove events when parent set to scalar', done => { + // const nodePair = getRandomNode(2); + // const writer = nodePair[0]; + // const reader = nodePair[1]; + + // let numEventsReceived = 0, + // gotA = false, + // gotB = false, + // gotC = false, + // readerLoaded = false; + // writer.set( + // { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, + // (error, dummy) => { + // reader.limitToLast(3).on('value', snapshot => { + // if (!readerLoaded) { + // readerLoaded = true; + + // // Set up listener for upcoming change events + // reader.limitToLast(3).on('child_removed', snap => { + // const val = snap.val(); + // switch (snap.key) { + // case 'a': + // gotA = true; + // expect(val).to.equal(1); + // break; + // case 'b': + // gotB = true; + // expect(val).to.equal('b'); + // break; + // case 'c': + // gotC = true; + // expect(val.deep).to.equal('path'); + // expect(val.of.stuff).to.be.true; + // break; + // default: + // expect(false).to.be.true; + // } + // numEventsReceived += 1; + // expect(numEventsReceived).to.be.lessThan(4); + // if (gotA && gotB && gotC) { + // done(); + // } + // }); + + // // Set the parent to a scalar + // writer.set('scalar'); + // } + // }); + // } + // ); + // }); + + // it('Queries behave wrong after .once().', async () => { + // const refPair = getRandomNode(2), + // writeRef = refPair[0], + // readRef = refPair[1]; + // let startAtCount, defaultCount; + + // await writeRef.set({ a: 1, b: 2, c: 3, d: 4 }); + + // await readRef.once('value'); + + // const ea = EventAccumulatorFactory.waitsForCount(5); + // startAtCount = 0; + // readRef.startAt(null, 'd').on('child_added', () => { + // startAtCount++; + // ea.addEvent(); + // }); + // expect(startAtCount).to.equal(0); + + // defaultCount = 0; + // readRef.on('child_added', () => { + // defaultCount++; + // ea.addEvent(); + // }); + // expect(defaultCount).to.equal(0); + + // readRef.on('child_removed', () => { + // expect(false).to.be.true; + // }); + + // return ea.promise; + // }); + + // it('Case 2003: Correctly get events for startAt/endAt queries when priority changes.', () => { + // const ref = getRandomNode() as Reference; + // const addedFirst = [], + // removedFirst = [], + // addedSecond = [], + // removedSecond = []; + // ref + // .startAt(0) + // .endAt(10) + // .on('child_added', snap => { + // addedFirst.push(snap.key); + // }); + // ref + // .startAt(0) + // .endAt(10) + // .on('child_removed', snap => { + // removedFirst.push(snap.key); + // }); + // ref + // .startAt(10) + // .endAt(20) + // .on('child_added', snap => { + // addedSecond.push(snap.key); + // }); + // ref + // .startAt(10) + // .endAt(20) + // .on('child_removed', snap => { + // removedSecond.push(snap.key); + // }); + + // ref.child('a').setWithPriority('a', 5); + // expect(addedFirst).to.deep.equal(['a']); + // ref.child('a').setWithPriority('a', 15); + // expect(removedFirst).to.deep.equal(['a']); + // expect(addedSecond).to.deep.equal(['a']); + + // ref.child('a').setWithPriority('a', 10); + // expect(addedFirst).to.deep.equal(['a', 'a']); + + // ref.child('a').setWithPriority('a', 5); + // expect(removedSecond).to.deep.equal(['a']); + // }); + + // it('Behaves with diverging queries', async () => { + // const refs = getRandomNode(2); + // const writer = refs[0]; + // const reader = refs[1]; + + // await writer.set({ + // a: { b: 1, c: 2 }, + // e: 3 + // }); + + // let childCount = 0; + + // reader.child('a/b').on('value', snap => { + // const val = snap.val(); + // childCount++; + // if (childCount === 1) { + // expect(val).to.equal(1); + // } else { + // // fail this, nothing should have changed + // expect(true).to.be.false; + // } + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // let count = 0; + // reader.limitToLast(2).on('value', snap => { + // ea.addEvent(); + // const val = snap.val(); + // count++; + // if (count === 1) { + // expect(val).to.deep.equal({ a: { b: 1, c: 2 }, e: 3 }); + // } else if (count === 2) { + // expect(val).to.deep.equal({ d: 4, e: 3 }); + // } + // }); + + // await ea.promise; + + // ea.reset(); + // writer.child('d').set(4); + + // return ea.promise; + // }); + + // it('Priority-only updates are processed correctly by server.', async () => { + // const refPair = getRandomNode(2) as Reference[], + // readRef = refPair[0], + // writeRef = refPair[1]; + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // let readVal; + // readRef.limitToLast(2).on('value', s => { + // readVal = s.val(); + // if (readVal) { + // ea.addEvent(); + // } + // }); + // writeRef.set({ + // a: { '.priority': 10, '.value': 1 }, + // b: { '.priority': 20, '.value': 2 }, + // c: { '.priority': 30, '.value': 3 } + // }); + + // await ea.promise; + // expect(readVal).to.deep.equal({ b: 2, c: 3 }); + + // ea.reset(); + // writeRef.child('a').setPriority(25); + + // await ea.promise; + // expect(readVal).to.deep.equal({ a: 1, c: 3 }); + // }); + + // it('Server: Test re-listen', done => { + // const refPair = getRandomNode(2) as Reference[], + // ref = refPair[0], + // ref2 = refPair[1]; + // ref.set({ + // a: 'a', + // b: 'b', + // c: 'c', + // d: 'd', + // e: 'e', + // f: 'f', + // g: 'g' + // }); + + // let before; + // ref + // .startAt(null, 'a') + // .endAt(null, 'b') + // .on('value', b => { + // before = b.val(); + // }); + + // ref.child('aa').set('aa', () => { + // ref2 + // .startAt(null, 'a') + // .endAt(null, 'b') + // .on('value', b => { + // expect(b.val()).to.deep.equal(before); + // done(); + // }); + // }); + // }); + + // it('Server: Test re-listen 2', done => { + // const refPair = getRandomNode(2), + // ref = refPair[0], + // ref2 = refPair[1]; + // ref.set({ + // a: 'a', + // b: 'b', + // c: 'c', + // d: 'd', + // e: 'e', + // f: 'f', + // g: 'g' + // }); + + // let before; + // ref + // .startAt(null, 'b') + // .limitToFirst(3) + // .on('value', b => { + // before = b.val(); + // }); + + // ref.child('aa').update({ a: 5, aa: 4, b: 7, c: 4, d: 4, dd: 3 }, () => { + // ref2 + // .startAt(null, 'b') + // .limitToFirst(3) + // .on('value', b => { + // expect(b.val()).to.deep.equal(before); + // done(); + // }); + // }); + // }); + + // it('Server: Test re-listen 3', done => { + // const refPair = getRandomNode(2), + // ref = refPair[0], + // ref2 = refPair[1]; + // ref.set({ + // a: 'a', + // b: 'b', + // c: 'c', + // d: 'd', + // e: 'e', + // f: 'f', + // g: 'g' + // }); + + // let before; + // ref.limitToLast(3).on('value', b => { + // before = b.val(); + // }); + + // ref.child('h').set('h', () => { + // ref2.limitToLast(3).on('value', b => { + // expect(b.val()).to.deep.equal(before); + // done(); + // }); + // }); + // }); + + // it('Server limit below limit works properly.', async () => { + // const refPair = getRandomNode(2) as Reference[], + // readRef = refPair[0], + // writeRef = refPair[1]; + // let childData; + + // await writeRef.set({ + // a: { + // aa: { '.priority': 1, '.value': 1 }, + // ab: { '.priority': 1, '.value': 1 } + // } + // }); + + // readRef.limitToLast(1).on('value', s => { + // expect(s.val()).to.deep.equal({ a: { aa: 1, ab: 1 } }); + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // readRef + // .child('a') + // .startAt(1) + // .endAt(1) + // .on('value', s => { + // childData = s.val(); + // if (childData) { + // ea.addEvent(); + // } + // }); + + // await ea.promise; + // expect(childData).to.deep.equal({ aa: 1, ab: 1 }); + + // // This should remove an item from the child query, but *not* the parent query. + // ea.reset(); + // writeRef.child('a/ab').setWithPriority(1, 2); + + // await ea.promise; + + // expect(childData).to.deep.equal({ aa: 1 }); + // }); + + // it('Server: Setting grandchild of item in limit works.', async () => { + // const refPair = getRandomNode(2), + // ref = refPair[0], + // ref2 = refPair[1]; + + // ref.set({ + // a: { + // name: 'Mike' + // } + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // const snaps = []; + // ref2.limitToLast(1).on('value', s => { + // const val = s.val(); + // if (val !== null) { + // snaps.push(val); + // ea.addEvent(); + // } + // }); + + // await ea.promise; + // expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); + + // ea.reset(); + // ref.child('a/name').set('Fred'); + + // await ea.promise; + // expect(snaps).to.deep.equal([ + // { a: { name: 'Mike' } }, + // { a: { name: 'Fred' } } + // ]); + // }); + + // it('Server: Updating grandchildren of item in limit works.', async () => { + // const refPair = getRandomNode(2), + // ref = refPair[0], + // ref2 = refPair[1]; + + // ref.set({ + // a: { + // name: 'Mike' + // } + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // const snaps = []; + // ref2.limitToLast(1).on('value', s => { + // const val = s.val(); + // if (val !== null) { + // snaps.push(val); + // ea.addEvent(); + // } + // }); + + // /** + // * If I put this artificial pause here, this test works however + // * something about the timing is broken + // */ + // await ea.promise; + // expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); + + // ea.reset(); + // ref.child('a').update({ name: null, Name: 'Fred' }); + // await ea.promise; + + // expect(snaps).to.deep.equal([ + // { a: { name: 'Mike' } }, + // { a: { Name: 'Fred' } } + // ]); + // }); + + // it('Server: New child at end of limit shows up.', async () => { + // const refPair = getRandomNode(2), + // ref = refPair[0], + // ref2 = refPair[1]; + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // let snap; + // ref2.limitToLast(1).on('value', s => { + // snap = s.val(); + // ea.addEvent(); + // }); + + // await ea.promise; + // expect(snap).to.be.null; + // ea.reset(); + + // ref.child('a').set('new child'); + + // /** + // * If I put this artificial pause here, this test works however + // * something about the timing is broken + // */ + // await ea.promise; + // expect(snap).to.deep.equal({ a: 'new child' }); + // }); + + // it('Server: Priority-only updates are processed correctly by server (1).', async () => { + // const refPair = getRandomNode(2), + // readRef = refPair[0], + // writeRef = refPair[1]; + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // let readVal; + // readRef.limitToLast(2).on('value', s => { + // readVal = s.val(); + // if (readVal) { + // ea.addEvent(); + // } + // }); + // writeRef.set({ + // a: { '.priority': 10, '.value': 1 }, + // b: { '.priority': 20, '.value': 2 }, + // c: { '.priority': 30, '.value': 3 } + // }); + + // await ea.promise; + // expect(readVal).to.deep.equal({ b: 2, c: 3 }); + + // ea.reset(); + // writeRef.child('a').setPriority(25); + + // await ea.promise; + // expect(readVal).to.deep.equal({ a: 1, c: 3 }); + // }); + + // // Same as above but with an endAt() so we hit CompoundQueryView instead of SimpleLimitView. + // it('Server: Priority-only updates are processed correctly by server (2).', async () => { + // const refPair = getRandomNode(2), + // readRef = refPair[0], + // writeRef = refPair[1]; + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // let readVal; + // readRef + // .endAt(50) + // .limitToLast(2) + // .on('value', s => { + // readVal = s.val(); + // if (readVal) { + // ea.addEvent(); + // } + // }); + + // writeRef.set({ + // a: { '.priority': 10, '.value': 1 }, + // b: { '.priority': 20, '.value': 2 }, + // c: { '.priority': 30, '.value': 3 } + // }); + + // await ea.promise; + // expect(readVal).to.deep.equal({ b: 2, c: 3 }); + + // ea.reset(); + // writeRef.child('a').setPriority(25); + + // await ea.promise; + // expect(readVal).to.deep.equal({ a: 1, c: 3 }); + // }); + + // it('Latency compensation works with limit and pushed object.', () => { + // const ref = getRandomNode() as Reference; + // const events = []; + // ref.limitToLast(3).on('child_added', s => { + // events.push(s.val()); + // }); + + // // If you change this to ref.push('foo') it works. + // ref.push({ a: 'foo' }); + + // // Should have synchronously gotten an event. + // expect(events.length).to.equal(1); + // }); + + // it("Cache doesn't remove items that have fallen out of view.", async () => { + // const refPair = getRandomNode(2), + // readRef = refPair[0], + // writeRef = refPair[1]; + + // let ea = EventAccumulatorFactory.waitsForCount(1); + // let readVal; + // readRef.limitToLast(2).on('value', s => { + // readVal = s.val(); + // ea.addEvent(); + // }); + + // await ea.promise; + // expect(readVal).to.be.null; + + // ea = EventAccumulatorFactory.waitsForCount(4); + // for (let i = 0; i < 4; i++) { + // writeRef.child('k' + i).set(i); + // } + + // await ea.promise; + + // await pause(500); + // expect(readVal).to.deep.equal({ k2: 2, k3: 3 }); + + // ea = EventAccumulatorFactory.waitsForCount(1); + // writeRef.remove(); + + // await ea.promise; + // expect(readVal).to.be.null; + // }); + + // it('handles an update that moves another child that has a deeper listener out of view', async () => { + // const refs = getRandomNode(2); + // const reader = refs[0]; + // const writer = refs[1]; + + // await writer.set({ + // a: { '.priority': 10, '.value': 1 }, + // b: { '.priority': 20, d: 4 }, + // c: { '.priority': 30, '.value': 3 } + // }); + + // reader.child('b/d').on('value', snap => { + // expect(snap.val()).to.equal(4); + // }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // let val; + // reader.limitToLast(2).on('value', snap => { + // val = snap.val(); + // if (val) { + // ea.addEvent(); + // } + // }); + + // await ea.promise; + // expect(val).to.deep.equal({ b: { d: 4 }, c: 3 }); + + // ea.reset(); + // writer.child('a').setWithPriority(1, 40); + + // await ea.promise; + // expect(val).to.deep.equal({ c: 3, a: 1 }); + // }); + + // it('Integer keys behave numerically 1.', done => { + // const ref = getRandomNode() as Reference; + // ref.set( + // { + // 1: true, + // 50: true, + // 550: true, + // 6: true, + // 600: true, + // 70: true, + // 8: true, + // 80: true + // }, + // () => { + // ref.startAt(null, '80').once('value', s => { + // expect(s.val()).to.deep.equal({ 80: true, 550: true, 600: true }); + // done(); + // }); + // } + // ); + // }); + + // it('Integer keys behave numerically 2.', done => { + // const ref = getRandomNode() as Reference; + // ref.set( + // { + // 1: true, + // 50: true, + // 550: true, + // 6: true, + // 600: true, + // 70: true, + // 8: true, + // 80: true + // }, + // () => { + // ref.endAt(null, '50').once('value', s => { + // expect(s.val()).to.deep.equal({ + // 1: true, + // 6: true, + // 8: true, + // 50: true + // }); + // done(); + // }); + // } + // ); + // }); + + // it('Integer keys behave numerically 3.', done => { + // const ref = getRandomNode() as Reference; + // ref.set( + // { + // 1: true, + // 50: true, + // 550: true, + // 6: true, + // 600: true, + // 70: true, + // 8: true, + // 80: true + // }, + // () => { + // ref + // .startAt(null, '50') + // .endAt(null, '80') + // .once('value', s => { + // expect(s.val()).to.deep.equal({ 50: true, 70: true, 80: true }); + // done(); + // }); + // } + // ); + // }); + + // it('.limitToLast() on node with priority.', done => { + // const ref = getRandomNode() as Reference; + // ref.set({ a: 'blah', '.priority': 'priority' }, () => { + // ref.limitToLast(2).once('value', s => { + // expect(s.exportVal()).to.deep.equal({ a: 'blah' }); + // done(); + // }); + // }); + // }); + + // it('.equalTo works', async () => { + // const ref = getRandomNode() as Reference; + // const done = false; + + // await ref.set({ + // a: 1, + // b: { '.priority': 2, '.value': 2 }, + // c: { '.priority': '3', '.value': 3 } + // }); + + // const snap1 = await ref.equalTo(2).once('value'); + // const val1 = snap1.exportVal(); + // expect(val1).to.deep.equal({ b: { '.priority': 2, '.value': 2 } }); + + // const snap2 = await ref.equalTo('3', 'c').once('value'); + + // const val2 = snap2.exportVal(); + // expect(val2).to.deep.equal({ c: { '.priority': '3', '.value': 3 } }); + + // const snap3 = await ref.equalTo(null, 'c').once('value'); + // const val3 = snap3.exportVal(); + // expect(val3).to.be.null; + // }); + + // it('Handles fallback for orderBy', async () => { + // const ref = getRandomNode() as Reference; + + // const children = []; + + // ref.orderByChild('foo').on('child_added', snap => { + // children.push(snap.key); + // }); + + // // Set initial data + // await ref.set({ + // a: { foo: 3 }, + // b: { foo: 1 }, + // c: { foo: 2 } + // }); + + // expect(children).to.deep.equal(['b', 'c', 'a']); + // }); + + // it('Get notified of deletes that happen while offline.', async () => { + // const refPair = getRandomNode(2); + // const queryRef = refPair[0]; + // const writerRef = refPair[1]; + // let readSnapshot = null; + + // // Write 3 children and then start our limit query. + // await writerRef.set({ a: 1, b: 2, c: 3 }); + + // const ea = EventAccumulatorFactory.waitsForCount(1); + // queryRef.limitToLast(3).on('value', s => { + // readSnapshot = s; + // if (readSnapshot) { + // ea.addEvent(); + // } + // }); + + // // Wait for us to read the 3 children. + // await ea.promise; + + // expect(readSnapshot.val()).to.deep.equal({ a: 1, b: 2, c: 3 }); + + // queryRef.database.goOffline(); + + // // Delete an item in the query and then bring our connection back up. + // ea.reset(); + // await writerRef.child('b').remove(); + // queryRef.database.goOnline(); + + // await ea.promise; + // expect(readSnapshot.child('b').val()).to.be.null; + // }); + + // it('Snapshot children respect default ordering', done => { + // const refPair = getRandomNode(2); + // const queryRef = refPair[0], + // writerRef = refPair[1]; + + // const list = { + // a: { + // thisvaluefirst: { '.value': true, '.priority': 1 }, + // name: { '.value': 'Michael', '.priority': 2 }, + // thisvaluelast: { '.value': true, '.priority': 3 } + // }, + // b: { + // thisvaluefirst: { '.value': true, '.priority': null }, + // name: { '.value': 'Rob', '.priority': 2 }, + // thisvaluelast: { '.value': true, '.priority': 3 } + // }, + // c: { + // thisvaluefirst: { '.value': true, '.priority': 1 }, + // name: { '.value': 'Jonny', '.priority': 2 }, + // thisvaluelast: { '.value': true, '.priority': 'somestring' } + // } + // }; + + // writerRef.set(list, () => { + // queryRef.orderByChild('name').once('value', snap => { + // const expectedKeys = ['thisvaluefirst', 'name', 'thisvaluelast']; + // const expectedNames = ['Jonny', 'Michael', 'Rob']; + + // // Validate that snap.child() resets order to default for child snaps + // const orderedKeys = []; + // snap.child('b').forEach(childSnap => { + // orderedKeys.push(childSnap.key); + // }); + // expect(orderedKeys).to.deep.equal(expectedKeys); + + // // Validate that snap.forEach() resets ordering to default for child snaps + // const orderedNames = []; + // snap.forEach(childSnap => { + // orderedNames.push(childSnap.child('name').val()); + // const orderedKeys = []; + // childSnap.forEach(grandchildSnap => { + // orderedKeys.push(grandchildSnap.key); + // }); + // expect(orderedKeys).to.deep.equal([ + // 'thisvaluefirst', + // 'name', + // 'thisvaluelast' + // ]); + // }); + // expect(orderedNames).to.deep.equal(expectedNames); + // done(); + // }); + // }); + // }); + + // it('Adding listens for the same paths does not check fail', done => { + // // This bug manifests itself if there's a hierarchy of query listener, default listener and one-time listener + // // underneath. During one-time listener registration, sync-tree traversal stopped as soon as it found a complete + // // server cache (this is the case for not indexed query view). The problem is that the same traversal was + // // looking for a ancestor default view, and the early exit prevented from finding the default listener above the + // // one-time listener. Event removal code path wasn't removing the listener because it stopped as soon as it + // // found the default view. This left the zombie one-time listener and check failed on the second attempt to + // // create a listener for the same path (asana#61028598952586). + // const ref = getRandomNode(1)[0]; + + // ref.child('child').set({ name: 'John' }, () => { + // ref + // .orderByChild('name') + // .equalTo('John') + // .on('value', snap => { + // ref.child('child').on('value', snap => { + // ref + // .child('child') + // .child('favoriteToy') + // .once('value', snap => { + // ref + // .child('child') + // .child('favoriteToy') + // .once('value', snap => { + // done(); + // }); + // }); + // }); + // }); + // }); + // }); + + // it('Can JSON serialize refs', () => { + // const ref = getRandomNode() as Reference; + // expect(JSON.stringify(ref)).to.equal('"' + ref.toString() + '"'); + // }); }); From d9530eee4468495b0853ced2aada2b1d544d925c Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 5 Oct 2020 21:28:43 -0700 Subject: [PATCH 10/37] Uncomment tests --- packages/database/test/query.test.ts | 6404 +++++++++++++------------- 1 file changed, 3202 insertions(+), 3202 deletions(-) diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index 3cb26828220..2d50f7acf59 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -44,2155 +44,2155 @@ describe('Query Tests', () => { this.gotChildAdded = true; }; - // it('Can create basic queries.', () => { - // const path = getRandomNode() as Reference; - - // path.limitToLast(10); - // path.startAt('199').limitToFirst(10); - // path.startAt('199', 'test').limitToFirst(10); - // path.endAt('199').limitToLast(1); - // path.startAt('50', 'test').endAt('100', 'tree'); - // path.startAt('4').endAt('10'); - // path.startAt().limitToFirst(10); - // path.endAt().limitToLast(10); - // path.orderByKey().startAt('foo'); - // path.orderByKey().endAt('foo'); - // path.orderByKey().equalTo('foo'); - // path.orderByChild('child'); - // path.orderByChild('child/deep/path'); - // path.orderByValue(); - // path.orderByPriority(); - // }); - - // it('Exposes database as read-only property', () => { - // const path = getRandomNode() as Reference; - // const child = path.child('child'); - - // const db = path.database; - // const dbChild = child.database; - - // expect(db).to.equal(dbChild); - // /** - // * TS throws an error here (as is expected) - // * casting to any to allow the code to run - // */ - // expect(() => ((path as any).database = "can't overwrite")).to.throw(); - // expect(path.database).to.equal(db); - // }); - - // it('Invalid queries throw', () => { - // const path = getRandomNode() as Reference; - - // /** - // * Because we are testing invalid queries, I am casting - // * to `any` to avoid the typechecking error. This can - // * occur when a user uses the SDK through a pure JS - // * client, rather than typescript - // */ - // expect(() => { - // (path as any).limitToLast(); - // }).to.throw(); - // expect(() => { - // (path as any).limitToLast('100'); - // }).to.throw(); - // expect(() => { - // (path as any).limitToLast({ x: 5 }); - // }).to.throw(); - // expect(() => { - // path.limitToLast(100).limitToLast(100); - // }).to.throw(); - // expect(() => { - // path.limitToLast(100).limitToFirst(100); - // }).to.throw(); - // expect(() => { - // path.limitToLast(100).limitToLast(100); - // }).to.throw(); - // expect(() => { - // path.limitToFirst(100).limitToLast(100); - // }).to.throw(); - // expect(() => { - // path.limitToFirst(100).limitToFirst(100); - // }).to.throw(); - // expect(() => { - // path.limitToFirst(100).limitToLast(100); - // }).to.throw(); - // expect(() => { - // path.limitToLast(100).limitToLast(100); - // }).to.throw(); - // expect(() => { - // path.limitToLast(100).limitToFirst(100); - // }).to.throw(); - // expect(() => { - // path.limitToLast(100).limitToLast(100); - // }).to.throw(); - // expect(() => { - // path.orderByPriority().orderByPriority(); - // }).to.throw(); - // expect(() => { - // path.orderByPriority().orderByKey(); - // }).to.throw(); - // expect(() => { - // path.orderByPriority().orderByChild('foo'); - // }).to.throw(); - // expect(() => { - // path.orderByPriority().startAt(true); - // }).to.throw(); - // expect(() => { - // path.orderByPriority().endAt(false); - // }).to.throw(); - // expect(() => { - // path.orderByPriority().equalTo(true); - // }).to.throw(); - // expect(() => { - // path.orderByKey().orderByPriority(); - // }).to.throw(); - // expect(() => { - // path.orderByKey().orderByKey(); - // }).to.throw(); - // expect(() => { - // path.orderByKey().orderByChild('foo'); - // }).to.throw(); - // expect(() => { - // path.orderByChild('foo').orderByPriority(); - // }).to.throw(); - // expect(() => { - // path.orderByChild('foo').orderByKey(); - // }).to.throw(); - // expect(() => { - // path.orderByChild('foo').orderByChild('foo'); - // }).to.throw(); - // expect(() => { - // (path as any).orderByChild('foo').startAt({ a: 1 }); - // }).to.throw(); - // expect(() => { - // (path as any).orderByChild('foo').endAt({ a: 1 }); - // }).to.throw(); - // expect(() => { - // (path as any).orderByChild('foo').equalTo({ a: 1 }); - // }).to.throw(); - // expect(() => { - // path.startAt('foo').startAt('foo'); - // }).to.throw(); - // expect(() => { - // path.startAt('foo').equalTo('foo'); - // }).to.throw(); - // expect(() => { - // path.endAt('foo').endAt('foo'); - // }).to.throw(); - // expect(() => { - // path.endAt('foo').equalTo('foo'); - // }).to.throw(); - // expect(() => { - // path.equalTo('foo').startAt('foo'); - // }).to.throw(); - // expect(() => { - // path.equalTo('foo').endAt('foo'); - // }).to.throw(); - // expect(() => { - // path.equalTo('foo').equalTo('foo'); - // }).to.throw(); - // expect(() => { - // path.orderByKey().startAt('foo', 'foo'); - // }).to.throw(); - // expect(() => { - // path.orderByKey().endAt('foo', 'foo'); - // }).to.throw(); - // expect(() => { - // path.orderByKey().equalTo('foo', 'foo'); - // }).to.throw(); - // expect(() => { - // path.orderByKey().startAt(1); - // }).to.throw(); - // expect(() => { - // path.orderByKey().startAt(true); - // }).to.throw(); - // expect(() => { - // path.orderByKey().startAt(null); - // }).to.throw(); - // expect(() => { - // path.orderByKey().endAt(1); - // }).to.throw(); - // expect(() => { - // path.orderByKey().endAt(true); - // }).to.throw(); - // expect(() => { - // path.orderByKey().endAt(null); - // }).to.throw(); - // expect(() => { - // path.orderByKey().equalTo(1); - // }).to.throw(); - // expect(() => { - // path.orderByKey().equalTo(true); - // }).to.throw(); - // expect(() => { - // path.orderByKey().equalTo(null); - // }).to.throw(); - // expect(() => { - // path.startAt('foo', 'foo').orderByKey(); - // }).to.throw(); - // expect(() => { - // path.endAt('foo', 'foo').orderByKey(); - // }).to.throw(); - // expect(() => { - // path.equalTo('foo', 'foo').orderByKey(); - // }).to.throw(); - // expect(() => { - // path.startAt(1).orderByKey(); - // }).to.throw(); - // expect(() => { - // path.startAt(true).orderByKey(); - // }).to.throw(); - // expect(() => { - // path.endAt(1).orderByKey(); - // }).to.throw(); - // expect(() => { - // path.endAt(true).orderByKey(); - // }).to.throw(); - // }); - - // it('can produce a valid ref', () => { - // const path = getRandomNode() as Reference; - - // const query = path.limitToLast(1); - // const ref = query.ref; - - // expect(ref.toString()).to.equal(path.toString()); - // }); - - // it('Passing invalidKeys to startAt / endAt throws.', () => { - // const f = getRandomNode() as Reference; - // const badKeys = [ - // '.test', - // 'test.', - // 'fo$o', - // '[what', - // 'ever]', - // 'ha#sh', - // '/thing', - // 'th/ing', - // 'thing/' - // ]; - // // Changed from basic array iteration to avoid closure issues accessing mutable state - // _.each(badKeys, badKey => { - // expect(() => { - // f.startAt(null, badKey); - // }).to.throw(); - // expect(() => { - // f.endAt(null, badKey); - // }).to.throw(); - // }); - // }); - - // it('Passing invalid paths to orderBy throws', () => { - // const ref = getRandomNode() as Reference; - // expect(() => { - // ref.orderByChild('$child/foo'); - // }).to.throw(); - // expect(() => { - // ref.orderByChild('$key'); - // }).to.throw(); - // expect(() => { - // ref.orderByChild('$priority'); - // }).to.throw(); - // }); - - // it('Query.queryIdentifier works.', () => { - // const path = getRandomNode() as Reference; - // const queryId = function (query) { - // return query.queryIdentifier(query); - // }; - - // expect(queryId(path)).to.equal('default'); - - // expect(queryId(path.startAt('pri', 'name'))).to.equal( - // '{"sn":"name","sp":"pri"}' - // ); - // expect(queryId(path.startAt('spri').endAt('epri'))).to.equal( - // '{"ep":"epri","sp":"spri"}' - // ); - // expect( - // queryId(path.startAt('spri', 'sname').endAt('epri', 'ename')) - // ).to.equal('{"en":"ename","ep":"epri","sn":"sname","sp":"spri"}'); - // expect(queryId(path.startAt('pri').limitToFirst(100))).to.equal( - // '{"l":100,"sp":"pri","vf":"l"}' - // ); - // expect(queryId(path.startAt('bar').orderByChild('foo'))).to.equal( - // '{"i":"foo","sp":"bar"}' - // ); - // }); - - // it('Passing invalid queries to isEqual throws', () => { - // const ref = getRandomNode() as Reference; - // expect(() => { - // (ref as any).isEqual(); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual(''); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual('foo'); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual({}); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual([]); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual(0); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual(1); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual(NaN); - // }).to.throw(); - // expect(() => { - // ref.isEqual(null); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual({ a: 1 }); - // }).to.throw(); - // expect(() => { - // (ref as any).isEqual(ref, 'extra'); - // }).to.throw(); - // }); - - // it('Query.isEqual works.', () => { - // const path = getRandomNode() as Reference; - // const rootRef = path.root; - // const childRef = rootRef.child('child'); - - // // Equivalent refs - // expect(path.isEqual(path), 'Query.isEqual - 1').to.be.true; - // expect(rootRef.isEqual(rootRef), 'Query.isEqual - 2').to.be.true; - // expect(rootRef.isEqual(childRef.parent), 'Query.isEqual - 3').to.be.true; - // expect(rootRef.child('child').isEqual(childRef), 'Query.isEqual - 4').to.be - // .true; - - // // Refs with different repos - // // NOTE: getFreshRepo() no longer takes a hostname, so this test needs to be reworked. - // // Same in info.test.ts. - // // var rootRefDifferentRepo = TESTS.getFreshRepo(TEST_ALT_NAMESPACE); - // // rootRefDifferentRepo.database.goOffline(); - - // // expect(rootRef.isEqual(rootRefDifferentRepo), 'Query.isEqual - 5').to.be.false; - // // expect(childRef.isEqual(rootRefDifferentRepo.child('child')), 'Query.isEqual - 6').to.be.false; - - // // Refs with different paths - // expect(rootRef.isEqual(childRef), 'Query.isEqual - 7').to.be.false; - // expect(childRef.isEqual(rootRef.child('otherChild')), 'Query.isEqual - 8') - // .to.be.false; - - // const childQueryLast25 = childRef.limitToLast(25); - // const childQueryOrderedByKey = childRef.orderByKey(); - // const childQueryOrderedByPriority = childRef.orderByPriority(); - // const childQueryOrderedByTimestamp = childRef.orderByChild('timestamp'); - // const childQueryStartAt1 = childQueryOrderedByTimestamp.startAt(1); - // const childQueryStartAt2 = childQueryOrderedByTimestamp.startAt(2); - // const childQueryEndAt2 = childQueryOrderedByTimestamp.endAt(2); - // const childQueryStartAt1EndAt2 = childQueryOrderedByTimestamp - // .startAt(1) - // .endAt(2); - - // // Equivalent queries - // expect(childRef.isEqual(childQueryLast25.ref), 'Query.isEqual - 9').to.be - // .true; - // expect( - // childQueryLast25.isEqual(childRef.limitToLast(25)), - // 'Query.isEqual - 10' - // ).to.be.true; - // expect( - // childQueryStartAt1EndAt2.isEqual( - // childQueryOrderedByTimestamp.startAt(1).endAt(2) - // ), - // 'Query.isEqual - 11' - // ).to.be.true; - - // // Non-equivalent queries - // expect(childQueryLast25.isEqual(childRef), 'Query.isEqual - 12').to.be - // .false; - // expect( - // childQueryLast25.isEqual(childQueryOrderedByKey), - // 'Query.isEqual - 13' - // ).to.be.false; - // expect( - // childQueryLast25.isEqual(childQueryOrderedByPriority), - // 'Query.isEqual - 14' - // ).to.be.false; - // expect( - // childQueryLast25.isEqual(childQueryOrderedByTimestamp), - // 'Query.isEqual - 15' - // ).to.be.false; - // expect( - // childQueryOrderedByKey.isEqual(childQueryOrderedByPriority), - // 'Query.isEqual - 16' - // ).to.be.false; - // expect( - // childQueryOrderedByKey.isEqual(childQueryOrderedByTimestamp), - // 'Query.isEqual - 17' - // ).to.be.false; - // expect(childQueryStartAt1.isEqual(childQueryStartAt2), 'Query.isEqual - 18') - // .to.be.false; - // expect( - // childQueryStartAt1.isEqual(childQueryStartAt1EndAt2), - // 'Query.isEqual - 19' - // ).to.be.false; - // expect(childQueryEndAt2.isEqual(childQueryStartAt2), 'Query.isEqual - 20') - // .to.be.false; - // expect( - // childQueryEndAt2.isEqual(childQueryStartAt1EndAt2), - // 'Query.isEqual - 21' - // ).to.be.false; - // }); - - // it('Query.off can be called on the default query.', () => { - // const path = getRandomNode() as Reference; - // let eventFired = false; - - // const callback = function () { - // eventFired = true; - // }; - // path.limitToLast(5).on('value', callback); - - // path.set({ a: 5, b: 6 }); - // expect(eventFired).to.be.true; - // eventFired = false; - - // path.off('value', callback); - // path.set({ a: 6, b: 5 }); - // expect(eventFired).to.be.false; - // }); - - // it('Query.off can be called on the specific query.', () => { - // const path = getRandomNode() as Reference; - // let eventFired = false; - - // const callback = function () { - // eventFired = true; - // }; - // path.limitToLast(5).on('value', callback); - - // path.set({ a: 5, b: 6 }); - // expect(eventFired).to.be.true; - // eventFired = false; - - // path.limitToLast(5).off('value', callback); - // path.set({ a: 6, b: 5 }); - // expect(eventFired).to.be.false; - // }); - - // it('Query.off can be called without a callback specified.', () => { - // const path = getRandomNode() as Reference; - // let eventFired = false; - - // const callback1 = function () { - // eventFired = true; - // }; - // const callback2 = function () { - // eventFired = true; - // }; - // path.on('value', callback1); - // path.limitToLast(5).on('value', callback2); - - // path.set({ a: 5, b: 6 }); - // expect(eventFired).to.be.true; - // eventFired = false; - - // path.off('value'); - // path.set({ a: 6, b: 5 }); - // expect(eventFired).to.be.false; - // }); - - // it('Query.off can be called without an event type or callback specified.', () => { - // const path = getRandomNode() as Reference; - // let eventFired = false; - - // const callback1 = function () { - // eventFired = true; - // }; - // const callback2 = function () { - // eventFired = true; - // }; - // path.on('value', callback1); - // path.limitToLast(5).on('value', callback2); - - // path.set({ a: 5, b: 6 }); - // expect(eventFired).to.be.true; - // eventFired = false; - - // path.off(); - // path.set({ a: 6, b: 5 }); - // expect(eventFired).to.be.false; - // }); - - // it('Query.off respects provided context (for value events).', () => { - // const ref = getRandomNode() as Reference; - - // const a = new EventReceiver(), - // b = new EventReceiver(); - - // ref.on('value', a.onValue, a); - // ref.on('value', b.onValue, b); - - // ref.set('hello!'); - // expect(a.gotValue).to.be.true; - // expect(b.gotValue).to.be.true; - // a.gotValue = b.gotValue = false; - - // // unsubscribe b - // ref.off('value', b.onValue, b); - - // // Only a should get this event. - // ref.set(42); - // expect(a.gotValue).to.be.true; - // expect(b.gotValue).to.be.false; - - // ref.off('value', a.onValue, a); - // }); - - // it('Query.off respects provided context (for child events).', () => { - // const ref = getRandomNode() as Reference; - - // const a = new EventReceiver(), - // b = new EventReceiver(); - - // ref.on('child_added', a.onChildAdded, a); - // ref.on('child_added', b.onChildAdded, b); - - // ref.push('hello!'); - // expect(a.gotChildAdded).to.be.true; - // expect(b.gotChildAdded).to.be.true; - // a.gotChildAdded = b.gotChildAdded = false; - - // // unsubscribe b. - // ref.off('child_added', b.onChildAdded, b); - - // // Only a should get this event. - // ref.push(42); - // expect(a.gotChildAdded).to.be.true; - // expect(b.gotChildAdded).to.be.false; - - // ref.off('child_added', a.onChildAdded, a); - // }); - - // it('Query.off with no callback/context removes all callbacks, even with contexts (for value events).', () => { - // const ref = getRandomNode() as Reference; - - // const a = new EventReceiver(), - // b = new EventReceiver(); - - // ref.on('value', a.onValue, a); - // ref.on('value', b.onValue, b); - - // ref.set('hello!'); - // expect(a.gotValue).to.be.true; - // expect(b.gotValue).to.be.true; - // a.gotValue = b.gotValue = false; - - // // unsubscribe value events. - // ref.off('value'); - - // // Should get no events. - // ref.set(42); - // expect(a.gotValue).to.be.false; - // expect(b.gotValue).to.be.false; - // }); + it('Can create basic queries.', () => { + const path = getRandomNode() as Reference; + + path.limitToLast(10); + path.startAt('199').limitToFirst(10); + path.startAt('199', 'test').limitToFirst(10); + path.endAt('199').limitToLast(1); + path.startAt('50', 'test').endAt('100', 'tree'); + path.startAt('4').endAt('10'); + path.startAt().limitToFirst(10); + path.endAt().limitToLast(10); + path.orderByKey().startAt('foo'); + path.orderByKey().endAt('foo'); + path.orderByKey().equalTo('foo'); + path.orderByChild('child'); + path.orderByChild('child/deep/path'); + path.orderByValue(); + path.orderByPriority(); + }); + + it('Exposes database as read-only property', () => { + const path = getRandomNode() as Reference; + const child = path.child('child'); + + const db = path.database; + const dbChild = child.database; + + expect(db).to.equal(dbChild); + /** + * TS throws an error here (as is expected) + * casting to any to allow the code to run + */ + expect(() => ((path as any).database = "can't overwrite")).to.throw(); + expect(path.database).to.equal(db); + }); + + it('Invalid queries throw', () => { + const path = getRandomNode() as Reference; + + /** + * Because we are testing invalid queries, I am casting + * to `any` to avoid the typechecking error. This can + * occur when a user uses the SDK through a pure JS + * client, rather than typescript + */ + expect(() => { + (path as any).limitToLast(); + }).to.throw(); + expect(() => { + (path as any).limitToLast('100'); + }).to.throw(); + expect(() => { + (path as any).limitToLast({ x: 5 }); + }).to.throw(); + expect(() => { + path.limitToLast(100).limitToLast(100); + }).to.throw(); + expect(() => { + path.limitToLast(100).limitToFirst(100); + }).to.throw(); + expect(() => { + path.limitToLast(100).limitToLast(100); + }).to.throw(); + expect(() => { + path.limitToFirst(100).limitToLast(100); + }).to.throw(); + expect(() => { + path.limitToFirst(100).limitToFirst(100); + }).to.throw(); + expect(() => { + path.limitToFirst(100).limitToLast(100); + }).to.throw(); + expect(() => { + path.limitToLast(100).limitToLast(100); + }).to.throw(); + expect(() => { + path.limitToLast(100).limitToFirst(100); + }).to.throw(); + expect(() => { + path.limitToLast(100).limitToLast(100); + }).to.throw(); + expect(() => { + path.orderByPriority().orderByPriority(); + }).to.throw(); + expect(() => { + path.orderByPriority().orderByKey(); + }).to.throw(); + expect(() => { + path.orderByPriority().orderByChild('foo'); + }).to.throw(); + expect(() => { + path.orderByPriority().startAt(true); + }).to.throw(); + expect(() => { + path.orderByPriority().endAt(false); + }).to.throw(); + expect(() => { + path.orderByPriority().equalTo(true); + }).to.throw(); + expect(() => { + path.orderByKey().orderByPriority(); + }).to.throw(); + expect(() => { + path.orderByKey().orderByKey(); + }).to.throw(); + expect(() => { + path.orderByKey().orderByChild('foo'); + }).to.throw(); + expect(() => { + path.orderByChild('foo').orderByPriority(); + }).to.throw(); + expect(() => { + path.orderByChild('foo').orderByKey(); + }).to.throw(); + expect(() => { + path.orderByChild('foo').orderByChild('foo'); + }).to.throw(); + expect(() => { + (path as any).orderByChild('foo').startAt({ a: 1 }); + }).to.throw(); + expect(() => { + (path as any).orderByChild('foo').endAt({ a: 1 }); + }).to.throw(); + expect(() => { + (path as any).orderByChild('foo').equalTo({ a: 1 }); + }).to.throw(); + expect(() => { + path.startAt('foo').startAt('foo'); + }).to.throw(); + expect(() => { + path.startAt('foo').equalTo('foo'); + }).to.throw(); + expect(() => { + path.endAt('foo').endAt('foo'); + }).to.throw(); + expect(() => { + path.endAt('foo').equalTo('foo'); + }).to.throw(); + expect(() => { + path.equalTo('foo').startAt('foo'); + }).to.throw(); + expect(() => { + path.equalTo('foo').endAt('foo'); + }).to.throw(); + expect(() => { + path.equalTo('foo').equalTo('foo'); + }).to.throw(); + expect(() => { + path.orderByKey().startAt('foo', 'foo'); + }).to.throw(); + expect(() => { + path.orderByKey().endAt('foo', 'foo'); + }).to.throw(); + expect(() => { + path.orderByKey().equalTo('foo', 'foo'); + }).to.throw(); + expect(() => { + path.orderByKey().startAt(1); + }).to.throw(); + expect(() => { + path.orderByKey().startAt(true); + }).to.throw(); + expect(() => { + path.orderByKey().startAt(null); + }).to.throw(); + expect(() => { + path.orderByKey().endAt(1); + }).to.throw(); + expect(() => { + path.orderByKey().endAt(true); + }).to.throw(); + expect(() => { + path.orderByKey().endAt(null); + }).to.throw(); + expect(() => { + path.orderByKey().equalTo(1); + }).to.throw(); + expect(() => { + path.orderByKey().equalTo(true); + }).to.throw(); + expect(() => { + path.orderByKey().equalTo(null); + }).to.throw(); + expect(() => { + path.startAt('foo', 'foo').orderByKey(); + }).to.throw(); + expect(() => { + path.endAt('foo', 'foo').orderByKey(); + }).to.throw(); + expect(() => { + path.equalTo('foo', 'foo').orderByKey(); + }).to.throw(); + expect(() => { + path.startAt(1).orderByKey(); + }).to.throw(); + expect(() => { + path.startAt(true).orderByKey(); + }).to.throw(); + expect(() => { + path.endAt(1).orderByKey(); + }).to.throw(); + expect(() => { + path.endAt(true).orderByKey(); + }).to.throw(); + }); + + it('can produce a valid ref', () => { + const path = getRandomNode() as Reference; + + const query = path.limitToLast(1); + const ref = query.ref; + + expect(ref.toString()).to.equal(path.toString()); + }); + + it('Passing invalidKeys to startAt / endAt throws.', () => { + const f = getRandomNode() as Reference; + const badKeys = [ + '.test', + 'test.', + 'fo$o', + '[what', + 'ever]', + 'ha#sh', + '/thing', + 'th/ing', + 'thing/' + ]; + // Changed from basic array iteration to avoid closure issues accessing mutable state + _.each(badKeys, badKey => { + expect(() => { + f.startAt(null, badKey); + }).to.throw(); + expect(() => { + f.endAt(null, badKey); + }).to.throw(); + }); + }); + + it('Passing invalid paths to orderBy throws', () => { + const ref = getRandomNode() as Reference; + expect(() => { + ref.orderByChild('$child/foo'); + }).to.throw(); + expect(() => { + ref.orderByChild('$key'); + }).to.throw(); + expect(() => { + ref.orderByChild('$priority'); + }).to.throw(); + }); + + it('Query.queryIdentifier works.', () => { + const path = getRandomNode() as Reference; + const queryId = function (query) { + return query.queryIdentifier(query); + }; + + expect(queryId(path)).to.equal('default'); + + expect(queryId(path.startAt('pri', 'name'))).to.equal( + '{"sn":"name","sp":"pri"}' + ); + expect(queryId(path.startAt('spri').endAt('epri'))).to.equal( + '{"ep":"epri","sp":"spri"}' + ); + expect( + queryId(path.startAt('spri', 'sname').endAt('epri', 'ename')) + ).to.equal('{"en":"ename","ep":"epri","sn":"sname","sp":"spri"}'); + expect(queryId(path.startAt('pri').limitToFirst(100))).to.equal( + '{"l":100,"sp":"pri","vf":"l"}' + ); + expect(queryId(path.startAt('bar').orderByChild('foo'))).to.equal( + '{"i":"foo","sp":"bar"}' + ); + }); + + it('Passing invalid queries to isEqual throws', () => { + const ref = getRandomNode() as Reference; + expect(() => { + (ref as any).isEqual(); + }).to.throw(); + expect(() => { + (ref as any).isEqual(''); + }).to.throw(); + expect(() => { + (ref as any).isEqual('foo'); + }).to.throw(); + expect(() => { + (ref as any).isEqual({}); + }).to.throw(); + expect(() => { + (ref as any).isEqual([]); + }).to.throw(); + expect(() => { + (ref as any).isEqual(0); + }).to.throw(); + expect(() => { + (ref as any).isEqual(1); + }).to.throw(); + expect(() => { + (ref as any).isEqual(NaN); + }).to.throw(); + expect(() => { + ref.isEqual(null); + }).to.throw(); + expect(() => { + (ref as any).isEqual({ a: 1 }); + }).to.throw(); + expect(() => { + (ref as any).isEqual(ref, 'extra'); + }).to.throw(); + }); + + it('Query.isEqual works.', () => { + const path = getRandomNode() as Reference; + const rootRef = path.root; + const childRef = rootRef.child('child'); + + // Equivalent refs + expect(path.isEqual(path), 'Query.isEqual - 1').to.be.true; + expect(rootRef.isEqual(rootRef), 'Query.isEqual - 2').to.be.true; + expect(rootRef.isEqual(childRef.parent), 'Query.isEqual - 3').to.be.true; + expect(rootRef.child('child').isEqual(childRef), 'Query.isEqual - 4').to.be + .true; + + // Refs with different repos + // NOTE: getFreshRepo() no longer takes a hostname, so this test needs to be reworked. + // Same in info.test.ts. + // var rootRefDifferentRepo = TESTS.getFreshRepo(TEST_ALT_NAMESPACE); + // rootRefDifferentRepo.database.goOffline(); + + // expect(rootRef.isEqual(rootRefDifferentRepo), 'Query.isEqual - 5').to.be.false; + // expect(childRef.isEqual(rootRefDifferentRepo.child('child')), 'Query.isEqual - 6').to.be.false; + + // Refs with different paths + expect(rootRef.isEqual(childRef), 'Query.isEqual - 7').to.be.false; + expect(childRef.isEqual(rootRef.child('otherChild')), 'Query.isEqual - 8') + .to.be.false; + + const childQueryLast25 = childRef.limitToLast(25); + const childQueryOrderedByKey = childRef.orderByKey(); + const childQueryOrderedByPriority = childRef.orderByPriority(); + const childQueryOrderedByTimestamp = childRef.orderByChild('timestamp'); + const childQueryStartAt1 = childQueryOrderedByTimestamp.startAt(1); + const childQueryStartAt2 = childQueryOrderedByTimestamp.startAt(2); + const childQueryEndAt2 = childQueryOrderedByTimestamp.endAt(2); + const childQueryStartAt1EndAt2 = childQueryOrderedByTimestamp + .startAt(1) + .endAt(2); + + // Equivalent queries + expect(childRef.isEqual(childQueryLast25.ref), 'Query.isEqual - 9').to.be + .true; + expect( + childQueryLast25.isEqual(childRef.limitToLast(25)), + 'Query.isEqual - 10' + ).to.be.true; + expect( + childQueryStartAt1EndAt2.isEqual( + childQueryOrderedByTimestamp.startAt(1).endAt(2) + ), + 'Query.isEqual - 11' + ).to.be.true; + + // Non-equivalent queries + expect(childQueryLast25.isEqual(childRef), 'Query.isEqual - 12').to.be + .false; + expect( + childQueryLast25.isEqual(childQueryOrderedByKey), + 'Query.isEqual - 13' + ).to.be.false; + expect( + childQueryLast25.isEqual(childQueryOrderedByPriority), + 'Query.isEqual - 14' + ).to.be.false; + expect( + childQueryLast25.isEqual(childQueryOrderedByTimestamp), + 'Query.isEqual - 15' + ).to.be.false; + expect( + childQueryOrderedByKey.isEqual(childQueryOrderedByPriority), + 'Query.isEqual - 16' + ).to.be.false; + expect( + childQueryOrderedByKey.isEqual(childQueryOrderedByTimestamp), + 'Query.isEqual - 17' + ).to.be.false; + expect(childQueryStartAt1.isEqual(childQueryStartAt2), 'Query.isEqual - 18') + .to.be.false; + expect( + childQueryStartAt1.isEqual(childQueryStartAt1EndAt2), + 'Query.isEqual - 19' + ).to.be.false; + expect(childQueryEndAt2.isEqual(childQueryStartAt2), 'Query.isEqual - 20') + .to.be.false; + expect( + childQueryEndAt2.isEqual(childQueryStartAt1EndAt2), + 'Query.isEqual - 21' + ).to.be.false; + }); + + it('Query.off can be called on the default query.', () => { + const path = getRandomNode() as Reference; + let eventFired = false; + + const callback = function () { + eventFired = true; + }; + path.limitToLast(5).on('value', callback); + + path.set({ a: 5, b: 6 }); + expect(eventFired).to.be.true; + eventFired = false; + + path.off('value', callback); + path.set({ a: 6, b: 5 }); + expect(eventFired).to.be.false; + }); + + it('Query.off can be called on the specific query.', () => { + const path = getRandomNode() as Reference; + let eventFired = false; + + const callback = function () { + eventFired = true; + }; + path.limitToLast(5).on('value', callback); + + path.set({ a: 5, b: 6 }); + expect(eventFired).to.be.true; + eventFired = false; + + path.limitToLast(5).off('value', callback); + path.set({ a: 6, b: 5 }); + expect(eventFired).to.be.false; + }); + + it('Query.off can be called without a callback specified.', () => { + const path = getRandomNode() as Reference; + let eventFired = false; + + const callback1 = function () { + eventFired = true; + }; + const callback2 = function () { + eventFired = true; + }; + path.on('value', callback1); + path.limitToLast(5).on('value', callback2); + + path.set({ a: 5, b: 6 }); + expect(eventFired).to.be.true; + eventFired = false; + + path.off('value'); + path.set({ a: 6, b: 5 }); + expect(eventFired).to.be.false; + }); + + it('Query.off can be called without an event type or callback specified.', () => { + const path = getRandomNode() as Reference; + let eventFired = false; + + const callback1 = function () { + eventFired = true; + }; + const callback2 = function () { + eventFired = true; + }; + path.on('value', callback1); + path.limitToLast(5).on('value', callback2); + + path.set({ a: 5, b: 6 }); + expect(eventFired).to.be.true; + eventFired = false; + + path.off(); + path.set({ a: 6, b: 5 }); + expect(eventFired).to.be.false; + }); + + it('Query.off respects provided context (for value events).', () => { + const ref = getRandomNode() as Reference; + + const a = new EventReceiver(), + b = new EventReceiver(); + + ref.on('value', a.onValue, a); + ref.on('value', b.onValue, b); + + ref.set('hello!'); + expect(a.gotValue).to.be.true; + expect(b.gotValue).to.be.true; + a.gotValue = b.gotValue = false; + + // unsubscribe b + ref.off('value', b.onValue, b); + + // Only a should get this event. + ref.set(42); + expect(a.gotValue).to.be.true; + expect(b.gotValue).to.be.false; + + ref.off('value', a.onValue, a); + }); + + it('Query.off respects provided context (for child events).', () => { + const ref = getRandomNode() as Reference; + + const a = new EventReceiver(), + b = new EventReceiver(); + + ref.on('child_added', a.onChildAdded, a); + ref.on('child_added', b.onChildAdded, b); + + ref.push('hello!'); + expect(a.gotChildAdded).to.be.true; + expect(b.gotChildAdded).to.be.true; + a.gotChildAdded = b.gotChildAdded = false; + + // unsubscribe b. + ref.off('child_added', b.onChildAdded, b); + + // Only a should get this event. + ref.push(42); + expect(a.gotChildAdded).to.be.true; + expect(b.gotChildAdded).to.be.false; + + ref.off('child_added', a.onChildAdded, a); + }); + + it('Query.off with no callback/context removes all callbacks, even with contexts (for value events).', () => { + const ref = getRandomNode() as Reference; + + const a = new EventReceiver(), + b = new EventReceiver(); + + ref.on('value', a.onValue, a); + ref.on('value', b.onValue, b); + + ref.set('hello!'); + expect(a.gotValue).to.be.true; + expect(b.gotValue).to.be.true; + a.gotValue = b.gotValue = false; + + // unsubscribe value events. + ref.off('value'); + + // Should get no events. + ref.set(42); + expect(a.gotValue).to.be.false; + expect(b.gotValue).to.be.false; + }); + + it('Query.off with no callback/context removes all callbacks, even with contexts (for child events).', () => { + const ref = getRandomNode() as Reference; + + const a = new EventReceiver(), + b = new EventReceiver(); + + ref.on('child_added', a.onChildAdded, a); + ref.on('child_added', b.onChildAdded, b); + + ref.push('hello!'); + expect(a.gotChildAdded).to.be.true; + expect(b.gotChildAdded).to.be.true; + a.gotChildAdded = b.gotChildAdded = false; + + // unsubscribe child_added. + ref.off('child_added'); + + // Should get no events. + ref.push(42); + expect(a.gotChildAdded).to.be.false; + expect(b.gotChildAdded).to.be.false; + }); + + it('Query.off with no event type / callback removes all callbacks (even those with contexts).', () => { + const ref = getRandomNode() as Reference; + + const a = new EventReceiver(), + b = new EventReceiver(); + + ref.on('value', a.onValue, a); + ref.on('value', b.onValue, b); + ref.on('child_added', a.onChildAdded, a); + ref.on('child_added', b.onChildAdded, b); + + ref.set(null); + ref.push('hello!'); + expect(a.gotChildAdded).to.be.true; + expect(a.gotValue).to.be.true; + expect(b.gotChildAdded).to.be.true; + expect(b.gotValue).to.be.true; + a.gotValue = b.gotValue = a.gotChildAdded = b.gotChildAdded = false; + + // unsubscribe all events. + ref.off(); + + // We should get no events. + ref.push(42); + expect(a.gotChildAdded).to.be.false; + expect(b.gotChildAdded).to.be.false; + expect(a.gotValue).to.be.false; + expect(b.gotValue).to.be.false; + }); + + it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are kept.', () => { + const node = getRandomNode() as Reference; + let snap = null; + node.limitToLast(5).on('value', s => { + snap = s; + }); + + node.set({}); + for (let i = 0; i < 10; i++) { + node.push().set(i); + } + + let expected = 5; + snap.forEach(child => { + expect(child.val()).to.equal(expected); + expected++; + }); + + expect(expected).to.equal(10); + }); + + it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are sent from server.', async () => { + const node = getRandomNode() as Reference; + await node.set({}); + + const pushPromises = []; + + for (let i = 0; i < 10; i++) { + const promise = node.push().set(i); + pushPromises.push(promise); + } + + await Promise.all(pushPromises); + + const ea = EventAccumulatorFactory.waitsForCount(1); + + node.limitToLast(5).on('value', snap => { + ea.addEvent(snap); + }); + + const [snap] = await ea.promise; + + let expected = 5; + + snap.forEach(child => { + expect(child.val()).to.equal(expected); + expected++; + }); + + expect(expected).to.equal(10); + }); + + it('Set various limits, ensure resulting data is correct.', async () => { + const node = getRandomNode() as Reference; + + await node.set({ a: 1, b: 2, c: 3 }); + + const tasks: TaskList = [ + [node.limitToLast(1), { c: 3 }], + [node.endAt().limitToLast(1), { c: 3 }], + [node.limitToLast(2), { b: 2, c: 3 }], + [node.limitToLast(3), { a: 1, b: 2, c: 3 }], + [node.limitToLast(4), { a: 1, b: 2, c: 3 }] + ]; + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Set various limits with a startAt name, ensure resulting data is correct.', async () => { + const node = getRandomNode() as Reference; + + await node.set({ a: 1, b: 2, c: 3 }); + + const tasks: TaskList = [ + [node.startAt().limitToFirst(1), { a: 1 }], + [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], + [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], + [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], + [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }], + [node.startAt(null, 'b').limitToLast(1), { c: 3 }], + [node.startAt(null, 'b').limitToLast(1), { c: 3 }], + [node.startAt(null, 'b').limitToLast(2), { b: 2, c: 3 }], + [node.startAt(null, 'b').limitToLast(3), { b: 2, c: 3 }], + [node.limitToFirst(1).startAt(null, 'c'), { c: 3 }], + [node.limitToFirst(1).startAt(null, 'b'), { b: 2 }], + [node.limitToFirst(2).startAt(null, 'b'), { b: 2, c: 3 }], + [node.limitToFirst(3).startAt(null, 'b'), { b: 2, c: 3 }], + [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], + [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], + [node.limitToLast(2).startAt(null, 'b'), { b: 2, c: 3 }], + [node.limitToLast(3).startAt(null, 'b'), { b: 2, c: 3 }] + ]; + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Set various limits with a endAt name, ensure resulting data is correct.', async () => { + const node = getRandomNode() as Reference; + + await node.set({ a: 1, b: 2, c: 3 }); + + const tasks: TaskList = [ + [node.endAt().limitToFirst(1), { a: 1 }], + [node.endAt(null, 'c').limitToFirst(1), { a: 1 }], + [node.endAt(null, 'b').limitToFirst(1), { a: 1 }], + [node.endAt(null, 'b').limitToFirst(2), { a: 1, b: 2 }], + [node.endAt(null, 'b').limitToFirst(3), { a: 1, b: 2 }], + [node.endAt(null, 'c').limitToLast(1), { c: 3 }], + [node.endAt(null, 'b').limitToLast(1), { b: 2 }], + [node.endAt(null, 'b').limitToLast(2), { a: 1, b: 2 }], + [node.endAt(null, 'b').limitToLast(3), { a: 1, b: 2 }], + [node.limitToFirst(1).endAt(null, 'c'), { a: 1 }], + [node.limitToFirst(1).endAt(null, 'b'), { a: 1 }], + [node.limitToFirst(2).endAt(null, 'b'), { a: 1, b: 2 }], + [node.limitToFirst(3).endAt(null, 'b'), { a: 1, b: 2 }], + [node.limitToLast(1).endAt(null, 'c'), { c: 3 }], + [node.limitToLast(1).endAt(null, 'b'), { b: 2 }], + [node.limitToLast(2).endAt(null, 'b'), { a: 1, b: 2 }], + [node.limitToLast(3).endAt(null, 'b'), { a: 1, b: 2 }] + ]; + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Set various limits with a startAt name, ensure resulting data is correct from the server.', async () => { + const node = getRandomNode() as Reference; + + await node.set({ a: 1, b: 2, c: 3 }); + + const tasks: TaskList = [ + [node.startAt().limitToFirst(1), { a: 1 }], + [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], + [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], + // NOTE: technically there is a race condition here. The limitToFirst(1) query will return a single value, which will be + // raised for the limitToFirst(2) callback as well, if it exists already. However, once the server gets the limitToFirst(2) + // query, it will send more data and the correct state will be returned. + [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], + [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }] + ]; + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Set limit, ensure child_removed and child_added events are fired when limit is hit.', () => { + const node = getRandomNode() as Reference; + let added = '', + removed = ''; + node.limitToLast(2).on('child_added', snap => { + added += snap.key + ' '; + }); + node.limitToLast(2).on('child_removed', snap => { + removed += snap.key + ' '; + }); + node.set({ a: 1, b: 2, c: 3 }); + + expect(added).to.equal('b c '); + expect(removed).to.equal(''); + + added = ''; + node.child('d').set(4); + expect(added).to.equal('d '); + expect(removed).to.equal('b '); + }); + + it('Set limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { + const node = getRandomNode() as Reference; + + await node.set({ a: 1, b: 2, c: 3 }); + + const ea = EventAccumulatorFactory.waitsForCount(2); + + let added = '', + removed = ''; + node.limitToLast(2).on('child_added', snap => { + added += snap.key + ' '; + ea.addEvent(); + }); + node.limitToLast(2).on('child_removed', snap => { + removed += snap.key + ' '; + }); + + await ea.promise; + + expect(added).to.equal('b c '); + expect(removed).to.equal(''); + + added = ''; + await node.child('d').set(4); + + expect(added).to.equal('d '); + expect(removed).to.equal('b '); + }); + + it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit.', () => { + const node = getRandomNode() as Reference; + + let added = '', + removed = ''; + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_added', snap => { + added += snap.key + ' '; + }); + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_removed', snap => { + removed += snap.key + ' '; + }); + node.set({ a: 1, b: 2, c: 3 }); + expect(added).to.equal('a b '); + expect(removed).to.equal(''); + + added = ''; + node.child('aa').set(4); + expect(added).to.equal('aa '); + expect(removed).to.equal('b '); + }); + + it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { + const node = getRandomNode() as Reference; + + await node.set({ a: 1, b: 2, c: 3 }); + const ea = EventAccumulatorFactory.waitsForCount(2); + + let added = '', + removed = ''; + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_added', snap => { + added += snap.key + ' '; + ea.addEvent(); + }); + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_removed', snap => { + removed += snap.key + ' '; + }); + + await ea.promise; + + expect(added).to.equal('a b '); + expect(removed).to.equal(''); + + added = ''; + await node.child('aa').set(4); + + expect(added).to.equal('aa '); + expect(removed).to.equal('b '); + }); + + it("Set start and limit, ensure child_added events are fired when limit isn't hit yet.", () => { + const node = getRandomNode() as Reference; + + let added = '', + removed = ''; + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_added', snap => { + added += snap.key + ' '; + }); + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_removed', snap => { + removed += snap.key + ' '; + }); + node.set({ c: 3 }); + expect(added).to.equal('c '); + expect(removed).to.equal(''); + + added = ''; + node.child('b').set(4); + expect(added).to.equal('b '); + expect(removed).to.equal(''); + }); + + it("Set start and limit, ensure child_added events are fired when limit isn't hit yet, using server data", async () => { + const node = getRandomNode() as Reference; + + await node.set({ c: 3 }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + + let added = ''; + let removed = ''; + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_added', snap => { + added += snap.key + ' '; + ea.addEvent(); + }); + node + .startAt(null, 'a') + .limitToFirst(2) + .on('child_removed', snap => { + removed += snap.key + ' '; + }); + + await ea.promise; + + expect(added).to.equal('c '); + expect(removed).to.equal(''); + + added = ''; + await node.child('b').set(4); + + expect(added).to.equal('b '); + expect(removed).to.equal(''); + }); + + it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item.', async () => { + const node = getRandomNode() as Reference; + const ea = EventAccumulatorFactory.waitsForCount(1); + + let added = '', + removed = ''; + node.limitToLast(2).on('child_added', snap => { + added += snap.key + ' '; + ea.addEvent(); + }); + node.limitToLast(2).on('child_removed', snap => { + removed += snap.key + ' '; + }); + node.set({ a: 1, b: 2, c: 3 }); + expect(added).to.equal('b c '); + expect(removed).to.equal(''); + + added = ''; + node.child('b').remove(); + expect(removed).to.equal('b '); + + await ea.promise; + }); + + it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item. Using server data', async () => { + const node = getRandomNode() as Reference; + + await node.set({ a: 1, b: 2, c: 3 }); + + let ea = EventAccumulatorFactory.waitsForCount(2); + let added = '', + removed = ''; + node.limitToLast(2).on('child_added', snap => { + added += snap.key + ' '; + ea.addEvent(); + }); + node.limitToLast(2).on('child_removed', snap => { + removed += snap.key + ' '; + }); + + await ea.promise; + + expect(added).to.equal('b c '); + expect(removed).to.equal(''); + + // We are going to wait for one more event before closing + ea = EventAccumulatorFactory.waitsForCount(1); + added = ''; + await node.child('b').remove(); + + expect(removed).to.equal('b '); + + await ea.promise; + expect(added).to.equal('a '); + }); + + it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more.', () => { + const node = getRandomNode() as Reference; + + let added = '', + removed = ''; + node.limitToLast(2).on('child_added', snap => { + added += snap.key + ' '; + }); + node.limitToLast(2).on('child_removed', snap => { + removed += snap.key + ' '; + }); + node.set({ b: 2, c: 3 }); + expect(added).to.equal('b c '); + expect(removed).to.equal(''); + + added = ''; + node.child('b').remove(); + expect(added).to.equal(''); + expect(removed).to.equal('b '); + node.child('c').remove(); + expect(removed).to.equal('b c '); + }); + + it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more. Using server data', async () => { + const node = getRandomNode() as Reference; + const ea = EventAccumulatorFactory.waitsForCount(2); + let added = ''; + let removed = ''; + await node.set({ b: 2, c: 3 }); + + node.limitToLast(2).on('child_added', snap => { + added += snap.key + ' '; + ea.addEvent(); + }); + node.limitToLast(2).on('child_removed', snap => { + removed += snap.key + ' '; + }); + + await ea.promise; + + expect(added).to.equal('b c '); + expect(removed).to.equal(''); + + added = ''; + + await node.child('b').remove(); + + expect(added).to.equal(''); + expect(removed).to.equal('b '); + }); + + it('Ensure startAt / endAt with priority works.', async () => { + const node = getRandomNode() as Reference; + + const tasks: TaskList = [ + [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], + [node.startAt('w').endAt('w'), { d: 4 }], + [node.startAt('a').endAt('c'), null] + ]; + + await node.set({ + a: { '.value': 1, '.priority': 'z' }, + b: { '.value': 2, '.priority': 'y' }, + c: { '.value': 3, '.priority': 'x' }, + d: { '.value': 4, '.priority': 'w' } + }); + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Ensure startAt / endAt with priority work with server data.', async () => { + const node = getRandomNode() as Reference; + + await node.set({ + a: { '.value': 1, '.priority': 'z' }, + b: { '.value': 2, '.priority': 'y' }, + c: { '.value': 3, '.priority': 'x' }, + d: { '.value': 4, '.priority': 'w' } + }); + + const tasks: TaskList = [ + [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], + [node.startAt('w').endAt('w'), { d: 4 }], + [node.startAt('a').endAt('c'), null] + ]; + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Ensure startAt / endAt with priority and name works.', async () => { + const node = getRandomNode() as Reference; + + await node.set({ + a: { '.value': 1, '.priority': 1 }, + b: { '.value': 2, '.priority': 1 }, + c: { '.value': 3, '.priority': 2 }, + d: { '.value': 4, '.priority': 2 } + }); + + const tasks: TaskList = [ + [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], + [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], + [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] + ]; + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Ensure startAt / endAt with priority and name work with server data', async () => { + const node = getRandomNode() as Reference; + + await node.set({ + a: { '.value': 1, '.priority': 1 }, + b: { '.value': 2, '.priority': 1 }, + c: { '.value': 3, '.priority': 2 }, + d: { '.value': 4, '.priority': 2 } + }); + const tasks: TaskList = [ + [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], + [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], + [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] + ]; + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Ensure startAt / endAt with priority and name works (2).', () => { + const node = getRandomNode() as Reference; + + const tasks: TaskList = [ + [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], + [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], + [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] + ]; + + node.set({ + c: { '.value': 3, '.priority': 1 }, + d: { '.value': 4, '.priority': 1 }, + a: { '.value': 1, '.priority': 2 }, + b: { '.value': 2, '.priority': 2 } + }); + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Ensure startAt / endAt with priority and name works (2). With server data', async () => { + const node = getRandomNode() as Reference; + + await node.set({ + c: { '.value': 3, '.priority': 1 }, + d: { '.value': 4, '.priority': 1 }, + a: { '.value': 1, '.priority': 2 }, + b: { '.value': 2, '.priority': 2 } + }); + + const tasks: TaskList = [ + [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], + [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], + [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] + ]; + + return Promise.all( + tasks.map(async task => { + const [query, val] = task; + const ea = EventAccumulatorFactory.waitsForCount(1); + query.on('value', snap => { + ea.addEvent(snap.val()); + }); + const [newVal] = await ea.promise; + expect(newVal).to.deep.equal(val); + }) + ); + }); + + it('Set a limit, add some nodes, ensure prevName works correctly.', () => { + const node = getRandomNode() as Reference; + + let added = ''; + node.limitToLast(2).on('child_added', (snap, prevName) => { + added += snap.key + ' ' + prevName + ', '; + }); + + node.child('a').set(1); + expect(added).to.equal('a null, '); + + added = ''; + node.child('c').set(3); + expect(added).to.equal('c a, '); + + added = ''; + node.child('b').set(2); + expect(added).to.equal('b null, '); + + added = ''; + node.child('d').set(4); + expect(added).to.equal('d c, '); + }); + + it('Set a limit, add some nodes, ensure prevName works correctly. With server data', async () => { + const node = getRandomNode() as Reference; + + let added = ''; + await node.child('a').set(1); + + const ea = EventAccumulatorFactory.waitsForCount(1); + node.limitToLast(2).on('child_added', (snap, prevName) => { + added += snap.key + ' ' + prevName + ', '; + ea.addEvent(); + }); + + await ea.promise; + + expect(added).to.equal('a null, '); + + added = ''; + await node.child('c').set(3); + + expect(added).to.equal('c a, '); + + added = ''; + await node.child('b').set(2); + + expect(added).to.equal('b null, '); + + added = ''; + await node.child('d').set(4); + + expect(added).to.equal('d c, '); + }); + + it('Set a limit, move some nodes, ensure prevName works correctly.', () => { + const node = getRandomNode() as Reference; + let moved = ''; + node.limitToLast(2).on('child_moved', (snap, prevName) => { + moved += snap.key + ' ' + prevName + ', '; + }); + + node.child('a').setWithPriority('a', 10); + node.child('b').setWithPriority('b', 20); + node.child('c').setWithPriority('c', 30); + node.child('d').setWithPriority('d', 40); + + node.child('c').setPriority(50); + expect(moved).to.equal('c d, '); + + moved = ''; + node.child('c').setPriority(35); + expect(moved).to.equal('c null, '); + + moved = ''; + node.child('b').setPriority(33); + expect(moved).to.equal(''); + }); + + it('Set a limit, move some nodes, ensure prevName works correctly, with server data', async () => { + const node = getRandomNode() as Reference; + let moved = ''; + + node.child('a').setWithPriority('a', 10); + node.child('b').setWithPriority('b', 20); + node.child('c').setWithPriority('c', 30); + await node.child('d').setWithPriority('d', 40); + + node.limitToLast(2).on('child_moved', async (snap, prevName) => { + moved += snap.key + ' ' + prevName + ', '; + }); + // Need to load the data before the set so we'll see the move + await node.limitToLast(2).once('value'); + + await node.child('c').setPriority(50); + + expect(moved).to.equal('c d, '); + + moved = ''; + await node.child('c').setPriority(35); + + expect(moved).to.equal('c null, '); + moved = ''; + await node.child('b').setPriority(33); + + expect(moved).to.equal(''); + }); + + it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly.', () => { + const node = getRandomNode() as Reference; + + let moved = ''; + node.limitToLast(2).on('child_moved', (snap, prevName) => { + moved += snap.key + ' ' + prevName + ', '; + }); + + node.child('a').setWithPriority('a', 1); + node.child('b').setWithPriority('b', 2); + node.child('c').setWithPriority('c', 3); + node.child('d').setWithPriority('d', 4); + + node.child('c').setPriority(10); + expect(moved).to.equal('c d, '); + }); + + it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly. With server data', async () => { + const node = getRandomNode() as Reference; + let moved = ''; + + node.child('a').setWithPriority('a', 1); + node.child('b').setWithPriority('b', 2); + node.child('c').setWithPriority('c', 3); + await node.child('d').setWithPriority('d', 4); + + node.limitToLast(2).on('child_moved', (snap, prevName) => { + moved += snap.key + ' ' + prevName + ', '; + }); + // Need to load the data before the set so we'll see the move + await node.limitToLast(2).once('value'); + + await node.child('c').setPriority(10); + + expect(moved).to.equal('c d, '); + }); + + it('Set a limit, add a bunch of nodes, ensure local events are correct.', () => { + const node = getRandomNode() as Reference; + node.set({}); + let eventHistory = ''; + + node.limitToLast(2).on('child_added', snap => { + eventHistory = eventHistory + snap.val() + ' added, '; + }); + node.limitToLast(2).on('child_removed', snap => { + eventHistory = eventHistory + snap.val() + ' removed, '; + }); + + for (let i = 0; i < 5; i++) { + const n = node.push(); + n.set(i); + } + + expect(eventHistory).to.equal( + '0 added, 1 added, 0 removed, 2 added, 1 removed, 3 added, 2 removed, 4 added, ' + ); + }); + + it('Set a limit, add a bunch of nodes, ensure remote events are correct.', async () => { + const nodePair = getRandomNode(2); + const writeNode = nodePair[0]; + const readNode = nodePair[1]; + const ea = new EventAccumulator(() => { + try { + expect(eventHistory).to.equal('3 added, 4 added, '); + return true; + } catch (err) { + return false; + } + }); + let eventHistory = ''; + + readNode.limitToLast(2).on('child_added', snap => { + eventHistory = eventHistory + snap.val() + ' added, '; + ea.addEvent(); + }); + readNode.limitToLast(2).on('child_removed', snap => { + eventHistory = eventHistory.replace(snap.val() + ' added, ', ''); + /** + * This test expects this code NOT to fire, so by adding this + * I trigger the resolve early if it happens to fire and fail + * the expect at the end + */ + ea.addEvent(); + }); + + const promises = []; + for (let i = 0; i < 5; i++) { + const n = writeNode.push(); + n.set(i); + } + + await ea.promise; + }); + + it('Ensure on() returns callback function.', () => { + const node = getRandomNode() as Reference; + const callback = function () {}; + const ret = node.on('value', callback); + expect(ret).to.equal(callback); + }); + + it("Limit on unsynced node fires 'value'.", done => { + const f = getRandomNode() as Reference; + f.limitToLast(1).on('value', () => { + done(); + }); + }); + + it('Filtering to only null priorities works.', async () => { + const f = getRandomNode() as Reference; + + const ea = EventAccumulatorFactory.waitsForCount(1); + f.root.child('.info/connected').on('value', snap => { + ea.addEvent(); + }); + + await ea.promise; + + f.set({ + a: { '.priority': null, '.value': 0 }, + b: { '.priority': null, '.value': 1 }, + c: { '.priority': '2', '.value': 2 }, + d: { '.priority': 3, '.value': 3 }, + e: { '.priority': 'hi', '.value': 4 } + }); + + const snapAcc = EventAccumulatorFactory.waitsForCount(1); + f.startAt(null) + .endAt(null) + .on('value', snap => { + snapAcc.addEvent(snap.val()); + }); + + const [val] = await snapAcc.promise; + expect(val).to.deep.equal({ a: 0, b: 1 }); + }); + + it('null priorities included in endAt(2).', async () => { + const f = getRandomNode() as Reference; + + f.set({ + a: { '.priority': null, '.value': 0 }, + b: { '.priority': null, '.value': 1 }, + c: { '.priority': 2, '.value': 2 }, + d: { '.priority': 3, '.value': 3 }, + e: { '.priority': 'hi', '.value': 4 } + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + f.endAt(2).on('value', snap => { + ea.addEvent(snap.val()); + }); + + const [val] = await ea.promise; + expect(val).to.deep.equal({ a: 0, b: 1, c: 2 }); + }); + + it('null priorities not included in startAt(2).', async () => { + const f = getRandomNode() as Reference; + + f.set({ + a: { '.priority': null, '.value': 0 }, + b: { '.priority': null, '.value': 1 }, + c: { '.priority': 2, '.value': 2 }, + d: { '.priority': 3, '.value': 3 }, + e: { '.priority': 'hi', '.value': 4 } + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + + f.startAt(2).on('value', snap => { + ea.addEvent(snap.val()); + }); + + const [val] = await ea.promise; + expect(val).to.deep.equal({ c: 2, d: 3, e: 4 }); + }); + + function dumpListens(node: Query) { + const listens: Map> = (node.repo + .persistentConnection_ as any).listens; + const nodePath = getPath(node); + const listenPaths = []; + for (const path of listens.keys()) { + if (path.substring(0, nodePath.length) === nodePath) { + listenPaths.push(path); + } + } + + listenPaths.sort(); + const dumpPieces = []; + for (let i = 0; i < listenPaths.length; i++) { + const queryIds = []; + for (const queryId of listens.get(listenPaths[i]).keys()) { + queryIds.push(queryId); + } + queryIds.sort(); + if (queryIds.length > 0) { + dumpPieces.push( + listenPaths[i].substring(nodePath.length) + ':' + queryIds.join(',') + ); + } + } + + return dumpPieces.join(';'); + } + + it('Dedupe listens: listen on parent.', () => { + const node = getRandomNode() as Reference; + expect(dumpListens(node)).to.equal(''); + + const aOn = node.child('a').on('value', () => {}); + expect(dumpListens(node)).to.equal('/a:default'); + + const rootOn = node.on('value', () => {}); + expect(dumpListens(node)).to.equal(':default'); + + node.off('value', rootOn); + expect(dumpListens(node)).to.equal('/a:default'); + + node.child('a').off('value', aOn); + expect(dumpListens(node)).to.equal(''); + }); + + it('Dedupe listens: listen on grandchild.', () => { + const node = getRandomNode() as Reference; + + const rootOn = node.on('value', () => {}); + expect(dumpListens(node)).to.equal(':default'); + + const aaOn = node.child('a/aa').on('value', () => {}); + expect(dumpListens(node)).to.equal(':default'); + + node.off('value', rootOn); + node.child('a/aa').off('value', aaOn); + expect(dumpListens(node)).to.equal(''); + }); + + it('Dedupe listens: listen on grandparent of two children.', () => { + const node = getRandomNode() as Reference; + expect(dumpListens(node)).to.equal(''); + + const aaOn = node.child('a/aa').on('value', () => {}); + expect(dumpListens(node)).to.equal('/a/aa:default'); + + const bbOn = node.child('a/bb').on('value', () => {}); + expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); + + const rootOn = node.on('value', () => {}); + expect(dumpListens(node)).to.equal(':default'); + + node.off('value', rootOn); + expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); + + node.child('a/aa').off('value', aaOn); + expect(dumpListens(node)).to.equal('/a/bb:default'); + + node.child('a/bb').off('value', bbOn); + expect(dumpListens(node)).to.equal(''); + }); + + it('Dedupe queried listens: multiple queried listens; no dupes', () => { + const node = getRandomNode() as Reference; + expect(dumpListens(node)).to.equal(''); + + const aLim1On = node + .child('a') + .limitToLast(1) + .on('value', () => {}); + expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); + + const rootLim1On = node.limitToLast(1).on('value', () => {}); + expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); + + const aLim5On = node + .child('a') + .limitToLast(5) + .on('value', () => {}); + expect(dumpListens(node)).to.equal( + ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' + ); + + node.limitToLast(1).off('value', rootLim1On); + expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}'); + + node.child('a').limitToLast(1).off('value', aLim1On); + node.child('a').limitToLast(5).off('value', aLim5On); + expect(dumpListens(node)).to.equal(''); + }); + + it('Dedupe queried listens: listen on parent of queried children.', () => { + const node = getRandomNode() as Reference; + + const aLim1On = node + .child('a') + .limitToLast(1) + .on('value', () => {}); + expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); + + const bLim1On = node + .child('b') + .limitToLast(1) + .on('value', () => {}); + expect(dumpListens(node)).to.equal( + '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' + ); + + const rootOn = node.on('value', () => {}); + expect(dumpListens(node)).to.equal(':default'); + + // remove in slightly random order. + node.child('a').limitToLast(1).off('value', aLim1On); + expect(dumpListens(node)).to.equal(':default'); + + node.off('value', rootOn); + expect(dumpListens(node)).to.equal('/b:{"l":1,"vf":"r"}'); + + node.child('b').limitToLast(1).off('value', bLim1On); + expect(dumpListens(node)).to.equal(''); + }); + + it('Limit with mix of null and non-null priorities.', () => { + const node = getRandomNode() as Reference; + + const children = []; + node.limitToLast(5).on('child_added', childSnap => { + children.push(childSnap.key); + }); + + node.set({ + Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, + Mike: { '.priority': 500, score: 500, name: 'Mike' }, + Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, + James: { '.priority': 7, score: 7, name: 'James' }, + Sally: { '.priority': -7, score: -7, name: 'Sally' }, + Fred: { score: 0, name: 'Fred' } + }); + + expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); + }); + + it('Limit with mix of null and non-null priorities using server data', async () => { + const node = getRandomNode() as Reference; + + const children = []; + await node.set({ + Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, + Mike: { '.priority': 500, score: 500, name: 'Mike' }, + Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, + James: { '.priority': 7, score: 7, name: 'James' }, + Sally: { '.priority': -7, score: -7, name: 'Sally' }, + Fred: { score: 0, name: 'Fred' } + }); + + const ea = EventAccumulatorFactory.waitsForCount(5); + node.limitToLast(5).on('child_added', childSnap => { + children.push(childSnap.key); + ea.addEvent(); + }); + + await ea.promise; + + expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); + }); - // it('Query.off with no callback/context removes all callbacks, even with contexts (for child events).', () => { - // const ref = getRandomNode() as Reference; + it('.on() with a context works.', () => { + const ref = getRandomNode() as Reference; - // const a = new EventReceiver(), - // b = new EventReceiver(); + const ListenerDoohickey = function () { + this.snap = null; + }; + ListenerDoohickey.prototype.onEvent = function (snap) { + this.snap = snap; + }; - // ref.on('child_added', a.onChildAdded, a); - // ref.on('child_added', b.onChildAdded, b); + const l = new ListenerDoohickey(); + ref.on('value', l.onEvent, l); - // ref.push('hello!'); - // expect(a.gotChildAdded).to.be.true; - // expect(b.gotChildAdded).to.be.true; - // a.gotChildAdded = b.gotChildAdded = false; + ref.set('test'); + expect(l.snap.val()).to.equal('test'); - // // unsubscribe child_added. - // ref.off('child_added'); + ref.off('value', l.onEvent, l); - // // Should get no events. - // ref.push(42); - // expect(a.gotChildAdded).to.be.false; - // expect(b.gotChildAdded).to.be.false; - // }); + // Ensure we don't get any more events. + ref.set('blah'); + expect(l.snap.val()).to.equal('test'); + }); + + it('.once() with a context works.', () => { + const ref = getRandomNode() as Reference; + + const ListenerDoohickey = function () { + this.snap = null; + }; + ListenerDoohickey.prototype.onEvent = function (snap) { + this.snap = snap; + }; + + const l = new ListenerDoohickey(); + ref.once('value', l.onEvent, l); + + ref.set('test'); + expect(l.snap.val()).to.equal('test'); + + // Shouldn't get any more events. + ref.set('blah'); + expect(l.snap.val()).to.equal('test'); + }); + + it('handles an update that deletes the entire window in a query', () => { + const ref = getRandomNode() as Reference; + + const snaps = []; + ref.limitToLast(2).on('value', snap => { + snaps.push(snap.val()); + }); + + ref.set({ + a: { '.value': 1, '.priority': 1 }, + b: { '.value': 2, '.priority': 2 }, + c: { '.value': 3, '.priority': 3 } + }); + ref.update({ + b: null, + c: null + }); + + expect(snaps.length).to.equal(2); + expect(snaps[0]).to.deep.equal({ b: 2, c: 3 }); + // The original set is still outstanding (synchronous API), so we have a full cache to re-window against + expect(snaps[1]).to.deep.equal({ a: 1 }); + }); + + it('handles an out-of-view query on a child', () => { + const ref = getRandomNode() as Reference; + + let parent = null; + ref.limitToLast(1).on('value', snap => { + parent = snap.val(); + }); + + let child = null; + ref.child('a').on('value', snap => { + child = snap.val(); + }); + + ref.set({ a: 1, b: 2 }); + expect(parent).to.deep.equal({ b: 2 }); + expect(child).to.equal(1); + + ref.update({ c: 3 }); + expect(parent).to.deep.equal({ c: 3 }); + expect(child).to.equal(1); + }); + + it('handles a child query going out of view of the parent', () => { + const ref = getRandomNode() as Reference; + + let parent = null; + ref.limitToLast(1).on('value', snap => { + parent = snap.val(); + }); + + let child = null; + ref.child('a').on('value', snap => { + child = snap.val(); + }); + + ref.set({ a: 1 }); + expect(parent).to.deep.equal({ a: 1 }); + expect(child).to.equal(1); + ref.child('b').set(2); + expect(parent).to.deep.equal({ b: 2 }); + expect(child).to.equal(1); + ref.child('b').remove(); + expect(parent).to.deep.equal({ a: 1 }); + expect(child).to.equal(1); + }); + + it('handles diverging views', () => { + const ref = getRandomNode() as Reference; + + let c = null; + ref + .limitToLast(1) + .endAt(null, 'c') + .on('value', snap => { + c = snap.val(); + }); + + let d = null; + ref + .limitToLast(1) + .endAt(null, 'd') + .on('value', snap => { + d = snap.val(); + }); + + ref.set({ a: 1, b: 2, c: 3 }); + expect(c).to.deep.equal({ c: 3 }); + expect(d).to.deep.equal({ c: 3 }); + ref.child('d').set(4); + expect(c).to.deep.equal({ c: 3 }); + expect(d).to.deep.equal({ d: 4 }); + }); + + it('handles removing a queried element', async () => { + const ref = getRandomNode() as Reference; + + let val; + const ea = EventAccumulatorFactory.waitsForCount(1); + ref.limitToLast(1).on('child_added', snap => { + val = snap.val(); + ea.addEvent(); + }); + + ref.set({ a: 1, b: 2 }); + expect(val).to.equal(2); + + ref.child('b').remove(); + + await ea.promise; + + expect(val).to.equal(1); + }); + + it('.startAt().limitToFirst(1) works.', done => { + const ref = getRandomNode() as Reference; + ref.set({ a: 1, b: 2 }); + + let val; + ref + .startAt() + .limitToFirst(1) + .on('child_added', snap => { + val = snap.val(); + if (val === 1) { + done(); + } + }); + }); + + it('.startAt().limitToFirst(1) and then remove first child (case 1664).', async () => { + const ref = getRandomNode() as Reference; + ref.set({ a: 1, b: 2 }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + let val; + ref + .startAt() + .limitToFirst(1) + .on('child_added', snap => { + val = snap.val(); + ea.addEvent(); + }); + + await ea.promise; + expect(val).to.equal(1); + + ea.reset(); + ref.child('a').remove(); + + await ea.promise; + expect(val).to.equal(2); + }); + + it('.startAt() with two arguments works properly (case 1169).', done => { + const ref = getRandomNode() as Reference; + const data = { + Walker: { + name: 'Walker', + score: 20, + '.priority': 20 + }, + Michael: { + name: 'Michael', + score: 100, + '.priority': 100 + } + }; + ref.set(data, () => { + ref + .startAt(20, 'Walker') + .limitToFirst(2) + .on('value', s => { + const childNames = []; + s.forEach(node => { + childNames.push(node.key); + }); + expect(childNames).to.deep.equal(['Walker', 'Michael']); + done(); + }); + }); + }); + + it('handles multiple queries on the same node', async () => { + const ref = getRandomNode() as Reference; + + await ref.set({ + a: 1, + b: 2, + c: 3, + d: 4, + e: 5, + f: 6 + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + + let firstListen = false; + ref.limitToLast(2).on('value', snap => { + // This shouldn't get called twice, we don't update the values here + expect(firstListen).to.be.false; + firstListen = true; + ea.addEvent(); + }); + + await ea.promise; + + // now do consecutive once calls + await ref.limitToLast(1).once('value'); + const snap = await ref.limitToLast(1).once('value'); + const val = snap.val(); + expect(val).to.deep.equal({ f: 6 }); + }); + + it('handles once called on a node with a default listener', async () => { + const ref = getRandomNode() as Reference; + + await ref.set({ + a: 1, + b: 2, + c: 3, + d: 4, + e: 5, + f: 6 + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + // Setup value listener + ref.on('value', snap => { + ea.addEvent(); + }); + + await ea.promise; + + // now do the once call + const snap = await ref.limitToLast(1).once('child_added'); + const val = snap.val(); + expect(val).to.equal(6); + }); + + it('handles once called on a node with a default listener and non-complete limit', async () => { + const ref = getRandomNode() as Reference; + + await ref.set({ + a: 1, + b: 2, + c: 3 + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + // Setup value listener + ref.on('value', snap => { + ea.addEvent(); + }); + + await ea.promise; + + // now do the once call + const snap = await ref.limitToLast(5).once('value'); + const val = snap.val(); + expect(val).to.deep.equal({ a: 1, b: 2, c: 3 }); + }); + + it('Remote remove triggers events.', done => { + const refPair = getRandomNode(2), + writeRef = refPair[0], + readRef = refPair[1]; + + writeRef.set({ a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }, () => { + // Wait to get the initial data, and then remove 'c' remotely and wait for new data. + let count = 0; + readRef.limitToLast(5).on('value', s => { + count++; + if (count === 1) { + expect(s.val()).to.deep.equal({ + a: 'a', + b: 'b', + c: 'c', + d: 'd', + e: 'e' + }); + writeRef.child('c').remove(); + } else { + expect(count).to.equal(2); + expect(s.val()).to.deep.equal({ a: 'a', b: 'b', d: 'd', e: 'e' }); + done(); + } + }); + }); + }); + + it(".endAt(null, 'f').limitToLast(5) returns the right set of children.", done => { + const ref = getRandomNode() as Reference; + ref.set( + { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e', f: 'f', g: 'g', h: 'h' }, + () => { + ref + .endAt(null, 'f') + .limitToLast(5) + .on('value', s => { + expect(s.val()).to.deep.equal({ + b: 'b', + c: 'c', + d: 'd', + e: 'e', + f: 'f' + }); + done(); + }); + } + ); + }); - // it('Query.off with no event type / callback removes all callbacks (even those with contexts).', () => { - // const ref = getRandomNode() as Reference; + it('complex update() at query root raises correct value event', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let readerLoaded = false; + writer + .child('foo') + .set({ a: 1, b: 2, c: 3, d: 4, e: 5 }, (error, dummy) => { + reader + .child('foo') + .startAt() + .limitToFirst(4) + .on('value', snapshot => { + const val = snapshot.val(); + if (!readerLoaded) { + readerLoaded = true; + expect(val).to.deep.equal({ a: 1, b: 2, c: 3, d: 4 }); + + // This update causes the following to happen: + // 1. An in-view child is set to null (b) + // 2. An in-view child has its value changed (c) + // 3. An in-view child is changed and bumped out-of-view (d) + // We expect to get null values for b and d, along with the new children and updated value for c + writer + .child('foo') + .update({ b: null, c: 'a', cc: 'new', cd: 'new2', d: 'gone' }); + } else { + done(); + expect(val).to.deep.equal({ + a: 1, + c: 'a', + cc: 'new', + cd: 'new2' + }); + } + }); + }); + }); - // const a = new EventReceiver(), - // b = new EventReceiver(); - - // ref.on('value', a.onValue, a); - // ref.on('value', b.onValue, b); - // ref.on('child_added', a.onChildAdded, a); - // ref.on('child_added', b.onChildAdded, b); - - // ref.set(null); - // ref.push('hello!'); - // expect(a.gotChildAdded).to.be.true; - // expect(a.gotValue).to.be.true; - // expect(b.gotChildAdded).to.be.true; - // expect(b.gotValue).to.be.true; - // a.gotValue = b.gotValue = a.gotChildAdded = b.gotChildAdded = false; - - // // unsubscribe all events. - // ref.off(); - - // // We should get no events. - // ref.push(42); - // expect(a.gotChildAdded).to.be.false; - // expect(b.gotChildAdded).to.be.false; - // expect(a.gotValue).to.be.false; - // expect(b.gotValue).to.be.false; - // }); - - // it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are kept.', () => { - // const node = getRandomNode() as Reference; - // let snap = null; - // node.limitToLast(5).on('value', s => { - // snap = s; - // }); - - // node.set({}); - // for (let i = 0; i < 10; i++) { - // node.push().set(i); - // } - - // let expected = 5; - // snap.forEach(child => { - // expect(child.val()).to.equal(expected); - // expected++; - // }); - - // expect(expected).to.equal(10); - // }); - - // it('Set a limit of 5, add a bunch of nodes, ensure only last 5 items are sent from server.', async () => { - // const node = getRandomNode() as Reference; - // await node.set({}); - - // const pushPromises = []; - - // for (let i = 0; i < 10; i++) { - // const promise = node.push().set(i); - // pushPromises.push(promise); - // } - - // await Promise.all(pushPromises); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - - // node.limitToLast(5).on('value', snap => { - // ea.addEvent(snap); - // }); - - // const [snap] = await ea.promise; - - // let expected = 5; - - // snap.forEach(child => { - // expect(child.val()).to.equal(expected); - // expected++; - // }); - - // expect(expected).to.equal(10); - // }); - - // it('Set various limits, ensure resulting data is correct.', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ a: 1, b: 2, c: 3 }); - - // const tasks: TaskList = [ - // [node.limitToLast(1), { c: 3 }], - // [node.endAt().limitToLast(1), { c: 3 }], - // [node.limitToLast(2), { b: 2, c: 3 }], - // [node.limitToLast(3), { a: 1, b: 2, c: 3 }], - // [node.limitToLast(4), { a: 1, b: 2, c: 3 }] - // ]; - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Set various limits with a startAt name, ensure resulting data is correct.', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ a: 1, b: 2, c: 3 }); - - // const tasks: TaskList = [ - // [node.startAt().limitToFirst(1), { a: 1 }], - // [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], - // [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], - // [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], - // [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }], - // [node.startAt(null, 'b').limitToLast(1), { c: 3 }], - // [node.startAt(null, 'b').limitToLast(1), { c: 3 }], - // [node.startAt(null, 'b').limitToLast(2), { b: 2, c: 3 }], - // [node.startAt(null, 'b').limitToLast(3), { b: 2, c: 3 }], - // [node.limitToFirst(1).startAt(null, 'c'), { c: 3 }], - // [node.limitToFirst(1).startAt(null, 'b'), { b: 2 }], - // [node.limitToFirst(2).startAt(null, 'b'), { b: 2, c: 3 }], - // [node.limitToFirst(3).startAt(null, 'b'), { b: 2, c: 3 }], - // [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], - // [node.limitToLast(1).startAt(null, 'b'), { c: 3 }], - // [node.limitToLast(2).startAt(null, 'b'), { b: 2, c: 3 }], - // [node.limitToLast(3).startAt(null, 'b'), { b: 2, c: 3 }] - // ]; - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Set various limits with a endAt name, ensure resulting data is correct.', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ a: 1, b: 2, c: 3 }); - - // const tasks: TaskList = [ - // [node.endAt().limitToFirst(1), { a: 1 }], - // [node.endAt(null, 'c').limitToFirst(1), { a: 1 }], - // [node.endAt(null, 'b').limitToFirst(1), { a: 1 }], - // [node.endAt(null, 'b').limitToFirst(2), { a: 1, b: 2 }], - // [node.endAt(null, 'b').limitToFirst(3), { a: 1, b: 2 }], - // [node.endAt(null, 'c').limitToLast(1), { c: 3 }], - // [node.endAt(null, 'b').limitToLast(1), { b: 2 }], - // [node.endAt(null, 'b').limitToLast(2), { a: 1, b: 2 }], - // [node.endAt(null, 'b').limitToLast(3), { a: 1, b: 2 }], - // [node.limitToFirst(1).endAt(null, 'c'), { a: 1 }], - // [node.limitToFirst(1).endAt(null, 'b'), { a: 1 }], - // [node.limitToFirst(2).endAt(null, 'b'), { a: 1, b: 2 }], - // [node.limitToFirst(3).endAt(null, 'b'), { a: 1, b: 2 }], - // [node.limitToLast(1).endAt(null, 'c'), { c: 3 }], - // [node.limitToLast(1).endAt(null, 'b'), { b: 2 }], - // [node.limitToLast(2).endAt(null, 'b'), { a: 1, b: 2 }], - // [node.limitToLast(3).endAt(null, 'b'), { a: 1, b: 2 }] - // ]; - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Set various limits with a startAt name, ensure resulting data is correct from the server.', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ a: 1, b: 2, c: 3 }); - - // const tasks: TaskList = [ - // [node.startAt().limitToFirst(1), { a: 1 }], - // [node.startAt(null, 'c').limitToFirst(1), { c: 3 }], - // [node.startAt(null, 'b').limitToFirst(1), { b: 2 }], - // // NOTE: technically there is a race condition here. The limitToFirst(1) query will return a single value, which will be - // // raised for the limitToFirst(2) callback as well, if it exists already. However, once the server gets the limitToFirst(2) - // // query, it will send more data and the correct state will be returned. - // [node.startAt(null, 'b').limitToFirst(2), { b: 2, c: 3 }], - // [node.startAt(null, 'b').limitToFirst(3), { b: 2, c: 3 }] - // ]; - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Set limit, ensure child_removed and child_added events are fired when limit is hit.', () => { - // const node = getRandomNode() as Reference; - // let added = '', - // removed = ''; - // node.limitToLast(2).on('child_added', snap => { - // added += snap.key + ' '; - // }); - // node.limitToLast(2).on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - // node.set({ a: 1, b: 2, c: 3 }); - - // expect(added).to.equal('b c '); - // expect(removed).to.equal(''); - - // added = ''; - // node.child('d').set(4); - // expect(added).to.equal('d '); - // expect(removed).to.equal('b '); - // }); - - // it('Set limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ a: 1, b: 2, c: 3 }); - - // const ea = EventAccumulatorFactory.waitsForCount(2); - - // let added = '', - // removed = ''; - // node.limitToLast(2).on('child_added', snap => { - // added += snap.key + ' '; - // ea.addEvent(); - // }); - // node.limitToLast(2).on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - - // await ea.promise; - - // expect(added).to.equal('b c '); - // expect(removed).to.equal(''); - - // added = ''; - // await node.child('d').set(4); - - // expect(added).to.equal('d '); - // expect(removed).to.equal('b '); - // }); - - // it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit.', () => { - // const node = getRandomNode() as Reference; - - // let added = '', - // removed = ''; - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_added', snap => { - // added += snap.key + ' '; - // }); - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - // node.set({ a: 1, b: 2, c: 3 }); - // expect(added).to.equal('a b '); - // expect(removed).to.equal(''); - - // added = ''; - // node.child('aa').set(4); - // expect(added).to.equal('aa '); - // expect(removed).to.equal('b '); - // }); - - // it('Set start and limit, ensure child_removed and child_added events are fired when limit is hit, using server data', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ a: 1, b: 2, c: 3 }); - // const ea = EventAccumulatorFactory.waitsForCount(2); - - // let added = '', - // removed = ''; - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_added', snap => { - // added += snap.key + ' '; - // ea.addEvent(); - // }); - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - - // await ea.promise; - - // expect(added).to.equal('a b '); - // expect(removed).to.equal(''); - - // added = ''; - // await node.child('aa').set(4); - - // expect(added).to.equal('aa '); - // expect(removed).to.equal('b '); - // }); - - // it("Set start and limit, ensure child_added events are fired when limit isn't hit yet.", () => { - // const node = getRandomNode() as Reference; - - // let added = '', - // removed = ''; - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_added', snap => { - // added += snap.key + ' '; - // }); - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - // node.set({ c: 3 }); - // expect(added).to.equal('c '); - // expect(removed).to.equal(''); - - // added = ''; - // node.child('b').set(4); - // expect(added).to.equal('b '); - // expect(removed).to.equal(''); - // }); - - // it("Set start and limit, ensure child_added events are fired when limit isn't hit yet, using server data", async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ c: 3 }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - - // let added = ''; - // let removed = ''; - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_added', snap => { - // added += snap.key + ' '; - // ea.addEvent(); - // }); - // node - // .startAt(null, 'a') - // .limitToFirst(2) - // .on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - - // await ea.promise; - - // expect(added).to.equal('c '); - // expect(removed).to.equal(''); - - // added = ''; - // await node.child('b').set(4); - - // expect(added).to.equal('b '); - // expect(removed).to.equal(''); - // }); - - // it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item.', async () => { - // const node = getRandomNode() as Reference; - // const ea = EventAccumulatorFactory.waitsForCount(1); - - // let added = '', - // removed = ''; - // node.limitToLast(2).on('child_added', snap => { - // added += snap.key + ' '; - // ea.addEvent(); - // }); - // node.limitToLast(2).on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - // node.set({ a: 1, b: 2, c: 3 }); - // expect(added).to.equal('b c '); - // expect(removed).to.equal(''); - - // added = ''; - // node.child('b').remove(); - // expect(removed).to.equal('b '); - - // await ea.promise; - // }); - - // it('Set a limit, ensure child_removed and child_added events are fired when limit is satisfied and you remove an item. Using server data', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ a: 1, b: 2, c: 3 }); - - // let ea = EventAccumulatorFactory.waitsForCount(2); - // let added = '', - // removed = ''; - // node.limitToLast(2).on('child_added', snap => { - // added += snap.key + ' '; - // ea.addEvent(); - // }); - // node.limitToLast(2).on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - - // await ea.promise; - - // expect(added).to.equal('b c '); - // expect(removed).to.equal(''); - - // // We are going to wait for one more event before closing - // ea = EventAccumulatorFactory.waitsForCount(1); - // added = ''; - // await node.child('b').remove(); - - // expect(removed).to.equal('b '); - - // await ea.promise; - // expect(added).to.equal('a '); - // }); - - // it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more.', () => { - // const node = getRandomNode() as Reference; - - // let added = '', - // removed = ''; - // node.limitToLast(2).on('child_added', snap => { - // added += snap.key + ' '; - // }); - // node.limitToLast(2).on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - // node.set({ b: 2, c: 3 }); - // expect(added).to.equal('b c '); - // expect(removed).to.equal(''); - - // added = ''; - // node.child('b').remove(); - // expect(added).to.equal(''); - // expect(removed).to.equal('b '); - // node.child('c').remove(); - // expect(removed).to.equal('b c '); - // }); - - // it('Set a limit, ensure child_removed events are fired when limit is satisfied, you remove an item, and there are no more. Using server data', async () => { - // const node = getRandomNode() as Reference; - // const ea = EventAccumulatorFactory.waitsForCount(2); - // let added = ''; - // let removed = ''; - // await node.set({ b: 2, c: 3 }); - - // node.limitToLast(2).on('child_added', snap => { - // added += snap.key + ' '; - // ea.addEvent(); - // }); - // node.limitToLast(2).on('child_removed', snap => { - // removed += snap.key + ' '; - // }); - - // await ea.promise; - - // expect(added).to.equal('b c '); - // expect(removed).to.equal(''); - - // added = ''; - - // await node.child('b').remove(); - - // expect(added).to.equal(''); - // expect(removed).to.equal('b '); - // }); - - // it('Ensure startAt / endAt with priority works.', async () => { - // const node = getRandomNode() as Reference; - - // const tasks: TaskList = [ - // [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], - // [node.startAt('w').endAt('w'), { d: 4 }], - // [node.startAt('a').endAt('c'), null] - // ]; - - // await node.set({ - // a: { '.value': 1, '.priority': 'z' }, - // b: { '.value': 2, '.priority': 'y' }, - // c: { '.value': 3, '.priority': 'x' }, - // d: { '.value': 4, '.priority': 'w' } - // }); - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Ensure startAt / endAt with priority work with server data.', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ - // a: { '.value': 1, '.priority': 'z' }, - // b: { '.value': 2, '.priority': 'y' }, - // c: { '.value': 3, '.priority': 'x' }, - // d: { '.value': 4, '.priority': 'w' } - // }); - - // const tasks: TaskList = [ - // [node.startAt('w').endAt('y'), { b: 2, c: 3, d: 4 }], - // [node.startAt('w').endAt('w'), { d: 4 }], - // [node.startAt('a').endAt('c'), null] - // ]; - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Ensure startAt / endAt with priority and name works.', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ - // a: { '.value': 1, '.priority': 1 }, - // b: { '.value': 2, '.priority': 1 }, - // c: { '.value': 3, '.priority': 2 }, - // d: { '.value': 4, '.priority': 2 } - // }); - - // const tasks: TaskList = [ - // [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], - // [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], - // [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] - // ]; - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Ensure startAt / endAt with priority and name work with server data', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ - // a: { '.value': 1, '.priority': 1 }, - // b: { '.value': 2, '.priority': 1 }, - // c: { '.value': 3, '.priority': 2 }, - // d: { '.value': 4, '.priority': 2 } - // }); - // const tasks: TaskList = [ - // [node.startAt(1, 'a').endAt(2, 'd'), { a: 1, b: 2, c: 3, d: 4 }], - // [node.startAt(1, 'b').endAt(2, 'c'), { b: 2, c: 3 }], - // [node.startAt(1, 'c').endAt(2), { c: 3, d: 4 }] - // ]; - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Ensure startAt / endAt with priority and name works (2).', () => { - // const node = getRandomNode() as Reference; - - // const tasks: TaskList = [ - // [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], - // [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], - // [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] - // ]; - - // node.set({ - // c: { '.value': 3, '.priority': 1 }, - // d: { '.value': 4, '.priority': 1 }, - // a: { '.value': 1, '.priority': 2 }, - // b: { '.value': 2, '.priority': 2 } - // }); - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Ensure startAt / endAt with priority and name works (2). With server data', async () => { - // const node = getRandomNode() as Reference; - - // await node.set({ - // c: { '.value': 3, '.priority': 1 }, - // d: { '.value': 4, '.priority': 1 }, - // a: { '.value': 1, '.priority': 2 }, - // b: { '.value': 2, '.priority': 2 } - // }); - - // const tasks: TaskList = [ - // [node.startAt(1, 'c').endAt(2, 'b'), { a: 1, b: 2, c: 3, d: 4 }], - // [node.startAt(1, 'd').endAt(2, 'a'), { d: 4, a: 1 }], - // [node.startAt(1, 'e').endAt(2), { a: 1, b: 2 }] - // ]; - - // return Promise.all( - // tasks.map(async task => { - // const [query, val] = task; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // query.on('value', snap => { - // ea.addEvent(snap.val()); - // }); - // const [newVal] = await ea.promise; - // expect(newVal).to.deep.equal(val); - // }) - // ); - // }); - - // it('Set a limit, add some nodes, ensure prevName works correctly.', () => { - // const node = getRandomNode() as Reference; - - // let added = ''; - // node.limitToLast(2).on('child_added', (snap, prevName) => { - // added += snap.key + ' ' + prevName + ', '; - // }); - - // node.child('a').set(1); - // expect(added).to.equal('a null, '); - - // added = ''; - // node.child('c').set(3); - // expect(added).to.equal('c a, '); - - // added = ''; - // node.child('b').set(2); - // expect(added).to.equal('b null, '); - - // added = ''; - // node.child('d').set(4); - // expect(added).to.equal('d c, '); - // }); - - // it('Set a limit, add some nodes, ensure prevName works correctly. With server data', async () => { - // const node = getRandomNode() as Reference; - - // let added = ''; - // await node.child('a').set(1); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // node.limitToLast(2).on('child_added', (snap, prevName) => { - // added += snap.key + ' ' + prevName + ', '; - // ea.addEvent(); - // }); - - // await ea.promise; - - // expect(added).to.equal('a null, '); - - // added = ''; - // await node.child('c').set(3); - - // expect(added).to.equal('c a, '); - - // added = ''; - // await node.child('b').set(2); - - // expect(added).to.equal('b null, '); - - // added = ''; - // await node.child('d').set(4); - - // expect(added).to.equal('d c, '); - // }); - - // it('Set a limit, move some nodes, ensure prevName works correctly.', () => { - // const node = getRandomNode() as Reference; - // let moved = ''; - // node.limitToLast(2).on('child_moved', (snap, prevName) => { - // moved += snap.key + ' ' + prevName + ', '; - // }); - - // node.child('a').setWithPriority('a', 10); - // node.child('b').setWithPriority('b', 20); - // node.child('c').setWithPriority('c', 30); - // node.child('d').setWithPriority('d', 40); - - // node.child('c').setPriority(50); - // expect(moved).to.equal('c d, '); - - // moved = ''; - // node.child('c').setPriority(35); - // expect(moved).to.equal('c null, '); - - // moved = ''; - // node.child('b').setPriority(33); - // expect(moved).to.equal(''); - // }); - - // it('Set a limit, move some nodes, ensure prevName works correctly, with server data', async () => { - // const node = getRandomNode() as Reference; - // let moved = ''; - - // node.child('a').setWithPriority('a', 10); - // node.child('b').setWithPriority('b', 20); - // node.child('c').setWithPriority('c', 30); - // await node.child('d').setWithPriority('d', 40); - - // node.limitToLast(2).on('child_moved', async (snap, prevName) => { - // moved += snap.key + ' ' + prevName + ', '; - // }); - // // Need to load the data before the set so we'll see the move - // await node.limitToLast(2).once('value'); - - // await node.child('c').setPriority(50); - - // expect(moved).to.equal('c d, '); - - // moved = ''; - // await node.child('c').setPriority(35); - - // expect(moved).to.equal('c null, '); - // moved = ''; - // await node.child('b').setPriority(33); - - // expect(moved).to.equal(''); - // }); - - // it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly.', () => { - // const node = getRandomNode() as Reference; - - // let moved = ''; - // node.limitToLast(2).on('child_moved', (snap, prevName) => { - // moved += snap.key + ' ' + prevName + ', '; - // }); - - // node.child('a').setWithPriority('a', 1); - // node.child('b').setWithPriority('b', 2); - // node.child('c').setWithPriority('c', 3); - // node.child('d').setWithPriority('d', 4); - - // node.child('c').setPriority(10); - // expect(moved).to.equal('c d, '); - // }); - - // it('Numeric priorities: Set a limit, move some nodes, ensure prevName works correctly. With server data', async () => { - // const node = getRandomNode() as Reference; - // let moved = ''; - - // node.child('a').setWithPriority('a', 1); - // node.child('b').setWithPriority('b', 2); - // node.child('c').setWithPriority('c', 3); - // await node.child('d').setWithPriority('d', 4); - - // node.limitToLast(2).on('child_moved', (snap, prevName) => { - // moved += snap.key + ' ' + prevName + ', '; - // }); - // // Need to load the data before the set so we'll see the move - // await node.limitToLast(2).once('value'); - - // await node.child('c').setPriority(10); - - // expect(moved).to.equal('c d, '); - // }); - - // it('Set a limit, add a bunch of nodes, ensure local events are correct.', () => { - // const node = getRandomNode() as Reference; - // node.set({}); - // let eventHistory = ''; - - // node.limitToLast(2).on('child_added', snap => { - // eventHistory = eventHistory + snap.val() + ' added, '; - // }); - // node.limitToLast(2).on('child_removed', snap => { - // eventHistory = eventHistory + snap.val() + ' removed, '; - // }); - - // for (let i = 0; i < 5; i++) { - // const n = node.push(); - // n.set(i); - // } - - // expect(eventHistory).to.equal( - // '0 added, 1 added, 0 removed, 2 added, 1 removed, 3 added, 2 removed, 4 added, ' - // ); - // }); - - // it('Set a limit, add a bunch of nodes, ensure remote events are correct.', async () => { - // const nodePair = getRandomNode(2); - // const writeNode = nodePair[0]; - // const readNode = nodePair[1]; - // const ea = new EventAccumulator(() => { - // try { - // expect(eventHistory).to.equal('3 added, 4 added, '); - // return true; - // } catch (err) { - // return false; - // } - // }); - // let eventHistory = ''; - - // readNode.limitToLast(2).on('child_added', snap => { - // eventHistory = eventHistory + snap.val() + ' added, '; - // ea.addEvent(); - // }); - // readNode.limitToLast(2).on('child_removed', snap => { - // eventHistory = eventHistory.replace(snap.val() + ' added, ', ''); - // /** - // * This test expects this code NOT to fire, so by adding this - // * I trigger the resolve early if it happens to fire and fail - // * the expect at the end - // */ - // ea.addEvent(); - // }); - - // const promises = []; - // for (let i = 0; i < 5; i++) { - // const n = writeNode.push(); - // n.set(i); - // } - - // await ea.promise; - // }); - - // it('Ensure on() returns callback function.', () => { - // const node = getRandomNode() as Reference; - // const callback = function () { }; - // const ret = node.on('value', callback); - // expect(ret).to.equal(callback); - // }); - - // it("Limit on unsynced node fires 'value'.", done => { - // const f = getRandomNode() as Reference; - // f.limitToLast(1).on('value', () => { - // done(); - // }); - // }); - - // it('Filtering to only null priorities works.', async () => { - // const f = getRandomNode() as Reference; - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // f.root.child('.info/connected').on('value', snap => { - // ea.addEvent(); - // }); - - // await ea.promise; - - // f.set({ - // a: { '.priority': null, '.value': 0 }, - // b: { '.priority': null, '.value': 1 }, - // c: { '.priority': '2', '.value': 2 }, - // d: { '.priority': 3, '.value': 3 }, - // e: { '.priority': 'hi', '.value': 4 } - // }); - - // const snapAcc = EventAccumulatorFactory.waitsForCount(1); - // f.startAt(null) - // .endAt(null) - // .on('value', snap => { - // snapAcc.addEvent(snap.val()); - // }); - - // const [val] = await snapAcc.promise; - // expect(val).to.deep.equal({ a: 0, b: 1 }); - // }); - - // it('null priorities included in endAt(2).', async () => { - // const f = getRandomNode() as Reference; - - // f.set({ - // a: { '.priority': null, '.value': 0 }, - // b: { '.priority': null, '.value': 1 }, - // c: { '.priority': 2, '.value': 2 }, - // d: { '.priority': 3, '.value': 3 }, - // e: { '.priority': 'hi', '.value': 4 } - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // f.endAt(2).on('value', snap => { - // ea.addEvent(snap.val()); - // }); - - // const [val] = await ea.promise; - // expect(val).to.deep.equal({ a: 0, b: 1, c: 2 }); - // }); - - // it('null priorities not included in startAt(2).', async () => { - // const f = getRandomNode() as Reference; - - // f.set({ - // a: { '.priority': null, '.value': 0 }, - // b: { '.priority': null, '.value': 1 }, - // c: { '.priority': 2, '.value': 2 }, - // d: { '.priority': 3, '.value': 3 }, - // e: { '.priority': 'hi', '.value': 4 } - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - - // f.startAt(2).on('value', snap => { - // ea.addEvent(snap.val()); - // }); - - // const [val] = await ea.promise; - // expect(val).to.deep.equal({ c: 2, d: 3, e: 4 }); - // }); - - // function dumpListens(node: Query) { - // const listens: Map> = (node.repo - // .persistentConnection_ as any).listens; - // const nodePath = getPath(node); - // const listenPaths = []; - // for (const path of listens.keys()) { - // if (path.substring(0, nodePath.length) === nodePath) { - // listenPaths.push(path); - // } - // } - - // listenPaths.sort(); - // const dumpPieces = []; - // for (let i = 0; i < listenPaths.length; i++) { - // const queryIds = []; - // for (const queryId of listens.get(listenPaths[i]).keys()) { - // queryIds.push(queryId); - // } - // queryIds.sort(); - // if (queryIds.length > 0) { - // dumpPieces.push( - // listenPaths[i].substring(nodePath.length) + ':' + queryIds.join(',') - // ); - // } - // } - - // return dumpPieces.join(';'); - // } - - // it('Dedupe listens: listen on parent.', () => { - // const node = getRandomNode() as Reference; - // expect(dumpListens(node)).to.equal(''); - - // const aOn = node.child('a').on('value', () => { }); - // expect(dumpListens(node)).to.equal('/a:default'); - - // const rootOn = node.on('value', () => { }); - // expect(dumpListens(node)).to.equal(':default'); - - // node.off('value', rootOn); - // expect(dumpListens(node)).to.equal('/a:default'); - - // node.child('a').off('value', aOn); - // expect(dumpListens(node)).to.equal(''); - // }); - - // it('Dedupe listens: listen on grandchild.', () => { - // const node = getRandomNode() as Reference; - - // const rootOn = node.on('value', () => { }); - // expect(dumpListens(node)).to.equal(':default'); - - // const aaOn = node.child('a/aa').on('value', () => { }); - // expect(dumpListens(node)).to.equal(':default'); - - // node.off('value', rootOn); - // node.child('a/aa').off('value', aaOn); - // expect(dumpListens(node)).to.equal(''); - // }); - - // it('Dedupe listens: listen on grandparent of two children.', () => { - // const node = getRandomNode() as Reference; - // expect(dumpListens(node)).to.equal(''); - - // const aaOn = node.child('a/aa').on('value', () => { }); - // expect(dumpListens(node)).to.equal('/a/aa:default'); - - // const bbOn = node.child('a/bb').on('value', () => { }); - // expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - - // const rootOn = node.on('value', () => { }); - // expect(dumpListens(node)).to.equal(':default'); - - // node.off('value', rootOn); - // expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - - // node.child('a/aa').off('value', aaOn); - // expect(dumpListens(node)).to.equal('/a/bb:default'); - - // node.child('a/bb').off('value', bbOn); - // expect(dumpListens(node)).to.equal(''); - // }); - - // it('Dedupe queried listens: multiple queried listens; no dupes', () => { - // const node = getRandomNode() as Reference; - // expect(dumpListens(node)).to.equal(''); - - // const aLim1On = node - // .child('a') - // .limitToLast(1) - // .on('value', () => { }); - // expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - - // const rootLim1On = node.limitToLast(1).on('value', () => { }); - // expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); - - // const aLim5On = node - // .child('a') - // .limitToLast(5) - // .on('value', () => { }); - // expect(dumpListens(node)).to.equal( - // ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' - // ); - - // node.limitToLast(1).off('value', rootLim1On); - // expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}'); - - // node.child('a').limitToLast(1).off('value', aLim1On); - // node.child('a').limitToLast(5).off('value', aLim5On); - // expect(dumpListens(node)).to.equal(''); - // }); - - // it('Dedupe queried listens: listen on parent of queried children.', () => { - // const node = getRandomNode() as Reference; - - // const aLim1On = node - // .child('a') - // .limitToLast(1) - // .on('value', () => { }); - // expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - - // const bLim1On = node - // .child('b') - // .limitToLast(1) - // .on('value', () => { }); - // expect(dumpListens(node)).to.equal( - // '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' - // ); - - // const rootOn = node.on('value', () => { }); - // expect(dumpListens(node)).to.equal(':default'); - - // // remove in slightly random order. - // node.child('a').limitToLast(1).off('value', aLim1On); - // expect(dumpListens(node)).to.equal(':default'); - - // node.off('value', rootOn); - // expect(dumpListens(node)).to.equal('/b:{"l":1,"vf":"r"}'); - - // node.child('b').limitToLast(1).off('value', bLim1On); - // expect(dumpListens(node)).to.equal(''); - // }); - - // it('Limit with mix of null and non-null priorities.', () => { - // const node = getRandomNode() as Reference; - - // const children = []; - // node.limitToLast(5).on('child_added', childSnap => { - // children.push(childSnap.key); - // }); - - // node.set({ - // Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, - // Mike: { '.priority': 500, score: 500, name: 'Mike' }, - // Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, - // James: { '.priority': 7, score: 7, name: 'James' }, - // Sally: { '.priority': -7, score: -7, name: 'Sally' }, - // Fred: { score: 0, name: 'Fred' } - // }); - - // expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); - // }); - - // it('Limit with mix of null and non-null priorities using server data', async () => { - // const node = getRandomNode() as Reference; - - // const children = []; - // await node.set({ - // Vikrum: { '.priority': 1000, score: 1000, name: 'Vikrum' }, - // Mike: { '.priority': 500, score: 500, name: 'Mike' }, - // Andrew: { '.priority': 50, score: 50, name: 'Andrew' }, - // James: { '.priority': 7, score: 7, name: 'James' }, - // Sally: { '.priority': -7, score: -7, name: 'Sally' }, - // Fred: { score: 0, name: 'Fred' } - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(5); - // node.limitToLast(5).on('child_added', childSnap => { - // children.push(childSnap.key); - // ea.addEvent(); - // }); - - // await ea.promise; - - // expect(children.join(',')).to.equal('Sally,James,Andrew,Mike,Vikrum'); - // }); - - // it('.on() with a context works.', () => { - // const ref = getRandomNode() as Reference; - - // const ListenerDoohickey = function () { - // this.snap = null; - // }; - // ListenerDoohickey.prototype.onEvent = function (snap) { - // this.snap = snap; - // }; - - // const l = new ListenerDoohickey(); - // ref.on('value', l.onEvent, l); - - // ref.set('test'); - // expect(l.snap.val()).to.equal('test'); - - // ref.off('value', l.onEvent, l); - - // // Ensure we don't get any more events. - // ref.set('blah'); - // expect(l.snap.val()).to.equal('test'); - // }); - - // it('.once() with a context works.', () => { - // const ref = getRandomNode() as Reference; - - // const ListenerDoohickey = function () { - // this.snap = null; - // }; - // ListenerDoohickey.prototype.onEvent = function (snap) { - // this.snap = snap; - // }; - - // const l = new ListenerDoohickey(); - // ref.once('value', l.onEvent, l); - - // ref.set('test'); - // expect(l.snap.val()).to.equal('test'); - - // // Shouldn't get any more events. - // ref.set('blah'); - // expect(l.snap.val()).to.equal('test'); - // }); - - // it('handles an update that deletes the entire window in a query', () => { - // const ref = getRandomNode() as Reference; - - // const snaps = []; - // ref.limitToLast(2).on('value', snap => { - // snaps.push(snap.val()); - // }); - - // ref.set({ - // a: { '.value': 1, '.priority': 1 }, - // b: { '.value': 2, '.priority': 2 }, - // c: { '.value': 3, '.priority': 3 } - // }); - // ref.update({ - // b: null, - // c: null - // }); - - // expect(snaps.length).to.equal(2); - // expect(snaps[0]).to.deep.equal({ b: 2, c: 3 }); - // // The original set is still outstanding (synchronous API), so we have a full cache to re-window against - // expect(snaps[1]).to.deep.equal({ a: 1 }); - // }); - - // it('handles an out-of-view query on a child', () => { - // const ref = getRandomNode() as Reference; - - // let parent = null; - // ref.limitToLast(1).on('value', snap => { - // parent = snap.val(); - // }); - - // let child = null; - // ref.child('a').on('value', snap => { - // child = snap.val(); - // }); - - // ref.set({ a: 1, b: 2 }); - // expect(parent).to.deep.equal({ b: 2 }); - // expect(child).to.equal(1); - - // ref.update({ c: 3 }); - // expect(parent).to.deep.equal({ c: 3 }); - // expect(child).to.equal(1); - // }); - - // it('handles a child query going out of view of the parent', () => { - // const ref = getRandomNode() as Reference; - - // let parent = null; - // ref.limitToLast(1).on('value', snap => { - // parent = snap.val(); - // }); - - // let child = null; - // ref.child('a').on('value', snap => { - // child = snap.val(); - // }); - - // ref.set({ a: 1 }); - // expect(parent).to.deep.equal({ a: 1 }); - // expect(child).to.equal(1); - // ref.child('b').set(2); - // expect(parent).to.deep.equal({ b: 2 }); - // expect(child).to.equal(1); - // ref.child('b').remove(); - // expect(parent).to.deep.equal({ a: 1 }); - // expect(child).to.equal(1); - // }); - - // it('handles diverging views', () => { - // const ref = getRandomNode() as Reference; - - // let c = null; - // ref - // .limitToLast(1) - // .endAt(null, 'c') - // .on('value', snap => { - // c = snap.val(); - // }); - - // let d = null; - // ref - // .limitToLast(1) - // .endAt(null, 'd') - // .on('value', snap => { - // d = snap.val(); - // }); - - // ref.set({ a: 1, b: 2, c: 3 }); - // expect(c).to.deep.equal({ c: 3 }); - // expect(d).to.deep.equal({ c: 3 }); - // ref.child('d').set(4); - // expect(c).to.deep.equal({ c: 3 }); - // expect(d).to.deep.equal({ d: 4 }); - // }); - - // it('handles removing a queried element', async () => { - // const ref = getRandomNode() as Reference; - - // let val; - // const ea = EventAccumulatorFactory.waitsForCount(1); - // ref.limitToLast(1).on('child_added', snap => { - // val = snap.val(); - // ea.addEvent(); - // }); - - // ref.set({ a: 1, b: 2 }); - // expect(val).to.equal(2); - - // ref.child('b').remove(); - - // await ea.promise; - - // expect(val).to.equal(1); - // }); - - // it('.startAt().limitToFirst(1) works.', done => { - // const ref = getRandomNode() as Reference; - // ref.set({ a: 1, b: 2 }); - - // let val; - // ref - // .startAt() - // .limitToFirst(1) - // .on('child_added', snap => { - // val = snap.val(); - // if (val === 1) { - // done(); - // } - // }); - // }); - - // it('.startAt().limitToFirst(1) and then remove first child (case 1664).', async () => { - // const ref = getRandomNode() as Reference; - // ref.set({ a: 1, b: 2 }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // let val; - // ref - // .startAt() - // .limitToFirst(1) - // .on('child_added', snap => { - // val = snap.val(); - // ea.addEvent(); - // }); - - // await ea.promise; - // expect(val).to.equal(1); - - // ea.reset(); - // ref.child('a').remove(); - - // await ea.promise; - // expect(val).to.equal(2); - // }); - - // it('.startAt() with two arguments works properly (case 1169).', done => { - // const ref = getRandomNode() as Reference; - // const data = { - // Walker: { - // name: 'Walker', - // score: 20, - // '.priority': 20 - // }, - // Michael: { - // name: 'Michael', - // score: 100, - // '.priority': 100 - // } - // }; - // ref.set(data, () => { - // ref - // .startAt(20, 'Walker') - // .limitToFirst(2) - // .on('value', s => { - // const childNames = []; - // s.forEach(node => { - // childNames.push(node.key); - // }); - // expect(childNames).to.deep.equal(['Walker', 'Michael']); - // done(); - // }); - // }); - // }); - - // it('handles multiple queries on the same node', async () => { - // const ref = getRandomNode() as Reference; - - // await ref.set({ - // a: 1, - // b: 2, - // c: 3, - // d: 4, - // e: 5, - // f: 6 - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - - // let firstListen = false; - // ref.limitToLast(2).on('value', snap => { - // // This shouldn't get called twice, we don't update the values here - // expect(firstListen).to.be.false; - // firstListen = true; - // ea.addEvent(); - // }); - - // await ea.promise; - - // // now do consecutive once calls - // await ref.limitToLast(1).once('value'); - // const snap = await ref.limitToLast(1).once('value'); - // const val = snap.val(); - // expect(val).to.deep.equal({ f: 6 }); - // }); - - // it('handles once called on a node with a default listener', async () => { - // const ref = getRandomNode() as Reference; - - // await ref.set({ - // a: 1, - // b: 2, - // c: 3, - // d: 4, - // e: 5, - // f: 6 - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // // Setup value listener - // ref.on('value', snap => { - // ea.addEvent(); - // }); - - // await ea.promise; - - // // now do the once call - // const snap = await ref.limitToLast(1).once('child_added'); - // const val = snap.val(); - // expect(val).to.equal(6); - // }); - - // it('handles once called on a node with a default listener and non-complete limit', async () => { - // const ref = getRandomNode() as Reference; - - // await ref.set({ - // a: 1, - // b: 2, - // c: 3 - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // // Setup value listener - // ref.on('value', snap => { - // ea.addEvent(); - // }); - - // await ea.promise; - - // // now do the once call - // const snap = await ref.limitToLast(5).once('value'); - // const val = snap.val(); - // expect(val).to.deep.equal({ a: 1, b: 2, c: 3 }); - // }); - - // it('Remote remove triggers events.', done => { - // const refPair = getRandomNode(2), - // writeRef = refPair[0], - // readRef = refPair[1]; - - // writeRef.set({ a: 'a', b: 'b', c: 'c', d: 'd', e: 'e' }, () => { - // // Wait to get the initial data, and then remove 'c' remotely and wait for new data. - // let count = 0; - // readRef.limitToLast(5).on('value', s => { - // count++; - // if (count === 1) { - // expect(s.val()).to.deep.equal({ - // a: 'a', - // b: 'b', - // c: 'c', - // d: 'd', - // e: 'e' - // }); - // writeRef.child('c').remove(); - // } else { - // expect(count).to.equal(2); - // expect(s.val()).to.deep.equal({ a: 'a', b: 'b', d: 'd', e: 'e' }); - // done(); - // } - // }); - // }); - // }); - - // it(".endAt(null, 'f').limitToLast(5) returns the right set of children.", done => { - // const ref = getRandomNode() as Reference; - // ref.set( - // { a: 'a', b: 'b', c: 'c', d: 'd', e: 'e', f: 'f', g: 'g', h: 'h' }, - // () => { - // ref - // .endAt(null, 'f') - // .limitToLast(5) - // .on('value', s => { - // expect(s.val()).to.deep.equal({ - // b: 'b', - // c: 'c', - // d: 'd', - // e: 'e', - // f: 'f' - // }); - // done(); - // }); - // } - // ); - // }); - - // it('complex update() at query root raises correct value event', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let readerLoaded = false; - // writer - // .child('foo') - // .set({ a: 1, b: 2, c: 3, d: 4, e: 5 }, (error, dummy) => { - // reader - // .child('foo') - // .startAt() - // .limitToFirst(4) - // .on('value', snapshot => { - // const val = snapshot.val(); - // if (!readerLoaded) { - // readerLoaded = true; - // expect(val).to.deep.equal({ a: 1, b: 2, c: 3, d: 4 }); - - // // This update causes the following to happen: - // // 1. An in-view child is set to null (b) - // // 2. An in-view child has its value changed (c) - // // 3. An in-view child is changed and bumped out-of-view (d) - // // We expect to get null values for b and d, along with the new children and updated value for c - // writer - // .child('foo') - // .update({ b: null, c: 'a', cc: 'new', cd: 'new2', d: 'gone' }); - // } else { - // done(); - // expect(val).to.deep.equal({ - // a: 1, - // c: 'a', - // cc: 'new', - // cd: 'new2' - // }); - // } - // }); - // }); - // }); - - // it('update() at query root raises correct value event', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let readerLoaded = false; - // writer - // .child('foo') - // .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { - // reader - // .child('foo') - // .limitToLast(10) - // .on('value', snapshot => { - // const val = snapshot.val(); - // if (!readerLoaded) { - // readerLoaded = true; - // expect(val.bar).to.equal('a'); - // expect(val.baz).to.equal('b'); - // expect(val.bam).to.equal('c'); - // writer.child('foo').update({ bar: 'd', bam: null, bat: 'e' }); - // } else { - // expect(val.bar).to.equal('d'); - // expect(val.baz).to.equal('b'); - // expect(val.bat).to.equal('e'); - // expect(val.bam).to.equal(undefined); - // done(); - // } - // }); - // }); - // }); + it('update() at query root raises correct value event', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let readerLoaded = false; + writer + .child('foo') + .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { + reader + .child('foo') + .limitToLast(10) + .on('value', snapshot => { + const val = snapshot.val(); + if (!readerLoaded) { + readerLoaded = true; + expect(val.bar).to.equal('a'); + expect(val.baz).to.equal('b'); + expect(val.bam).to.equal('c'); + writer.child('foo').update({ bar: 'd', bam: null, bat: 'e' }); + } else { + expect(val.bar).to.equal('d'); + expect(val.baz).to.equal('b'); + expect(val.bat).to.equal('e'); + expect(val.bam).to.equal(undefined); + done(); + } + }); + }); + }); it('get() at empty root returns null', async () => { const node = getRandomNode() as Reference; @@ -2239,1065 +2239,1065 @@ describe('Query Tests', () => { }); }); - // it('set() at query root raises correct value event', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let readerLoaded = false; - // writer - // .child('foo') - // .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { - // reader - // .child('foo') - // .limitToLast(10) - // .on('value', snapshot => { - // const val = snapshot.val(); - // if (!readerLoaded) { - // readerLoaded = true; - // expect(val.bar).to.equal('a'); - // expect(val.baz).to.equal('b'); - // expect(val.bam).to.equal('c'); - // writer.child('foo').set({ bar: 'd', baz: 'b', bat: 'e' }); - // } else { - // expect(val.bar).to.equal('d'); - // expect(val.baz).to.equal('b'); - // expect(val.bat).to.equal('e'); - // expect(val.bam).to.equal(undefined); - // done(); - // } - // }); - // }); - // }); - - // it('listen for child_added events with limit and different types fires properly', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let numEventsReceived = 0, - // gotA = false, - // gotB = false, - // gotC = false; - // writer.child('a').set(1, (error, dummy) => { - // writer.child('b').set('b', (error, dummy) => { - // writer - // .child('c') - // .set({ deep: 'path', of: { stuff: true } }, (error, dummy) => { - // reader.limitToLast(3).on('child_added', snap => { - // const val = snap.val(); - // switch (snap.key) { - // case 'a': - // gotA = true; - // expect(val).to.equal(1); - // break; - // case 'b': - // gotB = true; - // expect(val).to.equal('b'); - // break; - // case 'c': - // gotC = true; - // expect(val.deep).to.equal('path'); - // expect(val.of.stuff).to.be.true; - // break; - // default: - // expect(false).to.be.true; - // } - // numEventsReceived += 1; - // expect(numEventsReceived).to.be.lessThan(4); - // if (gotA && gotB && gotC) { - // done(); - // } - // }); - // }); - // }); - // }); - // }); - - // it('listen for child_changed events with limit and different types fires properly', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let numEventsReceived = 0, - // gotA = false, - // gotB = false, - // gotC = false, - // readerLoaded = false; - // writer.set( - // { a: 'something', b: "we'll", c: 'overwrite ' }, - // (error, dummy) => { - // reader.limitToLast(3).on('value', snapshot => { - // if (!readerLoaded) { - // readerLoaded = true; - // // Set up listener for upcoming change events - // reader.limitToLast(3).on('child_changed', snap => { - // const val = snap.val(); - // switch (snap.key) { - // case 'a': - // gotA = true; - // expect(val).to.equal(1); - // break; - // case 'b': - // gotB = true; - // expect(val).to.equal('b'); - // break; - // case 'c': - // gotC = true; - // expect(val.deep).to.equal('path'); - // expect(val.of.stuff).to.be.true; - // break; - // default: - // expect(false).to.be.true; - // } - // numEventsReceived += 1; - // expect(numEventsReceived).to.be.lessThan(4); - // if (gotA && gotB && gotC) { - // done(); - // } - // }); - - // // Begin changing every key - // writer.child('a').set(1); - // writer.child('b').set('b'); - // writer.child('c').set({ deep: 'path', of: { stuff: true } }); - // } - // }); - // } - // ); - // }); - - // it('listen for child_remove events with limit and different types fires properly', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let numEventsReceived = 0, - // gotA = false, - // gotB = false, - // gotC = false, - // readerLoaded = false; - // writer.set( - // { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, - // (error, dummy) => { - // reader.limitToLast(3).on('value', snapshot => { - // if (!readerLoaded) { - // readerLoaded = true; - - // // Set up listener for upcoming change events - // reader.limitToLast(3).on('child_removed', snap => { - // const val = snap.val(); - // switch (snap.key) { - // case 'a': - // gotA = true; - // expect(val).to.equal(1); - // break; - // case 'b': - // gotB = true; - // expect(val).to.equal('b'); - // break; - // case 'c': - // gotC = true; - // expect(val.deep).to.equal('path'); - // expect(val.of.stuff).to.be.true; - // break; - // default: - // expect(false).to.be.true; - // } - // numEventsReceived += 1; - // expect(numEventsReceived).to.be.lessThan(4); - // if (gotA && gotB && gotC) { - // done(); - // } - // }); - - // // Begin removing every key - // writer.child('a').remove(); - // writer.child('b').remove(); - // writer.child('c').remove(); - // } - // }); - // } - // ); - // }); - - // it('listen for child_remove events when parent removed', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let numEventsReceived = 0, - // gotA = false, - // gotB = false, - // gotC = false, - // readerLoaded = false; - // writer.set( - // { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, - // (error, dummy) => { - // reader.limitToLast(3).on('value', snapshot => { - // if (!readerLoaded) { - // readerLoaded = true; - - // // Set up listener for upcoming change events - // reader.limitToLast(3).on('child_removed', snap => { - // const val = snap.val(); - // switch (snap.key) { - // case 'a': - // gotA = true; - // expect(val).to.equal(1); - // break; - // case 'b': - // gotB = true; - // expect(val).to.equal('b'); - // break; - // case 'c': - // gotC = true; - // expect(val.deep).to.equal('path'); - // expect(val.of.stuff).to.be.true; - // break; - // default: - // expect(false).to.be.true; - // } - // numEventsReceived += 1; - // expect(numEventsReceived).to.be.lessThan(4); - // if (gotA && gotB && gotC) { - // done(); - // } - // }); - - // // Remove the query parent - // writer.remove(); - // } - // }); - // } - // ); - // }); - - // it('listen for child_remove events when parent set to scalar', done => { - // const nodePair = getRandomNode(2); - // const writer = nodePair[0]; - // const reader = nodePair[1]; - - // let numEventsReceived = 0, - // gotA = false, - // gotB = false, - // gotC = false, - // readerLoaded = false; - // writer.set( - // { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, - // (error, dummy) => { - // reader.limitToLast(3).on('value', snapshot => { - // if (!readerLoaded) { - // readerLoaded = true; - - // // Set up listener for upcoming change events - // reader.limitToLast(3).on('child_removed', snap => { - // const val = snap.val(); - // switch (snap.key) { - // case 'a': - // gotA = true; - // expect(val).to.equal(1); - // break; - // case 'b': - // gotB = true; - // expect(val).to.equal('b'); - // break; - // case 'c': - // gotC = true; - // expect(val.deep).to.equal('path'); - // expect(val.of.stuff).to.be.true; - // break; - // default: - // expect(false).to.be.true; - // } - // numEventsReceived += 1; - // expect(numEventsReceived).to.be.lessThan(4); - // if (gotA && gotB && gotC) { - // done(); - // } - // }); - - // // Set the parent to a scalar - // writer.set('scalar'); - // } - // }); - // } - // ); - // }); - - // it('Queries behave wrong after .once().', async () => { - // const refPair = getRandomNode(2), - // writeRef = refPair[0], - // readRef = refPair[1]; - // let startAtCount, defaultCount; - - // await writeRef.set({ a: 1, b: 2, c: 3, d: 4 }); - - // await readRef.once('value'); - - // const ea = EventAccumulatorFactory.waitsForCount(5); - // startAtCount = 0; - // readRef.startAt(null, 'd').on('child_added', () => { - // startAtCount++; - // ea.addEvent(); - // }); - // expect(startAtCount).to.equal(0); - - // defaultCount = 0; - // readRef.on('child_added', () => { - // defaultCount++; - // ea.addEvent(); - // }); - // expect(defaultCount).to.equal(0); - - // readRef.on('child_removed', () => { - // expect(false).to.be.true; - // }); - - // return ea.promise; - // }); - - // it('Case 2003: Correctly get events for startAt/endAt queries when priority changes.', () => { - // const ref = getRandomNode() as Reference; - // const addedFirst = [], - // removedFirst = [], - // addedSecond = [], - // removedSecond = []; - // ref - // .startAt(0) - // .endAt(10) - // .on('child_added', snap => { - // addedFirst.push(snap.key); - // }); - // ref - // .startAt(0) - // .endAt(10) - // .on('child_removed', snap => { - // removedFirst.push(snap.key); - // }); - // ref - // .startAt(10) - // .endAt(20) - // .on('child_added', snap => { - // addedSecond.push(snap.key); - // }); - // ref - // .startAt(10) - // .endAt(20) - // .on('child_removed', snap => { - // removedSecond.push(snap.key); - // }); - - // ref.child('a').setWithPriority('a', 5); - // expect(addedFirst).to.deep.equal(['a']); - // ref.child('a').setWithPriority('a', 15); - // expect(removedFirst).to.deep.equal(['a']); - // expect(addedSecond).to.deep.equal(['a']); - - // ref.child('a').setWithPriority('a', 10); - // expect(addedFirst).to.deep.equal(['a', 'a']); - - // ref.child('a').setWithPriority('a', 5); - // expect(removedSecond).to.deep.equal(['a']); - // }); - - // it('Behaves with diverging queries', async () => { - // const refs = getRandomNode(2); - // const writer = refs[0]; - // const reader = refs[1]; - - // await writer.set({ - // a: { b: 1, c: 2 }, - // e: 3 - // }); - - // let childCount = 0; - - // reader.child('a/b').on('value', snap => { - // const val = snap.val(); - // childCount++; - // if (childCount === 1) { - // expect(val).to.equal(1); - // } else { - // // fail this, nothing should have changed - // expect(true).to.be.false; - // } - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // let count = 0; - // reader.limitToLast(2).on('value', snap => { - // ea.addEvent(); - // const val = snap.val(); - // count++; - // if (count === 1) { - // expect(val).to.deep.equal({ a: { b: 1, c: 2 }, e: 3 }); - // } else if (count === 2) { - // expect(val).to.deep.equal({ d: 4, e: 3 }); - // } - // }); - - // await ea.promise; - - // ea.reset(); - // writer.child('d').set(4); - - // return ea.promise; - // }); - - // it('Priority-only updates are processed correctly by server.', async () => { - // const refPair = getRandomNode(2) as Reference[], - // readRef = refPair[0], - // writeRef = refPair[1]; - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // let readVal; - // readRef.limitToLast(2).on('value', s => { - // readVal = s.val(); - // if (readVal) { - // ea.addEvent(); - // } - // }); - // writeRef.set({ - // a: { '.priority': 10, '.value': 1 }, - // b: { '.priority': 20, '.value': 2 }, - // c: { '.priority': 30, '.value': 3 } - // }); - - // await ea.promise; - // expect(readVal).to.deep.equal({ b: 2, c: 3 }); - - // ea.reset(); - // writeRef.child('a').setPriority(25); - - // await ea.promise; - // expect(readVal).to.deep.equal({ a: 1, c: 3 }); - // }); - - // it('Server: Test re-listen', done => { - // const refPair = getRandomNode(2) as Reference[], - // ref = refPair[0], - // ref2 = refPair[1]; - // ref.set({ - // a: 'a', - // b: 'b', - // c: 'c', - // d: 'd', - // e: 'e', - // f: 'f', - // g: 'g' - // }); - - // let before; - // ref - // .startAt(null, 'a') - // .endAt(null, 'b') - // .on('value', b => { - // before = b.val(); - // }); - - // ref.child('aa').set('aa', () => { - // ref2 - // .startAt(null, 'a') - // .endAt(null, 'b') - // .on('value', b => { - // expect(b.val()).to.deep.equal(before); - // done(); - // }); - // }); - // }); - - // it('Server: Test re-listen 2', done => { - // const refPair = getRandomNode(2), - // ref = refPair[0], - // ref2 = refPair[1]; - // ref.set({ - // a: 'a', - // b: 'b', - // c: 'c', - // d: 'd', - // e: 'e', - // f: 'f', - // g: 'g' - // }); - - // let before; - // ref - // .startAt(null, 'b') - // .limitToFirst(3) - // .on('value', b => { - // before = b.val(); - // }); - - // ref.child('aa').update({ a: 5, aa: 4, b: 7, c: 4, d: 4, dd: 3 }, () => { - // ref2 - // .startAt(null, 'b') - // .limitToFirst(3) - // .on('value', b => { - // expect(b.val()).to.deep.equal(before); - // done(); - // }); - // }); - // }); - - // it('Server: Test re-listen 3', done => { - // const refPair = getRandomNode(2), - // ref = refPair[0], - // ref2 = refPair[1]; - // ref.set({ - // a: 'a', - // b: 'b', - // c: 'c', - // d: 'd', - // e: 'e', - // f: 'f', - // g: 'g' - // }); - - // let before; - // ref.limitToLast(3).on('value', b => { - // before = b.val(); - // }); - - // ref.child('h').set('h', () => { - // ref2.limitToLast(3).on('value', b => { - // expect(b.val()).to.deep.equal(before); - // done(); - // }); - // }); - // }); - - // it('Server limit below limit works properly.', async () => { - // const refPair = getRandomNode(2) as Reference[], - // readRef = refPair[0], - // writeRef = refPair[1]; - // let childData; - - // await writeRef.set({ - // a: { - // aa: { '.priority': 1, '.value': 1 }, - // ab: { '.priority': 1, '.value': 1 } - // } - // }); - - // readRef.limitToLast(1).on('value', s => { - // expect(s.val()).to.deep.equal({ a: { aa: 1, ab: 1 } }); - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // readRef - // .child('a') - // .startAt(1) - // .endAt(1) - // .on('value', s => { - // childData = s.val(); - // if (childData) { - // ea.addEvent(); - // } - // }); - - // await ea.promise; - // expect(childData).to.deep.equal({ aa: 1, ab: 1 }); - - // // This should remove an item from the child query, but *not* the parent query. - // ea.reset(); - // writeRef.child('a/ab').setWithPriority(1, 2); - - // await ea.promise; - - // expect(childData).to.deep.equal({ aa: 1 }); - // }); - - // it('Server: Setting grandchild of item in limit works.', async () => { - // const refPair = getRandomNode(2), - // ref = refPair[0], - // ref2 = refPair[1]; - - // ref.set({ - // a: { - // name: 'Mike' - // } - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // const snaps = []; - // ref2.limitToLast(1).on('value', s => { - // const val = s.val(); - // if (val !== null) { - // snaps.push(val); - // ea.addEvent(); - // } - // }); - - // await ea.promise; - // expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); - - // ea.reset(); - // ref.child('a/name').set('Fred'); - - // await ea.promise; - // expect(snaps).to.deep.equal([ - // { a: { name: 'Mike' } }, - // { a: { name: 'Fred' } } - // ]); - // }); - - // it('Server: Updating grandchildren of item in limit works.', async () => { - // const refPair = getRandomNode(2), - // ref = refPair[0], - // ref2 = refPair[1]; - - // ref.set({ - // a: { - // name: 'Mike' - // } - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // const snaps = []; - // ref2.limitToLast(1).on('value', s => { - // const val = s.val(); - // if (val !== null) { - // snaps.push(val); - // ea.addEvent(); - // } - // }); - - // /** - // * If I put this artificial pause here, this test works however - // * something about the timing is broken - // */ - // await ea.promise; - // expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); - - // ea.reset(); - // ref.child('a').update({ name: null, Name: 'Fred' }); - // await ea.promise; - - // expect(snaps).to.deep.equal([ - // { a: { name: 'Mike' } }, - // { a: { Name: 'Fred' } } - // ]); - // }); - - // it('Server: New child at end of limit shows up.', async () => { - // const refPair = getRandomNode(2), - // ref = refPair[0], - // ref2 = refPair[1]; - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // let snap; - // ref2.limitToLast(1).on('value', s => { - // snap = s.val(); - // ea.addEvent(); - // }); - - // await ea.promise; - // expect(snap).to.be.null; - // ea.reset(); - - // ref.child('a').set('new child'); - - // /** - // * If I put this artificial pause here, this test works however - // * something about the timing is broken - // */ - // await ea.promise; - // expect(snap).to.deep.equal({ a: 'new child' }); - // }); - - // it('Server: Priority-only updates are processed correctly by server (1).', async () => { - // const refPair = getRandomNode(2), - // readRef = refPair[0], - // writeRef = refPair[1]; - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // let readVal; - // readRef.limitToLast(2).on('value', s => { - // readVal = s.val(); - // if (readVal) { - // ea.addEvent(); - // } - // }); - // writeRef.set({ - // a: { '.priority': 10, '.value': 1 }, - // b: { '.priority': 20, '.value': 2 }, - // c: { '.priority': 30, '.value': 3 } - // }); - - // await ea.promise; - // expect(readVal).to.deep.equal({ b: 2, c: 3 }); - - // ea.reset(); - // writeRef.child('a').setPriority(25); - - // await ea.promise; - // expect(readVal).to.deep.equal({ a: 1, c: 3 }); - // }); - - // // Same as above but with an endAt() so we hit CompoundQueryView instead of SimpleLimitView. - // it('Server: Priority-only updates are processed correctly by server (2).', async () => { - // const refPair = getRandomNode(2), - // readRef = refPair[0], - // writeRef = refPair[1]; - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // let readVal; - // readRef - // .endAt(50) - // .limitToLast(2) - // .on('value', s => { - // readVal = s.val(); - // if (readVal) { - // ea.addEvent(); - // } - // }); - - // writeRef.set({ - // a: { '.priority': 10, '.value': 1 }, - // b: { '.priority': 20, '.value': 2 }, - // c: { '.priority': 30, '.value': 3 } - // }); - - // await ea.promise; - // expect(readVal).to.deep.equal({ b: 2, c: 3 }); - - // ea.reset(); - // writeRef.child('a').setPriority(25); - - // await ea.promise; - // expect(readVal).to.deep.equal({ a: 1, c: 3 }); - // }); - - // it('Latency compensation works with limit and pushed object.', () => { - // const ref = getRandomNode() as Reference; - // const events = []; - // ref.limitToLast(3).on('child_added', s => { - // events.push(s.val()); - // }); - - // // If you change this to ref.push('foo') it works. - // ref.push({ a: 'foo' }); - - // // Should have synchronously gotten an event. - // expect(events.length).to.equal(1); - // }); - - // it("Cache doesn't remove items that have fallen out of view.", async () => { - // const refPair = getRandomNode(2), - // readRef = refPair[0], - // writeRef = refPair[1]; - - // let ea = EventAccumulatorFactory.waitsForCount(1); - // let readVal; - // readRef.limitToLast(2).on('value', s => { - // readVal = s.val(); - // ea.addEvent(); - // }); - - // await ea.promise; - // expect(readVal).to.be.null; - - // ea = EventAccumulatorFactory.waitsForCount(4); - // for (let i = 0; i < 4; i++) { - // writeRef.child('k' + i).set(i); - // } - - // await ea.promise; - - // await pause(500); - // expect(readVal).to.deep.equal({ k2: 2, k3: 3 }); - - // ea = EventAccumulatorFactory.waitsForCount(1); - // writeRef.remove(); - - // await ea.promise; - // expect(readVal).to.be.null; - // }); - - // it('handles an update that moves another child that has a deeper listener out of view', async () => { - // const refs = getRandomNode(2); - // const reader = refs[0]; - // const writer = refs[1]; - - // await writer.set({ - // a: { '.priority': 10, '.value': 1 }, - // b: { '.priority': 20, d: 4 }, - // c: { '.priority': 30, '.value': 3 } - // }); - - // reader.child('b/d').on('value', snap => { - // expect(snap.val()).to.equal(4); - // }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // let val; - // reader.limitToLast(2).on('value', snap => { - // val = snap.val(); - // if (val) { - // ea.addEvent(); - // } - // }); - - // await ea.promise; - // expect(val).to.deep.equal({ b: { d: 4 }, c: 3 }); - - // ea.reset(); - // writer.child('a').setWithPriority(1, 40); - - // await ea.promise; - // expect(val).to.deep.equal({ c: 3, a: 1 }); - // }); - - // it('Integer keys behave numerically 1.', done => { - // const ref = getRandomNode() as Reference; - // ref.set( - // { - // 1: true, - // 50: true, - // 550: true, - // 6: true, - // 600: true, - // 70: true, - // 8: true, - // 80: true - // }, - // () => { - // ref.startAt(null, '80').once('value', s => { - // expect(s.val()).to.deep.equal({ 80: true, 550: true, 600: true }); - // done(); - // }); - // } - // ); - // }); - - // it('Integer keys behave numerically 2.', done => { - // const ref = getRandomNode() as Reference; - // ref.set( - // { - // 1: true, - // 50: true, - // 550: true, - // 6: true, - // 600: true, - // 70: true, - // 8: true, - // 80: true - // }, - // () => { - // ref.endAt(null, '50').once('value', s => { - // expect(s.val()).to.deep.equal({ - // 1: true, - // 6: true, - // 8: true, - // 50: true - // }); - // done(); - // }); - // } - // ); - // }); - - // it('Integer keys behave numerically 3.', done => { - // const ref = getRandomNode() as Reference; - // ref.set( - // { - // 1: true, - // 50: true, - // 550: true, - // 6: true, - // 600: true, - // 70: true, - // 8: true, - // 80: true - // }, - // () => { - // ref - // .startAt(null, '50') - // .endAt(null, '80') - // .once('value', s => { - // expect(s.val()).to.deep.equal({ 50: true, 70: true, 80: true }); - // done(); - // }); - // } - // ); - // }); - - // it('.limitToLast() on node with priority.', done => { - // const ref = getRandomNode() as Reference; - // ref.set({ a: 'blah', '.priority': 'priority' }, () => { - // ref.limitToLast(2).once('value', s => { - // expect(s.exportVal()).to.deep.equal({ a: 'blah' }); - // done(); - // }); - // }); - // }); - - // it('.equalTo works', async () => { - // const ref = getRandomNode() as Reference; - // const done = false; - - // await ref.set({ - // a: 1, - // b: { '.priority': 2, '.value': 2 }, - // c: { '.priority': '3', '.value': 3 } - // }); - - // const snap1 = await ref.equalTo(2).once('value'); - // const val1 = snap1.exportVal(); - // expect(val1).to.deep.equal({ b: { '.priority': 2, '.value': 2 } }); - - // const snap2 = await ref.equalTo('3', 'c').once('value'); - - // const val2 = snap2.exportVal(); - // expect(val2).to.deep.equal({ c: { '.priority': '3', '.value': 3 } }); - - // const snap3 = await ref.equalTo(null, 'c').once('value'); - // const val3 = snap3.exportVal(); - // expect(val3).to.be.null; - // }); - - // it('Handles fallback for orderBy', async () => { - // const ref = getRandomNode() as Reference; - - // const children = []; - - // ref.orderByChild('foo').on('child_added', snap => { - // children.push(snap.key); - // }); - - // // Set initial data - // await ref.set({ - // a: { foo: 3 }, - // b: { foo: 1 }, - // c: { foo: 2 } - // }); - - // expect(children).to.deep.equal(['b', 'c', 'a']); - // }); - - // it('Get notified of deletes that happen while offline.', async () => { - // const refPair = getRandomNode(2); - // const queryRef = refPair[0]; - // const writerRef = refPair[1]; - // let readSnapshot = null; - - // // Write 3 children and then start our limit query. - // await writerRef.set({ a: 1, b: 2, c: 3 }); - - // const ea = EventAccumulatorFactory.waitsForCount(1); - // queryRef.limitToLast(3).on('value', s => { - // readSnapshot = s; - // if (readSnapshot) { - // ea.addEvent(); - // } - // }); - - // // Wait for us to read the 3 children. - // await ea.promise; - - // expect(readSnapshot.val()).to.deep.equal({ a: 1, b: 2, c: 3 }); - - // queryRef.database.goOffline(); - - // // Delete an item in the query and then bring our connection back up. - // ea.reset(); - // await writerRef.child('b').remove(); - // queryRef.database.goOnline(); - - // await ea.promise; - // expect(readSnapshot.child('b').val()).to.be.null; - // }); - - // it('Snapshot children respect default ordering', done => { - // const refPair = getRandomNode(2); - // const queryRef = refPair[0], - // writerRef = refPair[1]; - - // const list = { - // a: { - // thisvaluefirst: { '.value': true, '.priority': 1 }, - // name: { '.value': 'Michael', '.priority': 2 }, - // thisvaluelast: { '.value': true, '.priority': 3 } - // }, - // b: { - // thisvaluefirst: { '.value': true, '.priority': null }, - // name: { '.value': 'Rob', '.priority': 2 }, - // thisvaluelast: { '.value': true, '.priority': 3 } - // }, - // c: { - // thisvaluefirst: { '.value': true, '.priority': 1 }, - // name: { '.value': 'Jonny', '.priority': 2 }, - // thisvaluelast: { '.value': true, '.priority': 'somestring' } - // } - // }; - - // writerRef.set(list, () => { - // queryRef.orderByChild('name').once('value', snap => { - // const expectedKeys = ['thisvaluefirst', 'name', 'thisvaluelast']; - // const expectedNames = ['Jonny', 'Michael', 'Rob']; - - // // Validate that snap.child() resets order to default for child snaps - // const orderedKeys = []; - // snap.child('b').forEach(childSnap => { - // orderedKeys.push(childSnap.key); - // }); - // expect(orderedKeys).to.deep.equal(expectedKeys); - - // // Validate that snap.forEach() resets ordering to default for child snaps - // const orderedNames = []; - // snap.forEach(childSnap => { - // orderedNames.push(childSnap.child('name').val()); - // const orderedKeys = []; - // childSnap.forEach(grandchildSnap => { - // orderedKeys.push(grandchildSnap.key); - // }); - // expect(orderedKeys).to.deep.equal([ - // 'thisvaluefirst', - // 'name', - // 'thisvaluelast' - // ]); - // }); - // expect(orderedNames).to.deep.equal(expectedNames); - // done(); - // }); - // }); - // }); - - // it('Adding listens for the same paths does not check fail', done => { - // // This bug manifests itself if there's a hierarchy of query listener, default listener and one-time listener - // // underneath. During one-time listener registration, sync-tree traversal stopped as soon as it found a complete - // // server cache (this is the case for not indexed query view). The problem is that the same traversal was - // // looking for a ancestor default view, and the early exit prevented from finding the default listener above the - // // one-time listener. Event removal code path wasn't removing the listener because it stopped as soon as it - // // found the default view. This left the zombie one-time listener and check failed on the second attempt to - // // create a listener for the same path (asana#61028598952586). - // const ref = getRandomNode(1)[0]; - - // ref.child('child').set({ name: 'John' }, () => { - // ref - // .orderByChild('name') - // .equalTo('John') - // .on('value', snap => { - // ref.child('child').on('value', snap => { - // ref - // .child('child') - // .child('favoriteToy') - // .once('value', snap => { - // ref - // .child('child') - // .child('favoriteToy') - // .once('value', snap => { - // done(); - // }); - // }); - // }); - // }); - // }); - // }); - - // it('Can JSON serialize refs', () => { - // const ref = getRandomNode() as Reference; - // expect(JSON.stringify(ref)).to.equal('"' + ref.toString() + '"'); - // }); + it('set() at query root raises correct value event', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let readerLoaded = false; + writer + .child('foo') + .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { + reader + .child('foo') + .limitToLast(10) + .on('value', snapshot => { + const val = snapshot.val(); + if (!readerLoaded) { + readerLoaded = true; + expect(val.bar).to.equal('a'); + expect(val.baz).to.equal('b'); + expect(val.bam).to.equal('c'); + writer.child('foo').set({ bar: 'd', baz: 'b', bat: 'e' }); + } else { + expect(val.bar).to.equal('d'); + expect(val.baz).to.equal('b'); + expect(val.bat).to.equal('e'); + expect(val.bam).to.equal(undefined); + done(); + } + }); + }); + }); + + it('listen for child_added events with limit and different types fires properly', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let numEventsReceived = 0, + gotA = false, + gotB = false, + gotC = false; + writer.child('a').set(1, (error, dummy) => { + writer.child('b').set('b', (error, dummy) => { + writer + .child('c') + .set({ deep: 'path', of: { stuff: true } }, (error, dummy) => { + reader.limitToLast(3).on('child_added', snap => { + const val = snap.val(); + switch (snap.key) { + case 'a': + gotA = true; + expect(val).to.equal(1); + break; + case 'b': + gotB = true; + expect(val).to.equal('b'); + break; + case 'c': + gotC = true; + expect(val.deep).to.equal('path'); + expect(val.of.stuff).to.be.true; + break; + default: + expect(false).to.be.true; + } + numEventsReceived += 1; + expect(numEventsReceived).to.be.lessThan(4); + if (gotA && gotB && gotC) { + done(); + } + }); + }); + }); + }); + }); + + it('listen for child_changed events with limit and different types fires properly', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let numEventsReceived = 0, + gotA = false, + gotB = false, + gotC = false, + readerLoaded = false; + writer.set( + { a: 'something', b: "we'll", c: 'overwrite ' }, + (error, dummy) => { + reader.limitToLast(3).on('value', snapshot => { + if (!readerLoaded) { + readerLoaded = true; + // Set up listener for upcoming change events + reader.limitToLast(3).on('child_changed', snap => { + const val = snap.val(); + switch (snap.key) { + case 'a': + gotA = true; + expect(val).to.equal(1); + break; + case 'b': + gotB = true; + expect(val).to.equal('b'); + break; + case 'c': + gotC = true; + expect(val.deep).to.equal('path'); + expect(val.of.stuff).to.be.true; + break; + default: + expect(false).to.be.true; + } + numEventsReceived += 1; + expect(numEventsReceived).to.be.lessThan(4); + if (gotA && gotB && gotC) { + done(); + } + }); + + // Begin changing every key + writer.child('a').set(1); + writer.child('b').set('b'); + writer.child('c').set({ deep: 'path', of: { stuff: true } }); + } + }); + } + ); + }); + + it('listen for child_remove events with limit and different types fires properly', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let numEventsReceived = 0, + gotA = false, + gotB = false, + gotC = false, + readerLoaded = false; + writer.set( + { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, + (error, dummy) => { + reader.limitToLast(3).on('value', snapshot => { + if (!readerLoaded) { + readerLoaded = true; + + // Set up listener for upcoming change events + reader.limitToLast(3).on('child_removed', snap => { + const val = snap.val(); + switch (snap.key) { + case 'a': + gotA = true; + expect(val).to.equal(1); + break; + case 'b': + gotB = true; + expect(val).to.equal('b'); + break; + case 'c': + gotC = true; + expect(val.deep).to.equal('path'); + expect(val.of.stuff).to.be.true; + break; + default: + expect(false).to.be.true; + } + numEventsReceived += 1; + expect(numEventsReceived).to.be.lessThan(4); + if (gotA && gotB && gotC) { + done(); + } + }); + + // Begin removing every key + writer.child('a').remove(); + writer.child('b').remove(); + writer.child('c').remove(); + } + }); + } + ); + }); + + it('listen for child_remove events when parent removed', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let numEventsReceived = 0, + gotA = false, + gotB = false, + gotC = false, + readerLoaded = false; + writer.set( + { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, + (error, dummy) => { + reader.limitToLast(3).on('value', snapshot => { + if (!readerLoaded) { + readerLoaded = true; + + // Set up listener for upcoming change events + reader.limitToLast(3).on('child_removed', snap => { + const val = snap.val(); + switch (snap.key) { + case 'a': + gotA = true; + expect(val).to.equal(1); + break; + case 'b': + gotB = true; + expect(val).to.equal('b'); + break; + case 'c': + gotC = true; + expect(val.deep).to.equal('path'); + expect(val.of.stuff).to.be.true; + break; + default: + expect(false).to.be.true; + } + numEventsReceived += 1; + expect(numEventsReceived).to.be.lessThan(4); + if (gotA && gotB && gotC) { + done(); + } + }); + + // Remove the query parent + writer.remove(); + } + }); + } + ); + }); + + it('listen for child_remove events when parent set to scalar', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let numEventsReceived = 0, + gotA = false, + gotB = false, + gotC = false, + readerLoaded = false; + writer.set( + { a: 1, b: 'b', c: { deep: 'path', of: { stuff: true } } }, + (error, dummy) => { + reader.limitToLast(3).on('value', snapshot => { + if (!readerLoaded) { + readerLoaded = true; + + // Set up listener for upcoming change events + reader.limitToLast(3).on('child_removed', snap => { + const val = snap.val(); + switch (snap.key) { + case 'a': + gotA = true; + expect(val).to.equal(1); + break; + case 'b': + gotB = true; + expect(val).to.equal('b'); + break; + case 'c': + gotC = true; + expect(val.deep).to.equal('path'); + expect(val.of.stuff).to.be.true; + break; + default: + expect(false).to.be.true; + } + numEventsReceived += 1; + expect(numEventsReceived).to.be.lessThan(4); + if (gotA && gotB && gotC) { + done(); + } + }); + + // Set the parent to a scalar + writer.set('scalar'); + } + }); + } + ); + }); + + it('Queries behave wrong after .once().', async () => { + const refPair = getRandomNode(2), + writeRef = refPair[0], + readRef = refPair[1]; + let startAtCount, defaultCount; + + await writeRef.set({ a: 1, b: 2, c: 3, d: 4 }); + + await readRef.once('value'); + + const ea = EventAccumulatorFactory.waitsForCount(5); + startAtCount = 0; + readRef.startAt(null, 'd').on('child_added', () => { + startAtCount++; + ea.addEvent(); + }); + expect(startAtCount).to.equal(0); + + defaultCount = 0; + readRef.on('child_added', () => { + defaultCount++; + ea.addEvent(); + }); + expect(defaultCount).to.equal(0); + + readRef.on('child_removed', () => { + expect(false).to.be.true; + }); + + return ea.promise; + }); + + it('Case 2003: Correctly get events for startAt/endAt queries when priority changes.', () => { + const ref = getRandomNode() as Reference; + const addedFirst = [], + removedFirst = [], + addedSecond = [], + removedSecond = []; + ref + .startAt(0) + .endAt(10) + .on('child_added', snap => { + addedFirst.push(snap.key); + }); + ref + .startAt(0) + .endAt(10) + .on('child_removed', snap => { + removedFirst.push(snap.key); + }); + ref + .startAt(10) + .endAt(20) + .on('child_added', snap => { + addedSecond.push(snap.key); + }); + ref + .startAt(10) + .endAt(20) + .on('child_removed', snap => { + removedSecond.push(snap.key); + }); + + ref.child('a').setWithPriority('a', 5); + expect(addedFirst).to.deep.equal(['a']); + ref.child('a').setWithPriority('a', 15); + expect(removedFirst).to.deep.equal(['a']); + expect(addedSecond).to.deep.equal(['a']); + + ref.child('a').setWithPriority('a', 10); + expect(addedFirst).to.deep.equal(['a', 'a']); + + ref.child('a').setWithPriority('a', 5); + expect(removedSecond).to.deep.equal(['a']); + }); + + it('Behaves with diverging queries', async () => { + const refs = getRandomNode(2); + const writer = refs[0]; + const reader = refs[1]; + + await writer.set({ + a: { b: 1, c: 2 }, + e: 3 + }); + + let childCount = 0; + + reader.child('a/b').on('value', snap => { + const val = snap.val(); + childCount++; + if (childCount === 1) { + expect(val).to.equal(1); + } else { + // fail this, nothing should have changed + expect(true).to.be.false; + } + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + let count = 0; + reader.limitToLast(2).on('value', snap => { + ea.addEvent(); + const val = snap.val(); + count++; + if (count === 1) { + expect(val).to.deep.equal({ a: { b: 1, c: 2 }, e: 3 }); + } else if (count === 2) { + expect(val).to.deep.equal({ d: 4, e: 3 }); + } + }); + + await ea.promise; + + ea.reset(); + writer.child('d').set(4); + + return ea.promise; + }); + + it('Priority-only updates are processed correctly by server.', async () => { + const refPair = getRandomNode(2) as Reference[], + readRef = refPair[0], + writeRef = refPair[1]; + + const ea = EventAccumulatorFactory.waitsForCount(1); + let readVal; + readRef.limitToLast(2).on('value', s => { + readVal = s.val(); + if (readVal) { + ea.addEvent(); + } + }); + writeRef.set({ + a: { '.priority': 10, '.value': 1 }, + b: { '.priority': 20, '.value': 2 }, + c: { '.priority': 30, '.value': 3 } + }); + + await ea.promise; + expect(readVal).to.deep.equal({ b: 2, c: 3 }); + + ea.reset(); + writeRef.child('a').setPriority(25); + + await ea.promise; + expect(readVal).to.deep.equal({ a: 1, c: 3 }); + }); + + it('Server: Test re-listen', done => { + const refPair = getRandomNode(2) as Reference[], + ref = refPair[0], + ref2 = refPair[1]; + ref.set({ + a: 'a', + b: 'b', + c: 'c', + d: 'd', + e: 'e', + f: 'f', + g: 'g' + }); + + let before; + ref + .startAt(null, 'a') + .endAt(null, 'b') + .on('value', b => { + before = b.val(); + }); + + ref.child('aa').set('aa', () => { + ref2 + .startAt(null, 'a') + .endAt(null, 'b') + .on('value', b => { + expect(b.val()).to.deep.equal(before); + done(); + }); + }); + }); + + it('Server: Test re-listen 2', done => { + const refPair = getRandomNode(2), + ref = refPair[0], + ref2 = refPair[1]; + ref.set({ + a: 'a', + b: 'b', + c: 'c', + d: 'd', + e: 'e', + f: 'f', + g: 'g' + }); + + let before; + ref + .startAt(null, 'b') + .limitToFirst(3) + .on('value', b => { + before = b.val(); + }); + + ref.child('aa').update({ a: 5, aa: 4, b: 7, c: 4, d: 4, dd: 3 }, () => { + ref2 + .startAt(null, 'b') + .limitToFirst(3) + .on('value', b => { + expect(b.val()).to.deep.equal(before); + done(); + }); + }); + }); + + it('Server: Test re-listen 3', done => { + const refPair = getRandomNode(2), + ref = refPair[0], + ref2 = refPair[1]; + ref.set({ + a: 'a', + b: 'b', + c: 'c', + d: 'd', + e: 'e', + f: 'f', + g: 'g' + }); + + let before; + ref.limitToLast(3).on('value', b => { + before = b.val(); + }); + + ref.child('h').set('h', () => { + ref2.limitToLast(3).on('value', b => { + expect(b.val()).to.deep.equal(before); + done(); + }); + }); + }); + + it('Server limit below limit works properly.', async () => { + const refPair = getRandomNode(2) as Reference[], + readRef = refPair[0], + writeRef = refPair[1]; + let childData; + + await writeRef.set({ + a: { + aa: { '.priority': 1, '.value': 1 }, + ab: { '.priority': 1, '.value': 1 } + } + }); + + readRef.limitToLast(1).on('value', s => { + expect(s.val()).to.deep.equal({ a: { aa: 1, ab: 1 } }); + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + readRef + .child('a') + .startAt(1) + .endAt(1) + .on('value', s => { + childData = s.val(); + if (childData) { + ea.addEvent(); + } + }); + + await ea.promise; + expect(childData).to.deep.equal({ aa: 1, ab: 1 }); + + // This should remove an item from the child query, but *not* the parent query. + ea.reset(); + writeRef.child('a/ab').setWithPriority(1, 2); + + await ea.promise; + + expect(childData).to.deep.equal({ aa: 1 }); + }); + + it('Server: Setting grandchild of item in limit works.', async () => { + const refPair = getRandomNode(2), + ref = refPair[0], + ref2 = refPair[1]; + + ref.set({ + a: { + name: 'Mike' + } + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + const snaps = []; + ref2.limitToLast(1).on('value', s => { + const val = s.val(); + if (val !== null) { + snaps.push(val); + ea.addEvent(); + } + }); + + await ea.promise; + expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); + + ea.reset(); + ref.child('a/name').set('Fred'); + + await ea.promise; + expect(snaps).to.deep.equal([ + { a: { name: 'Mike' } }, + { a: { name: 'Fred' } } + ]); + }); + + it('Server: Updating grandchildren of item in limit works.', async () => { + const refPair = getRandomNode(2), + ref = refPair[0], + ref2 = refPair[1]; + + ref.set({ + a: { + name: 'Mike' + } + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + const snaps = []; + ref2.limitToLast(1).on('value', s => { + const val = s.val(); + if (val !== null) { + snaps.push(val); + ea.addEvent(); + } + }); + + /** + * If I put this artificial pause here, this test works however + * something about the timing is broken + */ + await ea.promise; + expect(snaps).to.deep.equal([{ a: { name: 'Mike' } }]); + + ea.reset(); + ref.child('a').update({ name: null, Name: 'Fred' }); + await ea.promise; + + expect(snaps).to.deep.equal([ + { a: { name: 'Mike' } }, + { a: { Name: 'Fred' } } + ]); + }); + + it('Server: New child at end of limit shows up.', async () => { + const refPair = getRandomNode(2), + ref = refPair[0], + ref2 = refPair[1]; + + const ea = EventAccumulatorFactory.waitsForCount(1); + let snap; + ref2.limitToLast(1).on('value', s => { + snap = s.val(); + ea.addEvent(); + }); + + await ea.promise; + expect(snap).to.be.null; + ea.reset(); + + ref.child('a').set('new child'); + + /** + * If I put this artificial pause here, this test works however + * something about the timing is broken + */ + await ea.promise; + expect(snap).to.deep.equal({ a: 'new child' }); + }); + + it('Server: Priority-only updates are processed correctly by server (1).', async () => { + const refPair = getRandomNode(2), + readRef = refPair[0], + writeRef = refPair[1]; + + const ea = EventAccumulatorFactory.waitsForCount(1); + let readVal; + readRef.limitToLast(2).on('value', s => { + readVal = s.val(); + if (readVal) { + ea.addEvent(); + } + }); + writeRef.set({ + a: { '.priority': 10, '.value': 1 }, + b: { '.priority': 20, '.value': 2 }, + c: { '.priority': 30, '.value': 3 } + }); + + await ea.promise; + expect(readVal).to.deep.equal({ b: 2, c: 3 }); + + ea.reset(); + writeRef.child('a').setPriority(25); + + await ea.promise; + expect(readVal).to.deep.equal({ a: 1, c: 3 }); + }); + + // Same as above but with an endAt() so we hit CompoundQueryView instead of SimpleLimitView. + it('Server: Priority-only updates are processed correctly by server (2).', async () => { + const refPair = getRandomNode(2), + readRef = refPair[0], + writeRef = refPair[1]; + + const ea = EventAccumulatorFactory.waitsForCount(1); + let readVal; + readRef + .endAt(50) + .limitToLast(2) + .on('value', s => { + readVal = s.val(); + if (readVal) { + ea.addEvent(); + } + }); + + writeRef.set({ + a: { '.priority': 10, '.value': 1 }, + b: { '.priority': 20, '.value': 2 }, + c: { '.priority': 30, '.value': 3 } + }); + + await ea.promise; + expect(readVal).to.deep.equal({ b: 2, c: 3 }); + + ea.reset(); + writeRef.child('a').setPriority(25); + + await ea.promise; + expect(readVal).to.deep.equal({ a: 1, c: 3 }); + }); + + it('Latency compensation works with limit and pushed object.', () => { + const ref = getRandomNode() as Reference; + const events = []; + ref.limitToLast(3).on('child_added', s => { + events.push(s.val()); + }); + + // If you change this to ref.push('foo') it works. + ref.push({ a: 'foo' }); + + // Should have synchronously gotten an event. + expect(events.length).to.equal(1); + }); + + it("Cache doesn't remove items that have fallen out of view.", async () => { + const refPair = getRandomNode(2), + readRef = refPair[0], + writeRef = refPair[1]; + + let ea = EventAccumulatorFactory.waitsForCount(1); + let readVal; + readRef.limitToLast(2).on('value', s => { + readVal = s.val(); + ea.addEvent(); + }); + + await ea.promise; + expect(readVal).to.be.null; + + ea = EventAccumulatorFactory.waitsForCount(4); + for (let i = 0; i < 4; i++) { + writeRef.child('k' + i).set(i); + } + + await ea.promise; + + await pause(500); + expect(readVal).to.deep.equal({ k2: 2, k3: 3 }); + + ea = EventAccumulatorFactory.waitsForCount(1); + writeRef.remove(); + + await ea.promise; + expect(readVal).to.be.null; + }); + + it('handles an update that moves another child that has a deeper listener out of view', async () => { + const refs = getRandomNode(2); + const reader = refs[0]; + const writer = refs[1]; + + await writer.set({ + a: { '.priority': 10, '.value': 1 }, + b: { '.priority': 20, d: 4 }, + c: { '.priority': 30, '.value': 3 } + }); + + reader.child('b/d').on('value', snap => { + expect(snap.val()).to.equal(4); + }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + let val; + reader.limitToLast(2).on('value', snap => { + val = snap.val(); + if (val) { + ea.addEvent(); + } + }); + + await ea.promise; + expect(val).to.deep.equal({ b: { d: 4 }, c: 3 }); + + ea.reset(); + writer.child('a').setWithPriority(1, 40); + + await ea.promise; + expect(val).to.deep.equal({ c: 3, a: 1 }); + }); + + it('Integer keys behave numerically 1.', done => { + const ref = getRandomNode() as Reference; + ref.set( + { + 1: true, + 50: true, + 550: true, + 6: true, + 600: true, + 70: true, + 8: true, + 80: true + }, + () => { + ref.startAt(null, '80').once('value', s => { + expect(s.val()).to.deep.equal({ 80: true, 550: true, 600: true }); + done(); + }); + } + ); + }); + + it('Integer keys behave numerically 2.', done => { + const ref = getRandomNode() as Reference; + ref.set( + { + 1: true, + 50: true, + 550: true, + 6: true, + 600: true, + 70: true, + 8: true, + 80: true + }, + () => { + ref.endAt(null, '50').once('value', s => { + expect(s.val()).to.deep.equal({ + 1: true, + 6: true, + 8: true, + 50: true + }); + done(); + }); + } + ); + }); + + it('Integer keys behave numerically 3.', done => { + const ref = getRandomNode() as Reference; + ref.set( + { + 1: true, + 50: true, + 550: true, + 6: true, + 600: true, + 70: true, + 8: true, + 80: true + }, + () => { + ref + .startAt(null, '50') + .endAt(null, '80') + .once('value', s => { + expect(s.val()).to.deep.equal({ 50: true, 70: true, 80: true }); + done(); + }); + } + ); + }); + + it('.limitToLast() on node with priority.', done => { + const ref = getRandomNode() as Reference; + ref.set({ a: 'blah', '.priority': 'priority' }, () => { + ref.limitToLast(2).once('value', s => { + expect(s.exportVal()).to.deep.equal({ a: 'blah' }); + done(); + }); + }); + }); + + it('.equalTo works', async () => { + const ref = getRandomNode() as Reference; + const done = false; + + await ref.set({ + a: 1, + b: { '.priority': 2, '.value': 2 }, + c: { '.priority': '3', '.value': 3 } + }); + + const snap1 = await ref.equalTo(2).once('value'); + const val1 = snap1.exportVal(); + expect(val1).to.deep.equal({ b: { '.priority': 2, '.value': 2 } }); + + const snap2 = await ref.equalTo('3', 'c').once('value'); + + const val2 = snap2.exportVal(); + expect(val2).to.deep.equal({ c: { '.priority': '3', '.value': 3 } }); + + const snap3 = await ref.equalTo(null, 'c').once('value'); + const val3 = snap3.exportVal(); + expect(val3).to.be.null; + }); + + it('Handles fallback for orderBy', async () => { + const ref = getRandomNode() as Reference; + + const children = []; + + ref.orderByChild('foo').on('child_added', snap => { + children.push(snap.key); + }); + + // Set initial data + await ref.set({ + a: { foo: 3 }, + b: { foo: 1 }, + c: { foo: 2 } + }); + + expect(children).to.deep.equal(['b', 'c', 'a']); + }); + + it('Get notified of deletes that happen while offline.', async () => { + const refPair = getRandomNode(2); + const queryRef = refPair[0]; + const writerRef = refPair[1]; + let readSnapshot = null; + + // Write 3 children and then start our limit query. + await writerRef.set({ a: 1, b: 2, c: 3 }); + + const ea = EventAccumulatorFactory.waitsForCount(1); + queryRef.limitToLast(3).on('value', s => { + readSnapshot = s; + if (readSnapshot) { + ea.addEvent(); + } + }); + + // Wait for us to read the 3 children. + await ea.promise; + + expect(readSnapshot.val()).to.deep.equal({ a: 1, b: 2, c: 3 }); + + queryRef.database.goOffline(); + + // Delete an item in the query and then bring our connection back up. + ea.reset(); + await writerRef.child('b').remove(); + queryRef.database.goOnline(); + + await ea.promise; + expect(readSnapshot.child('b').val()).to.be.null; + }); + + it('Snapshot children respect default ordering', done => { + const refPair = getRandomNode(2); + const queryRef = refPair[0], + writerRef = refPair[1]; + + const list = { + a: { + thisvaluefirst: { '.value': true, '.priority': 1 }, + name: { '.value': 'Michael', '.priority': 2 }, + thisvaluelast: { '.value': true, '.priority': 3 } + }, + b: { + thisvaluefirst: { '.value': true, '.priority': null }, + name: { '.value': 'Rob', '.priority': 2 }, + thisvaluelast: { '.value': true, '.priority': 3 } + }, + c: { + thisvaluefirst: { '.value': true, '.priority': 1 }, + name: { '.value': 'Jonny', '.priority': 2 }, + thisvaluelast: { '.value': true, '.priority': 'somestring' } + } + }; + + writerRef.set(list, () => { + queryRef.orderByChild('name').once('value', snap => { + const expectedKeys = ['thisvaluefirst', 'name', 'thisvaluelast']; + const expectedNames = ['Jonny', 'Michael', 'Rob']; + + // Validate that snap.child() resets order to default for child snaps + const orderedKeys = []; + snap.child('b').forEach(childSnap => { + orderedKeys.push(childSnap.key); + }); + expect(orderedKeys).to.deep.equal(expectedKeys); + + // Validate that snap.forEach() resets ordering to default for child snaps + const orderedNames = []; + snap.forEach(childSnap => { + orderedNames.push(childSnap.child('name').val()); + const orderedKeys = []; + childSnap.forEach(grandchildSnap => { + orderedKeys.push(grandchildSnap.key); + }); + expect(orderedKeys).to.deep.equal([ + 'thisvaluefirst', + 'name', + 'thisvaluelast' + ]); + }); + expect(orderedNames).to.deep.equal(expectedNames); + done(); + }); + }); + }); + + it('Adding listens for the same paths does not check fail', done => { + // This bug manifests itself if there's a hierarchy of query listener, default listener and one-time listener + // underneath. During one-time listener registration, sync-tree traversal stopped as soon as it found a complete + // server cache (this is the case for not indexed query view). The problem is that the same traversal was + // looking for a ancestor default view, and the early exit prevented from finding the default listener above the + // one-time listener. Event removal code path wasn't removing the listener because it stopped as soon as it + // found the default view. This left the zombie one-time listener and check failed on the second attempt to + // create a listener for the same path (asana#61028598952586). + const ref = getRandomNode(1)[0]; + + ref.child('child').set({ name: 'John' }, () => { + ref + .orderByChild('name') + .equalTo('John') + .on('value', snap => { + ref.child('child').on('value', snap => { + ref + .child('child') + .child('favoriteToy') + .once('value', snap => { + ref + .child('child') + .child('favoriteToy') + .once('value', snap => { + done(); + }); + }); + }); + }); + }); + }); + + it('Can JSON serialize refs', () => { + const ref = getRandomNode() as Reference; + expect(JSON.stringify(ref)).to.equal('"' + ref.toString() + '"'); + }); }); From 48c6d39e2b5f4ef5c68ea743dea29080be826f3d Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 5 Oct 2020 21:30:07 -0700 Subject: [PATCH 11/37] test rename --- packages/database/test/query.test.ts | 30 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index 2d50f7acf59..73db757c5fd 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -1494,7 +1494,7 @@ describe('Query Tests', () => { it('Ensure on() returns callback function.', () => { const node = getRandomNode() as Reference; - const callback = function () {}; + const callback = function () { }; const ret = node.on('value', callback); expect(ret).to.equal(callback); }); @@ -1609,10 +1609,10 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aOn = node.child('a').on('value', () => {}); + const aOn = node.child('a').on('value', () => { }); expect(dumpListens(node)).to.equal('/a:default'); - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1625,10 +1625,10 @@ describe('Query Tests', () => { it('Dedupe listens: listen on grandchild.', () => { const node = getRandomNode() as Reference; - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); - const aaOn = node.child('a/aa').on('value', () => {}); + const aaOn = node.child('a/aa').on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1640,13 +1640,13 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aaOn = node.child('a/aa').on('value', () => {}); + const aaOn = node.child('a/aa').on('value', () => { }); expect(dumpListens(node)).to.equal('/a/aa:default'); - const bbOn = node.child('a/bb').on('value', () => {}); + const bbOn = node.child('a/bb').on('value', () => { }); expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1666,16 +1666,16 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - const rootLim1On = node.limitToLast(1).on('value', () => {}); + const rootLim1On = node.limitToLast(1).on('value', () => { }); expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); const aLim5On = node .child('a') .limitToLast(5) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal( ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' ); @@ -1694,18 +1694,18 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); const bLim1On = node .child('b') .limitToLast(1) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal( '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' ); - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); // remove in slightly random order. @@ -2227,7 +2227,7 @@ describe('Query Tests', () => { expect(val).to.be.null; }); - it('get() LATEST', async () => { + it('get() caches results', async () => { const reader = getFreshRepo('reader'); const writer = getFreshRepo('writer'); From 2bae15b97a8b6869e31771211f0229ff8ea4c38c Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Tue, 6 Oct 2020 07:14:40 -0700 Subject: [PATCH 12/37] fix checks --- packages/database/package.json | 1 + .../database/src/core/PersistentConnection.ts | 4 +- packages/database/src/core/Repo.ts | 3 +- packages/database/test/query.test.ts | 49 ++++++++++++------- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/packages/database/package.json b/packages/database/package.json index aab73a28a23..780e1d3b081 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -19,6 +19,7 @@ "test:all": "run-p lint test:browser test:node", "test:browser": "karma start --single-run", "test:node": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/{,!(browser)/**/}*.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", + "test:queries": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/query.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", "test:emulator": "ts-node --compiler-options='{\"module\":\"commonjs\"}' ../../scripts/emulator-testing/database-test-runner.ts", "prepare": "yarn build" }, diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index b14ec22a434..ae84903b179 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -209,7 +209,7 @@ export class PersistentConnection extends ServerActions { this.outstandingGets_.push({ action, request: req, - deferred: deferred + deferred }); this.outstandingGetCount_++; @@ -276,7 +276,7 @@ export class PersistentConnection extends ServerActions { if (deferred) { const payload = message['d'] as string; - if (message['s'] == 'ok') { + if (message['s'] === 'ok') { this.onDataUpdate_( request['p'], payload, diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 4cc584b6329..eabdb38e4cf 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -25,7 +25,7 @@ import { Path } from './util/Path'; import { SparseSnapshotTree } from './SparseSnapshotTree'; import { SyncTree } from './SyncTree'; import { SnapshotHolder } from './SnapshotHolder'; -import { stringify, map, isEmpty } from '@firebase/util'; +import { stringify, map, isEmpty, Deferred } from '@firebase/util'; import { beingCrawled, each, exceptionGuard, warn, log } from './util/util'; import { AuthTokenProvider } from './AuthTokenProvider'; @@ -47,7 +47,6 @@ import { Event } from './view/Event'; import { Node } from './snap/Node'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { Provider } from '@firebase/component'; -import { Deferred } from '@firebase/util'; import { Indexable } from './util/misc'; const INTERRUPT_REASON = 'repo_interrupt'; diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index 73db757c5fd..eef40aac611 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -19,14 +19,13 @@ import { expect } from 'chai'; import { Reference } from '../src/api/Reference'; import { Query } from '../src/api/Query'; import '../src/core/snap/ChildrenNode'; -import { getRandomNode, getPath, pause } from './helpers/util'; +import { getRandomNode, getFreshRepo, getPath, pause } from './helpers/util'; import { EventAccumulator, EventAccumulatorFactory } from './helpers/EventAccumulator'; import * as _ from 'lodash'; -import { getFreshRepo } from './helpers/util'; import { SnapshotHolder } from '../src/core/SnapshotHolder'; type TaskList = Array<[Query, any]>; @@ -1494,7 +1493,7 @@ describe('Query Tests', () => { it('Ensure on() returns callback function.', () => { const node = getRandomNode() as Reference; - const callback = function () { }; + const callback = function () {}; const ret = node.on('value', callback); expect(ret).to.equal(callback); }); @@ -1609,10 +1608,10 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aOn = node.child('a').on('value', () => { }); + const aOn = node.child('a').on('value', () => {}); expect(dumpListens(node)).to.equal('/a:default'); - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1625,10 +1624,10 @@ describe('Query Tests', () => { it('Dedupe listens: listen on grandchild.', () => { const node = getRandomNode() as Reference; - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); - const aaOn = node.child('a/aa').on('value', () => { }); + const aaOn = node.child('a/aa').on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1640,13 +1639,13 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aaOn = node.child('a/aa').on('value', () => { }); + const aaOn = node.child('a/aa').on('value', () => {}); expect(dumpListens(node)).to.equal('/a/aa:default'); - const bbOn = node.child('a/bb').on('value', () => { }); + const bbOn = node.child('a/bb').on('value', () => {}); expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1666,16 +1665,16 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - const rootLim1On = node.limitToLast(1).on('value', () => { }); + const rootLim1On = node.limitToLast(1).on('value', () => {}); expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); const aLim5On = node .child('a') .limitToLast(5) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal( ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' ); @@ -1694,18 +1693,18 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); const bLim1On = node .child('b') .limitToLast(1) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal( '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' ); - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); // remove in slightly random order. @@ -2217,8 +2216,8 @@ describe('Query Tests', () => { const reader = nodes[0]; const writer = nodes[1]; await writer.set({ foo: 'a', bar: 'b' }); - var snapshot = await reader.get(); - var val = snapshot.val(); + let snapshot = await reader.get(); + let val = snapshot.val(); expect(val['foo']).to.equal('a'); expect(val['bar']).to.equal('b'); await writer.remove(); @@ -2227,7 +2226,7 @@ describe('Query Tests', () => { expect(val).to.be.null; }); - it('get() caches results', async () => { + it('get() caches results at path', async () => { const reader = getFreshRepo('reader'); const writer = getFreshRepo('writer'); @@ -2239,6 +2238,18 @@ describe('Query Tests', () => { }); }); + it('get above path caches data', async () => { + const reader = getFreshRepo('reader'); + const writer = getFreshRepo('writer'); + + await writer.set({ foo: { bar: 'baz' } }); + let snapshot = await reader.get(); + reader.database.goOffline(); + reader.child('foo/bar').once('value', snap => { + expect(snap.val()).to.equal(snapshot.val()); + }); + }); + it('set() at query root raises correct value event', done => { const nodePair = getRandomNode(2); const writer = nodePair[0]; From 578f9cab318bbb6d250f6cb66223145cc72f06b9 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 9 Oct 2020 13:10:54 -0700 Subject: [PATCH 13/37] x --- packages/database/src/api/Query.ts | 10 ++- .../database/src/core/PersistentConnection.ts | 63 ++++---------- packages/database/src/core/Repo.ts | 11 +-- packages/database/test/query.test.ts | 87 ++++++++++++++----- 4 files changed, 94 insertions(+), 77 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 5c97df01a5b..6458d70fd64 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -47,6 +47,7 @@ import { Repo } from '../core/Repo'; import { QueryParams } from '../core/view/QueryParams'; import { Reference } from './Reference'; import { DataSnapshot } from './DataSnapshot'; +import { FirebaseApp } from '@firebase/app-types'; let __referenceConstructor: new (repo: Repo, path: Path) => Query; @@ -299,8 +300,12 @@ export class Query { this.repo.removeEventCallbackForQuery(this, container); } + /** + * Get the server-value for this query, or return a cached value if not connected. + * @return {!firebase.Promise} + */ get(): Promise { - return this.repo.get(this); + return this.once('value'); } /** @@ -317,6 +322,7 @@ export class Query { failureCallbackOrContext?: ((a: Error) => void) | object | null, context?: object | null ): Promise { + console.log('Calling once!'); validateArgCount('Query.once', 1, 4, arguments.length); validateEventType('Query.once', 1, eventType, false); validateCallback('Query.once', 2, userCallback, true); @@ -347,6 +353,7 @@ export class Query { if (userCallback) { userCallback.bind(ret.context)(snapshot); } + console.log('once resolved!'); deferred.resolve(snapshot); } }; @@ -355,6 +362,7 @@ export class Query { eventType, onceCallback, /*cancel=*/ err => { + console.log('once rejected!'); this.off(eventType, onceCallback); if (ret.cancel) { diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index ae84903b179..6c14efb6ef3 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -197,29 +197,16 @@ export class PersistentConnection extends ServerActions { } get(query: Query): Promise { - const action = 'g'; - const req: { [k: string]: unknown } = { p: query.path.toString(), q: query.queryObject() }; - const deferred = new Deferred(); - - this.outstandingGets_.push({ - action, - request: req, - deferred - }); - - this.outstandingGetCount_++; - if (this.connected_) { - this.sendGet_(this.outstandingGets_.length - 1); + this.sendGet_(req, deferred); } else { - this.log_('Buffering get: ' + query.path.toString()); + deferred.reject(); } - return deferred.promise; } @@ -260,33 +247,19 @@ export class PersistentConnection extends ServerActions { } } - private sendGet_(index: number) { - const action = this.outstandingGets_[index].action; - const request = this.outstandingGets_[index].request; - const deferred = this.outstandingGets_[index].deferred; - this.outstandingGets_[index].queued = this.connected_; - - this.sendRequest(action, request, (message: { [k: string]: unknown }) => { - delete this.outstandingGets_[index]; - this.outstandingGetCount_--; - - if (this.outstandingGetCount_ === 0) { - this.outstandingGets_ = []; - } - - if (deferred) { - const payload = message['d'] as string; - if (message['s'] === 'ok') { - this.onDataUpdate_( - request['p'], - payload, - /*isMerge*/ false, - /*tag*/ null - ); - deferred.resolve(payload); - } else { - deferred.reject(payload); - } + private sendGet_(request: object, deferred: Deferred) { + this.sendRequest('g', request, (message: { [k: string]: unknown }) => { + const payload = message['d'] as string; + if (message['s'] === 'ok') { + this.onDataUpdate_( + request['p'], + payload, + /*isMerge*/ false, + /*tag*/ null + ); + deferred.resolve(payload); + } else { + deferred.reject(payload); } }); } @@ -1005,12 +978,6 @@ export class PersistentConnection extends ServerActions { } } - for (let i = 0; i < this.outstandingGets_.length; i++) { - if (this.outstandingGets_[i]) { - this.sendGet_(i); - } - } - for (let i = 0; i < this.outstandingPuts_.length; i++) { if (this.outstandingPuts_[i]) { this.sendPut_(i); diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index eabdb38e4cf..af832da707e 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -299,18 +299,15 @@ export class Repo { get(query: Query): Promise { return this.server_.get(query).then( - payload => { - return Promise.resolve( + payload => + Promise.resolve( new DataSnapshot( nodeFromJSON(payload as string), query.getRef(), query.getQueryParams().getIndex() ) - ); - }, - err => { - return Promise.reject(new Error(err as string)); - } + ), + err => Promise.reject(new Error(err as string)) ); } diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index eef40aac611..30bda4d4b86 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -15,7 +15,10 @@ * limitations under the License. */ -import { expect } from 'chai'; +import * as chai from 'chai'; +let expect = chai.expect; +import * as chaiAsPromised from 'chai-as-promised'; +chai.use(chaiAsPromised); import { Reference } from '../src/api/Reference'; import { Query } from '../src/api/Query'; import '../src/core/snap/ChildrenNode'; @@ -2193,42 +2196,57 @@ describe('Query Tests', () => { }); }); - it('get() at empty root returns null', async () => { + it('get at empty node returns null', async () => { const node = getRandomNode() as Reference; const snapshot = await node.get(); const val = snapshot.val(); expect(val).to.be.null; }); - it('get() at non-empty root returns correct value', async () => { - const nodes = getRandomNode(2) as Reference; - const reader = nodes[0]; - const writer = nodes[1]; - await writer.set({ foo: 'a', bar: 'b' }); - const snapshot = await reader.get(); + it('get at non-empty root returns correct value', async () => { + const node = getRandomNode() as Reference; + await node.set({ foo: 'a', bar: 'b' }); + const snapshot = await node.get(); const val = snapshot.val(); expect(val['foo']).to.equal('a'); expect(val['bar']).to.equal('b'); }); - it('get() for removed node returns correct value', async () => { - const nodes = getRandomNode(2) as Reference; - const reader = nodes[0]; - const writer = nodes[1]; - await writer.set({ foo: 'a', bar: 'b' }); - let snapshot = await reader.get(); + it('get for removed node returns correct value', async () => { + const node = getRandomNode() as Reference; + await node.set({ foo: 'a', bar: 'b' }); + let snapshot = await node.get(); let val = snapshot.val(); expect(val['foo']).to.equal('a'); expect(val['bar']).to.equal('b'); - await writer.remove(); - snapshot = await reader.get(); + await node.remove(); + snapshot = await node.get(); val = snapshot.val(); expect(val).to.be.null; }); - it('get() caches results at path', async () => { - const reader = getFreshRepo('reader'); - const writer = getFreshRepo('writer'); + it('get while offline is rejected', async () => { + const node = getRandomNode() as Reference; + node.database.goOffline(); + let prom = new Promise((resolve, reject) => { + let done = false; + setTimeout(function () { + if (done) { + return; + } + done = true; + reject(); + }, 3000); + node.get().then(function (snap) { + resolve(); + }); + }); + expect(prom).to.eventually.be.rejected; + }); + + it('get caches results at path', async () => { + const reader = getFreshRepo('db'); + const writer = getFreshRepo('db'); await writer.set({ foo: 'bar' }); const snapshot = await reader.get(); @@ -2239,8 +2257,8 @@ describe('Query Tests', () => { }); it('get above path caches data', async () => { - const reader = getFreshRepo('reader'); - const writer = getFreshRepo('writer'); + const reader = getFreshRepo('db'); + const writer = getFreshRepo('db'); await writer.set({ foo: { bar: 'baz' } }); let snapshot = await reader.get(); @@ -2250,6 +2268,33 @@ describe('Query Tests', () => { }); }); + it('get does not cache sibling data', async () => { + const reader = getFreshRepo('db'); + const writer = getFreshRepo('db'); + await writer.set({ foo: { bar: { data: '1' }, baz: { data: '2' } } }); + let snapshot = await reader.child('foo/bar').get(); + expect(snapshot.val().data).to.equal('1'); + reader.database.goOffline(); + let prom = new Promise((resolve, reject) => { + let done = false; + setTimeout(function () { + if (done) { + return; + } + done = true; + reject(); + }, 3000); + reader.child('foo/baz').once('value', function (snapshot) { + if (done) { + return; + } + done = true; + resolve(snapshot); + }); + }); + expect(prom).to.eventually.be.rejected; + }); + it('set() at query root raises correct value event', done => { const nodePair = getRandomNode(2); const writer = nodePair[0]; From b6cef9ff90733211c667130a4fe854a6fcf27261 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 9 Oct 2020 13:20:15 -0700 Subject: [PATCH 14/37] actually called repo.get --- packages/database/src/api/Query.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 6458d70fd64..a1a11651746 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -80,7 +80,7 @@ export class Query { public path: Path, private queryParams_: QueryParams, private orderByCalled_: boolean - ) {} + ) { } /** * Validates start/end values for queries. @@ -127,13 +127,13 @@ export class Query { ) { throw new Error( 'Query: When ordering by priority, the first argument passed to startAt(), ' + - 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' + 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' ); } } else { assert( params.getIndex() instanceof PathIndex || - params.getIndex() === VALUE_INDEX, + params.getIndex() === VALUE_INDEX, 'unknown index type.' ); if ( @@ -142,7 +142,7 @@ export class Query { ) { throw new Error( 'Query: First argument passed to startAt(), endAt(), or equalTo() cannot be ' + - 'an object.' + 'an object.' ); } } @@ -305,7 +305,7 @@ export class Query { * @return {!firebase.Promise} */ get(): Promise { - return this.once('value'); + return this.repo.get(this).catch(_ => this.once('value')); } /** @@ -341,7 +341,7 @@ export class Query { const deferred = new Deferred(); // A dummy error handler in case a user wasn't expecting promises - deferred.promise.catch(() => {}); + deferred.promise.catch(() => { }); const onceCallback = (snapshot: DataSnapshot) => { // NOTE: Even though we unsubscribe, we may get called multiple times if a single action (e.g. set() with JSON) @@ -393,7 +393,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToFirst: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -424,7 +424,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToLast: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -526,7 +526,7 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.startAt: Starting point was already set (by another call to startAt ' + - 'or equalTo).' + 'or equalTo).' ); } @@ -557,7 +557,7 @@ export class Query { if (this.queryParams_.hasEnd()) { throw new Error( 'Query.endAt: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } @@ -578,13 +578,13 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.equalTo: Starting point was already set (by another call to startAt or ' + - 'equalTo).' + 'equalTo).' ); } if (this.queryParams_.hasEnd()) { throw new Error( 'Query.equalTo: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } return this.startAt(value, name).endAt(value, name); @@ -678,7 +678,7 @@ export class Query { } else { throw new Error( errorPrefix(fnName, 3, true) + - ' must either be a cancel callback or a context object.' + ' must either be a cancel callback or a context object.' ); } } From 580228674278f68796cb90bf121e88485a757f6f Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 9 Oct 2020 13:38:49 -0700 Subject: [PATCH 15/37] more fixes --- how | 20556 +++++++++++++++++++++++++ packages/database/src/api/Query.ts | 29 +- packages/database/src/core/Repo.ts | 14 +- packages/database/test/query.test.ts | 28 +- 4 files changed, 20590 insertions(+), 37 deletions(-) create mode 100644 how diff --git a/how b/how new file mode 100644 index 00000000000..990194ef30c --- /dev/null +++ b/how @@ -0,0 +1,20556 @@ +commit 578f9cab318bbb6d250f6cb66223145cc72f06b9 (HEAD -> jw/rtdb-query-get, origin/jw/rtdb-query-get) +Author: Jan Wyszynski +Date: Fri Oct 9 13:10:54 2020 -0700 + + x + +commit 2bae15b97a8b6869e31771211f0229ff8ea4c38c +Author: Jan Wyszynski +Date: Tue Oct 6 07:14:40 2020 -0700 + + fix checks + +commit 48c6d39e2b5f4ef5c68ea743dea29080be826f3d +Author: Jan Wyszynski +Date: Mon Oct 5 21:30:07 2020 -0700 + + test rename + +commit d9530eee4468495b0853ced2aada2b1d544d925c +Author: Jan Wyszynski +Date: Mon Oct 5 21:28:43 2020 -0700 + + Uncomment tests + +commit f20c90357aac6341b3f168b2d3dbd4997bd0ad4f +Author: Jan Wyszynski +Date: Mon Oct 5 21:25:24 2020 -0700 + + Use promises instead + caching test + +commit ab34805e2e0fab973d1362c20d31ba2cc40448e0 +Author: Jan Wyszynski +Date: Wed Sep 23 11:09:28 2020 -0700 + + get rid of todo + +commit 9b2cf00035742b9feb5b5d61269415c828f4b9e9 +Author: Jan Wyszynski +Date: Wed Sep 23 10:18:24 2020 -0700 + + remove callback arguments to get() + +commit 61665bf7c891057fc0c7b9b9c7c1671534cb8cd7 +Author: Jan Wyszynski +Date: Wed Sep 23 10:14:47 2020 -0700 + + Add basic tests for get + +commit 153dbcf36255455c49af764933f5da085629182b +Author: Jan Wyszynski +Date: Fri Sep 18 16:30:04 2020 -0700 + + cleanup + +commit 8b289f81b96c5c5bed3b638bc84a75977bd46b8c +Author: Jan Wyszynski +Date: Fri Sep 18 16:27:18 2020 -0700 + + Run yarn prettier + +commit 437b8a7e58acbfd7d88b958c28f14d09a61129ff +Author: Jan Wyszynski +Date: Fri Sep 18 16:25:56 2020 -0700 + + Call onDataUpdate_ to simulater server push + +commit 0abd55c6f24d2fd7c2f9d9a9c28321e711e5ce3e +Author: Jan Wyszynski +Date: Fri Sep 18 14:41:59 2020 -0700 + + Fix yarn test + +commit 86363d66ab1e1d5a263768389aa90f3f38d7853b +Author: Jan Wyszynski +Date: Fri Sep 18 14:35:49 2020 -0700 + + Query get() method for RTDB + +commit 80e42190022da79f851b60731d922f2a39d255dc +Author: Christina Holland +Date: Tue Sep 15 16:13:12 2020 -0700 + + Fix logic (#3788) + +commit 1309b93779f72df999af7b982bb60bcdd66bc8aa +Author: Christina Holland +Date: Tue Sep 15 15:47:03 2020 -0700 + + Allow ignoring unstaged changes (#3787) + +commit f9004177e76f00fc484d30c0c0e7b1bc2da033f9 +Author: Brian Chen +Date: Tue Sep 15 10:20:43 2020 -0500 + + Make != and NOT_IN publicly available (#3772) + +commit a865ae9eb688de931bae5f7899f0d85941a02a8d +Author: Sebastian Schmidt +Date: Mon Sep 14 10:30:48 2020 -0700 + + Don't use interface types (#3770) + +commit b1854ab302bcce1341cec4815299d1d9439e041b +Author: Brian Chen +Date: Fri Sep 11 18:11:04 2020 -0500 + + Fix NotInFilter matches (#3752) + +commit e81c429aec43cd4467089bfed68eafafba6e8ee2 +Author: Brian Chen +Date: Fri Sep 11 15:50:52 2020 -0500 + + Call toFirestore() only once (#3755) + +commit 35d1c0df6d156f76b445a9fd1f16638ed9a1cfc5 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Fri Sep 11 11:20:53 2020 -0700 + + Update dependency git-rev-sync to v3 (#3763) + + Co-authored-by: Renovate Bot + +commit 4b48167034c192603f5aede0935ce40172b80920 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Fri Sep 11 10:05:36 2020 -0700 + + Update dependency node-fetch to v2.6.1 [SECURITY] (#3759) + + Co-authored-by: Renovate Bot + +commit 0eb18ca80c53a0914e5525d4d90d324c73ee6ec5 +Merge: 595dfb0df 268096e0d +Author: Christina Holland +Date: Thu Sep 10 14:49:12 2020 -0700 + + Merge branch 'release' + Release 7.20.0 + +commit 268096e0d9bf2ec72c8746edf662bb41d7b247e7 (tag: firebase@7.20.0, tag: @firebase/util@0.3.2, tag: @firebase/storage@0.3.43, tag: @firebase/rules-unit-testing@1.0.2, tag: @firebase/remote-config@0.1.28, tag: @firebase/performance@0.4.1, tag: @firebase/messaging@0.7.1, tag: @firebase/installations@0.4.17, tag: @firebase/functions@0.4.51, tag: @firebase/firestore@1.16.7, tag: @firebase/database@0.6.12, tag: @firebase/component@0.1.19, tag: @firebase/app@0.6.11, tag: @firebase/analytics@0.5.0, tag: @firebase/analytics-types@0.4.0) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Sep 10 12:43:29 2020 -0700 + + Version Packages (#3746) + + Co-authored-by: github-actions[bot] + +commit 595dfb0df44de1a669b530e403b426e201ce26db +Author: Sebastian Schmidt +Date: Thu Sep 10 12:25:47 2020 -0700 + + Add forceOwnership to firestore-exp (#3753) + +commit 95ab732eb9c6fc9391a90773a8cc5d742cd8a704 +Author: Sebastian Schmidt +Date: Wed Sep 9 16:02:52 2020 -0700 + + Tree-Shake RemoteStore Streams (#3568) + +commit 565004d8f59e2c67e6481ee93810d09722825c77 +Author: Sebastian Schmidt +Date: Wed Sep 9 15:17:45 2020 -0700 + + Schedule everything on the AsyncQueue (#3701) + +commit 0119d667701cf3e7642084075ba0ba0b7340819f +Author: Christina Holland +Date: Wed Sep 9 13:18:07 2020 -0700 + + Increase timeout for flaky test (#3750) + +commit a8ff3dbaacd06371e6652a6d639ef2d9bead612b +Author: Denver Coneybeare +Date: Wed Sep 9 13:20:09 2020 -0400 + + Change Error to FirestoreError (#3418) + +commit 3d9b5a595813b6c4f7f6ef4e3625ae8856a9fa23 +Author: Sam Stern +Date: Wed Sep 9 12:53:00 2020 -0400 + + Remove usage of the NODE_ADMIN global in RTDB (#3736) + +commit f47f9907cbd86a3dd95be73c040cbe5b077d4547 +Author: Christina Holland +Date: Tue Sep 8 16:52:39 2020 -0700 + + Exclude -compat from build:release (#3748) + +commit cb730cca0be1a8ade04a55386e80c0646806804b +Author: Christina Holland +Date: Tue Sep 8 15:31:57 2020 -0700 + + Update dynamic measurement ID change to ensure firebase minor bump (#3747) + +commit aa10af337895f60c1cfd67e5f400951fe30ed24b +Author: Christina Holland +Date: Tue Sep 8 14:56:57 2020 -0700 + + Add installations-exp packages to changeset ignore (#3745) + +commit d478772638ed4af8a1ad22eb91cb3cf986ae9985 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Sep 8 13:29:39 2020 -0700 + + Lock file maintenance (#3246) + + Co-authored-by: Renovate Bot + +commit 931ab7e1f2a83f4d2506d96b4de1f1ad3e02ac6d +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Tue Sep 8 10:57:11 2020 -0700 + + Bump bl from 4.0.2 to 4.0.3 (#3731) + + Bumps [bl](https://github.com/rvagg/bl) from 4.0.2 to 4.0.3. + - [Release notes](https://github.com/rvagg/bl/releases) + - [Commits](https://github.com/rvagg/bl/compare/v4.0.2...v4.0.3) + + Signed-off-by: dependabot[bot] + + Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> + +commit fb3b095e4b7c8f57fdb3172bc039c84576abf290 +Author: Christina Holland +Date: Tue Sep 8 10:55:40 2020 -0700 + + Use Dynamic Measurement ID in Analytics (#2800) + +commit d347c6ca1bcb7cd48ab2e4f7954cabafe761aea7 +Author: Sebastian Schmidt +Date: Tue Sep 8 18:28:08 2020 +0200 + + Infer database URL from Project ID (#3650) + +commit cc16b4ae481edb64c788ac2826a9dc1700585875 +Author: Sebastian Schmidt +Date: Tue Sep 8 17:06:05 2020 +0200 + + Tree-Shake RemoteStore (#3705) + +commit f506e18facf8f47eff61cf83a98af4b1f2e94319 +Author: ChaoqunCHEN +Date: Thu Sep 3 13:40:32 2020 -0700 + + Fis modularization (#3638) + + * copied orginal FIS sdk into packages-expp and made unit tests passed + + * migrated test app and fixed a test app bug to make it worked + + * made installations-exp depend on app-exp + + * Relocated public methods files into folder + + * Making installations mudularization step1, build success + + * Making installations mudularization step2, unit tests pass + + * update dependency version, merge master + + * Apply suggestions from code review + + Co-authored-by: Feiyang + + * update dependencies' version + + * add getInstallation(app) + + * correct deleteInstallations funciton name + + * Place the call to registerVerion and registerInstallations at the same place + + * remove dead code + + * add api extractor config + + * rewrite the internal interface + + * fix build error + + * Seperate internal interface from public interface. + + * Change public methods to accept public interface + + * Fixes and api extractor integration for @firebase/installations-exp (#3733) + + * integrate api-extractor into installations-exp + + * add release tag to APIs + + * add _ prefix to the internal interface + + * update api report + + Co-authored-by: Feiyang + +commit 1a20aefe328d70c867fd0b0e40ccde6d1516e657 +Author: Feiyang +Date: Thu Sep 3 13:27:48 2020 -0700 + + run size reports in parallel in CI (#3735) + + * run size reports in parallel + + * fix unresolved promise bug + + * set global env that can be used by all jobs + +commit 1418474db8baca472aac4ac55d7f7283e6ebdadd +Author: Richie Foreman +Date: Thu Sep 3 14:43:19 2020 -0400 + + Fix a simple spelling error 'occured' -> 'occurred' (#3737) + + * Firestore Externs: @type -> @typedef + + * Fix spelling + +commit d90ddd7075c61d93d06e3ec2cb57b9854a9bc7d6 +Author: Richie Foreman +Date: Wed Sep 2 17:22:41 2020 -0400 + + Remove extraneous tab char in Firestore SDK (#3728) + + * Firestore Externs: @type -> @typedef + + * Add @override to Recaptcha Verify method in Auth Externs + + * Add proper closure `@license` annotation to generated internal rollup boilerplate + + * Google LLC + SPDX License ID + + * Fix tab char in Firestore SDK + +commit ba010ef4e313b0b3bbeb6addd86281746a6fb03e +Author: Christina Holland +Date: Wed Sep 2 13:59:47 2020 -0700 + + Fix externals for packages/firebase builds (#3729) + +commit 1bf0a3cbc36c1cfbe951d19ed94ac7dd344deec4 +Author: Feiyang +Date: Wed Sep 2 10:08:38 2020 -0700 + + Give different name to different workflow (#3721) + +commit 6c0b89471a03326455a5640ea61f1a664cc9424f +Author: Richie Foreman +Date: Wed Sep 2 10:18:13 2020 -0400 + + Adjust internal build rollup to add proper @license annotation and SPDX License ID (#3723) + + * Firestore Externs: @type -> @typedef + + * Add @override to Recaptcha Verify method in Auth Externs + + * Add proper closure `@license` annotation to generated internal rollup boilerplate + + * Google LLC + SPDX License ID + +commit 1df547b21473ef2bfe10ec0943ff6ff1155ba8bf +Author: Richie Foreman +Date: Tue Sep 1 14:06:57 2020 -0400 + + Add '@override' annotation to RecaptchaVerifier.Verify method in AuthClient externs. (#3714) + +commit 1922ce74bd3c9547fb8d8e9fb6da807c5a240b24 +Author: Richie Foreman +Date: Tue Sep 1 14:05:23 2020 -0400 + + Firestore Externs: @type -> @typedef (#3713) + +commit dc989256566b8379f475c722370ccbd8f47527c3 +Author: Kai Wu +Date: Tue Sep 1 09:33:09 2020 -0700 + + Stop redirecting to non-origin sites (#3710) + + * Stop directing to non-origin sites + + * Create tall-mugs-shop.md + +commit caed9c0680bcabbefe78bd40792e477fb2744ee9 +Author: Christina Holland +Date: Fri Aug 28 12:58:12 2020 -0700 + + Disable machine translation. (#3703) + +commit a589a56bc1e7ebff84cd68cfe50a0be6715534ad +Author: Feiyang1 +Date: Fri Aug 28 12:42:27 2020 -0700 + + Publish firebase@exp 0.800.7 + +commit aca9933ee197cae2c1a2cac699ceb845a1421710 +Author: Feiyang +Date: Fri Aug 28 12:34:43 2020 -0700 + + change prepare to run release build (#3704) + +commit 7e708101171ddde99c4520bac5ca423e4a9efe4a +Author: Feiyang +Date: Fri Aug 28 12:07:42 2020 -0700 + + update firestore exp reference doc (#3698) + + * update firestore exp reference doc + + * remove firestore api reports + +commit 4c9cfa0ccd1033d3ea80f95e1500db2e684603bc +Author: Feiyang1 +Date: Fri Aug 28 11:44:59 2020 -0700 + + Publish firebase@exp 0.800.6 + +commit bdae2c9660a756692ba13bb9190ccb598a67320a +Author: Feiyang +Date: Fri Aug 28 11:25:24 2020 -0700 + + Fix release build for firebase-exp/compat (#3702) + + * fix compat packages + + * test + + * compat release build + + * Revert "test" + + This reverts commit 4716a30213a18a966d33cd5dc0bf891d5edc0aea. + +commit 8d236129988fe823a8b8a76d68cee5feca10f6e6 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Fri Aug 28 10:43:31 2020 -0700 + + Update all non-major dependencies (#3692) + + Co-authored-by: Renovate Bot + +commit 249d40cb692366f686a50c06c44ec81e4cae23d7 +Author: Sebastian Schmidt +Date: Fri Aug 28 18:53:49 2020 +0200 + + Don't switch network status to UNKNOWN during user change (#3700) + +commit 0dfd51620c8c91c73704dff082226aa61ab040e2 (origin/fei-exp-release) +Author: Feiyang1 +Date: Thu Aug 27 17:49:43 2020 -0700 + + Publish firebase@exp 0.800.5 + +commit f7a1a974dc18e0001bee4e2e2f424c8cd88f5e35 +Author: Feiyang +Date: Thu Aug 27 17:36:44 2020 -0700 + + Publish compat packages as part of the exp release (#3690) + + * test + + * release compat packages experimentally + + * correct command + + * build compat + + * do not abort on error + + * fix + + * Revert "test" + + This reverts commit 40bd2421bed3c0346b3a06da9b4e295bbc6c7f41. + +commit c4f8541f52545c26a2a712de29001bf6b0ce86c5 +Merge: b0a75acb0 e92fb0151 +Author: Feiyang1 +Date: Thu Aug 27 16:56:43 2020 -0700 + + Merge branch 'release' + 7.19.1 release + +commit e92fb0151c918d83656154c086c050156414d26f (tag: firebase@7.19.1, tag: @firebase/rules-unit-testing@1.0.1, tag: @firebase/firestore@1.16.6, tag: @firebase/firestore-types@1.12.1) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Aug 27 16:09:47 2020 -0700 + + Version Packages (#3691) + + * Version Packages + + * update firebase version manually in rxfire + + Co-authored-by: github-actions[bot] + Co-authored-by: Feiyang1 + +commit b0a75acb0ca78526fe3ff3bdc02814fafa063a97 +Author: Sebastian Schmidt +Date: Thu Aug 27 21:37:03 2020 +0200 + + Tree-Shake EventManager (#3640) + +commit fee4e8bb7e576daeff80bde515bda1288546791e +Author: Sebastian Schmidt +Date: Thu Aug 27 20:47:28 2020 +0200 + + Tree-Shake all of Query (#3678) + +commit 70537a61e83422afff474fb7e018dcbfef97e88a +Author: Sebastian Schmidt +Date: Thu Aug 27 19:53:30 2020 +0200 + + Move parent/doc/collection back (#3679) + +commit 29bac5e88e31b59cded353bac990f0cf73595be4 +Author: Sebastian Schmidt +Date: Thu Aug 27 18:56:22 2020 +0200 + + Make View processing logic optional (#3561) + +commit 1a82549a7f0cbf13a49e3d81642cbccb55fdebdf +Author: Feiyang +Date: Thu Aug 27 09:44:23 2020 -0700 + + Create @firebase/app-compat and firebase/compat (#3622) + + * init package + + * app-compat impl + + * get tests pass + + * update some metadata + + * add firebase compat + + * release test + + * build compat packages + + * fix npm scripts + + * Revert "release test" + + This reverts commit 97585c1812fae4fc7fb8632905f963d97fde1ac6. + + * remove npmignore and outdated license headers + + * add onLog and setLogLevel to app-compat + + * rename test file + + * update deps + + * update + + * revert + + * add test:ci script + +commit e22a2957ece50b039b3fb6182125243a9d769e1c +Author: Sebastian Schmidt +Date: Thu Aug 27 11:46:42 2020 +0200 + + Rename Blob to Bytes (#3677) + +commit da1c7df7982b08bbef82fcc8d93255f3e2d23cca +Author: Feiyang +Date: Wed Aug 26 11:47:13 2020 -0700 + + delete services that implement the new FirebaseService interface (#3601) + + * delete services that implement the next FirebaseService interface in @firebase/component correctly + + * Create small-grapes-teach.md + + * debug CI issue + + * fix the delete loop + + * add eslint suppress + + * test + + * comment out imports + + * Revert "test" + + This reverts commit f1b0b4422394810cf7c4290eb91392b211700cf1. + + * Revert "comment out imports" + + This reverts commit 57caf9184b08ff955194cdb6adbd208fbd5c3eb8. + + * Update small-grapes-teach.md + + * rename delete to _delete + + * revert prettier + + * change delete to _delete + + * fix test + +commit 44c91e5b811ee9d7717c1e38623868e860874bd6 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 16:49:00 2020 -0700 + + Update dependency rollup-plugin-terser to v7 (#3636) + + Co-authored-by: Renovate Bot + +commit 0d0686392608e11622bec49b52ecf9940f99b4af +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 15:56:30 2020 -0700 + + Update dependency terser to v5 (#3582) + + * Update dependency terser to v5 + + * fix typescript issue + + * Update dependency terser to v5 + + * update script because terser.minify becomes async + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang1 + +commit 57739ae2bf3aa833ff6e3c3346b274e7f93ef233 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 14:14:55 2020 -0700 + + Update dependency typescript to v4 (#3669) + + * Update dependency typescript to v4 + + * fix typescript errors + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang1 + +commit 05b56061ca43d823b592cc7f64cf579642e97973 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 13:53:13 2020 -0700 + + Update dependency simple-git to v2 (#3432) + + Co-authored-by: Renovate Bot + +commit b9562dd71861b5ca3e8786aec5b205d316bbc00e +Author: Feiyang +Date: Tue Aug 25 13:29:57 2020 -0700 + + update ignored packages (#3683) + +commit c0f2be022944c18c94f951d9426497aafcc05b42 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 12:01:12 2020 -0700 + + Update all non-major dependencies (#3581) + + Co-authored-by: Renovate Bot + +commit 978faa60ae6d463cd3c9ff5914dfd1d87a366b0d +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 11:34:12 2020 -0700 + + Update dependency ts-loader to v8 (#3521) + + Co-authored-by: Renovate Bot + +commit ccb171663c32536e35de9da0595ff000bf1e3add +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 11:30:12 2020 -0700 + + Update dependency @types/clone to v2 (#3633) + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang + +commit 4623bbd17b8e3a5cd150978460ecf3f47b4d0be0 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 11:28:24 2020 -0700 + + Update dependency ora to v5 (#3634) + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang + +commit 9611fd739b9ab4b9293c16a3944b68ff997d6b08 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Aug 25 11:24:14 2020 -0700 + + Update typescript-eslint monorepo to v3 (major) (#3524) + + * Update typescript-eslint monorepo to v3 + + * Update typescript-eslint monorepo to v3 + + * fix lint + + * fix more lint + + * remove reference to the removed file + + * revert file deletion + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang1 + +commit e749ab8fcf8c371cd64fb7cfcaa8029bbacff849 +Author: moga <10220231+mogaming217@users.noreply.github.com> +Date: Wed Aug 26 02:04:43 2020 +0900 + + Fix assertFails() logic of @firebase/rules-unit-testing (#3676) + + * Fix assertFails logic + + * Create fuzzy-seas-compare.md + + Co-authored-by: Yuchen Shi + +commit c224553ed4e7ce90f48183fcb9867bb0448ddf1c +Author: Sebastian Schmidt +Date: Tue Aug 25 18:52:55 2020 +0200 + + Fix typo (#3680) + +commit 96076f0d3e4046c326c2015714ef9b7f2059f596 +Author: Feiyang +Date: Mon Aug 24 17:23:43 2020 -0700 + + Optimize CI tests (#3664) + + * remove unnecessary integration tests + + * exclude firestore tests from run_changed + + * fix bug + + * reduce the scope that triggers global tests + + * firestore only test changed + + * Put firestore tests into a separate workflow + + * rewrote run_changed scripts + + * fix things + + * create a separate workflow for FCM integration tests + + * Build only packages needed for testing (#3668) + + * build only packages needed for testing + + * ignore firebase and firebase-exp + + * revert yarn.lock + + * test app + + * make a separate workflow for firebase namespace test + + * early return if no test tasks + + * test fcm + + * Revert "test fcm" + + This reverts commit a0599e8b45451d0ec423ab8131d944a315de372a. + + * Revert "test app" + + This reverts commit 73f817c3d2f7e8028abdfae3dc2ead81256de293. + + * put auxiliary libs into a separate workflow + + * test firebase + + * small change + + * update yarn.lock + + * fix obvious errors + + * fix script issues + + * run auth tests in a separate workflow + + * rename test name to make more sense on Github + + * try separating firestore and firestore integration into different workflows + + * run the correct script + + * refactor test changed + + * update words + + * remove unnecessary xvfb-run + + * add firebase to auth's dependency because auth test depends on it + + * build correctly + + * abort if build failed + + * build appExp + + * build all for auth + +commit 39bc71bd732778a195873a8724f20bad031be711 +Merge: fa5104fb2 62051061c +Author: Christina Holland +Date: Mon Aug 24 15:35:49 2020 -0700 + + Merge branch 'release' + Release 7.19.0 + +commit fa5104fb2e13f457a04661fd5431ae76b6d1ef3e +Author: Yifan Yang +Date: Mon Aug 24 11:25:03 2020 -0700 + + Remove duplicate dependency. (#3673) + +commit d3cd75b1fb62ecea2a888878ca162edd56e249af +Author: Christina Holland +Date: Fri Aug 21 14:37:29 2020 -0700 + + Fix changeset checker regex (#3670) + +commit 1508a0e4c9ae2d6e685b512a82ef57b3735122c1 +Author: Xuechun Hou +Date: Fri Aug 21 16:52:24 2020 +0000 + + size analysis project - phase 2 (#3610) + + * size analysis project phase 2 + + * point to prod version + + * addressed PR comments + + * addressed PR comments + + * removed try catch block + + * consolidate common methods + + * addressed PR comments + + * changed method signature + + * fixed lint errors + + * fixed lint errors + +commit 62051061cf86ee729992a3d0e62a1e9fd2f60f0d (tag: firebase@7.19.0, tag: @firebase/rules-unit-testing@1.0.0, tag: @firebase/performance@0.4.0, tag: @firebase/firestore@1.16.5) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Aug 20 14:00:19 2020 -0700 + + Version Packages (#3656) + + Co-authored-by: github-actions[bot] + +commit 8d3aca79d3bafb23ebd20be952a9110b18973012 +Author: Feiyang +Date: Thu Aug 20 10:49:24 2020 -0700 + + take @firebase/app as devDependencies (#3666) + +commit ccbcadce148694b3e0d4c0fe3c8bf43b80871086 +Author: Christina Holland +Date: Thu Aug 20 10:36:20 2020 -0700 + + Show CI logs if run is longer than 1 hour (#3665) + +commit 3b26db4271f22989ffa3154b37c70f2f48112f6f +Author: Sebastian Schmidt +Date: Thu Aug 20 15:40:13 2020 +0200 + + Remove all namespace imports (#3660) + +commit 05f800282cffc73e7e90dd2ebb062e47ae408e13 +Author: Feiyang +Date: Wed Aug 19 16:36:01 2020 -0700 + + Separate workflow for lint and test (#3662) + + * fix lint issue + + * add lint workflow + + * remove type check scripts + + * exclude lint from ci:test + + * update test:ci for integration tests + + * set default script + + * remove stream to show time taken for each package + + * test all pacakges + + * add stream back for local test + + * add stream back + +commit d03c5ad6f61e69baf07671555a8e1a6b240d7f94 +Author: Christina Holland +Date: Wed Aug 19 13:50:33 2020 -0700 + + Fix canary release flow (#3663) + +commit 8c5d52251739a7ea7d456d2e9fa072522b1def31 +Author: Christina Holland +Date: Wed Aug 19 10:43:08 2020 -0700 + + Try to fix flaky analytics test (#3612) + +commit 61b4cd31b961c90354be38b18af5fbea9da8d5a3 +Author: Brian Chen +Date: Tue Aug 18 21:47:37 2020 -0500 + + add option to merge settings (#3464) + +commit 8097b97baec0a2d30977777106c98ae51f70eb42 +Author: Feiyang +Date: Tue Aug 18 18:08:06 2020 -0700 + + Include typing files and package.json when publishing firestore exp (#3649) + + * include typing files and package.json in firestore exp release + + * test + + * Revert "test" + + This reverts commit c1a449cb52595b9ed2e6981324de7c31d405b478. + +commit 9f58f6d3c2a19414d226a861fd2289c7babd5c50 +Author: Feiyang +Date: Tue Aug 18 16:31:05 2020 -0700 + + downgrade firebase-tools in rules-unit-testing to be consistent with the rest of the repo (#3646) + +commit f8f37388a573d3d78ce4d754bcca5cd9cb523f7d +Author: Christina Holland +Date: Tue Aug 18 15:32:33 2020 -0700 + + Fix firestore build:release (#3658) + +commit 67501b9806c7014738080bc0be945b2c0748c17e +Author: Xuechun Hou +Date: Tue Aug 18 20:04:11 2020 +0000 + + Issue 2393 - Add environment check to Performance Module (#3424) + + * issue #2393, first fix on performance module and remote-config module + + * added error handler to remote-config and performance modules on indexedDB not supported in some browser situations + + * issue #2393 fix for analytics module + + * updateDoc()/deleteDoc() signature fix (#3147) + + * Transaction/WriteBatch signature fix (#3151) + + * Take WriteStream offline when IndexedDB is unavailable (#2995) + + * Do not build firestore lite in build because it breaks regular release build (#3156) + + * Do not build firestore lite in build because it breaks release build + + * add release build script + + * add pre script for build:release (#3161) + + * Add setLogLevel() (#3154) + + * Add DocumentReference (#3123) + + * issue #2393 fix for analytics module + + * added isSupported method to performance module + + * added method signature to firebase/index.d.ts + + * reverted unrelated files in remote-config + + * Create little-cycles-fold.md + + * removed isSupported method from performance + + * wrote tests for requiredApisAvailable + + * updated isRequiredApiAvailable tests, updated logTrace function to reflect changes of isRequiredApiAvailable + + * added Promise existence check before every test of requiredApisAvailable + + * took validateIndexedDBOpenable outside of isRequiredApisAvailable + + * updated performance constructor test + + Co-authored-by: Sebastian Schmidt + Co-authored-by: Feiyang + +commit 00ac9d2d545c187febf21e12dc60077e28d7fbd7 +Author: Sebastian Schmidt +Date: Tue Aug 18 19:54:55 2020 +0200 + + Replace usage of Set with Set (#3652) + +commit 80726241a9ee70380abba9857eeb288976c6174c +Author: Sebastian Schmidt +Date: Tue Aug 18 08:59:37 2020 +0200 + + Remove firestore/exp dependency on firebase/app (#3641) + +commit 2df98927eef7e10ae8edd227103500091d21ac82 +Author: Sebastian Schmidt +Date: Tue Aug 18 08:59:15 2020 +0200 + + Rewrite proto root for exp build (#3642) + + * Rewrite proto root for exp build + + * --amend + + * Add dist/*.js + +commit c1d98b0cca1b4902df699638b7bc470dcbc7931b +Author: egilmorez +Date: Mon Aug 17 16:34:18 2020 -0700 + + Fixing some links and link text. (#3647) + +commit d02177b90e24430cf3154821f4cadf8989c84e84 +Author: Christina Holland +Date: Mon Aug 17 13:41:54 2020 -0700 + + Add new messaging API pages to toc.yaml (#3644) + +commit b97c7e758b1e2a370cb72a7aac14c17a54531a36 +Author: Richard Musiol +Date: Mon Aug 17 19:20:35 2020 +0200 + + Add check if crypto.getRandomValues is available (#3487) + +commit e8b950fda1be50dbf714a3f16c9db5d37fbdc5b4 +Author: Sebastian Schmidt +Date: Sat Aug 15 16:07:47 2020 +0200 + + Tree-shake LocalStore's implementation (#3531) + + * Tree-shake all of LocalStore + + * Comments + + * Fix compile + +commit c5f3b2746d64028fe2082ab7923ddb291b57776d +Author: Sebastian Schmidt +Date: Fri Aug 14 11:36:27 2020 +0200 + + Parallelized builds (#3629) + +commit 6a95ae14c27423c758249b4d4a3a8e282b445275 +Author: Feiyang +Date: Thu Aug 13 18:01:10 2020 -0700 + + update outdated deps (#3635) + +commit 87402dfda3de508ee2de47aa9c657ac1b48835ab +Merge: 32c7a7a5c 5b697187c +Author: Feiyang1 +Date: Thu Aug 13 15:47:13 2020 -0700 + + Merge branch 'release' + 7.18.0 release + +commit 32c7a7a5cec1586d6df311655ead5821b669887e +Author: Konstantin Varlamov +Date: Thu Aug 13 18:10:18 2020 -0400 + + Add `toJSON` methods to `GeoPoint` and `Timestamp` (#3615) + + `GeoPoint` and `Timestamp` are the only classes in the public API that have a well-defined JSON representation. + + Fixes #3605 + +commit 5b697187c876387b6abeab1764075ff501baa71c (tag: firebase@7.18.0, tag: @firebase/util@0.3.1, tag: @firebase/testing@0.20.11, tag: @firebase/storage@0.3.42, tag: @firebase/remote-config@0.1.27, tag: @firebase/performance@0.3.11, tag: @firebase/messaging@0.7.0, tag: @firebase/messaging-types@0.5.0, tag: @firebase/installations@0.4.16, tag: @firebase/functions@0.4.50, tag: @firebase/firestore@1.16.4, tag: @firebase/database@0.6.11, tag: @firebase/component@0.1.18, tag: @firebase/app@0.6.10, tag: @firebase/analytics@0.4.2) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Aug 13 13:35:25 2020 -0700 + + Version Packages (#3614) + + Co-authored-by: github-actions[bot] + +commit 4e09c70cc4c235c65473037412f95ff5dd00b5db +Author: Sebastian Schmidt +Date: Thu Aug 13 21:22:49 2020 +0200 + + Silence nyc (#3626) + +commit 5670a2361b0121a143787290f69741afc60fa6c1 +Author: Christina Holland +Date: Thu Aug 13 12:08:23 2020 -0700 + + Changeset checker (#3554) + +commit c6abcd83477e7880bccb1d846901395ad5ffb7f7 +Author: Sebastian Schmidt +Date: Thu Aug 13 19:18:26 2020 +0200 + + Abort tests when test runnner script is aborted (#3627) + +commit c8495f52a190365d83e0bb5700f9c29e9146f0c9 +Author: Feiyang +Date: Thu Aug 13 09:59:34 2020 -0700 + + change script to ts (#3577) + +commit 960093d5b3ada866709c1a51b4ca175c3a01f1f3 +Author: Sebastian Schmidt +Date: Thu Aug 13 16:51:11 2020 +0200 + + Make shutdown idempotent (#3575) + +commit 980c7d53964cd28d6c6ad2ab4b859580997a476c +Author: Sam Stern +Date: Thu Aug 13 05:57:40 2020 -0400 + + Migrate testing to rules-unit-testing (#3378) + +commit 5d4d18234cccb7c15f487b3e3085c63a05035c9b +Author: ChaoqunCHEN +Date: Wed Aug 12 17:36:54 2020 -0700 + + add ChaoqunCHEN to FIS SDK owner list (#3624) + +commit 2245ad737ac60149dea0f24b682a9dac498759be +Author: Christina Holland +Date: Wed Aug 12 12:32:53 2020 -0700 + + Update READMEs (#3551) + +commit d4721c53a4cf89cb6a00e5078b15fb3c0963e51c +Author: Feiyang +Date: Wed Aug 12 12:24:32 2020 -0700 + + clean up emulator after test (#3618) + +commit 5b87b5911b29a0af5962fda05d9bbadb0d47a789 +Author: Feiyang +Date: Tue Aug 11 17:04:42 2020 -0700 + + Add techwriters as code owners for documentation related files (#3608) + + * add techwriters to code owner + + * Update CODEOWNERS + +commit 4ea2b6bca32eff720c46b991ac33ef1841a87307 +Author: Feiyang +Date: Tue Aug 11 15:07:21 2020 -0700 + + fix changeset issues (#3613) + + * fix changeset issues + + * Update spicy-masks-sort.md + +commit e8b0098a910794e29f45bb7e361320f02cfc1a7f +Author: Sebastian Schmidt +Date: Tue Aug 11 23:29:12 2020 +0200 + + Address 'calling shutdown of undefined' warning (#3607) + +commit bbc6d7e6165df17affa91aef6684a406ae8532df +Author: Sebastian Schmidt +Date: Tue Aug 11 23:28:36 2020 +0200 + + Add lite/package.json to 'files' (#3596) + +commit 29327b2198391a9f1e545bcd1172a4b3e12a522c +Author: Kai Wu +Date: Tue Aug 11 13:31:56 2020 -0700 + + FCM Pre Modularization (#3234) + + * FCM Pre Modualization + + * Refactor FCM typing + + * Polish javascript doc + + * Update index.d.ts + + * Add Changeset + + * Fix changeset from major to minor + + * Add to changeset + + * Polished index.d.ts based on Arthur's feedback + + * Polish PR based on feedbacks + + * Update Changeset + + * Fix wording + + * Polishing + +commit 46fd70bec3a2593e81b0ea1f91965b7fe2dec3c5 +Author: Sebastian Schmidt +Date: Tue Aug 11 20:50:34 2020 +0200 + + Update to latest version of Firestore Emulator (#3604) + +commit e96559f535dc8e69b57b4af2eab368e9a90623aa +Author: Xuechun Hou +Date: Tue Aug 11 18:37:55 2020 +0000 + + Size Analysis Tool - Phase 1 (#3588) + + * size analysis tool phase 1 + + * Create shy-bears-heal.md + + * Delete shy-bears-heal.md + + * enable toplevel mangling (#3591) + + * enforce -o command line flag + + * ignore size-analysis package in changeset + + * profile the tests + + * use smaller timeout + + * update package.json + + Co-authored-by: Feiyang + Co-authored-by: Feiyang1 + +commit e1d37efedcb88995d8623c8a92757f99e6c6ffab +Author: Brian Chen +Date: Tue Aug 11 11:19:36 2020 -0500 + + Add test for != document ID (#3597) + +commit d4ca3da0a59fcea1261ba69d7eb663bba38d3089 +Author: Xuechun Hou +Date: Mon Aug 10 23:32:11 2020 +0000 + + Extended Usage of `isIndexedDBAvailable` to Service Worker (#3585) + + * extended usage of isIndexedDBAvailable to service worker + + * Create silly-moles-rush.md + + * Update silly-moles-rush.md + +commit d3f25079b4e920ef4ccbcbbe1679d3fe3bee70b9 +Author: Sebastian Schmidt +Date: Mon Aug 10 14:01:58 2020 -0700 + + Make newConnection() synchronous (#3569) + +commit 90203ebd71819f645e4167ed0384afffb200d6b1 +Author: Sebastian Schmidt +Date: Mon Aug 10 12:14:04 2020 -0700 + + Run test:exp and test:lite while emulator is running (#3587) + +commit 68995c2422a479d42b9c972bab3da4d544b9f002 +Author: Sebastian Schmidt +Date: Mon Aug 10 05:12:55 2020 -0700 + + Fix bug in AsyncQueue visibility handler (#3586) + +commit 2c37560f60a0a358acbac5fa53d19d2886b302e3 +Author: Christina Holland +Date: Fri Aug 7 18:31:16 2020 -0700 + + Wrong package name in changeset file (#3590) + +commit 815ae53f2dc14e73b601e90b54dac2e9a993a528 +Merge: 3e653c7fd e1b3d9dd7 +Author: Christina Holland +Date: Fri Aug 7 17:47:13 2020 -0700 + + Merge branch 'release' + Release 7.17.2 + +commit 3e653c7fddda67618e16730ea6f86cd3b2670470 +Author: Christina Holland +Date: Fri Aug 7 15:26:59 2020 -0700 + + Use lerna to run test-changed tests (#3589) + +commit 30553df0696211e0f642f5e86ef30b25e63ebda6 +Author: Feiyang1 +Date: Fri Aug 7 15:21:37 2020 -0700 + + Publish firebase@exp 0.800.4 + +commit f1299756c6a9aaa936b08a274b00b3bcb720a833 +Author: Feiyang +Date: Fri Aug 7 12:43:49 2020 -0700 + + remove side effect imports (#3534) + + * remove side effect imports + + * registerFirestore before test + +commit 41ed6f28d4712f04debe7dedc7c58f7d89b4b5bb +Author: Christina Holland +Date: Thu Aug 6 21:33:29 2020 -0700 + + Update test-changed workflow checkout step (#3580) + +commit e1b3d9dd7fbe963b38cc1c248051cf4af80f99d9 (tag: firebase@7.17.2, tag: @firebase/webchannel-wrapper@0.3.0, tag: @firebase/testing@0.20.10, tag: @firebase/firestore@1.16.3, tag: @firebase/database@0.6.10, tag: @firebase/database-types@0.5.2) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Aug 6 13:21:18 2020 -0700 + + Version Packages (#3501) + + Co-authored-by: github-actions[bot] + +commit 36be62a85c3cc47c15c9a59f20cdfcd7d0a72ad9 (origin/ida-size-analysis-base) +Author: Sebastian Schmidt +Date: Wed Aug 5 15:15:21 2020 -0700 + + Re-open IndexedDB if closed (#3535) + +commit cf3401d1662dc4b23d8496d71f8216f0b72f996d +Author: Brian Chen +Date: Wed Aug 5 16:52:53 2020 -0500 + + Add NOT_IN and != queries (not public) (#3557) + +commit 2a0d254fa58e607842fc0380c8cfa7bbbb69df75 +Author: Xuechun Hou +Date: Wed Aug 5 16:06:15 2020 +0000 + + Browser Extension Check for Analytics Module (#3555) + + * added browser extension check to analytics module; prevent initialization if under browser extension context + + * removed unnecessary imports + + * Create spicy-masks-sort.md + + * changed error message + + * updated changeset + + * updated changeset + +commit 7f9b3d96b26d78e95b857694a3e41e15ef0b3f04 +Author: Sebastian Schmidt +Date: Tue Aug 4 14:17:32 2020 -0700 + + Stop using WebChannelConnection in Lite SDK (#3482) + +commit 2fa0353dda82c291dc4d1e97a9dd471b28af9995 (origin/storage-exp) +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Aug 3 12:29:07 2020 -0700 + + Update all non-major dependencies (#3520) + + Co-authored-by: Renovate Bot + +commit cf9dd92523f146f7c4b5bea4eae1d5bc9d35ac5e +Author: Brian Chen +Date: Mon Aug 3 13:52:19 2020 -0500 + + add IS_NOT_NULL and IS_NOT_NAN (#3533) + +commit 9c1310433ffc566feccd32858b6ab1f5255acba7 +Author: Sebastian Schmidt +Date: Mon Aug 3 11:27:48 2020 -0700 + + Remove TransactionRunner when not used (#3539) + +commit 096641646c711ed6f6117fb18230d843351d7221 +Author: Sebastian Schmidt +Date: Mon Aug 3 09:20:17 2020 -0700 + + Remove FieldFitler instantiations (#3540) + +commit 434c110e6d874f6be8ef2f024353e19df98bb0dc +Author: Sebastian Schmidt +Date: Fri Jul 31 17:03:27 2020 -0700 + + Fix bug in terminate() (#3532) + +commit 2bc2621106a651a529ed2b7910df4dab5da92d86 +Author: Brian Chen +Date: Fri Jul 31 13:33:18 2020 -0500 + + add not equal proto (#3528) + +commit 458f8b738f9c610a0a67cb8e8bb69b0f22924398 +Author: Sebastian Schmidt +Date: Thu Jul 30 17:53:58 2020 -0700 + + Undo prettier for generated source (#3518) + +commit 8a8e60ada7f012b198c2c26089daff85c8270ee2 +Author: Sebastian Schmidt +Date: Thu Jul 30 13:28:04 2020 -0700 + + LocalStore-only queries (#3508) + +commit ef348fed291338351706a697cbb9fb17a9d06ff4 +Author: Feiyang +Date: Thu Jul 30 11:47:38 2020 -0700 + + Add an interface Database (#3511) + + * Add an interface Database + + * Create thirty-flies-flow.md + + * Update .changeset/thirty-flies-flow.md + + Co-authored-by: Sebastian Schmidt + + * Update thirty-flies-flow.md + + Co-authored-by: Sebastian Schmidt + +commit 94986e6c19196838b058fcd38ce3925c3b8ff437 +Author: Sebastian Schmidt +Date: Wed Jul 29 21:41:35 2020 -0700 + + Refactor some FirestoreClient methods (#3507) + +commit 6f283d58133645f18c2f4b2aeae57c53f779181c +Author: Sebastian Schmidt +Date: Wed Jul 29 14:31:04 2020 -0700 + + Tree-shakeable FirestoreClient (#3492) + +commit fc71940999dfc12e147c1d1e375c9c9108f7a968 +Author: Visu +Date: Wed Jul 29 13:43:28 2020 -0700 + + Make sure the value that is set for a metric is an integer. (#3480) + +commit 14d3bedb8aedad31ab37f2d3b4f38eb80795060c +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Wed Jul 29 12:58:50 2020 -0700 + + Update dependency firebase-admin to v9 (#3430) + + Co-authored-by: Renovate Bot + +commit f39a18811d8b2cf062fc904a326f35202cd53629 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Wed Jul 29 12:58:32 2020 -0700 + + Update dependency typescript to v3.9.7 (#3428) + + Co-authored-by: Renovate Bot + +commit 51ed48f580f3b588117d55b3f3dc9dca9a7b20ad +Author: Feiyang +Date: Wed Jul 29 12:57:00 2020 -0700 + + make renovate only pin devDependencies (#3490) + +commit b1090a2f535aa12f2d4c3f4962f5213e82846150 +Author: Feiyang +Date: Wed Jul 29 08:59:33 2020 -0700 + + return FirebaseData from initStandalone (#3497) + +commit 217dca9a411912abcee12f58571269fe0d33e9b2 +Author: Sebastian Schmidt +Date: Tue Jul 28 15:13:26 2020 -0700 + + Simplify Listen API (#3491) + +commit acfedd2fd9a4f031a1a24108a3573164c30a8bc0 +Author: Feiyang +Date: Tue Jul 28 15:01:02 2020 -0700 + + upgrade firestore in firebase-exp (#3502) + +commit 1971dde173fe46df344246f716b4bb2d70519beb +Author: Sebastian Schmidt +Date: Tue Jul 28 11:20:00 2020 -0700 + + Tree-shake UMD builds (#3493) + +commit 3a9eaac93e8a158a18d53415482e53a077a113a2 +Author: Feiyang +Date: Mon Jul 27 20:47:58 2020 -0700 + + Clean up old changelogs (#3458) + + * clean up changelogs + + * qualify version with package name + +commit 7f0860a4ced76da8492ae44d2267a2f1cc58eccb +Author: Rafi Khan +Date: Mon Jul 27 18:13:38 2020 -0700 + + Upgrade to latest version of closure (#3372) + + Upgrade to latest version of closure + +commit 18162afe0958989879cdd89b941f382783ccb38e +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jul 27 16:46:34 2020 -0700 + + Update dependency @types/inquirer to v7 (#3466) + + Co-authored-by: Renovate Bot + +commit 900f2e85e7a4eda55a7072634895a1167ea80719 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jul 27 16:44:28 2020 -0700 + + Update dependency source-map-loader to v1 (#3470) + + Co-authored-by: Renovate Bot + +commit 99cc8202257fd0a494f7c790e6dbb5de33a3a05d +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jul 27 16:43:46 2020 -0700 + + Update dependency ts-essentials to v7 (#3471) + + Co-authored-by: Renovate Bot + +commit 19c9590e45c3004464ecbf2b405549e3b16d9068 +Author: Feiyang +Date: Mon Jul 27 16:42:39 2020 -0700 + + create Firestore exp & lite reference docs (#3474) + + * create Firestore exp & lite reference docs + + * update doc + + * upgrade api-documenter and regenerate + +commit cc235a5195516e5c0dbc595f69299bb63005ca06 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jul 27 15:43:29 2020 -0700 + + Update dependency rollup-plugin-terser to v6 (#3431) + + Co-authored-by: Renovate Bot + +commit e93e008fac94fe2d4b995236ef1cb325033b6e28 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jul 27 15:37:47 2020 -0700 + + Update dependency chromedriver to v84 (#3429) + + Co-authored-by: Renovate Bot + +commit a8f76b5dcfe1ce3fd5527389f301374a19a562db +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jul 27 15:34:45 2020 -0700 + + Update all non-major dependencies (#3427) + + Co-authored-by: Renovate Bot + +commit 1fb82be91bc7ff14dfbcb046eb5800faa0b56d66 +Author: Sebastian Schmidt +Date: Sat Jul 25 08:18:27 2020 -0700 + + Extract Offline-only component provider (#3460) + +commit 2dd560ba04867f940029d6bbfdf946848412e750 +Author: Sebastian Schmidt +Date: Fri Jul 24 20:23:29 2020 -0700 + + Add test runner script (#3419) + +commit 9723dcf662875b2efa986bf2b143eaf6d741090d +Author: Feiyang +Date: Fri Jul 24 17:29:39 2020 -0700 + + Firestore exp release script (#3444) + + * Add ReactNative and Browser builds + + * prepare script for firestore exp release + + * add firestore to the exp release script + + * add exp release rollup config + + * misc changes + + * fix typo + + * add module field + + * handle peerDeps + + * fix typo + + * replace app-types-exp with app-types + + * fix typo + + * fix typo + + * remove unused fields + + * testing only. remove before making PR + + * fix merge + + * fix issue + + * Revert "testing only. remove before making PR" + + This reverts commit 5837dab7bead1d1b1c7827f9678942fc83d47294. + + * revert dev changes + + * remove unnecessary rollup config + + * update script + + * for test + + * add firestore to firebase-exp + + * use existing package as placeholder + + * add firestore to firebase-exp + + * build firestore first + + * update release config + + * use script name + + * get script name correctly + + * use componentName + + * show output of build + + * fix bug + + * make it better + + * add missing script + + * fix + + * add missing script + + * fix build issue + + * change order + + * revert dev change + + * use umd build for main + + * update comment + + * add comments + + * address comments + + Co-authored-by: Sebastian Schmidt + +commit c1cc428139fa0a934ead91aa955903792d605e23 +Author: Christina Holland +Date: Fri Jul 24 15:02:00 2020 -0700 + + Fix up build scripts (#3481) + +commit 1a630ba67f3dff8ef3bf646b35f003e36c4549c7 +Author: Sebastian Schmidt +Date: Fri Jul 24 14:16:36 2020 -0700 + + Optional Datastore/FirestoreClient (#3382) + +commit 26c5bebe2eaa34c5b546deda54678257f2e02b30 +Author: Sebastian Schmidt +Date: Fri Jul 24 13:48:09 2020 -0700 + + Re-gen lockfile (#3463) + +commit 8a631e2e87073bfc99b90c974ba6ee0a6fcdde32 +Merge: 59bf57bdd aba18044b +Author: Christina Holland +Date: Fri Jul 24 11:21:04 2020 -0700 + + Merge branch 'release' into master + Release 7.17.1 + +commit 59bf57bdda407dc51595a45121ec87a1bf393dee +Author: Sebastian Schmidt +Date: Fri Jul 24 10:23:57 2020 -0700 + + s/getQuery/getDocs (#3461) + +commit aba18044b5121cd4dbde450b05b11f62fe49433d (tag: firebase@7.17.1, tag: @firebase/util@0.3.0, tag: @firebase/testing@0.20.9, tag: @firebase/storage@0.3.41, tag: @firebase/remote-config@0.1.26, tag: @firebase/performance@0.3.10, tag: @firebase/messaging@0.6.21, tag: @firebase/installations@0.4.15, tag: @firebase/functions@0.4.49, tag: @firebase/firestore@1.16.2, tag: @firebase/database@0.6.9, tag: @firebase/component@0.1.17, tag: @firebase/app@0.6.9, tag: @firebase/analytics@0.4.1) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Jul 23 22:07:19 2020 -0700 + + Version Packages (#3473) + + Co-authored-by: github-actions[bot] + +commit 1d7ee969cf8a202a77147f26defebfdbc252a108 +Author: Christina Holland +Date: Thu Jul 23 21:54:36 2020 -0700 + + Update yarn.lock (#3475) + +commit a87676b84b78ccc2f057a22eb947a5d13402949c +Author: Christina Holland +Date: Thu Jul 23 20:32:09 2020 -0700 + + Util version bump (#3472) + +commit 18e5dea762d8507238015a9a7837ef6bbcaf6ce6 +Author: Sebastian Schmidt +Date: Thu Jul 23 15:44:20 2020 -0700 + + Add Browser tests for Lite and Exp (#3448) + +commit e50be1ce4c69c922213b19c3dff999cfde1628b9 +Merge: e1173544b 3f579a40f +Author: Christina Holland +Date: Thu Jul 23 14:50:15 2020 -0700 + + Merge branch 'release' into master + Release 7.17.0 + +commit 3f579a40f941a08bd6ec239d4e05aa37495d841a (tag: firebase@7.17.0, tag: @firebase/testing@0.20.8, tag: @firebase/storage@0.3.40, tag: @firebase/analytics@0.4.0) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Jul 23 13:19:58 2020 -0700 + + Version Packages (#3449) + + Co-authored-by: github-actions[bot] + +commit e1173544b2f63691e887622b827bcc819e743293 +Author: Sebastian Schmidt +Date: Thu Jul 23 11:45:40 2020 -0700 + + Remove duplicate test run (#3459) + +commit 7913ae902cf5b367c8592630074e78d2337b5552 +Author: Sebastian Schmidt +Date: Thu Jul 23 10:42:56 2020 -0700 + + Update Lite tests with Query API v2 (#3446) + +commit 9788c43e648d0630c950f134cb2a36a43985952a +Author: Sebastian Schmidt +Date: Wed Jul 22 16:41:42 2020 -0700 + + Add new build rule for gendeps script (#3440) + +commit 2ea7c638b1008df4b6d624c0cf9ba47406f52d17 +Author: Feiyang +Date: Wed Jul 22 15:53:10 2020 -0700 + + build app-exp for release, so firestore test works (#3456) + +commit 75b6b31501eda24a37a8786aa10c2eb34b98973e +Author: Sebastian Schmidt +Date: Wed Jul 22 13:19:52 2020 -0700 + + Don't log Cancelled warning when strem is closed (#3450) + +commit beed830df25d25d490a3c40b04995ad5fa942f3b +Author: Feiyang +Date: Wed Jul 22 11:35:54 2020 -0700 + + Downgrade karma-coverage-istanbul-reporter to fix 0% coverage issue (#3435) + + * downgrade karma-coverage-istanbul-reporter + + * fix broken test script + +commit 6af4c27743372ba531e8ce3d046ae2f81e8f5be1 +Author: Sebastian Schmidt +Date: Tue Jul 21 18:03:16 2020 -0700 + + Fix imports for Console builds (#3437) + +commit c2829cde371db0058ba43b4fdb97d5ea3be40f4e +Author: Sebastian Schmidt +Date: Tue Jul 21 14:36:40 2020 -0700 + + Use the SDK version from Firebase package.json (#3443) + +commit eb44f4a9a0318744054c451c2ba1ffc84f3da4b6 +Author: Sebastian Schmidt +Date: Mon Jul 20 20:33:00 2020 -0700 + + New Query API (#3390) + + * New Query API + + * Review + + * Update Validation tests + + * One more test fix + + * Fix + + * Lint + + * Imports + +commit cf8696e2b063e1f3f3076df0967c283d030e1784 +Author: Sebastian Schmidt +Date: Mon Jul 20 18:44:50 2020 -0700 + + Remove MultiTabSyncEngine (#3442) + +commit 8396405777813c8960615919f3d90a15b9f385b3 +Author: Christina Holland +Date: Mon Jul 20 16:47:28 2020 -0700 + + Remove Storage AuthWrapper layer (#3399) + +commit 7d5678be0156f01cb58170860d4a8e0edd6cad5a +Author: Christina Holland +Date: Mon Jul 20 14:37:06 2020 -0700 + + Update exp docgen script and add functions-exp docs (#3412) + +commit 4aa169b667bff22a04c419f609104a5bf6cc402f +Author: Sebastian Schmidt +Date: Mon Jul 20 11:52:00 2020 -0700 + + Remove debugAsserts from Node builds (#3405) + +commit f0de245323a10737348e25ee506b37568bf46cd8 +Author: Sebastian Schmidt +Date: Mon Jul 20 11:51:45 2020 -0700 + + Remove MultiTabLocalStore (#3436) + +commit 82e793fbdca3993b330afe344e8bb1828c57cb36 +Author: Sebastian Schmidt +Date: Mon Jul 20 09:26:12 2020 -0700 + + deleteApp() (#3439) + +commit d43411860cee8da8ccd7727c413db4b80fac3856 +Author: Sebastian Schmidt +Date: Fri Jul 17 18:49:37 2020 -0700 + + Add ReactNative and Browser builds (Lite/Exp) (#3400) + +commit ee33ebf726b1dc31ab4817e7a1923f7b2757e17c +Author: Sebastian Schmidt +Date: Fri Jul 17 13:31:51 2020 -0700 + + Add Storage Integration tests (#3414) + +commit ea699fac1220f6d1de3f719c00d96f5039e388ed +Author: Sebastian Schmidt +Date: Thu Jul 16 23:27:37 2020 -0700 + + Share Integration Tests between firestore-exp and the main SDK (#3374) + +commit a875bbe0e248f4794dd972658d4e1649fc78d7a2 +Author: Sebastian Schmidt +Date: Thu Jul 16 18:39:40 2020 -0700 + + Move Datastore to ComponentProvider (#3417) + +commit 6d11f7f58046b567fb2a0c9887d0586cb320fe0b +Author: Feiyang +Date: Thu Jul 16 17:53:00 2020 -0700 + + Use custom changelog generator (#3415) + + * init firebase-changelog + + * use local script for changelog generation + + * change to typescript + + * do not render user in changelog + + * generate issue link automatically if not already present + + * use package + + * update path + + * output to dist + + * find the matching group the right way + + * script update + + * remove console log + + * upate text + + * Make authenticated requests + + * remove debug code + + * clean up + + * correct verbiage + + * update text + +commit 65568139d966f7f315170bd7a8f12b9077e83972 +Merge: 5b7d812a4 5097ba5de +Author: Feiyang1 +Date: Thu Jul 16 15:45:01 2020 -0700 + + Merge branch 'release' into master + 7.16.1 release + +commit 5b7d812a4ea9c4778d3ade299ab36724e99ea08b +Author: Sebastian Schmidt +Date: Thu Jul 16 15:12:27 2020 -0700 + + Add support for collection(coll) and doc(doc) (#3403) + +commit 5097ba5de533d501ad89883edeb30c17a80875f6 (tag: firebase@7.16.1, tag: @firebase/testing@0.20.7, tag: @firebase/storage@0.3.39, tag: @firebase/storage-types@0.3.13, tag: @firebase/firestore@1.16.1, tag: @firebase/database@0.6.8, tag: @firebase/auth@0.14.9) +Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> +Date: Thu Jul 16 14:43:24 2020 -0700 + + Version Packages (#3421) + + Co-authored-by: github-actions[bot] + +commit e7ca5594d0c56f2a998b81b8824ef4e232724c83 +Author: Christina Holland +Date: Thu Jul 16 14:27:53 2020 -0700 + + Re-remove firebase devDependency from rxfire (#3423) + + * Re-remove firebase devDependency from rxfire + + * Fix rollup version + +commit 38a12bb98d0b27c5ae06876a20399ce9c0bfd711 +Author: Christina Holland +Date: Thu Jul 16 14:27:53 2020 -0700 + + Re-remove firebase devDependency from rxfire (#3423) + + * Re-remove firebase devDependency from rxfire + + * Fix rollup version + +commit 3860c0a5b20f02a5232b7d8c84fd57dff6a5d7ce +Author: Evan Lovely +Date: Thu Jul 16 14:23:09 2020 -0700 + + docs: updating initializeApp() TypeScript @example (#3119) + +commit 02419ce8470141f012d9ce425a6a4a4aa912e480 +Author: Xuechun Hou +Date: Thu Jul 16 20:43:00 2020 +0000 + + Issue 2393 - Add environment check to Analytics Module (#3165) + + * updateDoc()/deleteDoc() signature fix (#3147) + + * Transaction/WriteBatch signature fix (#3151) + + * Take WriteStream offline when IndexedDB is unavailable (#2995) + + * Do not build firestore lite in build because it breaks regular release build (#3156) + + * Do not build firestore lite in build because it breaks release build + + * add release build script + + * add pre script for build:release (#3161) + + * Add setLogLevel() (#3154) + + * Add DocumentReference (#3123) + + * issue #2393 fix for analytics module + + * removed unnecessary sw check within isSupported method for analytics + + * using raw indexDB api to open a dummy database + + * added console log for reading code + + * fix for issue-2393 + + * removed unused import + + * fixed so that correct type of variable of errorInfo required errorFactory is passed + + * fixed isSupported export + + * addressed feedback + + * removed unnecessary console log + + * removed console logs + + * addressed feedback + + * revert unrelated files + + * Create clean-numbers-flow.md + + * bring functions to util + + * convert validateIndexedDBOpenable to async + + * trying to fix async error throwing + + * brought indexedDB check to factory method + + * fixed grammar error + + * break down functions + + * take indexedDB check funcitons out to factory method + + * changed error names + + * removed eslint comment + + * revert license change + + Co-authored-by: Sebastian Schmidt + Co-authored-by: Feiyang + +commit 139ecf1dade3973dddc3699b2adde5a27dc3c4ef +Author: Christina Holland +Date: Thu Jul 16 13:42:26 2020 -0700 + + Temporarily remove firebase devDependency from rxfire (#3381) + +commit 6d5b4cc3fc19b01a244c5e83b31ae354bf3f7fc7 +Author: Sebastian Schmidt +Date: Thu Jul 16 10:05:47 2020 -0700 + + Add type to DocumentReference/CollectionReference/Query (#3402) + +commit b6145466835e22495b94d2bcfc45813e81496085 +Author: Feiyang +Date: Wed Jul 15 11:05:15 2020 -0700 + + add browser field to auth (#3401) + + * add browser field to auth + + * Create fresh-onions-cry.md + +commit 28438f6090c623a5b85b1873b3cf84f51e0adfe1 +Author: Sebastian Schmidt +Date: Wed Jul 15 09:38:53 2020 -0700 + + Add query() test helper (#3408) + +commit c2b737b2187cb525af4d926ca477102db7835420 +Author: Sebastian Schmidt +Date: Tue Jul 14 13:53:45 2020 -0700 + + Use Admin AuthTokenProvider when targeting Emulator (#3228) + +commit 29afa3330c59cce0c26afb1a0dfd2376c01b9b57 +Author: Feiyang +Date: Tue Jul 14 12:28:38 2020 -0700 + + parse tags correctly in release script (#3385) + + * parse tags correctly + + * remove debug code + +commit b07f822bdb4cf628d53d337dc0df3db7f865a5aa +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Fri Jul 10 10:24:14 2020 -0700 + + Update dependency rollup to v2 (#3388) + + Co-authored-by: Renovate Bot + +commit 55f09a2642043d9fe9415c069e1dc82e1bcb612c +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Fri Jul 10 10:23:43 2020 -0700 + + Update dependency prettier to v2 (#3386) + + * Update dependency prettier to v2 + + * update configuration + + * add parenthese + + * run prettier + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang1 + +commit 340d715e64e2a94fb75284070b3e53785a3019c5 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Thu Jul 9 20:36:23 2020 -0700 + + Update dependency karma-coverage-istanbul-reporter to v3 (#3350) + + Co-authored-by: Renovate Bot + +commit f46bc2476bedaef9ac54db5c5309d6e9be94f65c +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Thu Jul 9 20:35:21 2020 -0700 + + Update dependency rollup-plugin-license to v2 (#3389) + + Co-authored-by: Renovate Bot + +commit 31cb0f1d71ba855327dbd6af9d971a3987799ff0 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Thu Jul 9 20:00:28 2020 -0700 + + Update dependency gulp-filter to v6 (#3348) + + Co-authored-by: Renovate Bot + +commit ee5ec1eb349a33e882f32f6d0dda9d3f5dc2dd4b +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Thu Jul 9 19:59:20 2020 -0700 + + Update all non-major dependencies (#3296) + + Co-authored-by: Renovate Bot + +commit d7735c985a02dd02c976e000ce2dc0acd8e8edff +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Thu Jul 9 18:35:53 2020 -0700 + + Update dependency karma to v5 (#3349) + + Co-authored-by: Renovate Bot + +commit 7d5ccb20ceca71b356174d1b328de6bb0ce6c5da +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Thu Jul 9 18:34:36 2020 -0700 + + Update dependency typescript to v3.9.6 (#3347) + + Co-authored-by: Renovate Bot + +commit 023d729aff27bec6a35acabe422296c0d7432ad6 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Thu Jul 9 18:32:46 2020 -0700 + + Update dependency karma-mocha to v2 (#3351) + + Co-authored-by: Renovate Bot + +commit 3c21efe4635b31b2a0845b818b01c6484d4b1860 +Author: Christina Holland +Date: Thu Jul 9 15:29:57 2020 -0700 + + Run integration/firestore tests in Saucelabs (#3319) + +commit 23891b2024af46ab69e0d5fe9f3b15a8c3670660 +Merge: 9c409ea74 2afbd7423 +Author: Christina Holland +Date: Thu Jul 9 14:41:16 2020 -0700 + + Merge branch 'release' into master + Release 7.16.0 + +commit 2afbd7423b361147c67b497d42112a7a74194dc8 (tag: firebase@7.16.0, tag: @firebase/testing@0.20.6, tag: @firebase/storage@0.3.38, tag: @firebase/remote-config@0.1.25, tag: @firebase/performance@0.3.9, tag: @firebase/messaging@0.6.20, tag: @firebase/logger@0.2.6, tag: @firebase/installations@0.4.14, tag: @firebase/functions@0.4.48, tag: @firebase/firestore@1.16.0, tag: @firebase/firestore-types@1.12.0, tag: @firebase/database@0.6.7, tag: @firebase/component@0.1.16, tag: @firebase/auth@0.14.8, tag: @firebase/app@0.6.8, tag: @firebase/analytics@0.3.9) +Author: Christina Holland +Date: Thu Jul 9 13:32:35 2020 -0700 + + Update package.json + + Manually update rxfire's firebase dependency version. + +commit 369dc2660a8ca49741896ae1df17e13a28c2840f +Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> +Date: Thu Jul 9 13:14:57 2020 -0700 + + Version Packages (#3357) + + Co-authored-by: github-actions[bot] + +commit 9c409ea74efd00fe17058c5c8b74450fae67e9ee +Author: Sebastian Schmidt +Date: Thu Jul 9 12:01:10 2020 -0700 + + Allow undefined callbacks in Storage Observer (#3224) + +commit 308f020d19996cd44b7df013132b3a4e0ba0363d +Author: Feiyang +Date: Thu Jul 9 11:52:37 2020 -0700 + + use mocha report to show diff (#3365) + +commit 1c6ca04f5525a7ff4cc601cc08c0918868bf5329 +Author: Feiyang +Date: Thu Jul 9 11:52:03 2020 -0700 + + Remove changeset check for PRs (#3371) + +commit ce168bd961f87ee0c5d85fd932c4d6a9e9a92350 +Author: Feiyang +Date: Thu Jul 9 11:51:37 2020 -0700 + + use oss-bot to make PRs (#3370) + +commit d1a86e6d03dfbebe1efa82e313bb2b723e897a16 +Author: Feiyang +Date: Thu Jul 9 11:51:16 2020 -0700 + + use caret range for tslib in functions-exp (#3328) + + * use caret range for tslib in functions-exp + + * Create rotten-owls-drive.md + +commit 0b14a8cdeced1fe863c8b01f8aad322d25fc86f9 +Author: Sebastian Schmidt +Date: Thu Jul 9 10:43:25 2020 -0700 + + Make clearIndexedDbPersistence() work without enableIndexedDbPersistence() (#3373) + +commit 4fc68ef91a50827c74b90177063973ab24feaefa +Author: Sebastian Schmidt +Date: Wed Jul 8 22:59:14 2020 -0700 + + Add test-only API shim (Lite SDK) (#3364) + +commit 9b53ec8927511ebd149be67ee3d80509c235eadf +Author: Sebastian Schmidt +Date: Wed Jul 8 22:08:07 2020 -0700 + + Add test-only API shim (firestore-exp) (#3361) + +commit 5a3553609da893d45f7fe1897387f72eaedf2fe0 +Author: Sebastian Schmidt +Date: Wed Jul 8 20:57:09 2020 -0700 + + Handle IndexedDB errors in unsubscribe callback (#3162) + +commit 13dfc2f3380bdd67c6cc6f67ef5b40697e85e126 +Author: Sebastian Schmidt +Date: Wed Jul 8 20:13:39 2020 -0700 + + Remove Multi-Tab overhead for non-multi-tab persistence (#3362) + +commit 6f266bf130315a689d41cbd7befb73ca9357f044 +Author: Kelvin Jin +Date: Wed Jul 8 18:18:32 2020 -0700 + + Remove usages of goog.isFunction (#3205) + + * Update args.js + + * Update auth.js + +commit 417dd7ca3c72e01197547a423088cc240b56e093 +Author: Sebastian Schmidt +Date: Wed Jul 8 09:55:19 2020 -0700 + + Return correct DocumentSnapshot type in exp SDK (#3360) + +commit 9a9a81fe4f001f23e9fe1db054c2e7159fca3ae3 +Author: Sebastian Schmidt +Date: Tue Jul 7 20:28:12 2020 -0700 + + Reset backoff when connectivity status changes (#3279) + +commit 989cb7561d00ba989a88883cb1e6bd1296d35c53 +Author: Feiyang +Date: Tue Jul 7 15:05:44 2020 -0700 + + publish packages publicly (#3368) + + * publish packages publicly + + * Create perfect-terms-press.md + +commit f8d1b3d7d56f5f3fe9b3ec44b615c801275d7c2a +Author: Sebastian Schmidt +Date: Tue Jul 7 13:03:41 2020 -0700 + + Misc fixes for tree-shakeable API (#3358) + +commit bb7408361519aa9a58c8256ae01914cf2830e118 +Author: Feiyang +Date: Tue Jul 7 12:35:54 2020 -0700 + + clear failAfter timeout after request resolves (#3330) + + * clear failAfter timeout after request resolves + + * Create nasty-pigs-invite.md + + * add a test + + * fix test setup issues + +commit 26767cd9e4e24c4465ee37c387b6287ac9702336 +Author: Sebastian Schmidt +Date: Tue Jul 7 11:25:42 2020 -0700 + + Misc fixes for firestore-exp API definition (#3359) + +commit 064cf2e5fefaba325203e92de5bc184ebde3de7d +Author: Sebastian Schmidt +Date: Mon Jul 6 15:52:44 2020 -0700 + + Make UserDataReader tree-shakeable (#3333) + +commit c7aa053d2544c3432ee41a041ce8f4cb208b6c83 +Author: Sebastian Schmidt +Date: Mon Jul 6 15:02:40 2020 -0700 + + Tree-Shakeable Mutations (#3329) + +commit 469c8bdf18c4a22e99d595a9896af2f934df20fd +Author: Kai Wu +Date: Mon Jul 6 14:45:14 2020 -0700 + + Fix FCM rxjs Incompatibility (#3221) + + * Enable the FCM integration test (IT) for Chrome. + + Context: the tests were switched off a couple of years ago due to flakiness. It has not been maintained since then. During the time, Some Selenium API methods used were deprecated and removed; the Firebase projects used are no longer managed or owned by the FCM team. Consequently, the test became unfunctional. In the effort of providing safety for the upcoming FCM releases, this PR is created to fix, deflake, refactor and improve the old tests. + + This PR did the following: + - Enabled comprehensive IT for chrome (ver.80). Now we are covering send&foreground recevie for FCM messages (messages with {notification} payload, {data} payload and {notification, data} payload), delete/update token, use default/customized ServiceWorker. + + - Defalaked test. The IT is now reasonably stable without retry. Previously we are retrying 1 or 3 times. + + - Optimized test. Previously we create a webDriver for each test, which is slow and annoying. Because a window is created and brought to focus and killed frequently, it makes working on other tasks and testing nearly impossible (Probably using a headless browser would work but I haven't found a satisfying solution to have the app in the state of foreground and background which is a requirement for FCM functions). With the way the tests are organized, the IT only spin up a new web driver when necessary. Some data on performance: (old) 'test-send' take 74 seconds (only measured 'test-send' because the other test suites were not functional at the time); (now) 'test-send', 'test-deleteToken', 'test-updateToken', 'test-useDefaultServiceWorker', 'test-useValidManifest' takes in total 33s (10 run average). + + - General refactoring. Including refactors on expect blocks, createWebDriver, use const for constants usage, etc. The code should be much easier to understand and maintain. + + Future work: + - Enable test on firefox once I get the notification permission working. + - Run the IC against some milestone chrome/firefox version (if it makes sense) to ensure backward compatibility. We should try to avoid https://github.com/firebase/firebase-js-sdk/issues/2712 . :) + + * [AUTOMATED]: License Headers + + * Enable integration test (IT) for FCM. + + Context: FCM IT were turned off a couple years ago due to flakiness. It became mostly unfunctional as repo structure change overtime. The goal is to fix and enable IT for more confident developement flow and safer releases. + + This CL does the following: + - Fix the IT to be functional again. The IT is derteminated from my experiements (no longer flaky). Therefore, The CL removed the retry mechasim (previously retry 3 times) which makes running IT cheaper and more enjoyable. + + - Include IT for test:change for FCM package: the entire IT test suites is resoanblly fast (from my exeperience 1-3 miutes to complete. As it grows larger, maybe it makes run tests in parallel in Saucelab) + + Futhure work: + - Enable testing for firefox + + * Correct int syntax + + js doesn't allow underscore for int + + * This file wasn't auto-saved + + * Trigger FCM IT + + why dot.env(FCM_SECRETS) are not included in env? + + * Test Secrets can be accessed w/o dotenv + + * Add fcm sercret to workflow + + * Update test-changed.yml + + * test send (background only) + + Because headless chrome doesn't have the concept of foreground and background + + * remove dotenv + + * feed secrest into test:all workflow + + * Update test-all.yml + + * background messaging checking + + * [AUTOMATED]: License Headers + + * rerun + + * added waiting + + * wait + + * Update test-send.js + + * Update test-send.js + + * Examine wrong sercret + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * update fcm project + + * Update package.json + + * Update test-send.js + + * open new tab for backgournd receive + + * removed test-send + + somehow not workingin github workflow? + + * Adding Reties + + * Change timeout limit + + * retry 3 times + + * adjust mocha setting + + * update + + * Enable foreground tesing + + * Fix FCM rxjs incompatibility + + * Use one listener to handle next and observer for onMessage + + * Add changeset to the PR + + * Update tough-rings-bake.md + + Co-authored-by: Kai Wu + +commit ee1892d69f1803178084b98ec9fa7318b36e6b5b +Author: Kai Wu +Date: Mon Jul 6 11:00:33 2020 -0700 + + Add Foreground Message Send/Receive Integration Tests (#3216) + + * Enable the FCM integration test (IT) for Chrome. + + Context: the tests were switched off a couple of years ago due to flakiness. It has not been maintained since then. During the time, Some Selenium API methods used were deprecated and removed; the Firebase projects used are no longer managed or owned by the FCM team. Consequently, the test became unfunctional. In the effort of providing safety for the upcoming FCM releases, this PR is created to fix, deflake, refactor and improve the old tests. + + This PR did the following: + - Enabled comprehensive IT for chrome (ver.80). Now we are covering send&foreground recevie for FCM messages (messages with {notification} payload, {data} payload and {notification, data} payload), delete/update token, use default/customized ServiceWorker. + + - Defalaked test. The IT is now reasonably stable without retry. Previously we are retrying 1 or 3 times. + + - Optimized test. Previously we create a webDriver for each test, which is slow and annoying. Because a window is created and brought to focus and killed frequently, it makes working on other tasks and testing nearly impossible (Probably using a headless browser would work but I haven't found a satisfying solution to have the app in the state of foreground and background which is a requirement for FCM functions). With the way the tests are organized, the IT only spin up a new web driver when necessary. Some data on performance: (old) 'test-send' take 74 seconds (only measured 'test-send' because the other test suites were not functional at the time); (now) 'test-send', 'test-deleteToken', 'test-updateToken', 'test-useDefaultServiceWorker', 'test-useValidManifest' takes in total 33s (10 run average). + + - General refactoring. Including refactors on expect blocks, createWebDriver, use const for constants usage, etc. The code should be much easier to understand and maintain. + + Future work: + - Enable test on firefox once I get the notification permission working. + - Run the IC against some milestone chrome/firefox version (if it makes sense) to ensure backward compatibility. We should try to avoid https://github.com/firebase/firebase-js-sdk/issues/2712 . :) + + * [AUTOMATED]: License Headers + + * Enable integration test (IT) for FCM. + + Context: FCM IT were turned off a couple years ago due to flakiness. It became mostly unfunctional as repo structure change overtime. The goal is to fix and enable IT for more confident developement flow and safer releases. + + This CL does the following: + - Fix the IT to be functional again. The IT is derteminated from my experiements (no longer flaky). Therefore, The CL removed the retry mechasim (previously retry 3 times) which makes running IT cheaper and more enjoyable. + + - Include IT for test:change for FCM package: the entire IT test suites is resoanblly fast (from my exeperience 1-3 miutes to complete. As it grows larger, maybe it makes run tests in parallel in Saucelab) + + Futhure work: + - Enable testing for firefox + + * Correct int syntax + + js doesn't allow underscore for int + + * This file wasn't auto-saved + + * Trigger FCM IT + + why dot.env(FCM_SECRETS) are not included in env? + + * Test Secrets can be accessed w/o dotenv + + * Add fcm sercret to workflow + + * Update test-changed.yml + + * test send (background only) + + Because headless chrome doesn't have the concept of foreground and background + + * remove dotenv + + * feed secrest into test:all workflow + + * Update test-all.yml + + * background messaging checking + + * [AUTOMATED]: License Headers + + * rerun + + * added waiting + + * wait + + * Update test-send.js + + * Update test-send.js + + * Examine wrong sercret + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * update fcm project + + * Update package.json + + * Update test-send.js + + * open new tab for backgournd receive + + * removed test-send + + somehow not workingin github workflow? + + * Adding Reties + + * Change timeout limit + + * retry 3 times + + * adjust mocha setting + + * update + + * Enable foreground tesing + + * Add emtpy changeset + + Not a SDK Change + + Co-authored-by: Kai Wu + +commit 992432e07ca3b7594b860c0d50da23596311ea56 +Author: Feiyang +Date: Mon Jul 6 10:05:42 2020 -0700 + + use secret group for .changeset so people don't get spammed by notification (#3326) + + * use secret group so people don't get spammed by notification + + * Create odd-roses-smile.md + +commit fc17a3cf69cd0642f5b4bc3f9279a5ee019d3908 +Author: Sebastian Schmidt +Date: Thu Jul 2 11:00:56 2020 -0700 + + Tree-shakeable Query implementation (#3220) + +commit 0c8b011b5e25faac7899d11f432987e327080925 +Author: Sebastian Schmidt +Date: Wed Jul 1 09:29:00 2020 -0700 + + Don't use UserDataReader for Increment transform (#3332) + +commit a754645ec2be1b8c205f25f510196eee298b0d6e +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Tue Jun 30 15:14:53 2020 -0700 + + Update dependency typescript to v3.9.5 (#3297) + + * Update dependency typescript to v3.9.5 + + * Create brave-lies-crash.md + + * Update brave-lies-crash.md + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang + +commit 877c060c47bb29a8efbd2b96d35d3334fd9d9a98 +Author: Sebastian Schmidt +Date: Tue Jun 30 15:13:32 2020 -0700 + + Add ReactNative build back, fix base64 serialization (#3251) + +commit dd1e63cee4d3a5a7b7c0a2851255788a8249b51d +Author: Sebastian Schmidt +Date: Tue Jun 30 15:12:32 2020 -0700 + + Add remaining firestore-exp functionality (#3321) + +commit 982acf91ee1031a9210d0aa8af4402fa5380b4cb +Author: Sebastian Schmidt +Date: Tue Jun 30 14:00:10 2020 -0700 + + Add onSnapshotsInSync to firestore-exp (#3320) + +commit c3cd471b0d10149f06f2acbc7d7e4044b604d922 +Author: Sebastian Schmidt +Date: Tue Jun 30 10:59:26 2020 -0700 + + Tree-shakeable FieldFilter (#3252) + +commit 2ab5a175fe502b9c1de4d10baa19e52bc7b42fc0 +Author: Feiyang1 +Date: Tue Jun 30 09:55:12 2020 -0700 + + Publish firebase@exp 0.800.3 + +commit fe85035e190189e6086ed2ff6e1169b725667e42 +Author: Feiyang +Date: Tue Jun 30 09:51:39 2020 -0700 + + 1. Remove messaging from @firebase/functions's dependencies 2. add functions to firebase-exp (#3323) + + * add functions to firebase-exp package + + * Remove messaging from function-exp's dependency + + * Create tall-glasses-move.md + +commit f54abc2543410293ff6be153fb5e36a12c1564c8 +Author: Sebastian Schmidt +Date: Mon Jun 29 21:05:41 2020 -0700 + + Add Snapshot Listeners to firestore-exp (#3317) + +commit fe2bd0f1f2e63210b7ecfc3e4f8b0b5690612036 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jun 29 17:51:34 2020 -0700 + + Update dependency eslint to v7 (#3299) + + * Update dependency eslint to v7 + + * Create two-weeks-thank.md + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang + +commit d0bc885bc04112c3bad34ff505332ac7e984d6b0 +Author: Feiyang1 +Date: Mon Jun 29 16:59:20 2020 -0700 + + Publish firebase@exp 0.800.2 + +commit 9e4aaea420b39c14999eafa7de848ae168162f59 +Author: Feiyang +Date: Mon Jun 29 16:52:36 2020 -0700 + + Point functions-exp to the right typing file (#3322) + + * point to the typing file in functions-exp + + * use app-exp as the service name in functions + + * Create chilled-beers-chew.md + +commit 31206aaddb0b03049650010087f653aee0b66016 +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Mon Jun 29 16:42:50 2020 -0700 + + Update dependency firebase-tools to v8 (#3300) + + * Update dependency firebase-tools to v8 + + * Create yellow-lamps-greet.md + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang + +commit b8c0ceb2011b0c85d7cba23780783af7656fbfa7 +Author: Feiyang +Date: Mon Jun 29 16:36:20 2020 -0700 + + Make onSnapshot work with rxjs observers (#3318) + + * Make onSnapshot work with rxjs observers + + * Create thin-ligers-fold.md + + * Update thin-ligers-fold.md + +commit bf485cd1eb56a09a4d3afee9ed946504c9521aae +Author: Feiyang +Date: Mon Jun 29 14:26:00 2020 -0700 + + Make exp release script work again (#3301) + + * change to ts + + * use the correct file name + + * remove -exp from types packages when releasing + + * werid hack to make exp release build + + * skip tests in exp release + + * do not run test + + * revert changes made for testing + + * remove extraneous build target + + * Create warm-suns-dream.md + +commit 4d1712db7abd4bd35bef88d3b02df122a6e6db2c +Author: Sebastian Schmidt +Date: Mon Jun 29 12:31:58 2020 -0700 + + Add terminate() and snapshotEqual() to firestore-exp (#3313) + +commit 32d91c0476fe89198012749e35eae0cbf450792e +Author: Sebastian Schmidt +Date: Mon Jun 29 10:57:18 2020 -0700 + + Add writeBatch(), WriteBatch (#3307) + +commit af0c4300a8c1939ccb74db9159b0337a8d93c32d +Author: Brian Chen +Date: Sat Jun 27 11:37:30 2020 -0700 + + Add set() overrides to lite sdk (#3291) + +commit 6e168ff99734a67d485aea996cf15517f47134b7 +Author: Kai Wu +Date: Sat Jun 27 08:41:24 2020 -0700 + + Clean up unused FCM secret (#3311) + + * Clean up unused FCM secret + + * Update breezy-queens-give.md + + Co-authored-by: Feiyang + +commit 5f51ab5c1a65d5b7ad2fb2e85f9d71a7f3b8cd17 +Author: Sebastian Schmidt +Date: Fri Jun 26 22:13:08 2020 -0700 + + Add setDoc, updateDoc, deleteDoc and addDoc (#3306) + +commit 5d6b749ba008be6cd0f270122bceb506b8d4e853 +Author: Sebastian Schmidt +Date: Fri Jun 26 20:13:47 2020 -0700 + + Add getQuery(), getQueryFromCache() and getQueryFromServer() (#3294) + +commit 17c628eb228c21ad1d4db83fdae08d1142a2b902 +Author: Feiyang +Date: Fri Jun 26 17:02:04 2020 -0700 + + Fix updateToken (#3312) + + * fix assignment order + + * Create cuddly-rivers-add.md + +commit 9e204e7757d76091be99d7427b02d2ed9a81625c +Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> +Date: Fri Jun 26 16:35:26 2020 -0700 + + Update dependency chalk to v4 (#3298) + + * Update dependency chalk to v4 + + * Create many-gifts-invent.md + + Co-authored-by: Renovate Bot + Co-authored-by: Feiyang + +commit 7d4e095baa5917b618b6a7cec5c8b9524f546f7f +Author: Sebastian Schmidt +Date: Fri Jun 26 16:32:43 2020 -0700 + + Reduce size impact of Target/TargetImpl pattern (#3272) + +commit e90304c8ac4341d8b23b55da784eb21348b04025 +Author: Sebastian Schmidt +Date: Fri Jun 26 15:51:08 2020 -0700 + + Remove makeConstructorPrivate (#3309) + +commit c38fc717bf75444203cc5f044d678ae18f6eeb03 +Author: Sebastian Schmidt +Date: Fri Jun 26 15:22:13 2020 -0700 + + Add getDocFromCache() & getDocFromServer() (#3285) + +commit a4ff036c668975078c7e01b1ee1293cd134fda15 +Author: Feiyang +Date: Fri Jun 26 14:58:27 2020 -0700 + + update codeowner to allow approving changeset changes (#3308) + + * update codeowner to allow approving changeset changes + + * Create kind-melons-obey.md + + * Update CODEOWNERS + +commit 3d43b009018c31def7df25dc3843016c6a1f7e91 +Author: Sebastian Schmidt +Date: Fri Jun 26 14:24:21 2020 -0700 + + Add getDoc() to firestore-exp (#3274) + +commit ddbe2180eb22aa30238d5bfc6afa8c61183aff8d +Author: Kai Wu +Date: Fri Jun 26 13:00:24 2020 -0700 + + Disable Cross Browser FCM Integration Test (#3287) + + * Disbale Cross Browser FCM Integration Test + + * Update run_saucelabs.js + + * Move Integration tests out of workflows + + * Create firebsae-messaging.md + + * update changeset description + +commit 39ca8ecf940472159d0bc58212f34a70146da60c +Author: Brian Chen +Date: Fri Jun 26 12:39:34 2020 -0700 + + add support for set() with SetOptions when using FirestoreDataConverter (#3254) + +commit 8e0c0360b3e04a3c780ec6e4913cd546064140a8 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Fri Jun 26 12:25:48 2020 -0400 + + Make SyncEngine an interface. (#3283) + + * Make SyncEngine an interface such that SyncEngineImpl can be contained in the module. + + * Leave private methods out. + + * Address comments + + * Create yellow-lemons-provide.md + + * Revert "Create yellow-lemons-provide.md" + + This reverts commit de8ed28fae08ddbfd7520ededda1927636529cef. + + * Create perfect-carpets-chew.md + +commit 64d9ab6b025cbef2681183fa1f53ced25540fb4a +Author: Feiyang +Date: Thu Jun 25 17:39:41 2020 -0700 + + Update contributing.md with changeset instruction (#3293) + + * update contributing.md with changeset instruction + + * Create twelve-pets-joke.md + +commit a391c3b24237f043faff3d476a5f9b6f8e0e1c1b +Merge: fd163b045 601cd404d +Author: Christina Holland +Date: Thu Jun 25 16:43:05 2020 -0700 + + Merge branch 'release' + 7.15.5 release + +commit 601cd404ddfeb246590359faf929fa318f250ccf (tag: rxfire@3.13.5, tag: firebase@7.15.5, tag: @firebase/util@0.2.50, tag: @firebase/testing@0.20.5, tag: @firebase/storage@0.3.37, tag: @firebase/remote-config@0.1.24, tag: @firebase/performance@0.3.8, tag: @firebase/messaging@0.6.19, tag: @firebase/installations@0.4.13, tag: @firebase/functions@0.4.47, tag: @firebase/firestore@1.15.5, tag: @firebase/database@0.6.6, tag: @firebase/component@0.1.15, tag: @firebase/app@0.6.7, tag: @firebase/analytics@0.3.8) +Author: Christina Holland +Date: Thu Jun 25 16:08:02 2020 -0700 + + Publish firebase@7.15.5 + +commit fd163b0454e36084a4560e6c15c11e3eedc720b1 +Author: Feiyang +Date: Thu Jun 25 15:51:07 2020 -0700 + + compare to origin/master (#3290) + + * compare to origin/master + + * Create poor-eggs-bow.md + + * update changeset + + * fix again + + * fix again + +commit 4edfe22674508499c0ac71f04723b96357d51077 +Author: Feiyang +Date: Thu Jun 25 13:31:39 2020 -0700 + + Fetch all history and all branches in CI, so we can compare with the master branch (#3286) + + * fetch all history and all branches in CI + + * Create hot-pumas-allow.md + +commit 590c9a44e73df50baef86f9939e53d3d2d611642 +Author: Sebastian Schmidt +Date: Thu Jun 25 10:41:01 2020 -0700 + + Update Lite tests (#3278) + +commit fa70d0a3c04ec951d2a76492d48e54b572bb7818 +Author: Feiyang +Date: Thu Jun 25 09:59:10 2020 -0700 + + Enable changesets (#3268) + + * enable changeset + + * Create release pull request + + * change env variable name + + * use the correct secret in GHA + + * make firebase a devDependency in integration test projects + + * initial changeset release rewrite + + * clean up imports in cli.ts + + * save progress + + * implement canary release + + * update changesets to the latest + + * ignore integration test projects + + * save updates + + * update ignore list + + * stream changeset output + + * validate version for staging releases + + * fix bug + + * add option + + * skip private packages + + * remove unused things + + * update release script + + * fix type errors + + * remove commented code + + * fix types + + * add Changeset check + + * compare to master + +commit 04874c976a9b9f4a675dcecd0ffac3f992e613a9 +Author: Sebastian Schmidt +Date: Wed Jun 24 16:54:04 2020 -0700 + + Integrate with app-exp (#3276) + +commit 8846f617268ee29b0dd3baffe28671dd0f4e00ae +Author: Sebastian Schmidt +Date: Wed Jun 24 15:11:52 2020 -0700 + + Don't delay retryable operations (#3270) + +commit c436bcc6477c964861d0014cd0c74c6493f24cf2 (origin/mrschmidt/todos) +Author: Sebastian Schmidt +Date: Wed Jun 24 13:08:46 2020 -0700 + + Export some unchanged members in the firestore/exp SDK (#3256) + +commit a1081c61b401a1daf39065c3d42a082564cbd76d +Author: Gil +Date: Wed Jun 24 12:33:28 2020 -0700 + + Provide document path context for input validation errors. (#3189) + +commit 9bac5bccd8f9bb25ff9c7fe8b88e975b9337978f +Author: Sebastian Schmidt +Date: Wed Jun 24 11:41:56 2020 -0700 + + Tree-shakeable OrderBy (#3253) + +commit b27974af27ff10e5859c2bfab5349536e00b49e9 +Author: Sebastian Schmidt +Date: Wed Jun 24 11:41:34 2020 -0700 + + Don't serialize/deserialize stream token (#3255) + +commit 1791a9be2b2518553250b10802148d203de9a309 +Author: Sebastian Schmidt +Date: Wed Jun 24 09:44:00 2020 -0700 + + Remove remaining static references (#3264) + +commit 9cf49f74f48833ccbdba0106970fa08ecd68ff89 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Wed Jun 24 12:25:20 2020 -0400 + + Make LocalStore an interface. (#3269) + + * Make local store an interface. + + * Address comments + +commit 5de3ec669e7e854885c43d150664d92c0022df20 +Author: Christina Holland +Date: Tue Jun 23 16:10:05 2020 -0700 + + Add yarn script that runs tests on non-exp packages only (#3267) + +commit acd89ee40434383121066d8c857a714f073ea142 +Author: Christina Holland +Date: Tue Jun 23 13:38:24 2020 -0700 + + Set functions-types-exp package to private (#3262) + +commit 50494ecdf41aee7f990147ba57b964a2e74f8f57 +Author: Sebastian Schmidt +Date: Tue Jun 23 12:57:53 2020 -0700 + + Expose static members of public types in ESM2017 build (#3259) + + * Expose static members of public types in ESM2017 build + + * Update api.ts + + * Update api.ts + +commit 868a7869e95093bb7f970477773dab4957df1ac7 +Author: Feiyang +Date: Tue Jun 23 12:56:13 2020 -0700 + + remove -exp deps from firestore (#3261) + +commit 2c8c17c3f7b5d3ba6e3d6c071508121761c3bfa5 +Author: Sebastian Schmidt +Date: Tue Jun 23 09:51:10 2020 -0700 + + Tree-Shakeable LocalSerializer (#3241) + +commit 58e1b6f6740a270fb9f7ea7a66cc15037160674f +Author: Sebastian Schmidt +Date: Mon Jun 22 14:54:19 2020 -0700 + + Take RemoteStore offline during user change (#3193) + +commit 71f94f147a549f6f8ba4a04d4c1a246f7ebd2844 +Merge: 992e6389d 141ae7224 +Author: Feiyang1 +Date: Mon Jun 22 12:28:48 2020 -0700 + + Merge branch 'release' + +commit 992e6389d5ca7a7bc3e5973a21d10048e067afac +Author: Sebastian Schmidt +Date: Mon Jun 22 12:06:33 2020 -0700 + + Tree-shakeable Bound (#3250) + +commit 23e8971188d0d304a1017ecd6dfe18194c505b87 +Author: Sebastian Schmidt +Date: Mon Jun 22 11:29:56 2020 -0700 + + Tree-shakeable Target (#3248) + +commit 141ae72240d1e519ba120c3e0f7611d60c21df92 (tag: rxfire@3.13.4, tag: firebase@7.15.4, tag: @firebase/testing@0.20.4, tag: @firebase/firestore@1.15.4) +Author: Feiyang1 +Date: Mon Jun 22 11:10:32 2020 -0700 + + Publish firebase@7.15.4 + +commit 65945abe2ccb619dd0997f2029e5965d6d8687c7 +Author: Sebastian Schmidt +Date: Sat Jun 20 15:09:46 2020 -0700 + + Disable React Native build (#3244) + + * Disable React Native build + + * Also remove from Firebase build + + * Rollup cleanup + +commit e7332282781ecb07973bab3eb8f15508f6685c45 +Author: Sebastian Schmidt +Date: Sat Jun 20 15:09:46 2020 -0700 + + Disable React Native build (#3244) + + * Disable React Native build + + * Also remove from Firebase build + + * Rollup cleanup + +commit d470f49de7ba58a98cac471978ade6ebeea37cd5 +Author: Christina Holland +Date: Fri Jun 19 18:08:13 2020 -0700 + + WIP: Modularize functions (#3051) + +commit 0b9ef3a56d8de6215ca25756f937df77959fb85a +Author: Sebastian Schmidt +Date: Fri Jun 19 16:30:56 2020 -0700 + + Replace Platform injection with source preprocessor (#3206) + +commit e4babeee154982bf93fdd44b3915075664440a9b +Merge: 338dbfad0 311d4b58d +Author: Feiyang1 +Date: Fri Jun 19 14:36:53 2020 -0700 + + Merge branch 'release' + 7.15.3 release + +commit 311d4b58d79ecf2e6a4e259dad3a121b12a0998a (tag: rxfire@3.13.3, tag: firebase@7.15.3, tag: @firebase/testing@0.20.3, tag: @firebase/firestore@1.15.3) +Author: Feiyang1 +Date: Fri Jun 19 14:21:55 2020 -0700 + + Publish firebase@7.15.3 + +commit 338dbfad08de7980d04e3f1aadcf9a97d50066f1 +Author: Sebastian Schmidt +Date: Fri Jun 19 13:39:54 2020 -0700 + + Tree-Shakeable Serialization (#3231) + +commit d525b69dd1d04a6d0c1f3918dea91fef1a059427 +Author: Sam Stern +Date: Fri Jun 19 14:23:28 2020 -0400 + + Remove gRPC and protos from @firebase/testing (#3236) + +commit 246ed9d6b9f3a40d1a7267866389573ca91a8b02 +Author: Sebastian Schmidt +Date: Fri Jun 19 09:19:25 2020 -0700 + + Add base64 externs for ReactNative build (#3240) + + * Add base64 externs for ReactNative build + + * Sort + +commit 35bc0a2eea98d9796023f15cd5783700d45ccc4d +Author: Christina Holland +Date: Thu Jun 18 18:12:14 2020 -0700 + + Add a timeout to git fetch in precommit hook (#3237) + +commit 0924fa70d3aceb46af7ead6f7a55e402be8826d7 (tag: rxfire@3.13.2, tag: firebase@7.15.2, tag: @firebase/util@0.2.49, tag: @firebase/testing@0.20.2, tag: @firebase/storage@0.3.36, tag: @firebase/remote-config@0.1.23, tag: @firebase/performance@0.3.7, tag: @firebase/messaging@0.6.18, tag: @firebase/installations@0.4.12, tag: @firebase/functions@0.4.46, tag: @firebase/firestore@1.15.2, tag: @firebase/database@0.6.5, tag: @firebase/component@0.1.14, tag: @firebase/auth@0.14.7, tag: @firebase/app@0.6.6, tag: @firebase/analytics@0.3.7) +Author: Feiyang1 +Date: Thu Jun 18 14:49:00 2020 -0700 + + Publish firebase@7.15.2 + +commit ee421d240108106981b6c614295276da41e6cfd6 +Author: WhiteSource Renovate +Date: Wed Jun 17 21:00:00 2020 +0200 + + Lock file maintenance (#3185) + +commit 799507101171bce76879d93ee135b12fb922ffcf +Author: Sebastian Schmidt +Date: Wed Jun 17 10:48:41 2020 -0700 + + Update CHANGELOG.md (#3227) + +commit c4b7595935f1c0faa7e83d9ab9b831bcbc434631 +Author: Feiyang +Date: Tue Jun 16 13:30:49 2020 -0700 + + add _removeServiceInstance() to app-exp (#3173) + +commit 95269556cc03087297297f6f8170dccbe174d8b9 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Tue Jun 16 11:23:59 2020 -0700 + + Bump websocket-extensions in /packages/auth/demo/functions (#3180) + + Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4. + - [Release notes](https://github.com/faye/websocket-extensions-node/releases) + - [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md) + - [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4) + + Signed-off-by: dependabot[bot] + + Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> + +commit b677e08bd909c039fd14a5825d3ef8b854d2d8a2 +Author: Sebastian Schmidt +Date: Tue Jun 16 09:27:53 2020 -0700 + + Add Dependency Test (#3204) (#3219) + +commit 05e0c80824f884e204041262e59701877b79d06b +Author: Sebastian Schmidt +Date: Mon Jun 15 19:48:04 2020 -0700 + + Add Converter tests to Lite client (#3199) + +commit 1bc2ccc1fdc4ac5e09521c4da2e7e4b2eee66531 +Author: Sebastian Schmidt +Date: Mon Jun 15 19:14:08 2020 -0700 + + Add equals methods (#3176) + +commit cc198cab95a3c97d10404f2d004343ddd42bc213 +Author: Sebastian Schmidt +Date: Mon Jun 15 17:45:19 2020 -0700 + + Add Query/getQuery (#3175) + +commit 712dfde546a89af6778ab2f6c787bfd47abbd3b4 +Author: Kai Wu +Date: Fri Jun 12 13:14:46 2020 -0700 + + Enable FCM Integration Test (#3145) + + * Enable the FCM integration test (IT) for Chrome. + + Context: the tests were switched off a couple of years ago due to flakiness. It has not been maintained since then. During the time, Some Selenium API methods used were deprecated and removed; the Firebase projects used are no longer managed or owned by the FCM team. Consequently, the test became unfunctional. In the effort of providing safety for the upcoming FCM releases, this PR is created to fix, deflake, refactor and improve the old tests. + + This PR did the following: + - Enabled comprehensive IT for chrome (ver.80). Now we are covering send&foreground recevie for FCM messages (messages with {notification} payload, {data} payload and {notification, data} payload), delete/update token, use default/customized ServiceWorker. + + - Defalaked test. The IT is now reasonably stable without retry. Previously we are retrying 1 or 3 times. + + - Optimized test. Previously we create a webDriver for each test, which is slow and annoying. Because a window is created and brought to focus and killed frequently, it makes working on other tasks and testing nearly impossible (Probably using a headless browser would work but I haven't found a satisfying solution to have the app in the state of foreground and background which is a requirement for FCM functions). With the way the tests are organized, the IT only spin up a new web driver when necessary. Some data on performance: (old) 'test-send' take 74 seconds (only measured 'test-send' because the other test suites were not functional at the time); (now) 'test-send', 'test-deleteToken', 'test-updateToken', 'test-useDefaultServiceWorker', 'test-useValidManifest' takes in total 33s (10 run average). + + - General refactoring. Including refactors on expect blocks, createWebDriver, use const for constants usage, etc. The code should be much easier to understand and maintain. + + Future work: + - Enable test on firefox once I get the notification permission working. + - Run the IC against some milestone chrome/firefox version (if it makes sense) to ensure backward compatibility. We should try to avoid https://github.com/firebase/firebase-js-sdk/issues/2712 . :) + + * [AUTOMATED]: License Headers + + * Enable integration test (IT) for FCM. + + Context: FCM IT were turned off a couple years ago due to flakiness. It became mostly unfunctional as repo structure change overtime. The goal is to fix and enable IT for more confident developement flow and safer releases. + + This CL does the following: + - Fix the IT to be functional again. The IT is derteminated from my experiements (no longer flaky). Therefore, The CL removed the retry mechasim (previously retry 3 times) which makes running IT cheaper and more enjoyable. + + - Include IT for test:change for FCM package: the entire IT test suites is resoanblly fast (from my exeperience 1-3 miutes to complete. As it grows larger, maybe it makes run tests in parallel in Saucelab) + + Futhure work: + - Enable testing for firefox + + * Correct int syntax + + js doesn't allow underscore for int + + * This file wasn't auto-saved + + * Trigger FCM IT + + why dot.env(FCM_SECRETS) are not included in env? + + * Test Secrets can be accessed w/o dotenv + + * Add fcm sercret to workflow + + * Update test-changed.yml + + * test send (background only) + + Because headless chrome doesn't have the concept of foreground and background + + * remove dotenv + + * feed secrest into test:all workflow + + * Update test-all.yml + + * background messaging checking + + * [AUTOMATED]: License Headers + + * rerun + + * added waiting + + * wait + + * Update test-send.js + + * Update test-send.js + + * Examine wrong sercret + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * Update sendMessage.js + + * update fcm project + + * Update package.json + + * Update test-send.js + + * open new tab for backgournd receive + + * removed test-send + + somehow not workingin github workflow? + + * Adding Reties + + * Change timeout limit + + * retry 3 times + + * adjust mocha setting + + * update + + Co-authored-by: Kai Wu + +commit e1df44f42683a70172ee9a9e3c84ba4c7141b946 (origin/web_rxjs) +Merge: 731a69527 3049183cd +Author: Feiyang1 +Date: Thu Jun 11 19:41:27 2020 -0700 + + Merge branch 'release' + 7.15.1 release + +commit 3049183cd3f4a23f30eade23c238751f762c062a (tag: rxfire@3.13.1, tag: firebase@7.15.1, tag: @firebase/testing@0.20.1, tag: @firebase/firestore@1.15.1) +Author: Feiyang1 +Date: Thu Jun 11 14:01:32 2020 -0700 + + Publish firebase@7.15.1 + +commit 731a69527be9145fa5d2dbeee59deb2a76c47b48 +Author: Sebastian Schmidt +Date: Thu Jun 11 13:05:00 2020 -0700 + + Add Firestore ReactNative build (#3198) + +commit 53c04765a631f414e417d0b00e11f7ab2914e50c +Author: Feiyang +Date: Wed Jun 10 16:34:21 2020 -0700 + + upgrade grpc-js to ^1.0.0 (#3202) + +commit 65c05e2c698ab138a98533deab8fe7ad4732a303 +Author: Sebastian Schmidt +Date: Wed Jun 10 14:39:26 2020 -0700 + + Add GPMID header to Firebase Database (#3190) + +commit 02da0f0a38328f527ee1f59d9e343236eefcfcf5 +Author: Christina Holland +Date: Wed Jun 10 13:39:15 2020 -0700 + + Remove empty commit check (#3155) + +commit b9796f5400c308a0d91a1e5268ff6b916a2dff84 +Author: Feiyang +Date: Wed Jun 10 11:57:54 2020 -0700 + + use caret range for tslib to reduce dep fragmentation in user project (#3203) + +commit 1e3721c5045ce7baa8359e06b1009a3a051a3cb8 +Author: Sebastian Schmidt +Date: Mon Jun 8 14:30:51 2020 -0700 + + Add missing changelog for #3184 (#3187) + +commit 59d45d6e4eb1ea00a6984c8c47f06c9b55598706 +Author: Pascal Luther +Date: Mon Jun 8 21:02:57 2020 +0200 + + [fix] Fixed wrong "main" link for firestore/memory (#3182) + +commit 68768d62bf6915e37783e08587ff9b933a8bf1a1 +Author: Sebastian Schmidt +Date: Mon Jun 8 10:33:51 2020 -0700 + + Refetch token if attempt was invalidated (#3184) + +commit b011da84f9a4906093e8b3b4be5eaacc6dde0ead +Author: Sebastian Schmidt +Date: Mon Jun 8 09:43:40 2020 -0700 + + Throw proper error for FieldValue transforms in arrays (#3183) + +commit 6651efd3eed21d39c6079c6b6f31aeccf68bc2ed +Author: Sebastian Schmidt +Date: Mon Jun 8 09:43:11 2020 -0700 + + Make Converter passing explicit (#3171) + +commit 937c59d74f6b795d400493619c59448e6dcdd203 +Author: Sebastian Schmidt +Date: Mon Jun 8 09:27:21 2020 -0700 + + Add (or fix) FieldValue tests for lite client (#3174) + +commit df36a245704ac49c64cb1f3424340cb047007487 +Author: Brian Chen +Date: Sun Jun 7 15:26:47 2020 -0700 + + Check for converter in Query.isEqual() (#3181) + +commit 0fac7bdc9259fe32c6773637354188053cb008b0 +Author: Sebastian Schmidt +Date: Fri Jun 5 10:39:01 2020 -0700 + + Add Transaction (#3153) + +commit 0abf211d6a1098bd3641cf65bc474a5bdbc37d09 +Author: Sebastian Schmidt +Date: Fri Jun 5 09:50:02 2020 -0700 + + Ignore lease refresh failures for single-tab clients (#3163) + +commit 6cd5ed1d1f849a68bcf939f46e1da433d1157290 +Author: Sebastian Schmidt +Date: Fri Jun 5 09:37:08 2020 -0700 + + Add WriteBatch (#3152) + +commit 5cf39ab8cacd5f055d609acf79a859beda1032d3 +Author: Sebastian Schmidt +Date: Thu Jun 4 22:20:35 2020 -0700 + + Add terminate() to Lite SDK (#3157) + +commit e5936013999511483cf129c3029941fb3bd8dc9c +Author: Sebastian Schmidt +Date: Thu Jun 4 21:13:44 2020 -0700 + + Add updateDoc() (#3148) + +commit 27d428673acb88641d593462e90ee1c3247810c5 +Author: Sebastian Schmidt +Date: Thu Jun 4 20:14:36 2020 -0700 + + Add addDoc() (#3141) + +commit 2c66c4e298a6339d2fe71984e318c52775495e09 +Author: Sebastian Schmidt +Date: Thu Jun 4 18:14:16 2020 -0700 + + Add setDoc() (#3139) + +commit 3af49b4b54b4e80d4513f0bbc7dcf809e2b9ebb0 +Author: Sebastian Schmidt +Date: Thu Jun 4 17:39:49 2020 -0700 + + Add deleteDoc() (#3138) + +commit 239bea372c0c5382fdc50feafa9045b4000ac003 +Merge: 94f3c34f7 b96988b0f +Author: Feiyang1 +Date: Thu Jun 4 16:53:47 2020 -0700 + + Merge branch 'release' + Release 7.15.0 + +commit 94f3c34f724144f09ee0a523ec431646e0e45de8 +Author: Sebastian Schmidt +Date: Thu Jun 4 16:46:57 2020 -0700 + + Add getDoc() (#3133) + +commit b96988b0fa1b9786f68f215974ddd1ecd1746ccb (tag: rxfire@3.13.0, tag: firebase@7.15.0, tag: @firebase/util@0.2.48, tag: @firebase/testing@0.20.0, tag: @firebase/storage@0.3.35, tag: @firebase/remote-config@0.1.22, tag: @firebase/performance@0.3.6, tag: @firebase/messaging@0.6.17, tag: @firebase/logger@0.2.5, tag: @firebase/installations@0.4.11, tag: @firebase/functions@0.4.45, tag: @firebase/firestore@1.15.0, tag: @firebase/firestore-types@1.11.0, tag: @firebase/database@0.6.4, tag: @firebase/component@0.1.13, tag: @firebase/app@0.6.5, tag: @firebase/analytics@0.3.6) +Author: Feiyang1 +Date: Thu Jun 4 16:26:44 2020 -0700 + + Publish firebase@7.15.0 + +commit 1b0230ec7b79bcf6e8ea0be74fcb7501251ce364 +Author: Sebastian Schmidt +Date: Thu Jun 4 16:22:27 2020 -0700 + + Add DocumentSnapshot (#3130) + +commit 3c61f243345219d6bbeb173b8e962d854719b6c0 +Author: Sebastian Schmidt +Date: Thu Jun 4 15:33:41 2020 -0700 + + Add CollectionReference (#3125) + +commit 0395a1d2d0a953eaf6824306113cd7fd60117bb2 +Author: Sebastian Schmidt +Date: Wed Jun 3 12:57:16 2020 -0700 + + Add DocumentReference (#3123) + +commit 0e813916418823ecec23d8a5cb74e7f31664bec6 +Author: Sebastian Schmidt +Date: Wed Jun 3 12:56:54 2020 -0700 + + Add setLogLevel() (#3154) + +commit c049186f2665d83c037d21df3496f7c0dcda9192 +Author: Feiyang +Date: Wed Jun 3 12:43:52 2020 -0700 + + add pre script for build:release (#3161) + +commit b0c36b33048cb5d05768c2adeb197c0827c12df4 +Author: Feiyang +Date: Wed Jun 3 11:20:56 2020 -0700 + + Do not build firestore lite in build because it breaks regular release build (#3156) + + * Do not build firestore lite in build because it breaks release build + + * add release build script + +commit 5c41eab666fed6582cd51c77a0f06047be17b459 +Author: Sebastian Schmidt +Date: Tue Jun 2 14:59:05 2020 -0700 + + Take WriteStream offline when IndexedDB is unavailable (#2995) + +commit 2a99addab8e9988c379b58f00cd28b8454b07b40 +Author: Sebastian Schmidt +Date: Tue Jun 2 14:49:09 2020 -0700 + + Transaction/WriteBatch signature fix (#3151) + +commit 5f81ca4a9d52eae541549cd1cf43c673f1052ceb +Author: Sebastian Schmidt +Date: Tue Jun 2 12:37:46 2020 -0700 + + updateDoc()/deleteDoc() signature fix (#3147) + +commit 7453b0e9b4362b3f3f57381b857a983f91534ae2 +Author: Sebastian Schmidt +Date: Mon Jun 1 20:38:34 2020 -0700 + + Add FieldValue methods to the Lite SDK (#3135) + +commit 554786165bf9289db122c5136de446882f4880b9 +Author: Brian Chen +Date: Mon Jun 1 16:52:04 2020 -0700 + + Add `experimentalForceOwningTab` for Web Worker support (#2197) + +commit 31f7afc7eb45f0653e03e6d39e072be145479481 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Mon Jun 1 19:27:07 2020 -0400 + + Warn when stream is closing due to error, not debug. (#3064) + + * Warn when stream is closing due to error, not debug. + + * Add setLogLevel + + * Improvements. + + * Add all levels. + + * Add missing string values for log level + +commit 9b322708c8cccff2887002996a72e20eb690853f +Author: Sebastian Schmidt +Date: Mon Jun 1 09:34:41 2020 -0700 + + Fix addDoc type (#3140) + +commit 1d37aa40618fc8e03fc4724a0be68cf278c3aba8 +Author: Feiyang +Date: Sun May 31 10:50:24 2020 -0700 + + Define _FirebaseService interface (#3112) + +commit d1b81399be8b885fd4b68b0e60e2aa74f8b807e7 +Merge: fa8d5285b 241c84fd8 +Author: Feiyang1 +Date: Fri May 29 17:43:56 2020 -0700 + + Merge branch 'release' + +commit fa8d5285bf891f357afce2ccc4a970ca6586701e +Author: Sebastian Schmidt +Date: Fri May 29 14:37:44 2020 -0700 + + Remove support for lastStreamToken (#3132) + +commit f2dd5c0dab05471cfa865e012fa52f7cb00f282a +Author: Christina Holland +Date: Fri May 29 13:16:05 2020 -0700 + + Fix Saucelabs tests for Firestore unit tests except IE (#3095) + +commit b57d68aa964649ced4e4f732653f2b011cd3db07 +Author: Kai Wu +Date: Fri May 29 13:11:19 2020 -0700 + + Add the FCM secret to applicable CI paths. (#3117) + +commit 241c84fd8a2e61e3900c5e25472d0ab652b016f3 (tag: rxfire@3.12.6, tag: firebase@7.14.6, tag: @firebase/testing@0.19.6, tag: @firebase/performance@0.3.5, tag: @firebase/firestore@1.14.6, tag: @firebase/firestore-types@1.10.3) +Author: Feiyang1 +Date: Fri May 29 10:33:32 2020 -0700 + + Publish firebase@7.14.6 + +commit 6e6dbe21d105ecbf789bde885b68c81faa5273d4 +Author: Sebastian Schmidt +Date: Fri May 29 08:23:20 2020 -0700 + + Add Firestore, initializeFirestore, getFirestore to Firestore lite (#3108) + +commit 0d6f14eb8b80ff4f7f4410fc108db39b3bc2b638 +Author: Sebastian Schmidt +Date: Thu May 28 12:31:11 2020 -0700 + + Run integration/firestore tests for Firestore code changes (#3127) + +commit 7de1a7c11bf282b54160a3a98482790d14f8b24f +Author: Sebastian Schmidt +Date: Thu May 28 11:43:39 2020 -0700 + + Raise an error for enablePersistence() in memory-only build (#3128) + +commit ec1471cf903bedafb56c2f3b4b8cad997966bd3b +Author: Sebastian Schmidt +Date: Thu May 28 10:05:58 2020 -0700 + + Allow shared usage of UserDataReader and UserDataWriter (#3109) + +commit 963fd1fabdaf77bcd0c65b9f00f89314c96bf408 +Author: Sebastian Schmidt +Date: Thu May 28 10:03:06 2020 -0700 + + Add Firestore Tree-Shakeable API (#3118) + +commit b41d0ae101e74a95b864f36994010d34f31fb813 +Author: Sebastian Schmidt +Date: Thu May 28 10:02:47 2020 -0700 + + Remove redundant input validation (#3124) + + Non-empty string is validated right above. + +commit 67adfb2cdae49bc7d8af3014ffa406ef3a499cc6 +Author: Christina Holland +Date: Wed May 27 14:27:39 2020 -0700 + + Make instance logLevel setter able to process string input (#3076) + +commit 24c1ee90f0e49cace434a783625519e9716e8e48 +Author: Sebastian Schmidt +Date: Wed May 27 13:45:16 2020 -0700 + + Allow shared usage of Transaction (#3114) + +commit ef5fb1b9556c2cfab5761427564d55f9a3dcb391 +Author: Sebastian Schmidt +Date: Wed May 27 12:20:20 2020 -0700 + + Address potential IndexedDB failure in synchronizeQueryViewsAndRaiseSnapshots (#3113) + +commit 230cd489a4f903fb36d475adf1da408ccd1c7bff +Merge: ea2fcf555 f562b6358 +Author: Christina Holland +Date: Tue May 26 14:16:40 2020 -0700 + + Merge branch 'release' + Release 7.14.5 + +commit ea2fcf5553c93d8e847dd30589fb94111c41e9a7 +Author: Sebastian Schmidt +Date: Tue May 26 14:05:10 2020 -0700 + + Only run the provided delayed operation early (#3101) + +commit 5ffa43b5ac33a349d11e6537f48eee59832d01e8 +Author: Sebastian Schmidt +Date: Tue May 26 09:56:59 2020 -0700 + + Add Firestore Lite API (#3100) + +commit 4e86d019ba292fe82059697624d69ec90569b816 +Author: Sebastian Schmidt +Date: Thu May 21 16:54:56 2020 -0700 + + Add more Recovery spec tests (#3084) + + * Clean up recovery spec tests + + * Spec tests for updateClientMetadataAndTryBecomePrimary and 'Lookup mutation documents' recovery + + * Feedback + +commit f562b6358ed0ec609940a5a15c1d3565d46dd691 (tag: rxfire@3.12.5, tag: firebase@7.14.5, tag: @firebase/webchannel-wrapper@0.2.41, tag: @firebase/util@0.2.47, tag: @firebase/testing@0.19.5, tag: @firebase/storage@0.3.34, tag: @firebase/storage-types@0.3.12, tag: @firebase/remote-config@0.1.21, tag: @firebase/remote-config-types@0.1.9, tag: @firebase/polyfill@0.3.36, tag: @firebase/performance@0.3.4, tag: @firebase/performance-types@0.0.13, tag: @firebase/messaging@0.6.16, tag: @firebase/messaging-types@0.4.5, tag: @firebase/logger@0.2.4, tag: @firebase/installations@0.4.10, tag: @firebase/installations-types@0.3.4, tag: @firebase/functions@0.4.44, tag: @firebase/functions-types@0.3.17, tag: @firebase/firestore@1.14.5, tag: @firebase/firestore-types@1.10.2, tag: @firebase/database@0.6.3, tag: @firebase/database-types@0.5.1, tag: @firebase/component@0.1.12, tag: @firebase/auth@0.14.6, tag: @firebase/auth-types@0.10.1, tag: @firebase/auth-interop-types@0.1.5, tag: @firebase/app@0.6.4, tag: @firebase/app-types@0.6.1, tag: @firebase/analytics@0.3.5, tag: @firebase/analytics-types@0.3.1, tag: @firebase/analytics-interop-types@0.1.5) +Author: Christina Holland +Date: Thu May 21 14:18:23 2020 -0700 + + Publish firebase@7.14.5 + +commit babdcfdd1854596d954a5848a10f35a93478d14c +Author: Sebastian Schmidt +Date: Thu May 21 10:11:39 2020 -0700 + + Add test for getHighestListenSequenceNumber() recovery (#3083) + +commit 9d87d7020e07f362c7098c00d7197b0d584a1e4e +Author: Sebastian Schmidt +Date: Thu May 21 09:29:50 2020 -0700 + + Clean up recovery spec tests (#3085) + +commit 4a70e17f009ea6ab4949178b64c9bbeb68c88af5 +Author: Sebastian Schmidt +Date: Wed May 20 12:55:17 2020 -0700 + + Add ignoreUndefinedProperties (#3077) + +commit 76726387bd88fac22a85781fe6f9b88ad9459c18 +Author: Visu +Date: Tue May 19 22:38:20 2020 -0700 + + Remove the capability of sending events to clearcut from the Performance SDK. (#3086) + + * Remove the capability of sending events to clearcut from the Performance SDK. This removes the need for fetching the RC configs to decide on the dispatch destination - so that is removed in the settings service and remote config service. + +commit 1dc534a9457f0f87e93e23a1d67091ffdd615106 +Author: Sebastian Schmidt +Date: Tue May 19 16:57:11 2020 -0700 + + IndexedDB recovery for handleUserChange (#3087) + +commit 75ff9b29695e65c0ecf3de64f0498b8e19f9285e +Author: Feiyang +Date: Tue May 19 16:09:25 2020 -0700 + + exclude firebase-exp from the release build (#3091) + +commit 597c0a08557cc8828619845543b1a9c48b5c8cc4 +Author: Brian Chen +Date: Tue May 19 14:28:56 2020 -0700 + + Make removeSanpshotsInSyncListener run on AQ (#3090) + +commit 8bccfa57fa497080213e67d128c4aa0daf0a9866 +Author: Denver Coneybeare +Date: Tue May 19 15:20:14 2020 -0400 + + Enable tests for query rejection (#3088) + +commit 1325b584368ae237f615e419d13dd47955688cac +Author: Christina Holland +Date: Mon May 18 16:39:03 2020 -0700 + + Public typings only swapped on build:exp:release (#3082) + +commit d656e03de05d08939ffde79b5a368870aed94a6d +Merge: 3de5763b7 ef05cf62c +Author: Christina Holland +Date: Mon May 18 12:55:12 2020 -0700 + + Merge branch 'release' + Release 7.14.4 + +commit 3de5763b76d19314db1355072b9e0d9ccea70ccc (origin/bc/test-ci) +Author: Sebastian Schmidt +Date: Mon May 18 11:31:16 2020 -0700 + + IndexedDB recovery for getDocumentFromLocalCache/getDocumentsFromLocalCache (#3041) + + * IndexedDB recovery for waitForPendingWrites() + + * Lint + + * IndexedDB recovert for getDocumentFromLocalCache/getDocumentsFromLocalCache + + * IndexedDB recovery for getDocumentFromLocalCache/getDocumentsFromLocalCache + + * Update after merge + +commit fb9005955420ab854bc585275216ff410a2bdbd7 +Author: Sebastian Schmidt +Date: Mon May 18 10:21:16 2020 -0700 + + IndexedDB recovery for waitForPendingWrites() (#3038) + +commit ac215cf8962a60afde5684b793701ea27a3257b6 +Author: Christina Holland +Date: Fri May 15 14:39:07 2020 -0700 + + Ensure run_changed errors on packages without test script (#3068) + +commit ef05cf62c0aa016554999bdf64d2d9dce542d8cd (tag: rxfire@3.12.4, tag: firebase@7.14.4, tag: @firebase/testing@0.19.4, tag: @firebase/firestore@1.14.4) +Author: Christina Holland +Date: Thu May 14 15:51:22 2020 -0700 + + Publish firebase@7.14.4 + +commit 94ee69a84dde2d8be61dda0c480e50020cec9589 +Author: Sebastian Schmidt +Date: Thu May 14 14:18:16 2020 -0700 + + Add tooling to verify dependency chain (#3033) + +commit ab2e73d6b2611bf76b3b2c52d0074714ef35b157 +Author: Sebastian Schmidt +Date: Thu May 14 12:26:52 2020 -0700 + + Fix CI (#3066) + +commit 0131e1fcade96853997fc04ba1fee0e8d40ed445 +Author: Sebastian Schmidt +Date: Thu May 14 11:44:40 2020 -0700 + + Mass replace Google Inc with Google LLC (#3054) + +commit 2a28a805fd535254f96504ee7d7807f7a4071f89 +Author: Sebastian Schmidt +Date: Thu May 14 10:23:34 2020 -0700 + + Ignore IndexedDB failure during lease refresh (#3020) + +commit 759b8775747537574ae534102d8ff2c91fd23afc +Author: Sebastian Schmidt +Date: Thu May 14 10:22:01 2020 -0700 + + Ignore failures for notifyLocalViewChanges (#3062) + +commit f3f1b173fac2420ec9eaafd2e20bace0f3c80a2d +Author: Sebastian Schmidt +Date: Wed May 13 19:02:40 2020 -0700 + + Use gcEnabled instead of durable persistence (#3061) + +commit 080421788f209390421ed64e1c6da551809c5431 +Author: Feiyang +Date: Wed May 13 16:13:46 2020 -0700 + + add test:ci to polyfill package (#3057) + +commit 20a094f51459e653dfa057394c9ee4c8d0b94fce +Author: Sebastian Schmidt +Date: Wed May 13 15:47:03 2020 -0700 + + Clean up isPrimary (#3058) + +commit 2261bcd0e56a38e14760818c34bf0291a04de320 +Author: Sebastian Schmidt +Date: Wed May 13 15:46:43 2020 -0700 + + Remove erroneous exclusive tag in test (#3059) + +commit 3960fda22add9bde907f83958437a3fceb72ebda +Author: Sebastian Schmidt +Date: Wed May 13 15:11:28 2020 -0700 + + Transition to primary only if IndexedDB ops succeed (#3049) + +commit 8e2fd913626d868c750090dd5db2d07b8cde7a98 +Author: Sebastian Schmidt +Date: Wed May 13 15:07:31 2020 -0700 + + IndexedDB Recovery for Limbo documents (#3039) + +commit 54c7872d3e7860146b1205ea836640a8992ce7e5 +Author: Feiyang +Date: Wed May 13 12:57:22 2020 -0700 + + add test:ci script to all packages (#3056) + +commit 425dfb1c958cfde4473e260c95a4b3ee0b6f758a +Author: Sebastian Schmidt +Date: Wed May 13 11:35:52 2020 -0700 + + Allow failing of individual transactions (#3052) + +commit 7513890dce856c5a0571737c06937c50b688fbad +Author: Fred Zhang +Date: Tue May 12 18:34:15 2020 -0700 + + RTDB accepts multi region URL (#3050) + +commit 094074cceab5c5119487e082e142e0a6e377d033 +Author: Sebastian Schmidt +Date: Tue May 12 18:02:55 2020 -0700 + + Fix regression for merge with increment (#3048) + +commit 74621b7ec32976df4b2ce552c35c386b29441b2e +Author: Sebastian Schmidt +Date: Mon May 11 22:49:23 2020 -0700 + + Make notifyLocalViewChanges idempotent (#3044) + +commit a57dac5a5f0858abaaed66ccc3808b33184a2c6e +Merge: 141a6161e 165a898bd +Author: Feiyang1 +Date: Thu May 7 18:05:12 2020 -0700 + + Merge branch 'release' + 7.14.3 release + +commit 141a6161e4d6abf3b9a47f94ac159a09344689b6 +Author: Sebastian Schmidt +Date: Thu May 7 17:54:16 2020 -0700 + + Run prettier (#3036) + +commit 165a898bd81a11631cdfde49b8f6824ab38588a3 (tag: rxfire@3.12.3, tag: firebase@7.14.3, tag: @firebase/webchannel-wrapper@0.2.40, tag: @firebase/util@0.2.46, tag: @firebase/testing@0.19.3, tag: @firebase/storage@0.3.33, tag: @firebase/remote-config@0.1.20, tag: @firebase/polyfill@0.3.35, tag: @firebase/performance@0.3.3, tag: @firebase/messaging@0.6.15, tag: @firebase/logger@0.2.3, tag: @firebase/installations@0.4.9, tag: @firebase/functions@0.4.43, tag: @firebase/firestore@1.14.3, tag: @firebase/database@0.6.2, tag: @firebase/component@0.1.11, tag: @firebase/auth@0.14.5, tag: @firebase/app@0.6.3, tag: @firebase/analytics@0.3.4) +Author: Feiyang1 +Date: Thu May 7 16:59:40 2020 -0700 + + Publish firebase@7.14.3 + +commit 1753148d2de7eb1025c4324b27c3d738361ca65f +Author: Christina Holland +Date: Thu May 7 15:36:27 2020 -0700 + + Move prepush scripts to precommit (#3026) + +commit f30de15f86d39cac40845222d15abc3db06326dc +Author: Sebastian Schmidt +Date: Thu May 7 15:09:12 2020 -0700 + + Remove unused remoteDocumentKeys() (#3035) + +commit f9c6ddec0c272a618d2e8f5bf98c5189c6a52233 +Author: Sebastian Schmidt +Date: Thu May 7 14:19:28 2020 -0700 + + Take WatchStream offline when IndexedDB is unavailable (#3010) + +commit 631a0ec5982b36382a96c15be9916bf29f98a01f +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Thu May 7 13:43:57 2020 -0400 + + Reland "Use crypo RNG for auto ID generation to reduce conflicts (#2764)" (#3012) + +commit 8143c836f01c08d77fb602f1c00f9642231fcef3 +Author: Feiyang +Date: Wed May 6 16:15:56 2020 -0700 + + Point to the internal typing file in app-exp's package.json (#3030) + + * point to the internal typing file + + * Remove api report from prepush + + * remove stale code + +commit 575b3fe82d75697824232be870754c776f3e1107 +Author: Sebastian Schmidt +Date: Wed May 6 09:15:12 2020 -0700 + + Remove dependency on valueCompare from Document (#3024) + +commit e67affba53a53d28492587b2f60521a00166db60 +Author: Sebastian Schmidt +Date: Wed May 6 09:14:01 2020 -0700 + + Remove static references to API types (#3023) + + The pattern in api/database.ts breaks tree-shaking since it instatiates static references to all public API types. I moved this code to platform/config.ts which is used to register the non Tree-Shakeable API + +commit 88778032d9f173f69c759be9daa5db6bef8bcbbb +Author: Sebastian Schmidt +Date: Tue May 5 22:07:06 2020 -0700 + + Add invokeRunQueryRpc() (#3025) + +commit fd12d771934596fc8cf07a78813ce44290aab980 +Author: Konstantin Varlamov +Date: Tue May 5 19:12:01 2020 -0400 + + Fix `GeoPoint` field values with a zero coordinate failing input validation (#3018) + + Fix the regression introduced in #2784: a `GeoPoint` where at least one of the coordinates is zero doesn't marshal properly. This is because zeroes happen to be serialized as `undefined` (presumably because protos normally treat zero values and the absence of a value interchangeably) which then fails the strict input validation in `GeoPoint`. + + Fixes #3006. + +commit 76ba2ea360b1e225708a7f88f7a2a9db7521c822 +Author: Sebastian Schmidt +Date: Tue May 5 13:23:13 2020 -0700 + + Ignore IndexedDB failures during garbage collection (#3015) + +commit 3ccd70a694be561ebb2ec0bdb7b4f21fc4c40e34 +Author: Sebastian Schmidt +Date: Tue May 5 11:51:45 2020 -0700 + + Remove ObjectValue.EMPTY (#3022) + + Remove a dangling static reference. + +commit da3582bb1fb2c3b4c95c86433387d4ad254f08ce +Author: Sebastian Schmidt +Date: Mon May 4 16:15:31 2020 -0700 + + Update SourceMaps during transform (#3011) + +commit 39013c9e70d43f7d540b61ebf97e7bad4ebe262e +Author: WhiteSource Renovate +Date: Tue May 5 01:08:28 2020 +0200 + + Update all non-major dependencies (#2768) + +commit df44d12e34eaa3719834c15e30f8ee5ee9dcf8bb +Author: Denver Coneybeare +Date: Mon May 4 12:48:35 2020 -0400 + + Add an integration test for calling clearPersistence() on a new Firestore instance (#3005) + +commit 9f7b7df7d4b668d311c6685fb3c9cdb4376d6050 +Author: Denver Coneybeare +Date: Fri May 1 20:05:24 2020 -0400 + + Update command to run the Firestore emulator (#2998) + +commit 96cd91dd7825f845ce860ffb98703dc48716b81b +Author: Sebastian Schmidt +Date: Fri May 1 15:58:21 2020 -0700 + + Untangle FieldValues (#3001) + +commit ba5a37ce1290215a5fc6cff248d8e1057aec181d +Author: Christina Holland +Date: Fri May 1 15:20:54 2020 -0700 + + Migrate webchannel-wrapper to gulp + google-closure-compiler (#2891) + +commit ff533874dd7d36b46ae6a818ae974a77feb737e5 +Author: Shelley Cincotta <48364688+shelcindra@users.noreply.github.com> +Date: Fri May 1 16:02:38 2020 -0400 + + Clean up rxfire API documentation (#2584) + + * Fixed markdown so parameters are visible in displayed tables for each function. + + * Updated function descriptions. + + * Updated examples. + +commit 174521a5bc5e038378fdfb628dfc3c76f7f0e9e5 +Author: Sebastian Schmidt +Date: Fri May 1 12:52:53 2020 -0700 + + Don't crash if Target cannot be persisted (#2944) + +commit e03614c791efbe2d414c77639d24db51a7a66b9b +Author: Sebastian Schmidt +Date: Thu Apr 30 18:24:32 2020 -0700 + + Drop SortedSet from FieldMask (#2999) + +commit a6e9d5b470fc52eec29a36ab37073d334e1f2dd5 +Author: Feiyang1 +Date: Wed Apr 29 14:23:52 2020 -0700 + + Revert "Publish" + + This reverts commit 7e7d9a4dd6c5b60a4a2d358c3902c3129edc30aa. + +commit 7e7d9a4dd6c5b60a4a2d358c3902c3129edc30aa +Author: Feiyang1 +Date: Wed Apr 29 14:21:43 2020 -0700 + + Publish + + - firebase-browserify-test@0.2.2 + - firebase-package-typings-test@0.2.2 + - firebase-firestore-integration-test@1.0.2 + - firebase-messaging-selenium-test@0.2.2 + - firebase-typescript-test@0.2.2 + - firebase-webpack-test@0.2.2 + - @firebase/app-exp@0.0.801 + - @firebase/app-types-exp@0.0.801 + - firebase-exp@0.800.2 + - @firebase/analytics-interop-types@0.1.5 + - @firebase/analytics-types@0.3.1 + - @firebase/analytics@0.3.4 + - @firebase/app-types@0.6.1 + - @firebase/app@0.6.3 + - @firebase/auth-interop-types@0.1.5 + - @firebase/auth-types@0.10.1 + - @firebase/auth@0.14.5 + - @firebase/component@0.1.11 + - @firebase/database-types@0.5.1 + - @firebase/database@0.6.2 + - firebase@7.14.3 + - @firebase/firestore-types@1.10.2 + - @firebase/firestore@1.14.3 + - @firebase/functions-types@0.3.17 + - @firebase/functions@0.4.43 + - @firebase/installations-types@0.3.4 + - @firebase/installations@0.4.9 + - @firebase/logger@0.2.3 + - @firebase/messaging-types@0.4.5 + - @firebase/messaging@0.6.15 + - @firebase/performance-types@0.0.13 + - @firebase/performance@0.3.3 + - @firebase/polyfill@0.3.35 + - @firebase/remote-config-types@0.1.9 + - @firebase/remote-config@0.1.20 + - rxfire@3.12.3 + - @firebase/storage-types@0.3.12 + - @firebase/storage@0.3.33 + - @firebase/template-types@0.1.1 + - @firebase/template@0.1.1 + - @firebase/testing@0.19.3 + - @firebase/util@0.2.46 + - @firebase/webchannel-wrapper@0.2.40 + +commit 04d4f9720686653fa68a07370df90e5ccbff79b1 +Author: Feiyang +Date: Mon Apr 27 12:17:14 2020 -0700 + + Hide messages from build tools and test runners for passed packages (#2988) + + * Hide messages from build tools and test runners for passed packages + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * [AUTOMATED]: API Reports + + * revert + + * rename variable + +commit ccb9bf9da01844fb2bcf77c23f9851e721fd79d1 +Author: Sebastian Schmidt +Date: Mon Apr 27 10:16:47 2020 -0700 + + Check for addEventListener() before calling (#2994) + +commit be5bb4b2feada916bfa22c041faf03d033eac207 +Author: Sebastian Schmidt +Date: Mon Apr 27 09:34:36 2020 -0700 + + Rename field_value.ts to object_value.ts (#2987) + +commit 8c369580e0dc90ddb4206ae8a04f4d97d59b40bc +Author: Sebastian Schmidt +Date: Fri Apr 24 15:44:18 2020 -0700 + + Untangle Datastore (#2971) + +commit d92d67b2f07f7370f17594e932c9c82788201fb7 +Author: Feiyang +Date: Fri Apr 24 11:18:10 2020 -0700 + + Hide passed tests in CI (#2980) + + * 1. Update mocha config file format 2. hide passed tests in CI + + * prettier + + * update mocha node config file name + + * test + + * use stricter regex, otherwise it matches mocha.browser.opts + + * [AUTOMATED]: License Headers + +commit 74870c7a3832ec0c1e6f93e4d45e9d0a3180dfb3 +Author: Feiyang +Date: Thu Apr 23 17:01:29 2020 -0700 + + Revert "[AUTOMATED]: API Reports" (#2978) + + This reverts commit 5d25a623037576888ad9d2586ece4440e9bba65a. + +commit 5d25a623037576888ad9d2586ece4440e9bba65a +Author: Feiyang1 +Date: Thu Apr 23 16:33:44 2020 -0700 + + [AUTOMATED]: API Reports + +commit ed945750f96acb1f8605da9abd114c16f75d0c05 +Merge: fe4971f15 80a31c4e0 +Author: Feiyang1 +Date: Thu Apr 23 16:33:23 2020 -0700 + + Merge branch 'release' + 7.14.2 release + +commit 80a31c4e0d3568ee6ddae2a92082dd51a926f53b (tag: rxfire@3.12.2, tag: firebase@7.14.2, tag: @firebase/testing@0.19.2, tag: @firebase/performance@0.3.2, tag: @firebase/messaging@0.6.14, tag: @firebase/functions@0.4.42, tag: @firebase/firestore@1.14.2, tag: @firebase/auth@0.14.4) +Author: Feiyang1 +Date: Thu Apr 23 16:12:34 2020 -0700 + + Publish firebase@7.14.2 + +commit fe4971f159260f1dec824b590f77d045e74d0187 +Author: Christina Holland +Date: Thu Apr 23 15:02:11 2020 -0700 + + Remove objectHashIgnoreUnknownHack (#2977) + +commit 1ae13d1f57306e479d5db5ceda9309856fd32c5d +Author: Sebastian Schmidt +Date: Thu Apr 23 10:54:21 2020 -0700 + + Untangle ObjectValue and ObjectValueBuilder (#2970) + +commit 4ad573326dc676bf934b5b21461e17fb5a89068e +Author: Sebastian Schmidt +Date: Thu Apr 23 10:28:16 2020 -0700 + + Remove "cyclic" references (#2969) + +commit ce070106449edf43311bb5b190a4ac077dbcc6b7 +Author: Sebastian Schmidt +Date: Thu Apr 23 10:11:11 2020 -0700 + + Move code to spec_test_components (#2974) + +commit 16938c0e1becebcff8bcfa30ba5322dd2a23a62f +Author: Feiyang +Date: Wed Apr 22 12:17:43 2020 -0700 + + Add docs for exp packages (#2964) + +commit a98a76648f0683e86d6b1f0ee89b3d5548c30677 +Author: Jon Preece <63354526+jonpreececm@users.noreply.github.com> +Date: Wed Apr 22 17:34:03 2020 +0100 + + Fix Apple popup window window (#2966) + +commit f23120e52ae148a5ca74f980d9eb06c9eadde2f9 +Author: Feiyang1 +Date: Tue Apr 21 16:51:31 2020 -0700 + + Publish firebase@exp 0.800.1 + +commit 9acd35f6f983f576cd02e0ddd4093052d8041b83 +Merge: 31fc269c6 c3a425043 +Author: Christina Holland +Date: Tue Apr 21 14:47:26 2020 -0700 + + Merge branch 'release' + Release 7.14.1 + +commit 31fc269c6988150005d8e63d5502d70733d3f98b +Author: Feiyang +Date: Tue Apr 21 12:01:03 2020 -0700 + + do not generate api reports for the release build (#2958) + +commit 18fb16b74ed0e6b4e3a2b379a11fb07d6ab654e0 +Author: Nicolas Delperdange +Date: Tue Apr 21 19:34:17 2020 +0200 + + feat(sw-controller): compare host instead of href for getWindowClient (#2772) + +commit 5a60243bf264967819fc5c3897892084c5eb4d43 +Author: Sebastian Schmidt +Date: Mon Apr 20 19:42:50 2020 -0700 + + Factor out Multi-Tab code (#2882) + +commit a36b51b4897ffa68df0921ef4ac5e7164cb97eda +Author: Sebastian Schmidt +Date: Mon Apr 20 18:28:04 2020 -0700 + + Don't crash if write cannot be persisted (#2938) + +commit 0601283c9948681798eecb759f4990e549d2e157 +Author: Christina Holland +Date: Mon Apr 20 17:22:07 2020 -0700 + + Restore accidentally removed return statement. (#2950) + +commit 6cfb268e1bddcc2866a176945ec1d8e1ff9f9831 +Author: Sebastian Schmidt +Date: Mon Apr 20 16:57:00 2020 -0700 + + Make 'handleClientStateEvent()/handleQueryTargetEvent()' idempotent (#2916) + +commit ed9a7be7d5f65aa37c0c478021b15bd18166a515 +Author: Feiyang +Date: Mon Apr 20 16:01:16 2020 -0700 + + Use hash versions to publish exp packages (#2933) + + * use sha version instead of semver + + * make firebase-exp private + + * Publish firebase@exp 0.800.1 + + * bump umbrella package version only + + * Publish firebase@exp 0.800.2 + + * restore package json + + * change prepare to use build:release + + * bump version correctly. + + * fix function name + + * [AUTOMATED]: Prettier Code Styling + + * update dep versions + + * correct typo + + * revert changes for debugging + +commit d7c9ed4044acc962c098701d094d722e17d6360f +Author: Sebastian Schmidt +Date: Mon Apr 20 15:08:38 2020 -0700 + + Only retry DOMException/DOMError (#2919) + +commit fc3d53963748aa0e0193336e3faefe16da885729 +Author: Sebastian Schmidt +Date: Mon Apr 20 14:42:01 2020 -0700 + + Strip messages for fail() and hardAssert() (#2931) + +commit 98c252343506b431bce8c8dd8f2c3abec1e3fab1 +Author: Feiyang +Date: Mon Apr 20 13:58:45 2020 -0700 + + Make @firebase/app-next have single entry point (#2937) + + * change to single entry point + + * point to the public d.ts file in release build + + * prefix _ for internal APIs + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + +commit 7396d48d16d064bf4f99ba1e56a2e4eda8a4bd23 +Author: Sebastian Schmidt +Date: Mon Apr 20 12:40:09 2020 -0700 + + Don't include GRPC in browser build (#2935) + +commit 1562bb71258d3da1663a9d92b54e0f927887b746 +Author: Sebastian Schmidt +Date: Mon Apr 20 12:39:51 2020 -0700 + + Remove Platform.useProto3Json flag (#2866) + +commit b107e0405a8406eee9c414877453d9a94d140931 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Mon Apr 20 13:58:06 2020 -0400 + + Remove an assert and replace it with call to updateTrackedLimbos (#2893) + +commit 507da7ab3267333f9ef99254946f8ec1e294e6d4 +Author: Sebastian Schmidt +Date: Mon Apr 20 10:57:56 2020 -0700 + + Discourage use of 'window' and 'document' (#2874) + +commit 537350ee6a9db28c34e9c601270211a70b59a609 +Author: Feiyang +Date: Fri Apr 17 14:45:54 2020 -0700 + + Add the umbrella firebase package for modular packages (#2927) + + * add firebase-exp + + * add rollup config for generating CDN scripts + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * [AUTOMATED]: API Reports + + * remove old files + + * make release rollup config for firebase package + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: API Reports + + * add a CDN entry point, so we can collect its usage + + * [AUTOMATED]: License Headers + + * fix the transformer + + * [AUTOMATED]: Prettier Code Styling + +commit c3a4250437395924883eac478a2d385585a2c7d8 (tag: rxfire@3.12.1, tag: firebase@7.14.1, tag: @firebase/webchannel-wrapper@0.2.39, tag: @firebase/util@0.2.45, tag: @firebase/testing@0.19.1, tag: @firebase/storage@0.3.32, tag: @firebase/remote-config@0.1.19, tag: @firebase/polyfill@0.3.34, tag: @firebase/performance@0.3.1, tag: @firebase/messaging@0.6.13, tag: @firebase/logger@0.2.2, tag: @firebase/installations@0.4.8, tag: @firebase/functions@0.4.41, tag: @firebase/firestore@1.14.1, tag: @firebase/database@0.6.1, tag: @firebase/component@0.1.10, tag: @firebase/auth@0.14.3, tag: @firebase/app@0.6.2, tag: @firebase/analytics@0.3.3) +Author: Christina Holland +Date: Thu Apr 16 13:46:17 2020 -0700 + + Publish firebase@7.14.1 + +commit c3f34dce10f8270c8df831fe532109b4275185ed +Author: Christina Holland +Date: Thu Apr 16 12:06:34 2020 -0700 + + Add more messages to prettier prepush to help diagnose intermittent problems (#2909) + +commit 294bed4821204fbcc716ea32720f57665f866d4e +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Thu Apr 16 10:31:13 2020 -0700 + + Bump https-proxy-agent in /packages/auth/demo/functions (#2921) + + Bumps [https-proxy-agent](https://github.com/TooTallNate/node-https-proxy-agent) from 2.2.2 to 2.2.4. + - [Release notes](https://github.com/TooTallNate/node-https-proxy-agent/releases) + - [Commits](https://github.com/TooTallNate/node-https-proxy-agent/compare/2.2.2...2.2.4) + + Signed-off-by: dependabot[bot] + + Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> + +commit 77cb183802c683cd8b01cb27e5bf4bdd41e10f36 +Author: James Liu <37026441+zijianjoy@users.noreply.github.com> +Date: Wed Apr 15 14:57:02 2020 -0700 + + Update changelog for Performance Monitoring v0.3.0 release (#2900) + +commit a82af58bc2dc0bef7acb35845f161c3189b4b4ee +Author: Sebastian Schmidt +Date: Wed Apr 15 14:45:13 2020 -0700 + + Retry WebStorage operations (#2879) + +commit daf63c2cbee8971fbd583e5344f254ceed36a87a +Author: Christina Holland +Date: Wed Apr 15 12:10:07 2020 -0700 + + Update minor dependencies (#2914) + +commit afa7bf93f925d3affa5ec2747e2b85a3c9ade928 +Author: Feiyang +Date: Wed Apr 15 12:06:57 2020 -0700 + + Add Kai to messaging owners (#2913) + +commit 211931086537f6dc3b4c15de43df27e480a52b25 +Author: Sebastian Schmidt +Date: Wed Apr 15 10:34:21 2020 -0700 + + Prefix list results with correct bucket (#2905) + +commit 92aa3852a536dcc1333d189be0606d2571a2609c +Author: WhiteSource Renovate +Date: Wed Apr 15 03:27:37 2020 +0200 + + Update dependency @types/sinon to v9 (#2862) + +commit d61625f139405e532171ad77e54e03e334de64bb +Author: WhiteSource Renovate +Date: Wed Apr 15 03:22:57 2020 +0200 + + Update dependency indexeddbshim to v6 (#2443) + +commit bbb3433134bdf6b7962c246f19f5da2eb3fcc9cd +Author: WhiteSource Renovate +Date: Wed Apr 15 02:30:35 2020 +0200 + + Update dependency mkdirp to v1 (#2583) + + Co-authored-by: Christina Holland + +commit f0a0dc96e3247bc5ea623ec4e560e2f17dbccebe +Author: bojeil-google +Date: Tue Apr 14 15:04:04 2020 -0700 + + Worker persistence (#2907) + + * Fixes ability to set Auth LOCAL persistence explicitly in a worker environment. + +commit ce41a64233484e21c1f5130acf323d4bc5369c3e +Author: Feiyang +Date: Tue Apr 14 14:53:35 2020 -0700 + + Release scripts for exp packages (#2887) + + * update script name + + * produce build artifacts without -exp in package names + + * Script to release exp pkgs experimentally + + * save progress + + * reset workingtree + + * testing + + * update prepare scripts + + * save + + * save + + * update + + * await promise + + * make npm publishing nicer + + * await promise + + * correct variable name + + * implement commitandpush + + * add missing import + + * Publish firebase@exp + + * fix variable name + + * Publish firebase@exp + + * revert versions + + * add comments + + * add comment + + * more comments + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * fix typo + + * remove --dry-run flag + +commit 7f69b704292e6008c72c9c14c2bb0b84a12e9963 +Author: Feiyang +Date: Mon Apr 13 14:40:50 2020 -0700 + + Update @firebase/template to move tests next to source files (#2875) + + * update template to make tests next to source files + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + +commit 0cad04b7738e8c20a5ad612ddddaaf548a85e291 +Merge: bc39eb5b0 e920d0529 +Author: Feiyang1 +Date: Thu Apr 9 16:37:19 2020 -0700 + + Merge branch 'release' + 7.14.0 release + +commit e920d0529733c58b4afe1995ae0c14aaad3bfacb (tag: rxfire@3.12.0, tag: firebase@7.14.0, tag: @firebase/testing@0.19.0, tag: @firebase/performance@0.3.0, tag: @firebase/messaging@0.6.12, tag: @firebase/functions@0.4.40, tag: @firebase/firestore@1.14.0, tag: @firebase/database@0.6.0, tag: @firebase/database-types@0.5.0, tag: @firebase/analytics@0.3.2) +Author: Feiyang1 +Date: Thu Apr 9 15:58:13 2020 -0700 + + Publish firebase@7.14.0 + +commit bc39eb5b0022890cf8678438e071a224fe4bf5d4 +Author: Brian Chen +Date: Thu Apr 9 15:44:59 2020 -0700 + + Fix flaky transaction tests (#2888) + +commit ce3addba62dedf867844d7b2aca5f1db3313759a +Author: Sebastian Schmidt +Date: Thu Apr 9 14:29:16 2020 -0700 + + ComponentProvider v2 (#2889) + +commit 7e63eb521ec2e9aea05d0ff453cf2a6b158de87a +Author: Feiyang +Date: Thu Apr 9 10:55:09 2020 -0700 + + update yarn lock (#2885) + +commit 7fa3d037dc3ee424ee361e39ff47a6d765a1b61a +Author: Christina Holland +Date: Thu Apr 9 09:58:03 2020 -0700 + + Fix Messaging test that fails in Firefox (#2883) + +commit 541dae2cd5d6da70af8d747174006985e9a16db9 +Author: Denver Coneybeare +Date: Wed Apr 8 17:52:22 2020 -0400 + + Add CHANGELOG.md entry for reverting the usage of 'crypto' (#2873) + +commit e90ba0bbf7f6057c40cf38726ca3e938ea3c34e1 +Author: Feiyang +Date: Wed Apr 8 12:58:54 2020 -0700 + + fix broken imports (#2884) + + * fix broken import + + * [AUTOMATED]: License Headers + +commit d689b75f532f1a54b418317d8306a5377ba35570 +Author: James Liu <37026441+zijianjoy@users.noreply.github.com> +Date: Wed Apr 8 10:54:05 2020 -0700 + + Ability to switch performance event traffic to FL transport endpoint (#2593) + + * Implement API call to FL transport endpoint for dispatching Performance Monitoring events. + * Fetch Remote Config to dynamically update transport endpoint Key. + * Fetch Remote Config to get rollout percentage to cc/fl transport endpoint. + +commit 9bc4167d5895099ff60fd75d462cbb0d9fd8429e +Author: Sebastian Schmidt +Date: Wed Apr 8 08:52:10 2020 -0700 + + Remove asserts (#2814) + +commit a789d74b895a858e8d3a66a9da1732efbadd6ced +Author: Sebastian Schmidt +Date: Tue Apr 7 17:28:43 2020 -0700 + + Differentiate between hardAsserts and debugAsserts (#2859) + +commit 6a4c00f8817d0b8161e81e36e9872987c7dbbbfd +Author: Sebastian Schmidt +Date: Tue Apr 7 16:20:26 2020 -0700 + + Add ComponentProvider (#2828) + +commit 705e9f9a70708107fe24e21203e11363bf76e401 +Author: Sebastian Schmidt +Date: Tue Apr 7 09:43:51 2020 -0700 + + Make ServerValue.increment() public (#2852) + +commit b8cf437d95364c46e51e2e5ba076a8bb31d5e03e +Author: Denver Coneybeare +Date: Tue Apr 7 11:41:05 2020 -0400 + + Remove 'no-android' tags from spec tests for limbo resolution throttling. (#2876) + +commit 027a783186832b865757e3340fae41243078db92 +Author: Sebastian Schmidt +Date: Mon Apr 6 14:11:49 2020 -0700 + + Actually fix resume token debugging in spec tests (#2877) + +commit 5a637389a14c2c6f5f6dd0594df8c73619db87ee +Author: Sebastian Schmidt +Date: Mon Apr 6 12:21:19 2020 -0700 + + Drop Node 6 / Replace grpc w/ @grpc/grpc-js (#2856) + +commit 7766278648eadbc38b04a558c567dd2cbfef1d2e +Author: Denver Coneybeare +Date: Mon Apr 6 14:35:23 2020 -0400 + + Revert: Use crypo RNG for auto ID generation to reduce conflicts (#2872) + +commit fd7fbd7518593e6615b9ed234eb98c720e56f507 +Author: Sebastian Schmidt +Date: Mon Apr 6 11:11:48 2020 -0700 + + Remove error messages for deprecated APIs (#2857) + +commit 5b90965ee9f39cb38cdf3cb4f28955720dfe1352 +Author: Denver Coneybeare +Date: Mon Apr 6 09:18:33 2020 -0400 + + Update CHANGELOG.md to mention limbo resolution throttling (#2864) + +commit ec5ca2e1af97a7140c82c2f9114ef554683f943c +Author: Feiyang +Date: Fri Apr 3 18:37:39 2020 -0700 + + set up docgen and api review for packages-exp (#2868) + + * set up doc gen tools + + * save progress + + * fix tsdocs + + * create docs without -exp in package name + + * enable api-report in app-types-exp + + * set up doc and api review pipeline + + * prepend underscore to internal only symbols + + * remove api review + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * fix prepush hook + + * add api report for app-types + + * manually change the report file for testing + + * [AUTOMATED]: API Reports + + * centralize api review location + + * rename docgen script + + * enable json with comment in github + +commit 60c8b89c096aec816ecd9c3bee8b597e581577bb +Author: Sebastian Schmidt +Date: Fri Apr 3 16:10:46 2020 -0700 + + Fix logDebug log level (#2867) + +commit 437c4041d9fd9f8c06347d6231aaee755ff5f96d +Author: Christina Holland +Date: Fri Apr 3 11:33:41 2020 -0700 + + Fix broken CI (#2865) + +commit 0f6146d8bc232d78161240827e98e53549808f28 +Author: Denver Coneybeare +Date: Thu Apr 2 22:37:42 2020 -0400 + + Generate stable JSON from generate_spec_json.js (#2843) + + * Generate stable JSON from generate_spec_json.js + + * [AUTOMATED]: License Headers + + * Address code review feedback, round 1. + + * Pin versions of json-stable-stringify in package.json to a specific version + +commit d69f79cd56aaa6e6cbdf938f66104ed19d677b50 +Author: Sebastian Schmidt +Date: Thu Apr 2 16:36:21 2020 -0700 + + Remove TargetIdGenerator (#2818) + +commit 7199846cecc383589e7ca6b2c80595116ef58982 +Merge: 7b17e03bd baa233dec +Author: Christina Holland +Date: Thu Apr 2 16:33:10 2020 -0700 + + Merge branch 'release' + 7.13.2 release + +commit baa233decdeb491a677263c6d6f094e716e990e9 (tag: rxfire@3.11.2, tag: firebase@7.13.2, tag: @firebase/util@0.2.44, tag: @firebase/testing@0.18.2, tag: @firebase/storage@0.3.31, tag: @firebase/remote-config@0.1.18, tag: @firebase/performance@0.2.37, tag: @firebase/messaging@0.6.11, tag: @firebase/logger@0.2.1, tag: @firebase/installations@0.4.7, tag: @firebase/functions@0.4.39, tag: @firebase/firestore@1.13.1, tag: @firebase/database@0.5.25, tag: @firebase/component@0.1.9, tag: @firebase/auth@0.14.2, tag: @firebase/app@0.6.1, tag: @firebase/analytics@0.3.1) +Author: Christina Holland +Date: Thu Apr 2 14:38:46 2020 -0700 + + Publish firebase@7.13.2 + +commit 7b17e03bd3fd8b0054802235bf3781f734b4e1c5 +Author: Christina Holland +Date: Thu Apr 2 10:54:12 2020 -0700 + + Fix Saucelabs tests in analytics and functions (#2845) + +commit e0629330c71f7468fdf7a0d31bc0fae7b1ab4524 +Author: Sebastian Schmidt +Date: Wed Apr 1 16:26:29 2020 -0700 + + Pre-process all ES5 builds (#2840) + +commit d9b599faa72fcd0c0e18b74abb8ad6979a340323 +Author: Andreas Rayo Kniep +Date: Wed Apr 1 09:49:26 2020 -0700 + + Added mandatory FirebaseOptions fo JavaDoc example. (#2778) + + * Added mandatory FirebaseOptions fo JavaDoc example. + + * added missing commas + + * Addressed comments + + Fixed platform of App ID example: "android" -> "web". + Added mandatory Firebase options to example of secondary FirebaseApp. + +commit ad406d2b9e2ce8381465ac0695c2b8f969870edd +Author: Brian Chen +Date: Wed Apr 1 09:05:59 2020 -0700 + + Only iterate across active targets in WatchChangeAggregator (#2847) + +commit 60116ca56b0e9c21ce2387c1ccb61565801ca724 +Author: Feiyang +Date: Tue Mar 31 16:00:24 2020 -0700 + + @firebase/app modularization exp (#2836) + + * init app-exp + + * add new packages + + * remove pkg + + * fix import paths + + * make tests pass again + + * move exp packages to packages-exp folder + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * drop node in file name + + * remove compat code + + * add documentation + + * add internal submodule + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * update run_changed script to account for packages-exp folder + + * fix test + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * fix lerna version + + * Implement client logging + + * [AUTOMATED]: Prettier Code Styling + + * fix small things + + * update readme + +commit e4b610d9cc30e41157db7f1f2d838c99e59d2585 +Author: Sebastian Schmidt +Date: Tue Mar 31 15:19:20 2020 -0700 + + Remove unused code (#2817) + +commit aab78f9dfbf2138cf4c1d8dd8bae102b7a5bd0b1 +Author: Kai Wu +Date: Tue Mar 31 14:36:41 2020 -0700 + + Create FCM's CHANGELOG.md with a release note. (#2837) + + * Create FCM's CHANGELOG.md with a release note. + + This RN is meant for the release scheduled on 2020-04-02. + The fix will addresses the issues in https://github.com/firebase/firebase-js-sdk/issues/2712 + + * Update CHANGELOG.md + + Improves wording on Eric's feedback. Thansk Eric + + * Update CHANGELOG.md + + Fix a type + + Co-authored-by: Kai Wu + +commit 8e70e4a0a593bb366da46f3d181cbbd0734b53ee +Author: Sebastian Schmidt +Date: Tue Mar 31 12:26:10 2020 -0700 + + Remove namespace import for objUtils (#2807) + +commit 50de3fb13ca9f3e0462c5770001195f30a20eae7 +Author: Sebastian Schmidt +Date: Mon Mar 30 16:01:22 2020 -0700 + + Use @firebase/firestore/memory for Memory-build (#2834) + +commit 5f58722451d70eaa99480f94599a5346a7eba3a6 +Author: Sebastian Schmidt +Date: Mon Mar 30 15:23:29 2020 -0700 + + Update rollup.config.js (#2830) + +commit 6cff2f4e344572578230fbc8117c4431ea1e2210 +Author: Sebastian Schmidt +Date: Mon Mar 30 13:40:58 2020 -0700 + + Move test code to test helpers (#2813) + +commit 1f16cdbca0368a54eb7932b58f3f752ab226e4fe +Author: Denver Coneybeare +Date: Mon Mar 30 16:24:17 2020 -0400 + + Call PlatformSupport.setPlatform() in generate_spec_json.js (#2833) + +commit 111a4d0f2aae2f3d7d7bf4d90c26a980aa40d20e +Author: Thomas Bouldin +Date: Mon Mar 30 13:06:27 2020 -0700 + + Realtime Database increment operator + + * Adds a prerelease copy of the increment operator (`_increment`) + * Updated local operations to handle increment as well as passing the server operation + * ServerValues now takes a copy of existing data, but uses JIT access to avoid performance regressions + * Lots of new tests + +commit 353f5caa0cd1dda23ff979af4459d023fd4f44ee +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Mon Mar 30 15:07:33 2020 -0400 + + Fix IE11 broken by Crypto change. (#2832) + + * Fix IE11 broken by Crypto change. + + * Suppress Lint. + + * Rearrangement. + +commit 74b06f51aa0ffb444ce0c0713b8a8146d1c2f5c6 +Author: Denver Coneybeare +Date: Mon Mar 30 14:44:17 2020 -0400 + + Implement limbo resolution throttling (#2790) + +commit 735f7c720f0af47878bff0e91117469b19197dcc +Author: Kai Wu +Date: Mon Mar 30 11:34:41 2020 -0700 + + Feed pushManger with Uint8Array VapidKey (#2809) + + * Feed pushManger with Uint8Array VapidKey + + Since Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key submitted to pushManager#subscribe must be of type Uint8Array. + +commit 049118af878bca51ea304e47c0f4c217e696c9c3 +Author: Yifan Yang +Date: Mon Mar 30 10:53:22 2020 -0700 + + Disable health-metrics test in pull requests from forked repo. (#2819) + +commit ef588456464efc210f4e17d4dfb6bee3c3e13dd7 +Author: Yifan Yang +Date: Mon Mar 30 10:37:05 2020 -0700 + + Include branch information in metrics uploading. (#2821) + +commit bd85150b032ee360cb9e5e7c39b5a47de9b2bba6 +Author: Samy Pessé +Date: Mon Mar 30 06:38:12 2020 +0200 + + Fix #2822: consistent write timing between refs and WriteBatch (#2823) + +commit 1d7f06ca10ebcdcf77e06ae1598ad510881560e6 +Merge: f1ddd7028 e13e909b1 +Author: Feiyang1 +Date: Fri Mar 27 17:03:43 2020 -0700 + + Merge branch 'release' + 7.13.1 release + +commit e13e909b1c5a7a3e39512dd41ae694ff630d2408 (tag: rxfire@3.11.1, tag: firebase@7.13.1, tag: @firebase/testing@0.18.1) +Author: Feiyang1 +Date: Fri Mar 27 16:04:00 2020 -0700 + + Publish firebase@7.13.1 + +commit f5b334d5343de80aff1022af443ef44723668b59 +Author: Bernardo Figuerêdo Domingues <45567521+bernardodomingues-hotmart@users.noreply.github.com> +Date: Fri Mar 27 18:03:44 2020 -0300 + + Fixing dangling comma on package.json (#2811) + + The original file was an invalid JSON, which could potentially break builds that would parse JSON files. + +commit f1ddd7028c309d2acb31aa35ce681302637aaefb +Author: Bernardo Figuerêdo Domingues <45567521+bernardodomingues-hotmart@users.noreply.github.com> +Date: Fri Mar 27 18:03:44 2020 -0300 + + Fixing dangling comma on package.json (#2811) + + The original file was an invalid JSON, which could potentially break builds that would parse JSON files. + +commit e9fed6d7a97db44776f1ddb6cd4e3b9fca5f0af5 +Author: Sebastian Schmidt +Date: Fri Mar 27 11:15:21 2020 -0700 + + Simplify logging (#2806) + +commit 228b0474ca9e50cfe92f6d0f6499869cbd453fdd +Merge: e7b230cf1 5cf8fbc5e +Author: Feiyang1 +Date: Fri Mar 27 09:33:29 2020 -0700 + + Merge branch 'release' + 7.13.0 release + +commit e7b230cf19520bb3c5dea0bd49a01d5186a4051e +Author: Sebastian Schmidt +Date: Thu Mar 26 17:18:08 2020 -0700 + + Support storage.googleapis.com in refFromUrl (#2758) + +commit 5cf8fbc5ef5745a4cc4f71a4e17f7bd79223d1ba (tag: rxfire@3.11.0, tag: firebase@7.13.0, tag: @firebase/testing@0.18.0, tag: @firebase/firestore@1.13.0, tag: @firebase/analytics@0.3.0, tag: @firebase/analytics-types@0.3.0) +Author: Feiyang1 +Date: Thu Mar 26 16:35:14 2020 -0700 + + Publish firebase@7.13.0 + +commit 17e3e61662ea30960e7c48f978fedb7f175d0d21 +Author: Feiyang +Date: Thu Mar 26 12:05:36 2020 -0700 + + include firestore memory builds and sub modules in the size report (#2798) + + * include firestore memory builds and sub modules in size report + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + +commit faa9fc62e68ef98ad0f8e1b74373fd4045e22006 +Author: Feiyang +Date: Thu Mar 26 12:05:18 2020 -0700 + + Add a script to build only the SDK and its dependencies (#2799) + + * add a command to build a package and its deps + + * just a test. please remove + + * always build @firebase/app + + * [AUTOMATED]: License Headers + +commit cae464533b436f5a121d6f2f6834b8d275e2e882 +Author: Sebastian Schmidt +Date: Wed Mar 25 14:08:15 2020 -0700 + + Field Value migration (#2784) + +commit 0d0bdc10841eea48c2ba39b1a82eadecc5bf7135 +Author: Sebastian Schmidt +Date: Tue Mar 24 17:34:57 2020 -0700 + + Prettier (#2795) + +commit f954d2f2436a3c3a525b6f9b3fb3fd79aa166088 +Author: Feiyang +Date: Tue Mar 24 17:09:58 2020 -0700 + + Type update for enhanced ecommerce params (#2794) + + * change type of index from string to number + + * [AUTOMATED]: License Headers + +commit 1eada4e98872dc234c425c80887d099cc5be261e +Author: Christina Holland +Date: Tue Mar 24 15:05:38 2020 -0700 + + Update analytics ecommerce event and param types (#2728) + +commit ef4457225a64b36b6b8238150df2376bc74f3f47 +Author: Sebastian Schmidt +Date: Tue Mar 24 11:30:46 2020 -0700 + + Fix `yarn:dev` (#2788) + +commit 1de36ed4a6a9a1542c3c7d84201a3da1eb7aa536 +Author: Christina Holland +Date: Tue Mar 24 10:46:14 2020 -0700 + + Fix `onLog` type in public API to be compatible with Typescript <3.x (#2789) + +commit 2c8c940350b94eca8bbc4d345340b48c6604d59d +Author: Yifan Yang +Date: Tue Mar 24 09:37:15 2020 -0700 + + Report binary size metrics on GitHub pull requests. (#2744) + + * size presubmit check + + * add missing semicolons + + * report github action url + + * Upload size report to the metrics service. + + * Cosmetic change. + + * get size without comments and whitespaces for NPM scripts (#2777) + + * get size without comments and whitespaces for NPM scripts + + * use single quotes + + * update lock file + + Co-authored-by: Feiyang1 + Co-authored-by: Feiyang + +commit afaf982529e52c0f44fffad2b4c599cc5a8cf940 +Author: Sebastian Schmidt +Date: Mon Mar 23 16:21:11 2020 -0700 + + Remove mangling from Node build (#2779) + +commit a85f81dbbb7fa9b501d927f5f46e5295d4550dd5 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Fri Mar 20 21:47:35 2020 -0400 + + Use crypo RNG for auto ID generation to reduce conflicts. (#2764) + + * Use crypo RNG for auto ID generation to reduce conflicts. + + * Address comments. + + * Fix mistake. + + * Declare magic numbers. + +commit 216eb639dd7d6054c0939f2bede26c037a3c9a8a +Author: Christina Holland +Date: Fri Mar 20 13:53:14 2020 -0700 + + Move husky hook to correct location (#2774) + +commit 90c89bea5e4ba82bc3631b6dd74be6c07af39166 +Author: Sebastian Schmidt +Date: Fri Mar 20 12:37:35 2020 -0700 + + Remove non-idempotent transactions (#2771) + +commit 9200feb94acc48c88b0d2a6defa547a134722a5a +Author: Sebastian Schmidt +Date: Fri Mar 20 09:11:02 2020 -0700 + + Make MemoryLru tree-shakeable (#2767) + +commit cbc191d014ad77d3b31f3a621b4a302d0a7a62d2 +Author: Christina Holland +Date: Thu Mar 19 14:32:10 2020 -0700 + + Update CI Triggers (#2763) + +commit a946a5617963471fa3784060172d99aa751141f0 +Merge: 0a109bd43 5a69bccb1 +Author: Christina Holland +Date: Thu Mar 19 14:26:48 2020 -0700 + + Merge branch 'release' + Release 7.12.0 + +commit 0a109bd438886104175da0e2894aabd97c2a65c4 +Author: Feiyang +Date: Thu Mar 19 14:12:57 2020 -0700 + + exclude typedoc from dep update (#2765) + + * exclude typedoc from dep update + + * revert typedoc version + + * remove firestore + +commit 5a69bccb1aecdce03ab4e00f35453f2d6976fcc2 (tag: rxfire@3.10.1, tag: firebase@7.12.0, tag: @firebase/webchannel-wrapper@0.2.38, tag: @firebase/util@0.2.43, tag: @firebase/testing@0.17.1, tag: @firebase/storage@0.3.30, tag: @firebase/remote-config@0.1.17, tag: @firebase/polyfill@0.3.33, tag: @firebase/performance@0.2.36, tag: @firebase/messaging@0.6.10, tag: @firebase/logger@0.2.0, tag: @firebase/installations@0.4.6, tag: @firebase/functions@0.4.38, tag: @firebase/firestore@1.12.2, tag: @firebase/database@0.5.24, tag: @firebase/database-types@0.4.14, tag: @firebase/component@0.1.8, tag: @firebase/auth@0.14.1, tag: @firebase/app@0.6.0, tag: @firebase/app-types@0.6.0, tag: @firebase/analytics@0.2.18) +Author: Christina Holland +Date: Thu Mar 19 13:40:23 2020 -0700 + + Publish firebase@7.12.0 + +commit 0d406b65bb51a24311a11a3e0dad6b65a683f21a +Author: Denver Coneybeare +Date: Thu Mar 19 09:31:48 2020 -0400 + + Log each file being generated by generate_spec_json.js. (#2761) + +commit 60e9f4afe981e030dcc2180aa4443593906bd06e +Author: Sebastian Schmidt +Date: Wed Mar 18 15:37:09 2020 -0700 + + Make Serializer tests work in browser, remove test duplication (#2757) + +commit a5d80d9fa4c2b7b2989a2dc7bdb40abfc4022bdd +Author: Sebastian Schmidt +Date: Wed Mar 18 13:35:19 2020 -0700 + + Memory-only Firestore build (#2608) + +commit c8bebeb562e07e8749359874eb4bd3056dd7d02a +Author: Denver Coneybeare +Date: Wed Mar 18 12:20:42 2020 -0400 + + Remove base64 encoding of resume tokens in spec tests. (#2760) + + Fixes: #2759 + +commit ff7be4b060b8153025381ac5f50b4346fc7ed7a2 +Author: WhiteSource Renovate +Date: Tue Mar 17 21:54:34 2020 +0100 + + Update all non-major dependencies (#2738) + +commit 420c6261920c2e6965808fb25f8a076e629182f5 +Author: Christina Holland +Date: Tue Mar 17 13:03:59 2020 -0700 + + Fix closure line to match internal conformance requirements (#2756) + +commit 4f1f303402180224dd0d4f843e8dc2faee39fdea +Author: Sebastian Schmidt +Date: Tue Mar 17 11:52:11 2020 -0700 + + Support -0.0 in Firestore (#2751) + +commit a90acfa4b78c458a9866e47c33096e375ef39d8e +Author: Sebastian Schmidt +Date: Tue Mar 17 11:17:47 2020 -0700 + + Remove custom implementations for Number methods (#2752) + +commit 148db347da5c5c1ee2464068e6c74d734376b9cf +Author: WhiteSource Renovate +Date: Mon Mar 16 22:49:17 2020 +0100 + + Update dependency karma-typescript to v5 (#2740) + +commit 20999dcdc890bdf1d3e6d017f6dbc9c507ed4e9a +Author: WhiteSource Renovate +Date: Mon Mar 16 22:48:28 2020 +0100 + + Update dependency rollup to v2 (#2741) + +commit 373773792fdfb02a92484f9dd876d54a0f382d4f +Author: WhiteSource Renovate +Date: Mon Mar 16 20:04:04 2020 +0100 + + Update dependency tslint to v6 (#2742) + +commit f1ac28f65f4ea6276b16222ac79f801203c2ed37 +Author: WhiteSource Renovate +Date: Mon Mar 16 20:03:29 2020 +0100 + + Update dependency google-closure-library to v20200224 (#2739) + +commit 4277e4c5fca2e95aabd80aef99b41c5fb06acb1e +Author: Christina Holland +Date: Fri Mar 13 11:45:51 2020 -0700 + + Client logging API: methods for users to access the SDK's log messages (#2434) + +commit 000316f66c07db44f504e5a4a75880b69a706662 +Author: Christina Holland +Date: Fri Mar 13 09:55:48 2020 -0700 + + Add full license to generated files in internal deploy only (#2743) + +commit 051462ff7e1379351ed77a4e95c493425a376380 +Merge: b1aa52b34 87aa25eb8 +Author: Feiyang1 +Date: Thu Mar 12 19:10:30 2020 -0700 + + Merge branch 'release' + +commit 87aa25eb88f3038b825700ae2aeeb1fc8aca02be (tag: rxfire@3.10.0, tag: firebase@7.11.0, tag: @firebase/webchannel-wrapper@0.2.37, tag: @firebase/util@0.2.42, tag: @firebase/testing@0.17.0, tag: @firebase/storage@0.3.29, tag: @firebase/storage-types@0.3.11, tag: @firebase/remote-config@0.1.16, tag: @firebase/remote-config-types@0.1.8, tag: @firebase/polyfill@0.3.32, tag: @firebase/performance@0.2.35, tag: @firebase/performance-types@0.0.12, tag: @firebase/messaging@0.6.9, tag: @firebase/messaging-types@0.4.4, tag: @firebase/logger@0.1.37, tag: @firebase/installations@0.4.5, tag: @firebase/installations-types@0.3.3, tag: @firebase/functions@0.4.37, tag: @firebase/functions-types@0.3.16, tag: @firebase/firestore@1.12.1, tag: @firebase/firestore-types@1.10.1, tag: @firebase/database@0.5.23, tag: @firebase/database-types@0.4.13, tag: @firebase/component@0.1.7, tag: @firebase/auth@0.14.0, tag: @firebase/auth-types@0.10.0, tag: @firebase/auth-interop-types@0.1.4, tag: @firebase/app@0.5.6, tag: @firebase/app-types@0.5.3, tag: @firebase/analytics@0.2.17, tag: @firebase/analytics-types@0.2.8, tag: @firebase/analytics-interop-types@0.1.4) +Author: Feiyang1 +Date: Thu Mar 12 19:00:27 2020 -0700 + + Publish firebase@7.11.0 + +commit 78cdb8b09eb1dceb2c247a5794137420fc55318f +Author: bojeil-google +Date: Thu Mar 12 17:29:28 2020 -0700 + + Removes obsoleted closure APIs: goog.isString, goog.isNull, goog.isNumber, goog.isBoolean, etc. (#2737) + +commit b1aa52b3411b03d19f3fd30356a622c9b508fbe4 +Author: bojeil-google +Date: Thu Mar 12 17:29:28 2020 -0700 + + Removes obsoleted closure APIs: goog.isString, goog.isNull, goog.isNumber, goog.isBoolean, etc. (#2737) + +commit 630568e8d535d8a55015bc50306638a7bca068b4 +Author: bojeil-google +Date: Thu Mar 12 14:15:59 2020 -0700 + + Updates Auth closure dependency to latest. (#2736) + + Fixes failing tests that were blocking the update. + +commit f86f95401e50f10ab5d8dc051794d1b3f45d4769 +Author: bojeil-google +Date: Thu Mar 12 14:15:59 2020 -0700 + + Updates Auth closure dependency to latest. (#2736) + + Fixes failing tests that were blocking the update. + +commit a5db5fe126ba86df17dd155c153450486719a61b +Author: Feiyang +Date: Thu Mar 12 12:39:35 2020 -0700 + + revert dep update since it broke auth (#2734) + +commit 9d975e97f42f567e2b475dc059621e5d510666fd +Author: Feiyang1 +Date: Thu Mar 12 11:40:51 2020 -0700 + + update google-closure-library + +commit aa04416d9428ebedb4b77f05491ac336de520411 +Author: Sebastian Schmidt +Date: Thu Mar 12 11:24:23 2020 -0700 + + Populate GMPID header + +commit 068ed5fd915d905e3f33ecace5daa1c536d1f510 +Author: Feiyang +Date: Tue Mar 10 16:30:24 2020 -0700 + + add new entries in reference docs toc (#2731) + +commit 90b5f044b136211a39f891c05788bc46de1d2927 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Mar 10 13:23:48 2020 -0700 + + feat(auth): Multi-factor Auth support with SMS for Google Cloud Identity Platform (#2725) + + Defines multi-factor auth client APIs for Google Cloud Identity Platform. + +commit 9d593bc72fcc6f695ed3666525d0638dfdf50b62 +Author: Christina Holland +Date: Mon Mar 9 15:07:32 2020 -0700 + + Update @typedef to @type in firestore-externs" (#2714) + +commit 27215036992a82216145f18cd69403ce554f4052 (origin/next) +Author: WhiteSource Renovate +Date: Mon Mar 9 19:57:34 2020 +0100 + + Update all non-major dependencies (#2441) + +commit b42744728b2bc9023862c385ffcfdb6cb849630b +Author: Brian Chen +Date: Mon Mar 9 09:30:04 2020 -0700 + + Fix racy promises in SpecTestRunner (#2693) + +commit 57c38ff653a6b94711e7b0ea338faf1144ee4a93 +Merge: 43c67ac37 42a18e074 +Author: Christina Holland +Date: Fri Mar 6 16:09:53 2020 -0800 + + Merge branch 'release' + Release 7.10.0 + +commit 43c67ac37ee0a9179f702a4540b7b6e5c203538b +Author: Christina Holland +Date: Fri Mar 6 14:26:06 2020 -0800 + + Set canary publish to use wombot (#2690) + +commit 48e627176f82862d024f563f3982e1ceb0f816f3 +Author: WhiteSource Renovate +Date: Fri Mar 6 16:57:39 2020 +0100 + + Update dependency typescript to v3.8.3 (#2716) + +commit eddd9a25a029d0611d4f879f7d426ad62963c4d3 +Author: Feiyang +Date: Fri Mar 6 07:57:09 2020 -0800 + + Avoid building the whole repo during tests (#2717) + +commit 42a18e0744927a797b44f9a524188931975af37b (tag: rxfire@3.9.16, tag: firebase@7.10.0, tag: @firebase/testing@0.16.14, tag: @firebase/firestore@1.12.0, tag: @firebase/firestore-types@1.10.0, tag: @firebase/analytics@0.2.16) +Author: Christina Holland +Date: Thu Mar 5 13:29:14 2020 -0800 + + Publish firebase@7.10.0 + +commit ac25570663329d041c417b7f84aa2013c48e8adc +Author: Sebastian Schmidt +Date: Tue Mar 3 16:11:22 2020 -0800 + + Remove enum overhead (#2697) + +commit 42824327ffd817e5f7b92c6f3a2c436ea8e93f44 +Merge: fcbd8a99e 45026f035 +Author: Feiyang1 +Date: Mon Mar 2 12:25:12 2020 -0800 + + Merge branch 'release' + Firebase 7.9.3 release + +commit fcbd8a99efdfba50838296b29d99cb55762b6411 +Author: Christina Holland +Date: Mon Mar 2 11:25:50 2020 -0800 + + Fix promises in Analytics tests (#2673) + +commit f24ddc450e75ce0270ee4c688b6f362fa620a997 +Author: Denver Coneybeare +Date: Mon Mar 2 13:53:39 2020 -0500 + + Implement Timestamp.valueOf() (#2662) + + This enables comparison of Timestamp objects using the arithmetic comparison operators, such as < and >. + + Fixes: https://github.com/firebase/firebase-js-sdk/issues/2632 + +commit 488e7f405b0a40307595869480307807ade349ba +Author: Christina Holland +Date: Mon Mar 2 10:41:10 2020 -0800 + + Add global approvers to doc changes in CODEOWNERS (#2705) + +commit 45026f035a8c3e08d7f4745ee8f14951871830d9 (tag: rxfire@3.9.15, tag: firebase@7.9.3, tag: @firebase/testing@0.16.13, tag: @firebase/storage@0.3.28, tag: @firebase/remote-config@0.1.15, tag: @firebase/performance@0.2.34, tag: @firebase/performance-types@0.0.11, tag: @firebase/messaging@0.6.8, tag: @firebase/installations@0.4.4, tag: @firebase/functions@0.4.36, tag: @firebase/analytics@0.2.15) +Author: Feiyang1 +Date: Fri Feb 28 15:42:30 2020 -0800 + + Publish firebase@7.9.3 + +commit 6fdc6e1c724e7c2c8e3d826c306d3f7f3d7bf34c +Author: Sebastian Schmidt +Date: Fri Feb 28 14:40:14 2020 -0800 + + Remove Closure build (#2646) + +commit 3679e87caed18f9db5d1c11fb35cd2d127d71a09 +Author: Sebastian Schmidt +Date: Fri Feb 28 13:46:19 2020 -0800 + + Revert "Populate GMPID header (#2670)" (#2696) + + This reverts commit 7d5a29fff3710c3bc0773518f434b5bc6b94feaa. + +commit e7beb86afd6b0792be5cb8950d00ebeaf0889989 +Author: Christina Holland +Date: Fri Feb 28 11:12:31 2020 -0800 + + Fix package.json repository fields in 3 packages (#2694) + +commit f1477a8d85efc2ed765dac68f54df827a33478e4 +Author: Brian Chen +Date: Fri Feb 28 10:02:54 2020 -0800 + + Fix VS Code launch.json to look for mocha/karma in the right location (#2642) + +commit ad8e0c7479e02cdc0f87656c449e26a2651aa6b3 +Author: Brian Chen +Date: Fri Feb 28 10:02:37 2020 -0800 + + upgrade to 1.10.4 (#2653) + +commit a632d5a2564c6a2eb8984ad70064a7f3cf4f13dd (tag: rxfire@3.9.14, tag: firebase@7.9.2, tag: @firebase/webchannel-wrapper@0.2.36, tag: @firebase/util@0.2.41, tag: @firebase/testing@0.16.12, tag: @firebase/storage@0.3.27, tag: @firebase/storage-types@0.3.10, tag: @firebase/remote-config@0.1.14, tag: @firebase/remote-config-types@0.1.7, tag: @firebase/performance@0.2.33, tag: @firebase/performance-types@0.0.10, tag: @firebase/messaging@0.6.7, tag: @firebase/messaging-types@0.4.3, tag: @firebase/logger@0.1.36, tag: @firebase/installations@0.4.3, tag: @firebase/installations-types@0.3.2, tag: @firebase/functions@0.4.35, tag: @firebase/functions-types@0.3.15, tag: @firebase/firestore@1.11.2, tag: @firebase/firestore-types@1.9.2, tag: @firebase/database@0.5.22, tag: @firebase/database-types@0.4.12, tag: @firebase/component@0.1.6, tag: @firebase/auth@0.13.6, tag: @firebase/auth-types@0.9.6, tag: @firebase/auth-interop-types@0.1.3, tag: @firebase/app@0.5.5, tag: @firebase/app-types@0.5.2, tag: @firebase/analytics@0.2.14, tag: @firebase/analytics-types@0.2.7, tag: @firebase/analytics-interop-types@0.1.3) +Author: Feiyang1 +Date: Thu Feb 27 16:24:15 2020 -0800 + + Publish firebase@7.9.2 + +commit cb01df4959aa65256d781b89380c8cf523964da6 +Author: Sebastian Schmidt +Date: Thu Feb 27 14:27:43 2020 -0800 + + Use explicit String constants for OnlineState (#2688) + +commit c251f433c05b12c86af423bd1ddd1a347d18f843 +Author: WhiteSource Renovate +Date: Thu Feb 27 21:05:08 2020 +0100 + + Update dependency sinon to v9 (#2657) + + * Update dependency sinon to v9 + + * remove sinon from integration/messaging + + Co-authored-by: Feiyang + +commit 6aa9a83ec748b45e069bdc3d85f70cabfd7f9b66 +Author: WhiteSource Renovate +Date: Thu Feb 27 19:10:37 2020 +0100 + + Update dependency typescript to v3.8.2 (#2656) + + * Update dependency typescript to v3.8.2 + + * make typescript happy + + * make typescript happy again + + Co-authored-by: Feiyang + +commit 872ffe1edbafda0286fa4857518f222f6241e96d +Author: Christina Holland +Date: Wed Feb 26 13:52:38 2020 -0800 + + Fix canary release (#2681) + +commit 7d5a29fff3710c3bc0773518f434b5bc6b94feaa +Author: Sebastian Schmidt +Date: Wed Feb 26 11:41:10 2020 -0800 + + Populate GMPID header (#2670) + +commit 22e5af2eec40fcf10d199228d4a34f51e9961fef +Author: Sebastian Schmidt +Date: Tue Feb 25 16:59:20 2020 -0800 + + Add mangled CJS build (#2679) + +commit b73976307fbbca560d3d2df40246e623b7e98793 +Author: Sebastian Schmidt +Date: Tue Feb 25 14:16:07 2020 -0800 + + Add an ObjectValue builder (#2671) + +commit bfbbff936768d8feaa8ade8dc1095c3f160e52e1 +Author: Denver Coneybeare +Date: Tue Feb 25 16:01:55 2020 -0500 + + Update test setup instructions in README.md (#2654) + +commit 9c222510dcbec59780e94dae561ebb203c2572c3 +Author: Gil +Date: Tue Feb 25 11:59:28 2020 -0800 + + Remove backgroundChannelTest and testUrl from WebChannelOptions (#2666) + + These will be deprecated in an upcoming google-closure-library release + + Note: backgroundChannelTest already defaults to true and we don't use + testUrl. + +commit 051e3c39e2f48b045d67aac7f07a534dbdbd4649 +Author: Gil +Date: Tue Feb 25 10:54:14 2020 -0800 + + Allow for copyrights to be assigned to Google LLC (#2665) + + * Allow for copyrights assigned to Google LLC + + Current guidance at go/copyright calls for copyright to be assigned to + Google LLC, like so: + + Copyright 2020 Google LLC + + This change makes this the default without changing existing files. + + * Add missing license header to license.js + + * Remove unused chalk import + + * Do license validation in a single pass + + * Rewrite old-form copyrights + + * Compute changed files once. + + * [AUTOMATED]: License Headers + +commit 94e2eadb7146e262ad5a09afe498c6f1ed9fbd3d +Author: Sebastian Schmidt +Date: Mon Feb 24 20:05:00 2020 -0800 + + Make ordering for BooleanValues explicit (#2675) + +commit dad9a4a6e72a8eeb59332efd811b736b25cb2943 +Author: Sebastian Schmidt +Date: Mon Feb 24 15:50:17 2020 -0800 + + Run prettier (#2672) + +commit 8e0e5f07590cf30593c31adec2ef2516c41b9117 +Author: Brian Chen +Date: Mon Feb 24 14:36:09 2020 -0800 + + Rename protobytestring to bytestring (#2674) + +commit 636677666a35b7a111a37d240c4c66f591ddb29b +Author: Christina Holland +Date: Fri Feb 21 14:16:42 2020 -0800 + + Upgrade to actions/checkout@v2 (#2661) + +commit 363b08a3786c134aba0c47b437a49f36f5466706 (tag: rxfire@3.9.13, tag: firebase@7.9.1, tag: @firebase/testing@0.16.11, tag: @firebase/messaging@0.6.6, tag: @firebase/functions@0.4.34, tag: @firebase/firestore@1.11.1) +Author: Christina Holland +Date: Fri Feb 21 13:24:43 2020 -0800 + + Publish firebase@7.9.1 + +commit fe06e91f5b1721db2e1fa8e0f001a988dbb0484f +Author: Sebastian Schmidt +Date: Fri Feb 21 10:33:33 2020 -0800 + + De-mangle Node and CJS build (#2658) + +commit da9c2a2da0d562a1ebc353c71bdd17f4adf8237c +Author: WhiteSource Renovate +Date: Fri Feb 21 19:11:26 2020 +0100 + + Update dependency chromedriver to v80 (#2603) + +commit d92ba4757821626ab5c220ac1925cc96850adea1 +Author: WhiteSource Renovate +Date: Fri Feb 21 19:11:03 2020 +0100 + + Update dependency ts-essentials to v6 (#2604) + +commit 4ed6f50299c13e61672850962186a7803c48dd59 +Merge: 2919c0abf 25449e5b0 +Author: Christina Holland +Date: Thu Feb 20 15:49:04 2020 -0800 + + Merge branch 'release' + Release 7.9.0 + +commit 25449e5b095ffacfdfd18b43a7869831513a9e46 (tag: rxfire@3.9.12, tag: firebase@7.9.0, tag: @firebase/testing@0.16.10, tag: @firebase/messaging@0.6.5, tag: @firebase/functions@0.4.33, tag: @firebase/firestore@1.11.0) +Author: Christina Holland +Date: Thu Feb 20 14:00:16 2020 -0800 + + Publish firebase@7.9.0 + +commit 2919c0abf32d284e8c6001635cc6bfae98f9001d +Author: Brian Chen +Date: Thu Feb 20 09:53:10 2020 -0800 + + Change `ProtoByteString` to use its own class rather than `String | Uint8Array` (#2639) + +commit 4c2f8d1a4960edbde3aae2eb2736452df7b499d4 +Author: Sebastian Schmidt +Date: Wed Feb 19 21:27:44 2020 -0800 + + Cleanup: Use Object.assign() to create shallow copies (#2647) + +commit 1a7ef7232c0961f08ad4b51fb2e1ea902fd0a87b +Author: Sebastian Schmidt +Date: Wed Feb 19 20:25:05 2020 -0800 + + Cleanup codeowners (#2649) + +commit 5502615329778218fba120ded664d9d5bf146d47 +Author: Sebastian Schmidt +Date: Wed Feb 19 16:58:41 2020 -0800 + + De-dup module registration (#2650) + + This simplifies adding a new Memory-only Firestore build + +commit d2b37c11b5ba8add59c0df3c242022a0ecc55276 +Author: Brian Chen +Date: Wed Feb 19 16:13:14 2020 -0800 + + more efficient Uint8Array conversion (#2645) + +commit 20ab129c4adf4122bb396867c991170489fe60a7 +Author: Sebastian Schmidt +Date: Wed Feb 19 15:31:27 2020 -0800 + + Remove unused `isRunningAgainstEmulator()` (#2648) + +commit 261bbd54c760e2221f2ecc9206df28781aa8be49 +Author: Sebastian Schmidt +Date: Tue Feb 18 19:03:48 2020 -0800 + + Make Firestore-mangled build the only Firestore build (#2640) + +commit 5512725f18831f4eba48f36fe035597b52414bad +Merge: eb4fe34a2 2a78a2dd1 +Author: Christina Holland +Date: Tue Feb 18 15:34:07 2020 -0800 + + Merge branch 'release' + Release 7.8.2 + +commit eb4fe34a2b534ed123f083fb4532144d99602b33 +Author: Christina Holland +Date: Tue Feb 18 15:03:12 2020 -0800 + + Fix prettier precommit script to not error if there are only deleted files (#2641) + +commit b40d71e3c9788f0a56fc41e677c73d7ad974b0c6 +Author: Feiyang +Date: Tue Feb 18 14:57:47 2020 -0800 + + reliably update service worker (#2638) + +commit fde231499eb93a1553bd0e95878910fd7fe3bbda +Author: Brian Chen +Date: Thu Feb 13 15:04:42 2020 -0800 + + Disable use of $httpHeaders in Cordova (#2626) + +commit 2a78a2dd1595ccea7ee721251ae222dc3e34313d (tag: rxfire@3.9.11, tag: firebase@7.8.2, tag: @firebase/testing@0.16.9, tag: @firebase/firestore@1.10.2) +Author: Feiyang1 +Date: Thu Feb 13 14:13:32 2020 -0800 + + Publish firebase@7.8.2 + +commit 2af214afa680f883e6466e2cee4c2e8c1f8489d9 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Thu Feb 13 09:47:05 2020 -0500 + + Add optimization to SortedSet.unionWith (#2624) + + * Add optimization to SortedSet.unionWith + + * Add changelog. + + * Update changelog + +commit 41132fa772a3710eb5219d0d4329c9ca9bb788da +Author: Christina Holland +Date: Wed Feb 12 13:55:43 2020 -0800 + + Improve logic for detecting what PR tests to run (#2615) + +commit eb614f0e7bcfee5b4bc1d390f894bea3d8f3867b +Author: Brian Chen +Date: Mon Feb 10 14:42:53 2020 -0800 + + Allow Collection.add() to use custom objects (#2607) + +commit 50134d6baf49690a1718c36aac27076781895f60 +Author: Brian Chen +Date: Mon Feb 10 13:50:04 2020 -0800 + + Rollback: Upgrade Firestore emulator 1.10.4 (#2614) + +commit 112e0d78173ded665c5ac2b03c8da564880da6b6 +Author: Feiyang +Date: Mon Feb 10 13:03:38 2020 -0800 + + Install Chrome stable in GHA before running tests (#2613) + + * install stable chrome + + * run aptget update + + * revert triggers + + * apply chrome installation to other workflows + +commit c48114cd8c323a4d96631e7bd960624f16715f51 +Author: Gil +Date: Thu Feb 6 16:20:52 2020 -0800 + + Upgrade Firestore emulator to 1.10.4 (#2602) + + The emulator now sends resume tokens, which exercises more of the + system. In particular, this means that resuming queries now uses the + index-free query engine. + +commit a4b89daae0e6aefc502c00b0676413de0a625f5e +Merge: 43fb3ee3a 9c27de764 +Author: Christina Holland +Date: Thu Feb 6 15:27:23 2020 -0800 + + Merge branch 'release' + Release 7.8.1 + +commit 9c27de7644b176bea804b740edb4a91dfdea329f (tag: rxfire@3.9.10, tag: firebase@7.8.1, tag: @firebase/util@0.2.40, tag: @firebase/testing@0.16.8, tag: @firebase/storage@0.3.26, tag: @firebase/storage-types@0.3.9, tag: @firebase/remote-config@0.1.13, tag: @firebase/remote-config-types@0.1.6, tag: @firebase/performance@0.2.32, tag: @firebase/performance-types@0.0.9, tag: @firebase/messaging@0.6.4, tag: @firebase/messaging-types@0.4.2, tag: @firebase/logger@0.1.35, tag: @firebase/installations@0.4.2, tag: @firebase/installations-types@0.3.1, tag: @firebase/functions@0.4.32, tag: @firebase/functions-types@0.3.14, tag: @firebase/firestore@1.10.1, tag: @firebase/firestore-types@1.9.1, tag: @firebase/database@0.5.21, tag: @firebase/database-types@0.4.11, tag: @firebase/component@0.1.5, tag: @firebase/auth@0.13.5, tag: @firebase/auth-types@0.9.5, tag: @firebase/auth-interop-types@0.1.2, tag: @firebase/app@0.5.4, tag: @firebase/app-types@0.5.1, tag: @firebase/analytics@0.2.13, tag: @firebase/analytics-types@0.2.6, tag: @firebase/analytics-interop-types@0.1.2) +Author: Christina Holland +Date: Thu Feb 6 15:10:58 2020 -0800 + + Publish firebase@7.8.1 + +commit 43fb3ee3a44c026ce1dfd441b1fc7d162227673d +Author: Mertcan Mermerkaya +Date: Wed Feb 5 19:29:33 2020 +0000 + + Remove @mmermerkaya and @dwoffinden from OWNERS (#2596) + +commit 8d83425adf1c0094fe54af3c02505ab06d3c0875 +Merge: 689711a13 a57bd9459 +Author: Christina Holland +Date: Tue Feb 4 14:07:25 2020 -0800 + + Merge branch 'release' + Release 7.8.0 + +commit 689711a134327c6011751339bd38f963979a371b +Author: Sebastian Schmidt +Date: Tue Feb 4 13:38:34 2020 -0800 + + Add explicit ts-node dependency (#2595) + + This fixes https://github.com/firebase/firebase-js-sdk/blob/master/packages/firestore/test/unit/generate_spec_json.sh + +commit e6cb0c268435e0891bb3055eb29f3b5ff5ad80cf +Author: Sebastian Schmidt +Date: Tue Feb 4 12:03:57 2020 -0800 + + Fix Firestore Performance spec test (#2594) + + These tests are only run on demand. One of the tests broke when we stopped accepting zero version documents in the RemoteDocumentCache + +commit 6898eb8996bfd42ca8220cb91acebf4569d64ddf +Author: WhiteSource Renovate +Date: Mon Feb 3 21:21:20 2020 +0100 + + Update dependency google-closure-compiler to v20200112 (#2549) + +commit 5f9e57ba8cdba8f2d3ba71cd1c6f7d3a3538b5a9 +Author: WhiteSource Renovate +Date: Mon Feb 3 21:20:16 2020 +0100 + + Update dependency husky to v4 (#2520) + +commit 046673c2e8c17ac75d0ccba38bc31ac27a990666 +Author: WhiteSource Renovate +Date: Mon Feb 3 21:16:33 2020 +0100 + + Update dependency typescript to v3.7.5 (#2471) + +commit c5b79b6a93404bf2c392e305a1819c79fcffaa0a +Author: Sebastian Schmidt +Date: Fri Jan 31 13:47:36 2020 -0800 + + Ignore primary lease loss in maybeGarbageCollectMultiClientState (#2585) + +commit a57bd945931561fe5b6f0e679d566ac3bbfbbec0 (tag: rxfire@3.9.9, tag: firebase@7.8.0, tag: @firebase/util@0.2.39, tag: @firebase/testing@0.16.7, tag: @firebase/storage@0.3.25, tag: @firebase/remote-config@0.1.12, tag: @firebase/performance@0.2.31, tag: @firebase/messaging@0.6.3, tag: @firebase/installations@0.4.1, tag: @firebase/functions@0.4.31, tag: @firebase/firestore@1.10.0, tag: @firebase/database@0.5.20, tag: @firebase/component@0.1.4, tag: @firebase/app@0.5.3, tag: @firebase/analytics@0.2.12) +Author: Christina Holland +Date: Thu Jan 30 12:54:01 2020 -0800 + + Publish firebase@7.8.0 + +commit 277f3558801ff17b449ebe3efb2c46539ddb844c +Author: WhiteSource Renovate +Date: Thu Jan 30 00:47:47 2020 +0100 + + Update dependency mocha to v7 (#2521) + +commit cf1851937fcc4ef45eef6ac5c1bc2665d84a4013 +Author: Christina Holland +Date: Wed Jan 29 13:34:40 2020 -0800 + + CI test workflow improvements (#2576) + +commit 295a545d5dac1c490d1c0c4bd732505993689507 +Author: Sebastian Schmidt +Date: Tue Jan 28 12:30:06 2020 -0800 + + Lint fix (#2578) + + * Lint fix + + * Update local_store.ts + +commit 878c50164d43e8ed9984e611d5ddbbe2e9660987 +Author: Sebastian Schmidt +Date: Mon Jan 27 16:30:22 2020 -0800 + + Simplify getLastDocumentChange (#2566) + +commit 7d27807ff98956d8284237ffffe3912d46fb6e40 +Author: Sebastian Schmidt +Date: Mon Jan 27 11:53:38 2020 -0800 + + Adding scripts/.js to gitignore (#2575) + +commit da5197cdf7fabfdcc5348bfd51058f75cbac7405 +Author: Shelley Cincotta <48364688+shelcindra@users.noreply.github.com> +Date: Mon Jan 27 14:13:52 2020 -0500 + + Added docData function to documentation. (#2571) + +commit d4ddeaf3a108873b9988837c735d209f36533f31 +Author: Christina Holland +Date: Fri Jan 24 15:03:26 2020 -0800 + + Add tech writer as codeowner for files causing doc changes. (#2573) + +commit 12f9b9b34a2e52aea9c34d7df1a190ab8727c759 +Author: Christina Holland +Date: Fri Jan 24 10:47:54 2020 -0800 + + [testing] Fix bug in check for modified files (#2568) + +commit df0f9c322e24e25bb78055df3023fd33c61bdcfd +Author: Christina Holland +Date: Thu Jan 23 12:46:11 2020 -0800 + + Add TS compile check before tests for core-owned packages (#2515) + +commit ee57d26c10f60fc2b1264dabf96efc4e374eaebf +Author: Christina Holland +Date: Thu Jan 23 09:34:02 2020 -0800 + + Run tests only on changed packages on PR/push (#2565) + +commit d9bf41c5fc58a4feb4bf244550bd9b23bfd2f4a0 +Author: Sebastian Schmidt +Date: Thu Jan 23 09:02:26 2020 -0800 + + Run Firestore Integration tests against mangled sources (#2533) + +commit 5fb352a99bb7f7ccf822325793f42260d5b86957 +Author: Sebastian Schmidt +Date: Wed Jan 22 14:07:14 2020 -0800 + + Use approximate FieldValue size for MemoryLRU (#2548) + +commit 5042f724d72190e075a1c6a87f9be417b1212eff +Author: Sebastian Schmidt +Date: Wed Jan 22 10:05:45 2020 -0800 + + Move ignoreIfPrimaryLeaseLoss to local_store.ts (#2544) + +commit 38876ff950ccabccb58a7b02e5209193ff05dbf9 +Author: Brian Chen +Date: Wed Jan 22 09:37:30 2020 -0800 + + Add changelog for verify (#2562) + +commit 83fed17e1345bb7139f8bcea570aaa3f1587d356 +Author: Mertcan Mermerkaya +Date: Wed Jan 22 17:19:05 2020 +0000 + + Deflake getInstallationEntry tests (#2563) + +commit 01da30b0cea916f58caf47d8b48e7b4bbcd7188e +Author: Jeff +Date: Tue Jan 21 15:14:15 2020 -0800 + + fix fromCache description (#2558) + +commit 0602d9172786d361c86fb502360d708421c190ef +Merge: cfa8a5f0f 329e50c11 +Author: Christina Holland +Date: Tue Jan 21 14:22:30 2020 -0800 + + Merge branch 'release' + Release 7.7.0 + +commit cfa8a5f0f2a08570af73cc75867296acdf162dd6 +Author: Christina Holland +Date: Tue Jan 21 12:53:12 2020 -0800 + + Switch back to user NPM token (#2559) + +commit 9b83ae6c836ffb53a39db0c7de21175eb59c84fa +Author: Sebastian Schmidt +Date: Tue Jan 21 10:56:04 2020 -0800 + + Fix typo (#2542) + +commit 6e45e6a1cbcfa0fae29769fa4b81fc0350186981 +Author: Christina Holland +Date: Fri Jan 17 11:43:47 2020 -0800 + + Switch CI to Github Actions (#2546) + + Switch from Travis CI workflow to Github Actions + +commit 329e50c113f11a0bf2685bceccc08820d0db2603 (tag: rxfire@3.9.8, tag: firebase@7.7.0, tag: @firebase/webchannel-wrapper@0.2.35, tag: @firebase/util@0.2.38, tag: @firebase/testing@0.16.6, tag: @firebase/storage@0.3.24, tag: @firebase/remote-config@0.1.11, tag: @firebase/polyfill@0.3.31, tag: @firebase/performance@0.2.30, tag: @firebase/messaging@0.6.2, tag: @firebase/messaging-types@0.4.1, tag: @firebase/logger@0.1.34, tag: @firebase/installations@0.4.0, tag: @firebase/installations-types@0.3.0, tag: @firebase/functions@0.4.30, tag: @firebase/firestore@1.9.3, tag: @firebase/database@0.5.19, tag: @firebase/component@0.1.3, tag: @firebase/auth@0.13.4, tag: @firebase/auth-types@0.9.4, tag: @firebase/app@0.5.2, tag: @firebase/analytics@0.2.11) +Author: Christina Holland +Date: Thu Jan 16 14:33:42 2020 -0800 + + Publish firebase@7.7.0 + +commit dac17571450aa878b3b62e63be341e9d95d13aac +Author: Michael Lehenbauer +Date: Tue Jan 14 11:12:44 2020 -0800 + + Fix for #1491: Disable use of $httpHeaders in browser extensions too. (#2534) + +commit 00e77c1ff936907040cedeb7d845b02352ebb3b7 +Author: Sebastian Schmidt +Date: Mon Jan 13 14:57:06 2020 -0800 + + Add minified ("mangled") Firestore build (#2495) + +commit 903abce11aa835ee03af2fce9a1e4b5fb5d81aee +Author: James Liu <37026441+zijianjoy@users.noreply.github.com> +Date: Fri Jan 10 16:28:35 2020 -0800 + + Performance Monitoring transport format upgrade from proto2 to proto3 (#2525) + + * Update the Fireperf's log fromat from proto2 to proto3. + + * Add CHANGELOG for Fireperf transport update from proto2 to proto3 (#2492) + + * Add unit tests with the new proto format change. (#2516) + +commit 6ef51fe61284c53c2fe4e3366519ab2e47475802 +Author: Sebastian Schmidt +Date: Thu Jan 9 15:21:14 2020 -0800 + + Add QueryDocumentSnapshot to the internal FirebaseNamespace (#2514) + +commit 7058a53fcc57018abab92d1e585c1b3ce526eec9 +Merge: 18a93e234 e50a4e906 +Author: Christina Holland +Date: Thu Jan 9 14:26:09 2020 -0800 + + Merge branch 'release' + Release 7.6.2 + +commit e50a4e906a135e12e582a53574abb4ab66c44521 (tag: rxfire@3.9.7, tag: firebase@7.6.2, tag: @firebase/util@0.2.37, tag: @firebase/testing@0.16.5, tag: @firebase/storage@0.3.23, tag: @firebase/remote-config@0.1.10, tag: @firebase/performance@0.2.29, tag: @firebase/messaging@0.6.1, tag: @firebase/installations@0.3.9, tag: @firebase/functions@0.4.29, tag: @firebase/firestore@1.9.2, tag: @firebase/database@0.5.18, tag: @firebase/component@0.1.2, tag: @firebase/app@0.5.1, tag: @firebase/analytics@0.2.10) +Author: Christina Holland +Date: Thu Jan 9 14:02:07 2020 -0800 + + Publish firebase@7.6.2 + +commit 18a93e2348343d4cb204d24f3dbfae202e6e57f6 +Author: bojeil-google +Date: Thu Jan 9 13:03:54 2020 -0800 + + Adds missing SAMLAuthProvider constructor. (#2513) + + Fixes https://github.com/firebase/firebaseui-web/issues/663 + +commit e9bf41c8cf3afba397b16e41f800ce5b0369e639 +Author: Michael Lehenbauer +Date: Thu Jan 9 12:57:43 2020 -0800 + + Get closure-library from google-closure-library. (#2509) + + Get closure-library from google-closure-library npm package instead of via closure-builder so we can control the version directly. + +commit f7bf249d5b5182a579bf6424eed98710cfe6239e +Author: Mertcan Mermerkaya +Date: Thu Jan 9 14:03:17 2020 +0200 + + Messaging rewrite (#2484) + +commit 2092cce47751fbc49c18a7de2653d626b07e0898 +Author: Mertcan Mermerkaya +Date: Thu Jan 9 11:48:45 2020 +0200 + + Add onIdChange function to Installations (#2486) + +commit 9c28e7bdfc0486896a42e772e56dd073c80b353a +Author: James Liu <37026441+zijianjoy@users.noreply.github.com> +Date: Wed Jan 8 17:34:55 2020 -0800 + + Initialize transport service in Performance Monitoring when performance() is called. (#2506) + + * Initialize transport service after performance() is called. + + * Run transport service setup only once. + + * Add @ts-ignore and update naming of transportHandler. + + * Remove done() and start transport timer right after component API instance is ready. + +commit 689f0359ebe2bcd7f6916da082658841b08add48 +Author: Christina Holland +Date: Wed Jan 8 16:16:15 2020 -0800 + + Update all non-major dependencies (#2493) + + * Update all non-major dependencies + Co-authored-by: Renovate Bot + +commit ed39dfac536c50d4d3a3ea5feddeec12edf952ca +Author: Sebastian Schmidt +Date: Wed Jan 8 16:12:01 2020 -0800 + + Update integration tests to use firestore.js (#2508) + + This change will allow us to swap out firestore.js for a minified version without having to provide a minified firebase.js + +commit 885e0b3757b752a97e806dfc0e5aafa6efd15872 +Author: Brian Chen +Date: Wed Jan 8 06:16:51 2020 -0800 + + Add verify support (#2436) + +commit 8504da916dcca8be7dce172288cd871a324e9133 +Author: Sebastian Schmidt +Date: Tue Jan 7 15:15:49 2020 -0800 + + Revert: Add Database.Servervalue.increment(x) (#2500) + +commit 0adebf4ac8648315baeb186edcfdc484ada5ab77 +Author: Alex Volkovitsky +Date: Tue Jan 7 13:42:00 2020 -0800 + + Update code owners for emulators (#2494) + +commit 24d74bdd6467346634c9e09cdf0fb1985e602473 +Author: Mertcan Mermerkaya +Date: Tue Jan 7 12:45:56 2020 +0000 + + Make sure notification permissions are granted before calling g… (#2489) + +commit f8d2cc5cf22f9fb308fac97e6b9a46f11b13deb9 +Author: Renovate Bot +Date: Mon Jan 6 23:07:59 2020 +0200 + + Update dependency chromedriver to v79 (#2442) + +commit 4ca6befcf35a8cc5c27dd97eb196188c5e610509 +Author: Renovate Bot +Date: Mon Jan 6 23:02:25 2020 +0200 + + Update dependency nyc to v15 (#2472) + +commit 72a4f3aa50898531c9f378efc91fe48751e1c071 +Author: Renovate Bot +Date: Mon Jan 6 22:59:52 2020 +0200 + + Update dependency sinon to v8 (#2474) + +commit 265fa504e03a93253225c94da464f0f1b9adc380 +Author: Ross Dakin +Date: Mon Jan 6 14:46:38 2020 -0500 + + Remove obsolete reference to ENVIRONMENTS.md (#2479) + + Closing the loop on #1772 + +commit 6104c68c11d5a84c7511572518d7fcb84513a02e +Author: Mertcan Mermerkaya +Date: Mon Jan 6 17:36:34 2020 +0000 + + Fix flaky Installations test (#2490) + +commit af162f975eb160b0d1ab1b64d4cee8e7313e0b68 +Author: Mertcan Mermerkaya +Date: Fri Jan 3 17:03:17 2020 +0000 + + Add test for failed createInstallation in separate request (#2485) + +commit 7250d25145f27ee099dc717a0130c2f8dc9841d2 +Author: Sebastian Schmidt +Date: Fri Dec 27 16:55:46 2019 +0800 + + Add minified integration tests to Firestore (#2448) + +commit 94cf316c46d044dba3cdae29428fda68367e6745 +Author: Sebastian Schmidt +Date: Fri Dec 27 16:07:33 2019 +0800 + + Fix Integration tests against 'minified' sources (#2445) + +commit e4d0455b76bd2181a00acd08d39f83e1092b0618 +Author: Christina Holland +Date: Mon Dec 23 11:45:19 2019 -0800 + + Remove Logger from performance backend log use case (#2460) + +commit 88734fd061df80bc1667aee22132a36cc709ac76 +Author: Michael Lehenbauer +Date: Fri Dec 20 12:19:18 2019 -0800 + + Fix flaky RTDB tests due to increment operations. (#2466) + + The introduction of tests that try to send increment operations to the backend has resulted in test flakiness. Basically the emulator rejects these as invalid operations and closes the connection. The client automatically reconnects, so _usually_ this doesn't matter. But the SDK intentionally doesn't tolerate disconnects in the middle of a transaction, so if the disconnect happens to happen during a transaction test, then the test will fail. + + I'm avoiding the problem by isolating the increment tests better (use an isolated instance of RTDB and ensures it remains offline so it doesn't even try to send the requests to the emulator). + + I've opened b/146657568 to track cleaning this up once the emulator supports increment operations. + +commit 984c1e436f8b98296d5acdcd31a70e40e7912f22 +Author: Michael Lehenbauer +Date: Fri Dec 20 09:57:57 2019 -0800 + + Avoid using $httpHeaders in environments that don't send an Origin header. (#2464) + + There is a backend bug (b/145624756) causing $httpHeaders to be ignored if the HTTP request doesn't have an Origin header. Via https://github.com/firebase/firebase-js-sdk/issues/1491 we've found that several environments are running into this issue so until the backend issue is fixed we are excluding them from using $httpHeaders. This may incur an extra CORS preflight round-trip in some cases, but this is much better than having our Authorization header get ignored. + +commit 82c54981eca4e0297fd3e6190b8116cc35f5fcf5 +Author: Renovate Bot +Date: Fri Dec 20 04:01:05 2019 +0200 + + Update dependency git-rev-sync to v2 (#2462) + +commit 9d28b4aa789734333814ae34481bea0cb48bdf1a +Author: Renovate Bot +Date: Fri Dec 20 03:58:41 2019 +0200 + + Update dependency semver to v7 (#2463) + +commit 37b98e9271c494a0fb58ca1960f8fcfaec49ade9 +Author: Feiyang +Date: Thu Dec 19 17:33:44 2019 -0800 + + Turn on eslint in @firebase/database (#2429) + + * auto fix some database lint issues with eslint + + * fix more lint errors + + * [AUTOMATED]: Prettier Code Styling + + * run lint before test + + * remove unnecessary eslint rules + + * address comments + + * fix some explicit any + + * fix lint errors + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * [AUTOMATED]: Prettier Code Styling + + * move comment location changed by prettier + + * address comments + +commit c0d6c159a50d39a3bf54ee25751dc0e0f8a929a9 (tag: rxfire@3.9.6, tag: firebase@7.6.1, tag: @firebase/testing@0.16.4, tag: @firebase/firestore@1.9.1, tag: @firebase/database@0.5.17) +Author: Feiyang1 +Date: Wed Dec 18 15:12:38 2019 -0800 + + Publish firebase@7.6.1 + +commit 7bb33dcb15354471f63d71c48a0c58996fd25f36 +Author: Feiyang +Date: Tue Dec 17 16:10:40 2019 -0800 + + update lock file (#2451) + +commit 180a8c8395e424b15a065c267a75912a05e6e337 +Merge: 31b0e52e8 b62358385 +Author: Feiyang1 +Date: Tue Dec 17 14:31:29 2019 -0800 + + Merge branch 'release' + +commit 31b0e52e8ff54fab8a9403ad3b5a1a0ebbf10c03 +Author: Feiyang +Date: Tue Dec 17 14:05:20 2019 -0800 + + Fix the compiling errors for firebase-admin (#2447) + + * Fix the compiling errors for firebase-admin + + * update yarn lock + +commit bb1f4dee32dc4ee41066e176378e1b63aa1e1d14 +Author: Sebastian Schmidt +Date: Thu Dec 12 20:06:42 2019 -0800 + + Extract WebStorage schema (#2444) + +commit 19c34c6595c38388ff918e8b97d82d6fd430c0e4 +Author: Christina Holland +Date: Thu Dec 12 15:13:08 2019 -0800 + + Add FirestoreDataConverter to toc files (#2439) + +commit b62358385f815e697075577e5e6be2c071e85526 (tag: rxfire@3.9.5, tag: firebase@7.6.0, tag: @firebase/webchannel-wrapper@0.2.34, tag: @firebase/util@0.2.36, tag: @firebase/testing@0.16.3, tag: @firebase/storage@0.3.22, tag: @firebase/storage-types@0.3.8, tag: @firebase/remote-config@0.1.9, tag: @firebase/remote-config-types@0.1.5, tag: @firebase/polyfill@0.3.30, tag: @firebase/performance@0.2.28, tag: @firebase/performance-types@0.0.8, tag: @firebase/messaging@0.6.0, tag: @firebase/messaging-types@0.4.0, tag: @firebase/logger@0.1.33, tag: @firebase/installations@0.3.8, tag: @firebase/installations-types@0.2.4, tag: @firebase/functions@0.4.28, tag: @firebase/functions-types@0.3.13, tag: @firebase/firestore@1.9.0, tag: @firebase/firestore-types@1.9.0, tag: @firebase/database@0.5.16, tag: @firebase/database-types@0.4.10, tag: @firebase/component@0.1.1, tag: @firebase/auth@0.13.3, tag: @firebase/auth-types@0.9.3, tag: @firebase/auth-interop-types@0.1.1, tag: @firebase/app@0.5.0, tag: @firebase/app-types@0.5.0, tag: @firebase/analytics@0.2.9, tag: @firebase/analytics-types@0.2.5, tag: @firebase/analytics-interop-types@0.1.1) +Author: Christina Holland +Date: Thu Dec 12 13:36:16 2019 -0800 + + Publish firebase@7.6.0 + +commit e0cd8289f3f9ca97b36b6dbfbbe41a76c7bab3aa +Author: Mertcan Mermerkaya +Date: Thu Dec 12 19:37:09 2019 +0000 + + Update Messaging documentation (#2432) + +commit 4905036be90be559cd66cc64ebcd67a280e036cd +Author: Michael Lehenbauer +Date: Thu Dec 12 10:55:48 2019 -0800 + + Fix VS Code launch.json to look for mocha/karma in right location. (#2435) + + Due to aeeaa14361d76d3c06fead95a2fd2359b28ad62e we need to look for mocha / karma in the root node_modules folder instead of relative to packages/firestore. + +commit 627bce6715f402cbd9ce85f9ab19c986bf924136 +Author: Christina Holland +Date: Thu Dec 12 10:16:07 2019 -0800 + + add installations to version logging constants (#2433) + +commit 2ceec159feadda90736aa5c081606cd8d988c76e +Author: Renovate Bot +Date: Tue Dec 10 23:07:13 2019 +0200 + + Update all non-major dependencies (#2374) + +commit 33388aebf7ebd902684b58e42426954e12b26d1d +Author: Christina Holland +Date: Tue Dec 10 11:53:57 2019 -0800 + + Add version reporting for all packages (#2405) + + Add version reporting for all packages plus bundle variant suffix + +commit 85c9f48352e701f634ebf702b3a4ddb5d9892857 +Author: Richie Foreman +Date: Tue Dec 10 14:04:15 2019 -0500 + + Tighten the typing in the Firebase Performance package (#2402) + + * Tighten the typings on Firebase Performance SDK + + * run yarn run v1.21.0 + $ prettier --config .prettierrc --write '**/*.{ts,js}' + config/.eslintrc.js 70ms + config/functions/index.js 47ms + config/karma.base.js 29ms + config/karma.saucelabs.js 42ms + config/webpack.test.js 18ms + integration/browserify/karma.conf.js 10ms + integration/browserify/src/namespace.test.js 7ms + integration/firebase-typings/index.submodules.ts 217ms + integration/firebase-typings/index.ts 9ms + integration/firestore/gulpfile.js 19ms + integration/firestore/karma.conf.js 11ms + integration/messaging/download-browsers.js 9ms + integration/messaging/manual-test-server.js 6ms + integration/messaging/test/static/app.js 23ms + integration/messaging/test/static/firebase-messaging-sw.js 9ms + integration/messaging/test/static/sw-shared.js 5ms + integration/messaging/test/static/valid-no-vapid-key/firebaseConfig.js 8ms + integration/messaging/test/static/valid-no-vapid-key/sw.js 7ms + integration/messaging/test/static/valid-vapid-key/firebaseConfig.js 7ms + integration/messaging/test/static/valid-vapid-key/sw.js 6ms + integration/messaging/test/test-default-sw.js 15ms + integration/messaging/test/test-deleteToken.js 19ms + integration/messaging/test/test-send.js 40ms + integration/messaging/test/test-updateToken.js 14ms + integration/messaging/test/test-valid-manifest.js 10ms + integration/messaging/test/utils/deleteFCMToken.js 7ms + integration/messaging/test/utils/getDemoSetup.js 6ms + integration/messaging/test/utils/getErrors.js 6ms + integration/messaging/test/utils/getFCMToken.js 6ms + integration/messaging/test/utils/getReceivedMessages.js 8ms + integration/messaging/test/utils/makeFCMAPICall.js 8ms + integration/messaging/test/utils/retrieveFCMToken.js 6ms + integration/messaging/test/utils/setupNotificationPermission.js 9ms + integration/messaging/test/utils/test-server.js 11ms + integration/messaging/test/utils/timeForward.js 6ms + integration/shared/validator.js 14ms + integration/typescript/karma.conf.js 7ms + integration/typescript/test/namespace.test.ts 10ms + integration/typescript/test/typings.d.ts 9ms + integration/webpack/karma.conf.js 7ms + integration/webpack/src/namespace.test.js 6ms + integration/webpack/webpack.config.js 5ms + packages/analytics-interop-types/index.d.ts 11ms + packages/analytics-types/index.d.ts 26ms + packages/analytics/.eslintrc.js 5ms + packages/analytics/index.test.ts 40ms + packages/analytics/index.ts 19ms + packages/analytics/karma.conf.js 6ms + packages/analytics/rollup.config.js 10ms + packages/analytics/src/constants.ts 8ms + packages/analytics/src/errors.ts 8ms + packages/analytics/src/factory.ts 21ms + packages/analytics/src/functions.test.ts 30ms + packages/analytics/src/functions.ts 18ms + packages/analytics/src/helpers.test.ts 95ms + packages/analytics/src/helpers.ts 30ms + packages/analytics/testing/get-fake-firebase-services.ts 10ms + packages/analytics/testing/gtag-script-util.ts 6ms + packages/analytics/testing/setup.ts 5ms + packages/app-types/index.d.ts 10ms + packages/app-types/private.d.ts 16ms + packages/app/.eslintrc.js 5ms + packages/app/index.lite.ts 5ms + packages/app/index.node.ts 6ms + packages/app/index.rn.ts 6ms + packages/app/index.ts 9ms + packages/app/karma.conf.js 6ms + packages/app/rollup.config.js 14ms + packages/app/src/constants.ts 11ms + packages/app/src/errors.ts 10ms + packages/app/src/firebaseApp.ts 22ms + packages/app/src/firebaseNamespace.ts 8ms + packages/app/src/firebaseNamespaceCore.ts 32ms + packages/app/src/lite/firebaseAppLite.ts 22ms + packages/app/src/lite/firebaseNamespaceLite.ts 9ms + packages/app/src/logger.ts 6ms + packages/app/src/platformLoggerService.ts 8ms + packages/app/src/registerCoreComponents.ts 6ms + packages/app/test/firebaseApp.test.ts 72ms + packages/app/test/platformLogger.test.ts 24ms + packages/app/test/setup.ts 10ms + packages/auth-interop-types/index.d.ts 7ms + packages/auth-types/index.d.ts 54ms + packages/component/.eslintrc.js 5ms + packages/component/index.ts 5ms + packages/component/karma.conf.js 6ms + packages/component/rollup.config.js 8ms + packages/component/src/component_container.test.ts 17ms + packages/component/src/component_container.ts 11ms + packages/component/src/component.ts 8ms + packages/component/src/constants.ts 4ms + packages/component/src/provider.test.ts 60ms + packages/component/src/provider.ts 23ms + packages/component/src/types.ts 7ms + packages/component/test/setup.ts 5ms + packages/component/test/util.ts 8ms + packages/database-types/index.d.ts 18ms + packages/database/index.node.ts 12ms + packages/database/index.ts 10ms + packages/database/karma.conf.js 6ms + packages/database/rollup.config.js 9ms + packages/database/src/api/Database.ts 17ms + packages/database/src/api/DataSnapshot.ts 16ms + packages/database/src/api/internal.ts 8ms + packages/database/src/api/onDisconnect.ts 16ms + packages/database/src/api/Query.ts 64ms + packages/database/src/api/Reference.ts 44ms + packages/database/src/api/test_access.ts 9ms + packages/database/src/api/TransactionResult.ts 6ms + packages/database/src/core/AuthTokenProvider.ts 13ms + packages/database/src/core/CompoundWrite.ts 18ms + packages/database/src/core/operation/AckUserWrite.ts 11ms + packages/database/src/core/operation/ListenComplete.ts 6ms + packages/database/src/core/operation/Merge.ts 10ms + packages/database/src/core/operation/Operation.ts 9ms + packages/database/src/core/operation/Overwrite.ts 7ms + packages/database/src/core/PersistentConnection.ts 141ms + packages/database/src/core/ReadonlyRestClient.ts 40ms + packages/database/src/core/Repo_transaction.ts 66ms + packages/database/src/core/Repo.ts 67ms + packages/database/src/core/RepoInfo.ts 14ms + packages/database/src/core/RepoManager.ts 14ms + packages/database/src/core/ServerActions.ts 12ms + packages/database/src/core/snap/ChildrenNode.ts 55ms + packages/database/src/core/snap/childSet.ts 24ms + packages/database/src/core/snap/comparators.ts 5ms + packages/database/src/core/snap/indexes/Index.ts 8ms + packages/database/src/core/snap/indexes/KeyIndex.ts 9ms + packages/database/src/core/snap/indexes/PathIndex.ts 10ms + packages/database/src/core/snap/indexes/PriorityIndex.ts 10ms + packages/database/src/core/snap/indexes/ValueIndex.ts 8ms + packages/database/src/core/snap/IndexMap.ts 22ms + packages/database/src/core/snap/LeafNode.ts 19ms + packages/database/src/core/snap/Node.ts 10ms + packages/database/src/core/snap/nodeFromJSON.ts 16ms + packages/database/src/core/snap/snap.ts 8ms + packages/database/src/core/SnapshotHolder.ts 5ms + packages/database/src/core/SparseSnapshotTree.ts 14ms + packages/database/src/core/stats/StatsCollection.ts 5ms + packages/database/src/core/stats/StatsListener.ts 6ms + packages/database/src/core/stats/StatsManager.ts 6ms + packages/database/src/core/stats/StatsReporter.ts 8ms + packages/database/src/core/storage/DOMStorageWrapper.ts 9ms + packages/database/src/core/storage/MemoryStorage.ts 5ms + packages/database/src/core/storage/storage.ts 7ms + packages/database/src/core/SyncPoint.ts 19ms + packages/database/src/core/SyncTree.ts 76ms + packages/database/src/core/util/EventEmitter.ts 16ms + packages/database/src/core/util/ImmutableTree.ts 42ms + packages/database/src/core/util/libs/parser.ts 21ms + packages/database/src/core/util/NextPushId.ts 14ms + packages/database/src/core/util/OnlineMonitor.ts 13ms + packages/database/src/core/util/Path.ts 33ms + packages/database/src/core/util/ServerValues.ts 19ms + packages/database/src/core/util/SortedMap.ts 82ms + packages/database/src/core/util/Tree.ts 25ms + packages/database/src/core/util/util.ts 53ms + packages/database/src/core/util/validation.ts 37ms + packages/database/src/core/util/VisibilityMonitor.ts 10ms + packages/database/src/core/version.ts 5ms + packages/database/src/core/view/CacheNode.ts 7ms + packages/database/src/core/view/Change.ts 11ms + packages/database/src/core/view/ChildChangeAccumulator.ts 13ms + packages/database/src/core/view/CompleteChildSource.ts 10ms + packages/database/src/core/view/Event.ts 11ms + packages/database/src/core/view/EventGenerator.ts 13ms + packages/database/src/core/view/EventQueue.ts 20ms + packages/database/src/core/view/EventRegistration.ts 23ms + packages/database/src/core/view/filter/IndexedFilter.ts 27ms + packages/database/src/core/view/filter/LimitedFilter.ts 42ms + packages/database/src/core/view/filter/NodeFilter.ts 9ms + packages/database/src/core/view/filter/RangedFilter.ts 20ms + packages/database/src/core/view/QueryParams.ts 62ms + packages/database/src/core/view/View.ts 27ms + packages/database/src/core/view/ViewCache.ts 10ms + packages/database/src/core/view/ViewProcessor.ts 57ms + packages/database/src/core/WriteTree.ts 44ms + packages/database/src/realtime/BrowserPollConnection.ts 48ms + packages/database/src/realtime/Connection.ts 44ms + packages/database/src/realtime/Constants.ts 6ms + packages/database/src/realtime/polling/PacketReceiver.ts 9ms + packages/database/src/realtime/Transport.ts 9ms + packages/database/src/realtime/TransportManager.ts 8ms + packages/database/src/realtime/WebSocketConnection.ts 29ms + packages/database/test/browser/crawler_support.test.ts 27ms + packages/database/test/compound_write.test.ts 54ms + packages/database/test/connection.test.ts 8ms + packages/database/test/database.test.ts 23ms + packages/database/test/datasnapshot.test.ts 50ms + packages/database/test/helpers/EventAccumulator.ts 8ms + packages/database/test/helpers/events.ts 21ms + packages/database/test/helpers/util.ts 22ms + packages/database/test/info.test.ts 21ms + packages/database/test/node.test.ts 43ms + packages/database/test/order_by.test.ts 40ms + packages/database/test/order.test.ts 57ms + packages/database/test/path.test.ts 14ms + packages/database/test/promise.test.ts 31ms + packages/database/test/query.test.ts 443ms + packages/database/test/repoinfo.test.ts 38ms + packages/database/test/servervalues.test.ts 15ms + packages/database/test/sortedmap.test.ts 57ms + packages/database/test/sparsesnapshottree.test.ts 30ms + packages/database/test/transaction.test.ts 155ms + packages/firebase/analytics/index.ts 5ms + packages/firebase/app/index.ts 5ms + packages/firebase/auth/index.ts 5ms + packages/firebase/database/index.ts 5ms + packages/firebase/empty-import.d.ts 5ms + packages/firebase/externs/firebase-app-externs.js 12ms + packages/firebase/externs/firebase-app-internal-externs.js 10ms + packages/firebase/externs/firebase-auth-externs.js 47ms + packages/firebase/externs/firebase-client-auth-externs.js 10ms + packages/firebase/externs/firebase-database-externs.js 20ms + packages/firebase/externs/firebase-database-internal-externs.js 6ms + packages/firebase/externs/firebase-error-externs.js 5ms + packages/firebase/externs/firebase-externs.js 6ms + packages/firebase/externs/firebase-firestore-externs.js 30ms + packages/firebase/externs/firebase-messaging-externs.js 6ms + packages/firebase/externs/firebase-storage-externs.js 17ms + packages/firebase/firestore/index.ts 5ms + packages/firebase/functions/index.ts 5ms + packages/firebase/index.d.ts 229ms + packages/firebase/installations/index.ts 5ms + packages/firebase/messaging/index.ts 4ms + packages/firebase/performance/index.ts 4ms + packages/firebase/remote-config/index.ts 4ms + packages/firebase/rollup-internal.config.js 11ms + packages/firebase/rollup.config.js 20ms + packages/firebase/src/index.cdn.ts 7ms + packages/firebase/src/index.node.ts 5ms + packages/firebase/src/index.perf.ts 5ms + packages/firebase/src/index.rn.ts 5ms + packages/firebase/src/index.ts 6ms + packages/firebase/storage/index.ts 4ms + packages/firestore-types/index.d.ts 29ms + packages/firestore/.eslintrc.js 5ms + packages/firestore/index.console.ts 4ms + packages/firestore/index.node.ts 7ms + packages/firestore/index.ts 9ms + packages/firestore/karma.conf.js 8ms + packages/firestore/rollup.config.js 11ms + packages/firestore/src/api/blob.ts 13ms + packages/firestore/src/api/credentials.ts 31ms + packages/firestore/src/api/database.ts 207ms + packages/firestore/src/api/field_path.ts 15ms + packages/firestore/src/api/field_value.ts 9ms + packages/firestore/src/api/geo_point.ts 8ms + packages/firestore/src/api/observer.ts 8ms + packages/firestore/src/api/timestamp.ts 9ms + packages/firestore/src/api/user_data_converter.ts 59ms + packages/firestore/src/auth/user.ts 8ms + packages/firestore/src/core/database_info.ts 9ms + packages/firestore/src/core/event_manager.ts 22ms + packages/firestore/src/core/firestore_client.ts 39ms + packages/firestore/src/core/listen_sequence.ts 7ms + packages/firestore/src/core/query.ts 64ms + packages/firestore/src/core/snapshot_version.ts 9ms + packages/firestore/src/core/sync_engine.ts 85ms + packages/firestore/src/core/target_id_generator.ts 12ms + packages/firestore/src/core/target.ts 14ms + packages/firestore/src/core/transaction_runner.ts 14ms + packages/firestore/src/core/transaction.ts 15ms + packages/firestore/src/core/types.ts 6ms + packages/firestore/src/core/version.ts 8ms + packages/firestore/src/core/view_snapshot.ts 17ms + packages/firestore/src/core/view.ts 32ms + packages/firestore/src/local/encoded_resource_path.ts 13ms + packages/firestore/src/local/index_free_query_engine.ts 13ms + packages/firestore/src/local/index_manager.ts 7ms + packages/firestore/src/local/indexeddb_index_manager.ts 10ms + packages/firestore/src/local/indexeddb_mutation_queue.ts 61ms + packages/firestore/src/local/indexeddb_persistence.ts 98ms + packages/firestore/src/local/indexeddb_remote_document_cache.ts 43ms + packages/firestore/src/local/indexeddb_schema.ts 53ms + packages/firestore/src/local/indexeddb_target_cache.ts 36ms + packages/firestore/src/local/local_documents_view.ts 21ms + packages/firestore/src/local/local_serializer.ts 21ms + packages/firestore/src/local/local_store.ts 82ms + packages/firestore/src/local/local_view_changes.ts 11ms + packages/firestore/src/local/lru_garbage_collector.ts 41ms + packages/firestore/src/local/memory_index_manager.ts 11ms + packages/firestore/src/local/memory_mutation_queue.ts 38ms + packages/firestore/src/local/memory_persistence.ts 38ms + packages/firestore/src/local/memory_remote_document_cache.ts 18ms + packages/firestore/src/local/memory_target_cache.ts 18ms + packages/firestore/src/local/mutation_queue.ts 9ms + packages/firestore/src/local/persistence_promise.ts 27ms + packages/firestore/src/local/persistence.ts 12ms + packages/firestore/src/local/query_engine.ts 5ms + packages/firestore/src/local/reference_set.ts 17ms + packages/firestore/src/local/remote_document_cache.ts 7ms + packages/firestore/src/local/remote_document_change_buffer.ts 11ms + packages/firestore/src/local/shared_client_state_syncer.ts 6ms + packages/firestore/src/local/shared_client_state.ts 70ms + packages/firestore/src/local/simple_db.ts 55ms + packages/firestore/src/local/simple_query_engine.ts 7ms + packages/firestore/src/local/target_cache.ts 12ms + packages/firestore/src/local/target_data.ts 9ms + packages/firestore/src/model/collections.ts 9ms + packages/firestore/src/model/document_comparator.ts 4ms + packages/firestore/src/model/document_key.ts 8ms + packages/firestore/src/model/document_set.ts 13ms + packages/firestore/src/model/document.ts 20ms + packages/firestore/src/model/field_value.ts 48ms + packages/firestore/src/model/mutation_batch.ts 14ms + packages/firestore/src/model/mutation.ts 39ms + packages/firestore/src/model/path.ts 24ms + packages/firestore/src/model/transform_operation.ts 17ms + packages/firestore/src/platform_browser/browser_connectivity_monitor.ts 8ms + packages/firestore/src/platform_browser/browser_init.ts 5ms + packages/firestore/src/platform_browser/browser_platform.ts 7ms + packages/firestore/src/platform_browser/webchannel_connection.ts 29ms + packages/firestore/src/platform_node/grpc_connection.ts 21ms + packages/firestore/src/platform_node/load_protos.ts 8ms + packages/firestore/src/platform_node/node_init.ts 4ms + packages/firestore/src/platform_node/node_platform.ts 11ms + packages/firestore/src/platform/config.ts 8ms + packages/firestore/src/platform/config/goog_module_config.ts 6ms + packages/firestore/src/platform/platform.ts 8ms + packages/firestore/src/protos/firestore_proto_api.d.ts 80ms + packages/firestore/src/remote/backoff.ts 11ms + packages/firestore/src/remote/connection.ts 7ms + packages/firestore/src/remote/connectivity_monitor_noop.ts 5ms + packages/firestore/src/remote/connectivity_monitor.ts 6ms + packages/firestore/src/remote/datastore.ts 13ms + packages/firestore/src/remote/existence_filter.ts 5ms + packages/firestore/src/remote/online_state_tracker.ts 12ms + packages/firestore/src/remote/persistent_stream.ts 38ms + packages/firestore/src/remote/remote_event.ts 8ms + packages/firestore/src/remote/remote_store.ts 41ms + packages/firestore/src/remote/remote_syncer.ts 12ms + packages/firestore/src/remote/rpc_error.ts 16ms + packages/firestore/src/remote/serializer.ts 126ms + packages/firestore/src/remote/stream_bridge.ts 9ms + packages/firestore/src/remote/watch_change.ts 43ms + packages/firestore/src/util/api.ts 6ms + packages/firestore/src/util/array.ts 6ms + packages/firestore/src/util/assert.ts 5ms + packages/firestore/src/util/async_observer.ts 6ms + packages/firestore/src/util/async_queue.ts 26ms + packages/firestore/src/util/error.ts 9ms + packages/firestore/src/util/input_validation.ts 26ms + packages/firestore/src/util/log.ts 8ms + packages/firestore/src/util/misc.ts 14ms + packages/firestore/src/util/node_api.ts 6ms + packages/firestore/src/util/obj_map.ts 11ms + packages/firestore/src/util/obj.ts 12ms + packages/firestore/src/util/promise.ts 7ms + packages/firestore/src/util/sorted_map.ts 50ms + packages/firestore/src/util/sorted_set.ts 18ms + packages/firestore/src/util/types.ts 8ms + packages/firestore/test/integration/api_internal/idle_timeout.test.ts 8ms + packages/firestore/test/integration/api/array_transforms.test.ts 26ms + packages/firestore/test/integration/api/batch_writes.test.ts 32ms + packages/firestore/test/integration/api/cursor.test.ts 83ms + packages/firestore/test/integration/api/database.test.ts 149ms + packages/firestore/test/integration/api/fields.test.ts 40ms + packages/firestore/test/integration/api/get_options.test.ts 62ms + packages/firestore/test/integration/api/numeric_transforms.test.ts 24ms + packages/firestore/test/integration/api/query.test.ts 85ms + packages/firestore/test/integration/api/server_timestamp.test.ts 29ms + packages/firestore/test/integration/api/smoke.test.ts 17ms + packages/firestore/test/integration/api/transactions.test.ts 66ms + packages/firestore/test/integration/api/type.test.ts 14ms + packages/firestore/test/integration/api/validation.test.ts 130ms + packages/firestore/test/integration/bootstrap.ts 6ms + packages/firestore/test/integration/browser/indexeddb.test.ts 8ms + packages/firestore/test/integration/browser/webchannel.test.ts 10ms + packages/firestore/test/integration/prime_backend.test.ts 12ms + packages/firestore/test/integration/remote/remote.test.ts 34ms + packages/firestore/test/integration/remote/stream.test.ts 53ms + packages/firestore/test/integration/util/events_accumulator.ts 22ms + packages/firestore/test/integration/util/firebase_export.ts 4ms + packages/firestore/test/integration/util/helpers.ts 42ms + packages/firestore/test/integration/util/internal_helpers.ts 11ms + packages/firestore/test/unit/api/blob.test.ts 13ms + packages/firestore/test/unit/api/database.test.ts 19ms + packages/firestore/test/unit/api/document_change.test.ts 19ms + packages/firestore/test/unit/api/field_path.test.ts 5ms + packages/firestore/test/unit/api/field_value.test.ts 5ms + packages/firestore/test/unit/api/geo_point.test.ts 11ms + packages/firestore/test/unit/api/timestamp.test.ts 5ms + packages/firestore/test/unit/bootstrap.ts 8ms + packages/firestore/test/unit/core/event_manager.test.ts 53ms + packages/firestore/test/unit/core/listen_sequence.test.ts 7ms + packages/firestore/test/unit/core/query.test.ts 73ms + packages/firestore/test/unit/core/target_id_generator.test.ts 9ms + packages/firestore/test/unit/core/view.test.ts 61ms + packages/firestore/test/unit/generate_spec_json.js 11ms + packages/firestore/test/unit/local/counting_query_engine.ts 12ms + packages/firestore/test/unit/local/encoded_resource_path.test.ts 19ms + packages/firestore/test/unit/local/index_free_query_engine.test.ts 40ms + packages/firestore/test/unit/local/index_manager.test.ts 9ms + packages/firestore/test/unit/local/indexeddb_persistence.test.ts 93ms + packages/firestore/test/unit/local/local_store.test.ts 193ms + packages/firestore/test/unit/local/lru_garbage_collector.test.ts 78ms + packages/firestore/test/unit/local/mutation_queue.test.ts 30ms + packages/firestore/test/unit/local/persistence_promise.test.ts 23ms + packages/firestore/test/unit/local/persistence_test_helpers.ts 15ms + packages/firestore/test/unit/local/persistence_transaction.test.ts 14ms + packages/firestore/test/unit/local/reference_set.test.ts 10ms + packages/firestore/test/unit/local/remote_document_cache.test.ts 37ms + packages/firestore/test/unit/local/remote_document_change_buffer.test.ts 13ms + packages/firestore/test/unit/local/simple_db.test.ts 54ms + packages/firestore/test/unit/local/target_cache.test.ts 30ms + packages/firestore/test/unit/local/test_index_manager.ts 6ms + packages/firestore/test/unit/local/test_mutation_queue.ts 14ms + packages/firestore/test/unit/local/test_remote_document_cache.ts 13ms + packages/firestore/test/unit/local/test_remote_document_change_buffer.ts 7ms + packages/firestore/test/unit/local/test_target_cache.ts 12ms + packages/firestore/test/unit/local/web_storage_shared_client_state.test.ts 60ms + packages/firestore/test/unit/model/document_set.test.ts 13ms + packages/firestore/test/unit/model/document.test.ts 9ms + packages/firestore/test/unit/model/field_value.test.ts 72ms + packages/firestore/test/unit/model/mutation.test.ts 57ms + packages/firestore/test/unit/model/path.test.ts 21ms + packages/firestore/test/unit/platform/platform.test.ts 4ms + packages/firestore/test/unit/remote/node/serializer.test.ts 103ms + packages/firestore/test/unit/remote/remote_event.test.ts 71ms + packages/firestore/test/unit/specs/collection_spec.test.ts 9ms + packages/firestore/test/unit/specs/describe_spec.ts 22ms + packages/firestore/test/unit/specs/existence_filter_spec.test.ts 40ms + packages/firestore/test/unit/specs/limbo_spec.test.ts 66ms + packages/firestore/test/unit/specs/limit_spec.test.ts 49ms + packages/firestore/test/unit/specs/listen_spec.test.ts 133ms + packages/firestore/test/unit/specs/offline_spec.test.ts 18ms + packages/firestore/test/unit/specs/orderby_spec.test.ts 9ms + packages/firestore/test/unit/specs/perf_spec.test.ts 27ms + packages/firestore/test/unit/specs/persistence_spec.test.ts 22ms + packages/firestore/test/unit/specs/query_spec.test.ts 14ms + packages/firestore/test/unit/specs/remote_store_spec.test.ts 12ms + packages/firestore/test/unit/specs/resume_token_spec.test.ts 7ms + packages/firestore/test/unit/specs/spec_builder.ts 80ms + packages/firestore/test/unit/specs/spec_rpc_error.ts 13ms + packages/firestore/test/unit/specs/spec_test_runner.ts 103ms + packages/firestore/test/unit/specs/write_spec.test.ts 104ms + packages/firestore/test/unit/util/api.test.ts 8ms + packages/firestore/test/unit/util/async_queue.test.ts 23ms + packages/firestore/test/unit/util/misc.test.ts 5ms + packages/firestore/test/unit/util/node_api.test.ts 6ms + packages/firestore/test/unit/util/obj_map.test.ts 14ms + packages/firestore/test/unit/util/sorted_map.test.ts 40ms + packages/firestore/test/unit/util/sorted_set.test.ts 18ms + packages/firestore/test/util/api_helpers.ts 11ms + packages/firestore/test/util/equality_matcher.ts 11ms + packages/firestore/test/util/helpers.ts 72ms + packages/firestore/test/util/node_persistence.ts 6ms + packages/firestore/test/util/promise.ts 6ms + packages/firestore/test/util/test_platform.ts 21ms + packages/firestore/tools/console.build.js 9ms + packages/functions-types/index.d.ts 7ms + packages/functions/.eslintrc.js 4ms + packages/functions/index.node.ts 5ms + packages/functions/index.ts 5ms + packages/functions/karma.conf.js 5ms + packages/functions/rollup.config.js 9ms + packages/functions/src/api/error.ts 11ms + packages/functions/src/api/service.ts 16ms + packages/functions/src/config.ts 7ms + packages/functions/src/context.ts 9ms + packages/functions/src/serializer.ts 10ms + packages/functions/test/browser/callable.test.ts 7ms + packages/functions/test/callable.test.ts 16ms + packages/functions/test/serializer.test.ts 13ms + packages/functions/test/service.test.ts 6ms + packages/functions/test/utils.ts 6ms + packages/installations-types/index.d.ts 5ms + packages/installations/.eslintrc.js 5ms + packages/installations/karma.conf.js 5ms + packages/installations/rollup.config.js 8ms + packages/installations/src/api/common.test.ts 9ms + packages/installations/src/api/common.ts 12ms + packages/installations/src/api/create-installation.test.ts 12ms + packages/installations/src/api/create-installation.ts 6ms + packages/installations/src/api/delete-installation.test.ts 11ms + packages/installations/src/api/delete-installation.ts 6ms + packages/installations/src/api/generate-auth-token.test.ts 11ms + packages/installations/src/api/generate-auth-token.ts 7ms + packages/installations/src/functions/delete-installation.test.ts 12ms + packages/installations/src/functions/delete-installation.ts 6ms + packages/installations/src/functions/get-id.test.ts 9ms + packages/installations/src/functions/get-id.ts 6ms + packages/installations/src/functions/get-token.test.ts 29ms + packages/installations/src/functions/get-token.ts 6ms + packages/installations/src/functions/index.ts 5ms + packages/installations/src/helpers/buffer-to-base64-url-safe.test.ts 5ms + packages/installations/src/helpers/buffer-to-base64-url-safe.ts 4ms + packages/installations/src/helpers/extract-app-config.test.ts 7ms + packages/installations/src/helpers/extract-app-config.ts 6ms + packages/installations/src/helpers/generate-fid.test.ts 14ms + packages/installations/src/helpers/generate-fid.ts 7ms + packages/installations/src/helpers/get-installation-entry.test.ts 45ms + packages/installations/src/helpers/get-installation-entry.ts 15ms + packages/installations/src/helpers/idb-manager.test.ts 13ms + packages/installations/src/helpers/idb-manager.ts 11ms + packages/installations/src/helpers/refresh-auth-token.test.ts 20ms + packages/installations/src/helpers/refresh-auth-token.ts 15ms + packages/installations/src/index.ts 7ms + packages/installations/src/interfaces/api-response.ts 4ms + packages/installations/src/interfaces/app-config.ts 5ms + packages/installations/src/interfaces/installation-entry.ts 7ms + packages/installations/src/testing/compare-headers.test.ts 7ms + packages/installations/src/testing/compare-headers.ts 6ms + packages/installations/src/testing/get-fake-app.ts 5ms + packages/installations/src/testing/setup.ts 5ms + packages/installations/src/util/constants.ts 5ms + packages/installations/src/util/errors.ts 8ms + packages/installations/src/util/sleep.test.ts 6ms + packages/installations/src/util/sleep.ts 5ms + packages/installations/test-app/index.js 12ms + packages/installations/test-app/rollup.config.js 6ms + packages/logger/.eslintrc.js 4ms + packages/logger/index.ts 5ms + packages/logger/karma.conf.js 6ms + packages/logger/rollup.config.js 8ms + packages/logger/src/logger.ts 14ms + packages/logger/test/logger.test.ts 10ms + packages/messaging-types/index.d.ts 7ms + packages/messaging/.eslintrc.js 5ms + packages/messaging/index.ts 9ms + packages/messaging/karma.conf.js 5ms + packages/messaging/rollup.config.js 9ms + packages/messaging/src/controllers/base-controller.ts 25ms + packages/messaging/src/controllers/sw-controller.ts 25ms + packages/messaging/src/controllers/sw-types.ts 9ms + packages/messaging/src/controllers/window-controller.ts 19ms + packages/messaging/src/helpers/array-buffer-to-base64.ts 6ms + packages/messaging/src/helpers/base64-to-array-buffer.ts 6ms + packages/messaging/src/helpers/is-array-buffer-equal.ts 6ms + packages/messaging/src/interfaces/internal-services.ts 4ms + packages/messaging/src/interfaces/message-payload.ts 8ms + packages/messaging/src/interfaces/token-details.ts 5ms + packages/messaging/src/interfaces/vapid-details.ts 4ms + packages/messaging/src/models/clean-v1-undefined.ts 9ms + packages/messaging/src/models/db-interface.ts 13ms + packages/messaging/src/models/default-sw.ts 4ms + packages/messaging/src/models/errors.ts 10ms + packages/messaging/src/models/fcm-details.ts 7ms + packages/messaging/src/models/subscription-manager.ts 19ms + packages/messaging/src/models/token-details-model.ts 21ms + packages/messaging/src/models/vapid-details-model.ts 11ms + packages/messaging/src/models/worker-page-message.ts 12ms + packages/messaging/test/constructor.test.ts 10ms + packages/messaging/test/controller-delete-token.test.ts 30ms + packages/messaging/test/controller-get-token.test.ts 73ms + packages/messaging/test/controller-interface.test.ts 27ms + packages/messaging/test/db-interface.test.ts 12ms + packages/messaging/test/get-sw-reg.test.ts 15ms + packages/messaging/test/helpers.test.ts 14ms + packages/messaging/test/index.test.ts 11ms + packages/messaging/test/subscription-manager.test.ts 40ms + packages/messaging/test/sw-controller.test.ts 99ms + packages/messaging/test/testing-utils/db-helper.ts 10ms + packages/messaging/test/testing-utils/detail-comparator.ts 9ms + packages/messaging/test/testing-utils/make-fake-firebase-services.ts 9ms + packages/messaging/test/testing-utils/make-fake-subscription.ts 8ms + packages/messaging/test/testing-utils/make-fake-sw-reg.ts 8ms + packages/messaging/test/testing-utils/mock-fetch.ts 7ms + packages/messaging/test/token-details-model.test.ts 26ms + packages/messaging/test/vapid-details-model.test.ts 13ms + packages/messaging/test/window-controller.test.ts 27ms + packages/performance-types/index.d.ts 8ms + packages/performance/.eslintrc.js 5ms + packages/performance/index.ts 8ms + packages/performance/karma.conf.js 6ms + packages/performance/rollup.config.js 10ms + packages/performance/src/constants.ts 5ms + packages/performance/src/controllers/perf.test.ts 12ms + packages/performance/src/controllers/perf.ts 6ms + packages/performance/src/resources/network_request.test.ts 8ms + packages/performance/src/resources/network_request.ts 7ms + packages/performance/src/resources/trace.test.ts 26ms + packages/performance/src/resources/trace.ts 24ms + packages/performance/src/services/api_service.test.ts 10ms + packages/performance/src/services/api_service.ts 14ms + packages/performance/src/services/cc_service.test.ts 9ms + packages/performance/src/services/cc_service.ts 12ms + packages/performance/src/services/iid_service.test.ts 7ms + packages/performance/src/services/iid_service.ts 6ms + packages/performance/src/services/initialization_service.test.ts 7ms + packages/performance/src/services/initialization_service.ts 8ms + packages/performance/src/services/oob_resources_service.test.ts 14ms + packages/performance/src/services/oob_resources_service.ts 8ms + packages/performance/src/services/perf_logger.test.ts 15ms + packages/performance/src/services/perf_logger.ts 22ms + packages/performance/src/services/remote_config_service.test.ts 21ms + packages/performance/src/services/remote_config_service.ts 18ms + packages/performance/src/services/settings_service.ts 9ms + packages/performance/src/utils/attribute_utils.test.ts 14ms + packages/performance/src/utils/attributes_utils.ts 9ms + packages/performance/src/utils/console_logger.ts 5ms + packages/performance/src/utils/errors.ts 7ms + packages/performance/src/utils/metric_utils.test.ts 7ms + packages/performance/src/utils/metric_utils.ts 5ms + packages/performance/test/setup.ts 4ms + packages/polyfill/index.ts 4ms + packages/polyfill/rollup.config.js 6ms + packages/remote-config-types/index.d.ts 8ms + packages/remote-config/.eslintrc.js 4ms + packages/remote-config/index.ts 9ms + packages/remote-config/karma.conf.js 5ms + packages/remote-config/rollup.config.js 7ms + packages/remote-config/src/client/caching_client.ts 10ms + packages/remote-config/src/client/exponential_backoff.ts 6ms + packages/remote-config/src/client/remote_config_fetch_client.ts 7ms + packages/remote-config/src/client/rest_client.ts 13ms + packages/remote-config/src/client/retrying_client.ts 10ms + packages/remote-config/src/errors.ts 9ms + packages/remote-config/src/language.ts 5ms + packages/remote-config/src/remote_config.ts 17ms + packages/remote-config/src/storage/storage_cache.ts 8ms + packages/remote-config/src/storage/storage.ts 22ms + packages/remote-config/src/value.ts 8ms + packages/remote-config/test_app/index.js 27ms + packages/remote-config/test/client/caching_client.test.ts 18ms + packages/remote-config/test/client/exponential_backoff.test.ts 8ms + packages/remote-config/test/client/rest_client.test.ts 24ms + packages/remote-config/test/client/retrying_client.test.ts 18ms + packages/remote-config/test/errors.test.ts 25ms + packages/remote-config/test/language.test.ts 6ms + packages/remote-config/test/remote_config.test.ts 40ms + packages/remote-config/test/setup.ts 5ms + packages/remote-config/test/storage/storage_cache.test.ts 9ms + packages/remote-config/test/storage/storage.test.ts 10ms + packages/remote-config/test/value.test.ts 10ms + packages/rxfire/.eslintrc.js 5ms + packages/rxfire/auth/index.ts 7ms + packages/rxfire/database/fromRef.ts 6ms + packages/rxfire/database/index.ts 5ms + packages/rxfire/database/interfaces.ts 5ms + packages/rxfire/database/list/audit-trail.ts 11ms + packages/rxfire/database/list/index.ts 27ms + packages/rxfire/database/object/index.ts 15ms + packages/rxfire/database/utils.ts 5ms + packages/rxfire/firestore/collection/index.ts 18ms + packages/rxfire/firestore/document/index.ts 11ms + packages/rxfire/firestore/fromRef.ts 7ms + packages/rxfire/firestore/index.ts 5ms + packages/rxfire/functions/index.ts 6ms + packages/rxfire/karma.conf.js 6ms + packages/rxfire/rollup.config.js 9ms + packages/rxfire/rxfire-auth.js 8ms + packages/rxfire/rxfire-database.js 23ms + packages/rxfire/rxfire-firestore.js 23ms + packages/rxfire/rxfire-functions.js 5ms + packages/rxfire/rxfire-storage.js 8ms + packages/rxfire/storage/index.ts 9ms + packages/rxfire/test/database.test.ts 67ms + packages/rxfire/test/firestore.test.ts 31ms + packages/storage-types/index.d.ts 14ms + packages/storage/.eslintrc.js 5ms + packages/storage/index.ts 9ms + packages/storage/karma.conf.js 6ms + packages/storage/rollup.config.js 9ms + packages/storage/src/implementation/args.ts 17ms + packages/storage/src/implementation/async.ts 5ms + packages/storage/src/implementation/authwrapper.ts 13ms + packages/storage/src/implementation/backoff.ts 10ms + packages/storage/src/implementation/blob.ts 36ms + packages/storage/src/implementation/blobbuilder.d.ts 6ms + packages/storage/src/implementation/constants.ts 5ms + packages/storage/src/implementation/error.ts 19ms + packages/storage/src/implementation/failrequest.ts 6ms + packages/storage/src/implementation/fs.ts 8ms + packages/storage/src/implementation/json.ts 7ms + packages/storage/src/implementation/list.ts 11ms + packages/storage/src/implementation/location.ts 11ms + packages/storage/src/implementation/metadata.ts 20ms + packages/storage/src/implementation/observer.ts 9ms + packages/storage/src/implementation/path.ts 7ms + packages/storage/src/implementation/request.ts 24ms + packages/storage/src/implementation/requestinfo.ts 7ms + packages/storage/src/implementation/requestmaker.ts 5ms + packages/storage/src/implementation/requestmap.ts 7ms + packages/storage/src/implementation/requests.ts 38ms + packages/storage/src/implementation/string.ts 21ms + packages/storage/src/implementation/taskenums.ts 9ms + packages/storage/src/implementation/type.ts 8ms + packages/storage/src/implementation/url.ts 6ms + packages/storage/src/implementation/xhrio_network.ts 11ms + packages/storage/src/implementation/xhrio.ts 6ms + packages/storage/src/implementation/xhriopool.ts 5ms + packages/storage/src/list.ts 5ms + packages/storage/src/metadata.ts 6ms + packages/storage/src/reference.ts 35ms + packages/storage/src/service.ts 15ms + packages/storage/src/task.ts 59ms + packages/storage/src/tasksnapshot.ts 6ms + packages/storage/test/blob.test.ts 10ms + packages/storage/test/reference.test.ts 42ms + packages/storage/test/request.test.ts 16ms + packages/storage/test/requests.test.ts 59ms + packages/storage/test/service.test.ts 30ms + packages/storage/test/string.test.ts 17ms + packages/storage/test/task.test.ts 48ms + packages/storage/test/testshared.ts 13ms + packages/storage/test/xhrio.ts 12ms + packages/template-types/index.d.ts 4ms + packages/template/.eslintrc.js 6ms + packages/template/index.node.ts 5ms + packages/template/index.ts 4ms + packages/template/karma.conf.js 5ms + packages/template/rollup.config.js 8ms + packages/template/src/index.ts 5ms + packages/template/test/index.test.ts 5ms + packages/testing/index.ts 5ms + packages/testing/rollup.config.js 8ms + packages/testing/src/api/index.ts 20ms + packages/testing/test/database.test.ts 18ms + packages/util/.eslintrc.js 5ms + packages/util/index.node.ts 4ms + packages/util/index.ts 6ms + packages/util/karma.conf.js 6ms + packages/util/rollup.config.js 8ms + packages/util/src/assert.ts 5ms + packages/util/src/constants.ts 5ms + packages/util/src/crypt.ts 26ms + packages/util/src/deepCopy.ts 12ms + packages/util/src/deferred.ts 8ms + packages/util/src/environment.ts 9ms + packages/util/src/errors.ts 14ms + packages/util/src/json.ts 5ms + packages/util/src/jwt.ts 30ms + packages/util/src/obj.ts 14ms + packages/util/src/query.ts 10ms + packages/util/src/sha1.ts 32ms + packages/util/src/subscribe.ts 52ms + packages/util/src/utf8.ts 20ms + packages/util/src/validation.ts 16ms + packages/util/test/base64.test.ts 6ms + packages/util/test/deepCopy.test.ts 14ms + packages/util/test/errors.test.ts 13ms + packages/util/test/subscribe.test.ts 21ms + packages/webchannel-wrapper/externs/overrides.js 8ms + packages/webchannel-wrapper/src/index.d.ts 9ms + packages/webchannel-wrapper/src/index.js 13ms + packages/webchannel-wrapper/tools/build.js 10ms + scripts/docgen/generate-docs.js 41ms + scripts/docgen/typedoc.js 5ms + scripts/emulator-testing/database-test-runner.ts 7ms + scripts/emulator-testing/emulators/database-emulator.ts 6ms + scripts/emulator-testing/emulators/emulator.ts 19ms + scripts/emulator-testing/emulators/firestore-emulator.ts 5ms + scripts/emulator-testing/firestore-test-runner.ts 12ms + scripts/release/cli.js 17ms + scripts/release/utils/banner.js 6ms + scripts/release/utils/constants.js 4ms + scripts/release/utils/git.js 11ms + scripts/release/utils/inquirer.js 14ms + scripts/release/utils/lerna.js 6ms + scripts/release/utils/npm.js 10ms + scripts/release/utils/tests.js 6ms + scripts/release/utils/workspace.js 18ms + scripts/release/utils/yarn.js 6ms + scripts/run_saucelabs.js 20ms + tools/config.js 22ms + tools/gitHooks/license.js 13ms + tools/gitHooks/prepush.js 6ms + tools/gitHooks/prettier.js 11ms + tools/pretest.js 8ms + tools/repl.js 7ms + Done in 17.21s. + +commit f0fc426ec84e2949d49ac8b553c675202bdea34f +Author: Feiyang +Date: Tue Dec 10 10:26:16 2019 -0800 + + remove unused imports (#2425) + +commit ff8f85463102c4ed8469daa3fe2f0aac237c232a +Author: Mertcan Mermerkaya +Date: Tue Dec 10 16:52:59 2019 +0000 + + Suppress server errors in deleteToken request (#2428) + +commit 5a880c666377b14aa7d68fe5e8db42a1b5aaf218 +Author: Yuchen Shi +Date: Mon Dec 9 16:32:06 2019 -0800 + + Implement addAuthTokenListener in testing. Fix #2417. (#2423) + +commit d1f2693d06189cc424f545e891141b1bf027abdc +Author: Mertcan Mermerkaya +Date: Tue Dec 10 00:12:55 2019 +0000 + + Request notification permission in getToken if permission is "d… (#2421) + + Instead of returning null and expecting the user to request the notification permission, do it automatically. + +commit f9d26f7866d94990fc2be6c6a85cf27aa3bf624b +Author: Brian Chen +Date: Mon Dec 9 16:00:21 2019 -0800 + + Add support for Typescript Custom Mapping (#2240) + +commit 52c1703b3ef728d60913ca091229dc6a3618f59b +Merge: 0fa9d3a3f c06e290a8 +Author: Feiyang1 +Date: Mon Dec 9 15:43:50 2019 -0800 + + Merge branch 'release' + Release 7.5.2 + +commit c06e290a86858c4f387a083944d8137f8d53abdc (tag: rxfire@3.9.4, tag: firebase@7.5.2, tag: @firebase/testing@0.16.2, tag: @firebase/database@0.5.15) +Author: Feiyang1 +Date: Fri Dec 6 13:18:56 2019 -0800 + + Publish firebase@7.5.2 + +commit a20ce2321dd6bd447eda4bb65e105a550aebbccb +Author: Feiyang +Date: Fri Dec 6 12:13:47 2019 -0800 + + Add @firebase/component as a dependency to database (#2416) + +commit 0fa9d3a3f82b221af7ca15e9b6226bc0e3daa98b +Author: Mertcan Mermerkaya +Date: Fri Dec 6 14:10:54 2019 +0000 + + Add the platform logging header to generateAuthToken requests (#2400) + +commit 91e40c1b293647aa483da51224edf05eb0d9a509 +Author: Mertcan Mermerkaya +Date: Fri Dec 6 12:02:34 2019 +0000 + + Append "Request" to API function names (#2406) + + For better distinction between the API functions and the SDK functions, especially deleteInstallation. + +commit 4efa70e7e85c35f043bffa41e3ae2b39c7434541 +Author: Renovate Bot +Date: Fri Dec 6 02:40:36 2019 +0100 + + chore(deps): update dependency typescript to v3.7.3 (#2408) + +commit 7eaaa33985bf571a2149133cf83da334632f3487 +Author: Renovate Bot +Date: Fri Dec 6 02:35:12 2019 +0100 + + Update dependency yargs to v15 (#2375) + +commit 6fe6c061e543c681d7d199e0c8acce16dabb6a70 +Merge: 878f577fe 93651e6c3 +Author: Feiyang1 +Date: Thu Dec 5 17:10:14 2019 -0800 + + Merge branch 'release' + Release 7.5.1 + +commit 93651e6c3b94bbafa44734497fe320ebac8bd806 (tag: rxfire@3.9.3, tag: firebase@7.5.1, tag: @firebase/webchannel-wrapper@0.2.33, tag: @firebase/util@0.2.35, tag: @firebase/testing@0.16.1, tag: @firebase/storage@0.3.21, tag: @firebase/storage-types@0.3.7, tag: @firebase/remote-config@0.1.8, tag: @firebase/remote-config-types@0.1.4, tag: @firebase/performance@0.2.27, tag: @firebase/performance-types@0.0.7, tag: @firebase/messaging@0.5.8, tag: @firebase/messaging-types@0.3.6, tag: @firebase/logger@0.1.32, tag: @firebase/installations@0.3.7, tag: @firebase/installations-types@0.2.3, tag: @firebase/functions@0.4.27, tag: @firebase/functions-types@0.3.12, tag: @firebase/firestore@1.8.1, tag: @firebase/firestore-types@1.8.1, tag: @firebase/database@0.5.14, tag: @firebase/database-types@0.4.9, tag: @firebase/component@0.1.0, tag: @firebase/auth@0.13.2, tag: @firebase/auth-types@0.9.2, tag: @firebase/auth-interop-types@0.1.0, tag: @firebase/app@0.4.26, tag: @firebase/app-types@0.4.9, tag: @firebase/analytics@0.2.8, tag: @firebase/analytics-types@0.2.4, tag: @firebase/analytics-interop-types@0.1.0) +Author: Feiyang1 +Date: Thu Dec 5 16:46:23 2019 -0800 + + Publish firebase@7.5.1 + +commit 878f577fe40ae0909f7efa9d1537a0325543e7f0 +Author: Brian Chen +Date: Thu Dec 5 16:44:05 2019 -0800 + + Check for process.env in isMockPersistence (#2407) + +commit b1ca46d39df3d98891619645fd479b1a723e0634 +Author: CreativeBuilds +Date: Thu Dec 5 18:02:11 2019 -0500 + + docs(rxfire): fix the table layout on auth.md (#2396) + + The pipe character (`|`) in the return value of `idToken()` was breaking the table. The pipe is now escaped properly for Markdown. + +commit 6480d7fa47112cf7c42e4654439cdcc5fbd41629 +Author: Sebastian Schmidt +Date: Wed Dec 4 17:22:24 2019 -0800 + + Small assorted fixes for better property name mangling support (#2403) + +commit 81730ba59bc47de2c2d0cb341cc26e936250b932 +Author: Sebastian Schmidt +Date: Tue Dec 3 15:51:29 2019 -0800 + + Add typings for WebChannel (#2385) + +commit fe11de064b2e827c3a567f27571fea0f10772858 +Author: Christina Holland +Date: Tue Dec 3 14:03:57 2019 -0800 + + Add internal API to collect platform version info (#2368) + + Add platform version tracking and logging API. + +commit e4a987ef36511fb4f578bfa12b13fc3905d252a2 +Author: Feiyang +Date: Tue Dec 3 13:36:39 2019 -0800 + + make @firebase/component public (#2397) + +commit a547892d13b74f1467c92639522d9c43d5e20dc4 +Author: Sebastian Schmidt +Date: Mon Dec 2 12:56:26 2019 -0800 + + Compile time asserts (#2367) + +commit 9b8ef5997b6146c46c7638bc1d61c47452c34058 +Author: rsgowman +Date: Mon Dec 2 10:04:50 2019 -0500 + + Recognize and return TENANT_ID_MISMATCH error code (#2389) + + Error was already present, but wasn't wired in. + +commit 4313496180cde5dd29c3837b5246d10daaf4768a +Author: Cameron Manavian +Date: Wed Nov 27 15:53:35 2019 -0800 + + Firebase: Adjust undefined import causing IDE annoyances (#2379) + + * adjust undefined import + + * Update empty-import.d.ts + +commit d1cd07d9be1f90a18fcb8f3e2a8c649aff04086f +Author: Sebastian Schmidt +Date: Wed Nov 27 15:21:33 2019 -0800 + + Don't use long in Proto types (#2386) + +commit 57a0f2bd78afba64b292125522f1071b386a920d +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Tue Nov 26 14:35:53 2019 -0500 + + LimitToLast: back port some changes from android (#2382) + + * LimitToLast: back port some changes from android + + * [AUTOMATED]: Prettier Code Styling + + * Address comments + +commit ae319059e4a083a613a2999c1e61d44c9053a0d7 +Author: Feiyang +Date: Tue Nov 26 10:44:56 2019 -0800 + + Component Framework (#2378) + + * Component framework implementation (#2316) + + * Component implementation + + * update dep version + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * rename variables + + * address comments + + * [AUTOMATED]: Prettier Code Styling + + * remove unused comment + + * update code + + * [AUTOMATED]: Prettier Code Styling + + * rename to clearInstance to have naming consistency + + * make FirebaseApp tests work again + + * fix node tests + + * [AUTOMATED]: Prettier Code Styling + + * add comments for ComponentType + + * [AUTOMATED]: Prettier Code Styling + + * pass Component directly into Providers + + * [AUTOMATED]: Prettier Code Styling + + * correct spellings + + * update readme + + * fix lint issue + + * remove unused import + + * fix API change + + * move types around + + * [AUTOMATED]: Prettier Code Styling + + * improve provider typing + + * [AUTOMATED]: Prettier Code Styling + + * Migrate analytics to component platform (#220) + + * migrate analytics + + * minor analytics refactoring + + * interface merge + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * allow overwriting a registered component + + * [AUTOMATED]: Prettier Code Styling + + * change ComponentType to string enum + + * address comments + + * [AUTOMATED]: Prettier Code Styling + + * remove return only generics + + * Move identifier to options object for getImmediate() + + * [AUTOMATED]: Prettier Code Styling + + * Make getProvider() type safe + + * [AUTOMATED]: Prettier Code Styling + + * define a new method to replace overwrite flag + + * [AUTOMATED]: Prettier Code Styling + + * Make component type safe + + * [AUTOMATED]: Prettier Code Styling + + * remove the generic type from component container + + * Update FirebaseApp and Analytics + + * [AUTOMATED]: Prettier Code Styling + + * remove unneccessary casting + + * [AUTOMATED]: Prettier Code Styling + + * fix typo + + * address comments + + * [AUTOMATED]: Prettier Code Styling + + * update some types + + * [AUTOMATED]: Prettier Code Styling + + * handle errors from instance factory + + * [AUTOMATED]: Prettier Code Styling + + * Migrate Performance to component framework (#2325) + + * Migrate Performance to component framework + + * [AUTOMATED]: Prettier Code Styling + + * removed unused import + + * Migrate RC to component framework (#2324) + + * Migrate RC to component framework + + * [AUTOMATED]: Prettier Code Styling + + * remove unused import + + * Migrate storage to component framework (#2326) + + * Migrate Database to component framework (#2327) + + * Migrate Database to component framework + + * revert auth formatting + + * Mirgrate functions to component framework (#2328) + + * Migrate installations to component framework (#2322) + + * Migrate installations to component framework + + * remove unused import + + * update calling code according to the latest component changes + + * added forceRefresh back + + * Migrate messaging to component framework (#2323) + + * Migrate messaging to component framework + + * remove unused import + + * bundle firebase services in a single object + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * address comment + + * Make tests work again + + * Migrate firestore to component framework (#2329) + + * Migrate Firestore to component framework + + * [AUTOMATED]: Prettier Code Styling + + * remove unused import + + * removed unnecessary type assertion + + * update getImmeidate call + + * Migrate testing to component framework + + * [AUTOMATED]: Prettier Code Styling + + * Update SDKs to use the new type system (#2358) + + * update database types + + * update Firestore types + + * update installations type + + * update messaging types + + * update functions types + + * update performance types + + * update remoteconfig types + + * update storage types + + * fix analytics issue + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: Prettier Code Styling + + * Use the new method + + * Migrate Auth to component framework (#2342) + + * Mirgrate Auth to component framework + + * update Auth types + + * [AUTOMATED]: Prettier Code Styling + + * address comments + + * update deps + + * [AUTOMATED]: Prettier Code Styling + + * Get installations service from the container (#2376) + + * Get installations from the container + + * [AUTOMATED]: Prettier Code Styling + + * revert dev changes + + * convert eslint from json to js. + + * [AUTOMATED]: Prettier Code Styling + + * fix broken scripts + + * address comments + + * [AUTOMATED]: Prettier Code Styling + + * fix typos + +commit ba2ff353f709df018af78d397dc5d00d70565d5c +Author: Feiyang +Date: Mon Nov 25 17:10:16 2019 -0800 + + Reject with indexeddb errors in RemoteConfig.fetch() (#2381) + + * pass the indexeddb errors to the caller. + + * [AUTOMATED]: Prettier Code Styling + +commit 638aba6bdb31aa848cf6f9407eaaff557dbdd960 +Author: Jeff +Date: Fri Nov 22 15:04:20 2019 -0800 + + rxfire: objectVal bugfix (#2352) + +commit ba1932f3288b5e39a5d1e762325d5358248c133a +Merge: aeeaa1436 0d144c999 +Author: Feiyang1 +Date: Thu Nov 21 15:28:23 2019 -0800 + + Merge branch 'release' + Release 7.5.0 + +commit 0d144c999f03f3d2bdf3bc750853257829f03a0a (tag: rxfire@3.9.2, tag: firebase@7.5.0, tag: @firebase/webchannel-wrapper@0.2.32, tag: @firebase/util@0.2.34, tag: @firebase/testing@0.16.0, tag: @firebase/storage@0.3.20, tag: @firebase/storage-types@0.3.6, tag: @firebase/remote-config@0.1.7, tag: @firebase/remote-config-types@0.1.3, tag: @firebase/polyfill@0.3.29, tag: @firebase/performance@0.2.26, tag: @firebase/performance-types@0.0.6, tag: @firebase/messaging@0.5.7, tag: @firebase/messaging-types@0.3.5, tag: @firebase/logger@0.1.31, tag: @firebase/installations@0.3.6, tag: @firebase/installations-types@0.2.2, tag: @firebase/functions@0.4.26, tag: @firebase/functions-types@0.3.11, tag: @firebase/firestore@1.8.0, tag: @firebase/firestore-types@1.8.0, tag: @firebase/database@0.5.13, tag: @firebase/database-types@0.4.8, tag: @firebase/auth@0.13.1, tag: @firebase/auth-types@0.9.1, tag: @firebase/app@0.4.25, tag: @firebase/app-types@0.4.8, tag: @firebase/analytics@0.2.7, tag: @firebase/analytics-types@0.2.3) +Author: Feiyang1 +Date: Thu Nov 21 15:12:14 2019 -0800 + + Publish firebase@7.5.0 + +commit aeeaa14361d76d3c06fead95a2fd2359b28ad62e +Author: Christina Holland +Date: Thu Nov 21 14:13:55 2019 -0800 + + Move most devDependencies to root package.json (#2370) + +commit 1a4afc1ddc756a58f8135fb278d2f5355a84ab08 +Author: Brian Chen +Date: Tue Nov 19 17:24:10 2019 -0800 + + Deleting comments from index.d.ts file in packages/firestore-types (#2371) + +commit 542240d093ad54f3c8e5739dcb8449e8b9cab131 +Author: Sebastian Schmidt +Date: Mon Nov 18 12:34:28 2019 -0800 + + Run prettier 1.9.1 (#2369) + +commit 6959d19ac7f3dcde11f337fc06d5ea3a27f9bb89 +Author: Feiyang +Date: Mon Nov 18 11:33:35 2019 -0800 + + correct package name for remote-config (#2195) + +commit 23cf05d5d8a8e961dff0363bdfcf2e9f78b4d222 +Author: Renovate Bot +Date: Mon Nov 18 19:57:31 2019 +0100 + + Update dependency chalk to v3 (#2360) + +commit 8da5ed0baaf2491a52f2f54e7e65a0adc646c23d +Author: Renovate Bot +Date: Mon Nov 18 18:56:40 2019 +0100 + + Update all non-major dependencies (#2359) + +commit 86971ea3c727084fa1a99322afe473d19068bac5 +Author: Thomas Bouldin +Date: Mon Nov 18 08:55:38 2019 -0800 + + Add Database.Servervalue.increment(x) (#2348) + + * Added ServerValue._increment() for not-yet-working operator (needs server-side rollout and API approval) + * Changed server value local resolution to include current offline caches + * Add new tests for ServerValues in general + offline increments + +commit 9ccc3dc204b2bf9c828efe97fcb58226fe701292 +Author: Thomas Bouldin +Date: Fri Nov 15 15:01:49 2019 -0800 + + Add RTDB Node debug target (#2365) + +commit 238914319854a94f135e9ed1be5f95c03f144314 +Author: jmmendivil +Date: Fri Nov 15 16:24:32 2019 -0600 + + add collectionData() to docs (#2290) + +commit 379e192ad6e5c79fb1c7dd9f63df3134b989f4ca +Author: Christina Holland +Date: Fri Nov 15 14:18:44 2019 -0800 + + Make sure functions documentation is generated for Node (#2363) + +commit 2a2b802e8c3631562606f9436995ef42544bb2b3 +Author: Renovate Bot +Date: Fri Nov 15 23:05:59 2019 +0100 + + Update dependency typescript to v3.7.2 (#2344) + + * Update dependency typescript to v3.7.2 + + * fix typing error + +commit d89e7b39df8eda9d7fc077d1c77e24395a51ac06 +Author: Feiyang +Date: Thu Nov 14 15:31:44 2019 -0800 + + remove prerender and unloaded from visibilityState (#2351) + + * remove rerender from visibilityState + + * remove unloaded + +commit 7a027a5adf7189bf29a035e36a12e06b17736edc +Merge: 957401395 732e6691c +Author: Christina Holland +Date: Thu Nov 14 15:30:16 2019 -0800 + + Merge branch 'release' + Release 7.4.0 + +commit 732e6691c512a9e95414658bcbb0efec3a5f23e0 (tag: rxfire@3.9.1, tag: firebase@7.4.0, tag: @firebase/webchannel-wrapper@0.2.31, tag: @firebase/util@0.2.33, tag: @firebase/testing@0.15.1, tag: @firebase/storage@0.3.19, tag: @firebase/remote-config@0.1.6, tag: @firebase/polyfill@0.3.28, tag: @firebase/performance@0.2.25, tag: @firebase/messaging@0.5.6, tag: @firebase/logger@0.1.30, tag: @firebase/installations@0.3.5, tag: @firebase/functions@0.4.25, tag: @firebase/firestore@1.7.1, tag: @firebase/database@0.5.12, tag: @firebase/auth@0.13.0, tag: @firebase/auth-types@0.9.0, tag: @firebase/app@0.4.24, tag: @firebase/analytics@0.2.6) +Author: Christina Holland +Date: Thu Nov 14 13:43:53 2019 -0800 + + Publish firebase@7.4.0 + +commit 9574013959e2944d5b8d1ffd23e9252ef1ccb410 +Author: Sebastian Schmidt +Date: Thu Nov 14 09:53:13 2019 -0800 + + Enable Index-Free Queries (#2357) + +commit cfaedf40e0dd0682810165c70df3c4b4796fe384 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Nov 13 14:53:36 2019 -0800 + + added toc for OAuthCredentialOptions (#2354) + +commit 8b1d680b16405fcaea5d2fef5c68ebb6dcd33579 +Merge: c34f9a555 42476d8f4 +Author: Feiyang1 +Date: Wed Nov 13 10:35:26 2019 -0800 + + Merge branch 'release' + Release 7.3.0 + +commit c34f9a555b5d54a455740193e2285ecaed8bf4b2 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Nov 12 13:34:15 2019 -0800 + + Expose nonce (#2260) + + - exposed nonce in OAuthCredential + - updated regex for backend error mapping and resize sign in popup window + - updated user_cancelled error message + +commit 988017f45bb0960c125224bbb17d9b09bd7e96e9 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Nov 11 10:49:56 2019 -0800 + + treat ionic scheme as cordova environment (#2347) + +commit 14b287856cc2de58e6fa6e6cd97ffa6e34a91200 +Author: Brian Chen +Date: Fri Nov 8 17:11:30 2019 -0800 + + Allow nested arrays for IN queries (#2346) + +commit ed4b1474fe44d9dd1fe0f70ce2bb351e51ecaa90 +Author: Christina Holland +Date: Fri Nov 8 12:47:55 2019 -0800 + + Directly check for existence of gtag script tag (#2339) + +commit efc0a78803990eb01888b7b2121c15377c4007b1 +Author: Renovate Bot +Date: Fri Nov 8 18:38:39 2019 +0100 + + Update dependency chromedriver to v78 (#2315) + +commit 4d23f9cbc607bfbd1116e0bf7c99c4e4e3e6ad8b +Author: Renovate Bot +Date: Fri Nov 8 18:38:08 2019 +0100 + + Update all non-major dependencies (#2343) + +commit 42476d8f41c992f9cf32b919119cec42f3815680 (tag: rxfire@3.9.0, tag: firebase@7.3.0, tag: @firebase/webchannel-wrapper@0.2.30, tag: @firebase/util@0.2.32, tag: @firebase/testing@0.15.0, tag: @firebase/storage@0.3.18, tag: @firebase/remote-config@0.1.5, tag: @firebase/polyfill@0.3.27, tag: @firebase/performance@0.2.24, tag: @firebase/messaging@0.5.5, tag: @firebase/logger@0.1.29, tag: @firebase/installations@0.3.4, tag: @firebase/functions@0.4.24, tag: @firebase/firestore@1.7.0, tag: @firebase/firestore-types@1.7.0, tag: @firebase/database@0.5.11, tag: @firebase/auth@0.12.4, tag: @firebase/app@0.4.23, tag: @firebase/analytics@0.2.5) +Author: Feiyang1 +Date: Thu Nov 7 15:05:22 2019 -0800 + + Publish firebase@7.3.0 + +commit 331f9d062e4c8ccc3545e5f8c15af3ccc8b5d8f3 +Author: Gil +Date: Tue Nov 5 09:13:36 2019 -0800 + + Disallow empty document fields (#2334) + + Port of firebase/firebase-android-sdk#643. + +commit ed87b76e95d5f2e35f423110ae83ed9e1311e649 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Mon Nov 4 19:35:09 2019 -0500 + + Rename QueryData and QueryCache to TargetData and TargetCache (#2333) + + * QueryCache -> TargetCache + + * Rename QueryData -> TargetData + + * Rename QueryPurpose -> TargetPurpose + +commit 332250d82735f068079eebe769fbcc0be1e0374a +Merge: ba4eebb2d 26456c776 +Author: Christina Holland +Date: Mon Nov 4 10:25:33 2019 -0800 + + Merge branch 'release' + Release 7.2.3 + +commit ba4eebb2db8756b9d26c691a3473712b5cf2a8f2 +Author: Omkar Yadav +Date: Mon Nov 4 22:03:26 2019 +0530 + + Use string concatenation instead of array join for making RPC URLs (#2301) + +commit 332346761a3e872592b44f06fbd89d15745a6186 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Fri Nov 1 21:52:56 2019 -0400 + + Release Query.limitToLast(n) (#2321) + + + * [1/3] Query/Target split -- create Target and make remote/ and local/ work with Target. (#2254) + + * [2/3] Query/Target split: make SyncEngine able to handle the mapping between Target and Query. (#2281) + + * [2.8/3] Add limitToLast implementation and tests. (#2296) + + * [3/3] Spec tests for limitToLast+multi-tab (#2300) + + * Add spec test for single client (#2313) + + * add change log for limitToLast + + * Address comments + +commit ad9dc8d76ddf87ff54ffcc8f68cc0289c83f91b8 +Author: Renovate Bot +Date: Sat Nov 2 03:47:08 2019 +0200 + + Update all non-major dependencies (#2314) + +commit ce867b055dadeb20f8794a709580fe6fc1d4faf5 +Author: Brian Chen +Date: Thu Oct 31 15:55:51 2019 -0700 + + Make IN queries publicly available (#2217) + +commit cf2be75aafbbed90f492e9fc55b4b98170617079 +Author: Feiyang +Date: Thu Oct 31 14:11:46 2019 -0700 + + Avoid auth trigger if we haven't yet received the initial user (#2310) + + * Added a flag to guard against using null user before getting the actual user + + * fix typo + + * shorten comment lines + + * [AUTOMATED]: Prettier Code Styling + +commit 26456c7761939895f424de2e6b022b6ba7d95cf3 (tag: rxfire@3.8.8, tag: firebase@7.2.3, tag: @firebase/testing@0.14.3, tag: @firebase/storage@0.3.17, tag: @firebase/remote-config@0.1.4, tag: @firebase/performance@0.2.23, tag: @firebase/messaging@0.5.4, tag: @firebase/installations@0.3.3, tag: @firebase/functions@0.4.23, tag: @firebase/firestore@1.6.4, tag: @firebase/database@0.5.10, tag: @firebase/database-types@0.4.7, tag: @firebase/app@0.4.22, tag: @firebase/app-types@0.4.7, tag: @firebase/analytics@0.2.4) +Author: Christina Holland +Date: Thu Oct 31 13:47:38 2019 -0700 + + Publish firebase@7.2.3 + +commit 34884f2f566ef722797c45f4b8080259ce4da74b +Author: Jan Wyszynski +Date: Wed Oct 30 16:43:31 2019 -0700 + + Revert "use fake "owner" credential when rtdb emulator env var is set… (#2308) + + * Revert "use fake "owner" credential when rtdb emulator env var is set (#2029)" + + This reverts commit 4ebedd071ddd4f4f7ab427a87fa6a725622225c3. + + * bump @firebase/database package version + + * undo database package version bump + +commit 68101ee9f654659d012aab0cf361575a2395671e +Author: Sebastian Schmidt +Date: Wed Oct 30 15:55:10 2019 -0700 + + Don't fail client if lease refresh fails (#2307) + +commit 94ffe751a332fdcd95fc9c31e56a44c641398281 +Author: Mertcan Mermerkaya +Date: Tue Oct 29 12:56:00 2019 +0000 + + Narrow some types (#2298) + +commit 344d063e11429bb368618f45988e5d39fad25d69 +Author: Mertcan Mermerkaya +Date: Mon Oct 28 14:21:04 2019 +0000 + + Try API requests again if they failed in a different function c… (#2297) + + There isn't any useful error information if a request that was started in a different function call fails. Instead of throwing a useless error, try it again in the current function call. + + Also makes the "missing app config values" error a little more helpful. + +commit b236a06810a2c1780c3bb84af31801c1a8722b76 +Merge: 3cf784218 98763b528 +Author: Feiyang1 +Date: Fri Oct 25 10:38:14 2019 -0700 + + Merge branch 'release' + Release 7.2.2 + +commit 3cf784218ddd9923ddfdde8df4c52e6b12fc5643 +Author: Christina Holland +Date: Thu Oct 24 19:40:50 2019 -0700 + + Add more error checking in doc gen script (#2218) + +commit bd3a03a49f5b773db01476dc60d87ee576cd6ffa +Author: cdoe +Date: Thu Oct 24 21:40:00 2019 -0500 + + Include add_payment_info and page_view events (#2276) + +commit 98763b528bc97443512e204b15f3d7ea79bd3b1d (tag: rxfire@3.8.7, tag: firebase@7.2.2, tag: @firebase/webchannel-wrapper@0.2.29, tag: @firebase/util@0.2.31, tag: @firebase/testing@0.14.2, tag: @firebase/storage@0.3.16, tag: @firebase/remote-config@0.1.3, tag: @firebase/polyfill@0.3.26, tag: @firebase/performance@0.2.22, tag: @firebase/messaging@0.5.3, tag: @firebase/logger@0.1.28, tag: @firebase/installations@0.3.2, tag: @firebase/functions@0.4.22, tag: @firebase/firestore@1.6.3, tag: @firebase/database@0.5.9, tag: @firebase/auth@0.12.3, tag: @firebase/app@0.4.21, tag: @firebase/analytics@0.2.3) +Author: Feiyang1 +Date: Thu Oct 24 16:34:37 2019 -0700 + + Publish firebase@7.2.2 + +commit d8735622f36209e164cb10db57e6eb680cbdb8da +Author: Renovate Bot +Date: Fri Oct 25 01:32:10 2019 +0300 + + Update dependency npm-run-path to v4 (#2279) + +commit d7e93f1b8b84987c9426c039959be3300a1c95bc +Author: Renovate Bot +Date: Fri Oct 25 01:29:09 2019 +0300 + + Update all non-major dependencies (#2278) + +commit 5a30f33804859038cb58b6f6630ca3132bdf6635 +Author: Feiyang +Date: Thu Oct 24 10:25:19 2019 -0700 + + fix renovate config (#2295) + +commit 320d613ec3ed3c897547b282571506223fff99bb +Author: Christina Holland +Date: Wed Oct 23 13:51:52 2019 -0700 + + Minor cleanup of package/template (#2294) + +commit 3ea6f38648a1d22260f338b582e7f6211ff83249 +Merge: d5eacb6b4 25b62bb77 +Author: Christina Holland +Date: Tue Oct 22 14:14:51 2019 -0700 + + Merge branch 'release' + Firebase 7.2.1 release + +commit d5eacb6b4b2278707c658861231d439878bdf003 +Author: Sebastian Schmidt +Date: Tue Oct 22 13:56:27 2019 -0700 + + Don't use process when not available (#2277) + +commit 3264492888e80b798a206a147a06f40be58972bb +Author: Sebastian Schmidt +Date: Mon Oct 21 17:20:24 2019 -0700 + + Retry all non-Firestore exceptions (#2288) + +commit 4ecd58ece02e08132b80ae5e50cfcd831efee762 +Author: James Daniels +Date: Fri Oct 18 00:38:12 2019 -0400 + + rxfire: Support collection groups & change detection fixess (#2223) + + * rxfire was comparing documents based off ids, this was fine before collection group queries. Here I've switched to `ref.isEqual` like I have done in AngularFire. + * When a document is modified, we were only replacing the single doc in the array; this would not always trip change detection in frameworks as `===` would still equal true on the top level. Splicing it creates a new array, which will fail `===` and trip change detection. + * Further, this was an issue with the other operations as we were using splice. I'm now slicing to clone the array before modifying. + * NIT: Visual Studio Code's settings, which are committed, were not setup to track the workspace's version of Typescript. This tripped me up a little at first. + +commit c35bc8f75769febbea090ed4808436abeca6c07e +Author: Sebastian Schmidt +Date: Thu Oct 17 15:56:23 2019 -0700 + + Make maybeGarbageCollectMultiClientState idempotent (#2275) + +commit 07cd70d4e694080c0114076fe2be821c951ed75b +Author: Sebastian Schmidt +Date: Thu Oct 17 13:43:04 2019 -0700 + + Fix typo in comment (#2274) + +commit 0cec349455c4b2126eca7bcc17552e671da4933e +Author: Sam Stern +Date: Thu Oct 17 10:36:54 2019 -0700 + + Add open source config and page for RxFire (#2273) + +commit 25b62bb772ff8b1636e5ba9a7bee6f49581473aa (tag: rxfire@3.8.6, tag: firebase@7.2.1, tag: @firebase/webchannel-wrapper@0.2.28, tag: @firebase/util@0.2.30, tag: @firebase/testing@0.14.1, tag: @firebase/storage@0.3.15, tag: @firebase/storage-types@0.3.5, tag: @firebase/remote-config@0.1.2, tag: @firebase/remote-config-types@0.1.2, tag: @firebase/polyfill@0.3.25, tag: @firebase/performance@0.2.21, tag: @firebase/performance-types@0.0.5, tag: @firebase/messaging@0.5.2, tag: @firebase/messaging-types@0.3.4, tag: @firebase/logger@0.1.27, tag: @firebase/installations@0.3.1, tag: @firebase/installations-types@0.2.1, tag: @firebase/functions@0.4.21, tag: @firebase/functions-types@0.3.10, tag: @firebase/firestore@1.6.2, tag: @firebase/firestore-types@1.6.2, tag: @firebase/database@0.5.8, tag: @firebase/database-types@0.4.6, tag: @firebase/auth@0.12.2, tag: @firebase/auth-types@0.8.2, tag: @firebase/app@0.4.20, tag: @firebase/app-types@0.4.6, tag: @firebase/analytics@0.2.2, tag: @firebase/analytics-types@0.2.2) +Author: Christina Holland +Date: Wed Oct 16 12:01:56 2019 -0700 + + Publish firebase@7.2.1 + +commit b21b946a34887056283a6064fb0b41d070f15545 +Author: Sebastian Schmidt +Date: Tue Oct 15 13:32:51 2019 -0700 + + Support iOS 13 with offline persistence (#2271) + + * Add transaction retries (#2250) + + * Marking SimpleDb calls as idempotent (#2251) + + * Mark mostly readonly calls as idempotent (#2252) + + * Fix test failure (#2256) + + * Make handleUserChange idempotent (#2257) + + * Temporarily disable CountingQueryEngine tests (#2258) + + * Improve test hack (#2259) + + * Improve test hack + + * Comment in test hack + + * Make getNewDocumentChanges() idempotent (#2255) + + * Add onCommitted listeners for transactions (#2265) + + * Fix build + + * Fix Lint + + * Make applyRemoteEvent idempotent (#2263) + + * Make notifyLocalViewChanges idempotent (#2268) + + * Make releaseQuery idempotent (#2266) + + * Mark acknowledgeBatch and rejectBatch idempotent (#2269) + + * idempotent `allocateQuery` and `notifyLocalViewChanges` (#2264) + + * Mark collectGarbage idempotent (#2267) + + * Idempotency: Address TODOs, add Changelog (#2270) + +commit 9da3892bc3a978ad9bffb20b7df49d803d61d44b +Author: Renovate Bot +Date: Tue Oct 15 21:08:21 2019 +0300 + + Update dependency typescript to v3.6.4 (#2262) + +commit e6926fd3c3ee07e1bdc364a2de67b900c9aaab63 +Author: Renovate Bot +Date: Tue Oct 15 01:52:26 2019 +0300 + + Lock file maintenance (#2077) + +commit 81d49bb919abce5aef18e1309d32536ce14bef48 +Merge: 0323453b6 18b228c80 +Author: Feiyang1 +Date: Mon Oct 14 14:07:09 2019 -0700 + + Merge with Release 7.2.0 + +commit 0323453b6fe957084f7ee0bbd8aa4ba24bffb08b +Author: Renovate Bot +Date: Mon Oct 14 23:13:21 2019 +0300 + + Update all non-major dependencies (#2261) + +commit 3eb29cbcf4b61009077f540039d2dd89fc330ff9 +Author: Yuchen Shi +Date: Thu Oct 10 13:48:39 2019 -0700 + + Serialize Timestamps as string (per proto3 JSON format). (#2249) + + * Serialize Timestamps as string (per proto3 JSON format). + + * [AUTOMATED]: Prettier Code Styling + + * Add an extra test for string format. + + * Update changelog. + +commit 18b228c80d1a5dfd39df17a5b356125f144183e8 (tag: rxfire@3.8.5, tag: firebase@7.2.0, tag: @firebase/webchannel-wrapper@0.2.27, tag: @firebase/util@0.2.29, tag: @firebase/testing@0.14.0, tag: @firebase/storage@0.3.14, tag: @firebase/storage-types@0.3.4, tag: @firebase/remote-config@0.1.1, tag: @firebase/remote-config-types@0.1.1, tag: @firebase/polyfill@0.3.24, tag: @firebase/performance@0.2.20, tag: @firebase/performance-types@0.0.4, tag: @firebase/messaging@0.5.1, tag: @firebase/messaging-types@0.3.3, tag: @firebase/logger@0.1.26, tag: @firebase/installations@0.3.0, tag: @firebase/installations-types@0.2.0, tag: @firebase/functions@0.4.20, tag: @firebase/functions-types@0.3.9, tag: @firebase/firestore@1.6.1, tag: @firebase/firestore-types@1.6.1, tag: @firebase/database@0.5.7, tag: @firebase/database-types@0.4.5, tag: @firebase/auth@0.12.1, tag: @firebase/auth-types@0.8.1, tag: @firebase/app@0.4.19, tag: @firebase/app-types@0.4.5, tag: @firebase/analytics@0.2.1, tag: @firebase/analytics-types@0.2.1) +Author: Feiyang1 +Date: Thu Oct 10 11:40:08 2019 -0700 + + Publish firebase@7.2.0 + +commit dbe408632bcf7300e1708907e75bf4ce5eae76bb +Author: Brian Chen +Date: Thu Oct 10 10:51:49 2019 -0700 + + Make vscode tests run against emulator (#2248) + +commit 8c2bbc391bfddebeb3e4abaf03c52918e79d99ea +Author: Mertcan Mermerkaya +Date: Wed Oct 9 17:56:30 2019 +0100 + + Make IdbManager only handle values of type InstallationEntry (#2245) + +commit 83aacd88dfce3c875c8e7b0330ca7cd256c16cc9 +Author: Mertcan Mermerkaya +Date: Wed Oct 9 17:55:48 2019 +0100 + + Update Installations types (#2246) + +commit dc14f5ce07a44bc5ef51ff288f16ee30424a7f96 +Author: Mertcan Mermerkaya +Date: Tue Oct 8 14:49:07 2019 +0100 + + Add the forceRefresh parameter to Installations' getToken method (#2239) + +commit 9fcd2216a36712f5c04d90b4a28668ccd0241418 +Merge: ed769e8f6 ee51a796c +Author: Christina Holland +Date: Fri Oct 4 17:11:42 2019 -0700 + + Merge branch 'release' + Firebase 7.1.0 release + +commit ed769e8f635fc2eeae639ea0ce42fe7b3bef9780 +Author: Renovate Bot +Date: Sat Oct 5 02:01:26 2019 +0300 + + Update dependency typescript to v3.6.3 (#2127) + + * Update dependency typescript to v3.6.3 + + * lock @type/node at 8.10.54 + + * [AUTOMATED]: Prettier Code Styling + +commit 02da77ca70ec9c0b99dc6900e1d7864270833cd3 +Author: Renovate Bot +Date: Fri Oct 4 21:25:26 2019 +0300 + + Update dependency selenium-assistant to v6 (#2048) + + * Update dependency selenium-assistant to v6 + + * update node version requirement + +commit 2c1dc8ed7fc8f82dae062cc97722b46d2b75f318 +Author: Renovate Bot +Date: Fri Oct 4 20:48:46 2019 +0300 + + Update all non-major dependencies (#2234) + +commit 75cee01d2d367dbb156e15bff89bf179777407f7 +Author: Renovate Bot +Date: Fri Oct 4 20:48:20 2019 +0300 + + Update dependency indexeddbshim to v5 (#2237) + +commit 983f88f34a6e13a164ef84bcdd044e604647bb97 +Author: Renovate Bot +Date: Fri Oct 4 02:07:41 2019 +0300 + + Update dependency inquirer to v7 (#2155) + +commit 29c0b3705e9e037963c7316445fec0634dd4ef34 +Author: Sebastian Schmidt +Date: Thu Oct 3 14:52:25 2019 -0700 + + Update SequenceNumber in LocalStore.applyRemoteEvent (#2233) + +commit ee51a796cb472fb19d1700e601c376d33d7a564f (tag: rxfire@3.8.4, tag: firebase@7.1.0, tag: @firebase/testing@0.13.4, tag: @firebase/storage@0.3.13, tag: @firebase/firestore@1.6.0, tag: @firebase/firestore-types@1.6.0, tag: @firebase/database@0.5.6, tag: @firebase/analytics@0.2.0, tag: @firebase/analytics-types@0.2.0) +Author: Christina Holland +Date: Thu Oct 3 13:44:33 2019 -0700 + + Publish firebase@7.1.0 + +commit bd5ce34db9c11ab16296b29c5d410b78876a0115 +Author: Renovate Bot +Date: Thu Oct 3 02:04:00 2019 +0300 + + Update dependency eslint to v6 (#1965) + + * Update dependency eslint to v6 + + * fix lint issues + + * [AUTOMATED]: Prettier Code Styling + +commit fe530be990ff538cb410176b2c7f2b529955cdb7 +Author: Renovate Bot +Date: Wed Oct 2 21:03:26 2019 +0300 + + Update dependency ora to v4 (#2199) + +commit c2894ce5a879b564845be024a796e555a571668a +Author: Renovate Bot +Date: Wed Oct 2 20:36:40 2019 +0300 + + Update dependency chromedriver to v77 (#2183) + +commit 2d157c85fe24c34b464121ddf9a88d04de82df97 +Author: Renovate Bot +Date: Wed Oct 2 20:25:20 2019 +0300 + + Update all non-major dependencies (#2154) + + * Update all non-major dependencies + + * fix lint issues + + * [AUTOMATED]: Prettier Code Styling + +commit 5beb23cd47312ffc415d3ce2ae309cc3a3fde39f +Author: Sebastian Schmidt +Date: Wed Oct 2 10:19:31 2019 -0700 + + Index-Free Queries (feature, code still disabled) (#2180) + +commit a308f0f2414b2c9ffec5e72f5c5e8d9714b34ec5 +Author: James Daniels +Date: Wed Oct 2 19:17:42 2019 +0200 + + Fixing the RemoteConfig main entry (#2229) + + Was referencing a non-existent `dist/index.node.cjs.js`, fixed. + +commit fdd73cacab950ab87cd54871607fa76c6339fb3d +Author: Brian Chen +Date: Wed Oct 2 10:08:05 2019 -0700 + + Send raw values when using WebChannel (#2228) + +commit fa0e63d80e010610f14b710cb972cf68e4be60f6 +Author: Feiyang +Date: Tue Oct 1 15:45:30 2019 -0700 + + use named import for uglify in console build script (#2225) + + * use named import for uglify in console build script + + * update to work with new rollup api + + * use destructuring pattern + + * [AUTOMATED]: Prettier Code Styling + +commit 3a6995becf16d60091af2aed396a1cf014b72314 +Author: Christina Holland +Date: Tue Oct 1 14:16:34 2019 -0700 + + Make event params optional in logEvent (#2226) + +commit 9be828503cebd178f1bd0a2c60b8b44ac9a0f534 +Author: Sebastian Schmidt +Date: Tue Oct 1 12:25:03 2019 -0700 + + Treat empty maps correctly in Document.get() (#2206) + +commit 6e377fe24431a1fa41d35d08e880166a7e91bcaf +Author: Christina Holland +Date: Tue Oct 1 11:39:33 2019 -0700 + + Update docs to link to CDN guide (#2219) + +commit 78adfdb750649846319e3896f4c64cb416a333a9 +Author: Yuchen Shi +Date: Tue Oct 1 10:34:51 2019 -0700 + + rxfire: Update peerDependencies of firebase (#2208) + +commit c36aa82cdedeeada360b1806fee81a04a84aaa20 +Author: Feiyang +Date: Tue Oct 1 10:12:05 2019 -0700 + + add @firebase/analytics to firebase deps (#2220) + + * add @firebase/analytics to firebase deps + + * add remote config and analytics to index.ts files + +commit 458db5f82f1bb644192c7eb4e645cf5ea761e873 +Author: Sebastian Schmidt +Date: Tue Oct 1 08:45:23 2019 -0700 + + Fix Firestore Browser tests (#2216) + +commit d63371fd05f6b7dce04347d6488bd42b97f93582 +Author: Gabriel Chow +Date: Mon Sep 30 21:43:01 2019 -0400 + + Sort classes properly in doc. (#2182) + + The ordering currently doesn't make sense: + https://firebase.google.com/docs/reference/js/firebase.auth + https://firebase.google.com/docs/reference/js/firebase.storage + + This fixes b/141303832. + +commit 37d150b8e783387c68caad8c8816d5496f010851 +Author: Feiyang +Date: Mon Sep 30 16:33:02 2019 -0700 + + add code owners for analytics and rc (#2196) + +commit 84c1583c1cc52fbbc32da76d157205f64c7c960f +Author: Sebastian Schmidt +Date: Mon Sep 30 23:58:51 2019 +0100 + + Allow leading zeros in tryParseInt (#2212) + +commit 934712c8abd3821ac3025d4ff6e50d0f985aa7a2 +Author: Samuel Elgozi +Date: Mon Sep 30 23:04:51 2019 +0300 + + Fix default timeout for uploads (#2202) + +commit e8a392090256d9bd68934834e0e343bf81d52453 +Author: Yuchen Shi +Date: Mon Sep 30 11:31:23 2019 -0700 + + Remove database field from REST API request body. (#2188) + + * Remove database field from REST API request body. + + * [AUTOMATED]: Prettier Code Styling + + * Fix type and add comments about the emulator. + + * [AUTOMATED]: Prettier Code Styling + +commit c9dbf1953639dda8b5bde24da4b6eefbf1e221f3 +Author: Brian Chen +Date: Fri Sep 27 21:56:43 2019 -0700 + + Make onSnapshotsInSync() public (#2198) + +commit 012e3a5c1ec5f93aabd050e28e9efd226ee0fd44 +Author: Sebastian Schmidt +Date: Fri Sep 27 20:32:00 2019 -0700 + + Add test for NoDocument assert (#2205) + +commit b4ee745b4ed7a4f4a95acd08c9e384868ae4dbae +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Sep 25 15:41:32 2019 -0700 + + Fix externs (#2194) + + * fixed externs by adding ActionCodeInfo.Operation definition + +commit 3583ba4369ab68f5d337d6865b305c12f94553b3 (tag: rxfire@3.8.3, tag: firebase@7.0.0, tag: @firebase/testing@0.13.3, tag: @firebase/remote-config@0.1.0, tag: @firebase/remote-config-types@0.1.0, tag: @firebase/polyfill@0.3.23, tag: @firebase/messaging@0.5.0, tag: @firebase/functions@0.4.19, tag: @firebase/firestore@1.5.4, tag: @firebase/database@0.5.5, tag: @firebase/database-types@0.4.4, tag: @firebase/app@0.4.18, tag: @firebase/app-types@0.4.4, tag: @firebase/analytics@0.1.0, tag: @firebase/analytics-types@0.1.0) +Author: Feiyang1 +Date: Wed Sep 25 14:03:08 2019 -0700 + + Publish firebase@7.0.0 + +commit 2b412d7c5c81ae2e99e922cf1d06f7838d470a8d +Author: Feiyang +Date: Wed Sep 25 12:12:16 2019 -0700 + + Add Remote Config SDK (#2193) + +commit fd35262906c715655fb21d6d2dac043779474aa1 +Author: Feiyang +Date: Wed Sep 25 11:34:09 2019 -0700 + + Add Firebase Analytics package and integrate with FCM (#2192) + +commit 806aabbd8465b1d3ef9df7d03ef88b7ee15ed071 +Author: Brian Chen +Date: Fri Sep 20 16:29:41 2019 -0400 + + Backport spec test function renaming (#2184) + +commit 75f51a2813f31ae551d591c499ffc42eb58a739e (tag: rxfire@3.8.2, tag: firebase@6.6.2, tag: @firebase/util@0.2.28, tag: @firebase/testing@0.13.2, tag: @firebase/storage@0.3.12, tag: @firebase/polyfill@0.3.22, tag: @firebase/performance@0.2.19, tag: @firebase/messaging@0.4.11, tag: @firebase/logger@0.1.25, tag: @firebase/installations@0.2.7, tag: @firebase/functions@0.4.18, tag: @firebase/firestore@1.5.3, tag: @firebase/database@0.5.4, tag: @firebase/app@0.4.17) +Author: Feiyang1 +Date: Thu Sep 19 14:07:38 2019 -0700 + + Publish firebase@6.6.2 + +commit 4f1f3787468dca676e1fc6c65adb3a7cb9d1c1de +Author: Feiyang +Date: Wed Sep 18 17:56:24 2019 -0700 + + changed to use firebase tools projects.list() (#2181) + +commit 353fc529f0686eb5bf7761c6fda129da4bcd4ae6 +Author: Mertcan Mermerkaya +Date: Wed Sep 18 20:06:50 2019 +0100 + + Fix SauceLabs tests (#1920) + + * Fix SauceLabs tests for Installations and Performance + + * add resolveJsonModule + + * stub storage differently so tests work in Firefox and IE (#1940) + + * stub storage differently so tests work in Firefox and IE + + * [AUTOMATED]: Prettier Code Styling + + * rewrite test setup + + * [AUTOMATED]: Prettier Code Styling + + * change compilation target to es5 + + * fix IE11 errors + + * fix storage IE11 tests + + * fix util IE11 test + + * fix performance IE11 tests + + * make installations run in IE + + * fix integration/typescript tests in saucelabs + + * [AUTOMATED]: Prettier Code Styling + + * revert change that doesn't work + + * fix lint + + * add babel loader + +commit e24b1f4eb9756c4dbbd6bb0461aebd77a0d73354 +Author: Sebastian Schmidt +Date: Mon Sep 16 17:25:20 2019 -0700 + + Change the order of checks in applyRemoteEvent() (#2176) + +commit 372c0c57f9d613b39f27b37ef87b2b3a9d6e2535 +Author: Brian Chen +Date: Mon Sep 16 15:59:29 2019 -0700 + + Rename spec tests (#2178) + +commit 2195e9a8b9c4219099d489a6b71d4eaa5281079d +Merge: 4016987a7 91da49d25 +Author: Christina Holland +Date: Mon Sep 16 10:51:09 2019 -0700 + + Merge branch 'release' + Firebase 6.6.1 release + +commit 4016987a72fa87eea5171dd718d20f9e5dde8123 +Author: Feiyang +Date: Thu Sep 12 17:04:55 2019 -0700 + + replace some tslint rules with eslint rules (#2161) + + * use eslint no-floating-promise + + * replace tslint ban with eslint rules + + * [AUTOMATED]: Prettier Code Styling + + * eslint disable + + * fix lint + + * revert previous changes + + * fix lint for firestore + + * [AUTOMATED]: Prettier Code Styling + +commit 91da49d258f17b1e87d570fc6faff1175e7e2afd (tag: rxfire@3.8.1, tag: firebase@6.6.1, tag: @firebase/testing@0.13.1, tag: @firebase/firestore@1.5.2, tag: @firebase/database@0.5.3) +Author: Christina Holland +Date: Thu Sep 12 13:48:40 2019 -0700 + + Publish firebase@6.6.1 + +commit 20e8a07d5b9a6de7314bc4051d711f55d8dfd363 +Author: Sebastian Schmidt +Date: Thu Sep 12 10:30:44 2019 -0700 + + Fixing Document.toString() (#2168) + + This broke when data became data() in https://github.com/firebase/firebase-js-sdk/pull/2115 + +commit d0bb1b152cc0c7508d4f2a8f511a63c1017ddfc2 +Author: Feiyang +Date: Wed Sep 11 12:22:05 2019 -0700 + + use Ubuntu 16.04 (Xenial) image (#2170) + +commit 64b1924eb87c9a3503e26200865d7a3da4d2a13e +Author: Brian Chen +Date: Mon Sep 9 10:31:15 2019 -1000 + + Adding onSnapshotsInSync (not public) (#2100) + +commit 0462045f63c60b52b537f3ba9cb86f7184f29399 +Author: Sebastian Schmidt +Date: Mon Sep 9 12:07:04 2019 -0700 + + Clean up IndexedDb initialization (#2163) + +commit 1ca8b668a92822ddcd4b2fea0b30fa8e6f00a41a +Merge: 9ae44f6ba 38dcb6635 +Author: Feiyang1 +Date: Thu Sep 5 17:33:45 2019 -0700 + + Merge branch 'release' + Firebase 6.6.0 release + +commit 38dcb66352a8bb19be5ca4aff223821e121c7a03 (tag: rxfire@3.8.0, tag: firebase@6.6.0, tag: @firebase/webchannel-wrapper@0.2.26, tag: @firebase/util@0.2.27, tag: @firebase/testing@0.13.0, tag: @firebase/storage@0.3.11, tag: @firebase/polyfill@0.3.21, tag: @firebase/performance@0.2.18, tag: @firebase/messaging@0.4.10, tag: @firebase/logger@0.1.24, tag: @firebase/installations@0.2.6, tag: @firebase/functions@0.4.17, tag: @firebase/firestore@1.5.1, tag: @firebase/database@0.5.2, tag: @firebase/auth@0.12.0, tag: @firebase/auth-types@0.8.0, tag: @firebase/app@0.4.16) +Author: Feiyang1 +Date: Thu Sep 5 16:16:42 2019 -0700 + + Publish firebase@6.6.0 + +commit 9ae44f6baacb6b2404c75a5ab3d8711b28a10776 +Author: Sebastian Schmidt +Date: Thu Sep 5 15:44:07 2019 -0700 + + Make IntellJ test runners connect to Emulator (#2138) + +commit 3ad31c8eb8c4feb13eb347daae2136dfff8d708f +Author: Sebastian Schmidt +Date: Thu Sep 5 10:19:52 2019 -0700 + + Rewrap comment (#2148) + +commit 4ccd09ef6d74a0b6f81737600e5b1231a24afbb5 +Author: Michael Lehenbauer +Date: Thu Sep 5 10:04:19 2019 -0700 + + Remove nodePatches.ts hackery. (#2144) + + This had some very stale code to: + 1. Make it possible to use long-polling instead of WebSockets from the Node.JS SDK. This existed purely for testing purposes, wasn't reliable, and hasn't been used in ages. + 2. Work around a bad Node.JS bug that was fixed 6 years ago (https://github.com/joyent/node/issues/6506). + +commit 5037a7f59192629eefe9c9a3b2dbe7a98db2bd3a +Author: Feiyang +Date: Wed Sep 4 19:05:36 2019 -0700 + + fix the path to node reference docs (#2146) + +commit f8e9f34142b2745626bba069b02ea4cbcc1af239 +Author: Feiyang +Date: Wed Sep 4 16:08:24 2019 -0700 + + use non strict mode when generating doc (#2143) + +commit 0bc90694ccc4f9ee6e0554a74e8ff43bc6e3d7ef +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Sep 4 14:59:29 2019 -0700 + + added path for new auth docs (#2141) + +commit e3d740854b73336fac4871da5cf403a64b0ed890 +Author: rsgowman +Date: Tue Sep 3 19:48:21 2019 -0400 + + Avoid auth triggers if we haven't yet received the initial user. (#2137) + + * Avoid auth triggers if we haven't yet received the initial user. + + https://github.com/firebase/firebase-js-sdk/pull/2078/ altered the + initial state of currentUser from undefined to not undefined, which + caused the if statement to unconditionally evaluate to true. This + results in a race condition that could cause some initial writes to the + database to be dropped. + + Fixes https://github.com/firebase/firebase-js-sdk/issues/2135 + + * CHANGELOG update. + + * Fix to be more like android + +commit fa3fc0fa8760cf159e47b7860e00861205dbf55a +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Sep 3 11:11:20 2019 -0700 + + Multi tenant beta (#1921) + + Added multi-tenant support + +commit 611cc9d5b9b085acd9f09779498908c07d4be298 +Author: Renovate Bot +Date: Sat Aug 31 01:13:29 2019 +0300 + + chore(deps): update all non-major dependencies (#2126) + +commit 16253f641e6e945e72209f3e6b39c77c2dd0e8b5 +Author: Sebastian Schmidt +Date: Fri Aug 30 11:53:29 2019 -0700 + + Upgrade Firestore Emulator to 1.8.2 (#2133) + + This should fix the CI failure in https://github.com/firebase/firebase-js-sdk/pull/2128 + +commit 793dcb657124a5e158f1c41c8061ec731bb1cd1f +Merge: 58c835205 cf2c37315 +Author: Christina Holland +Date: Fri Aug 30 11:49:10 2019 -0700 + + Merge branch 'release' + Release 6.5.0 + +commit cf2c37315710b77ef3a1b7c99fae61ca21fca014 (tag: rxfire@3.7.1, tag: firebase@6.5.0, tag: @firebase/testing@0.12.3, tag: @firebase/firestore@1.5.0, tag: @firebase/firestore-types@1.5.0) +Author: Christina Holland +Date: Thu Aug 29 14:53:45 2019 -0700 + + Publish firebase@6.5.0 + +commit 58c83520536b3a50a178f221ec1cdea27dcda0d5 +Author: Renovate Bot +Date: Thu Aug 29 23:24:31 2019 +0300 + + chore(deps): update typescript-eslint monorepo to v2 (major) (#2087) + + * Update typescript-eslint monorepo to v2 + + * fix breaking changes + +commit f03eb7ca69440838df7e6d2dfff38401c4b6b302 +Author: Renovate Bot +Date: Thu Aug 29 20:08:52 2019 +0300 + + chore(deps): update dependency yargs to v14 (#2107) + +commit c7e501259eff8db6a576df36da9c2396a6d28fa1 +Author: Sebastian Schmidt +Date: Wed Aug 28 21:01:36 2019 -0700 + + Don't deserialize full Document proto for Query execution (#2115) + +commit c851936c33b1f83864ccde7978c8360e9e28ae82 +Author: Renovate Bot +Date: Thu Aug 29 02:25:44 2019 +0300 + + Update all non-major dependencies (#2104) + +commit 7f2e9610e62df964b37b030f0b320b7d4c93ff24 +Author: Christina Holland +Date: Wed Aug 28 15:50:54 2019 -0700 + + docs: Remove wbr tags inserted by Typedoc (#2117) + +commit e010f29eeeb9923224faccd9c8ecc547e93ebf68 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Tue Aug 27 14:54:16 2019 -0400 + + rename shutdown to terminate and publish it (#2116) + + * make waitForPendingWrites public + + * update tests as well. + + * Fix CHANGELOG.md + + * fixing nits. + + * fix version in changelog + + * rename shutdown to terminate and publish it + + * [AUTOMATED]: Prettier Code Styling + + * addressing document nits + +commit 4bccd8f5d5836f911c9a758d4a6c1a993b64a4f2 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Tue Aug 27 14:13:32 2019 -0400 + + make waitForPendingWrites public (#2109) + + * make waitForPendingWrites public + + * update tests as well. + + * Fix CHANGELOG.md + + * fixing nits. + + * fix version in changelog + + * addressing document nits. + +commit c99ad64f27ffb9404f4f753e0f5ee6b11f4921cc +Author: Christina Holland +Date: Mon Aug 26 15:24:46 2019 -0700 + + Update doc gen script (#2114) + +commit aa31411ab0255d1d9f427e90239341fd7a19d2bf (tag: rxfire@3.7.0, tag: firebase@6.4.2, tag: @firebase/testing@0.12.2, tag: @firebase/performance@0.2.17, tag: @firebase/firestore@1.4.12) +Author: Feiyang1 +Date: Fri Aug 23 15:56:56 2019 -0700 + + Publish firebase@6.4.2 + +commit 57c189560a2e002039e74195199d40f745b58a1f +Merge: 89f90c9a9 f03262386 +Author: Feiyang1 +Date: Fri Aug 23 14:44:58 2019 -0700 + + Merge branch 'release' + Release 6.4.1 + +commit 89f90c9a958ec92f994f246de5af4ca514a34b31 +Author: alikn +Date: Fri Aug 23 14:42:33 2019 -0700 + + Fix an issue when an error is thrown for performance oob metrics (#2110) + + fix an error in the performance sdk which throws an error for oob metrics + +commit f03262386a4c075c48add395ba01f97c92e1ace7 (tag: rxfire@3.6.12, tag: firebase@6.4.1, tag: @firebase/webchannel-wrapper@0.2.25, tag: @firebase/util@0.2.26, tag: @firebase/testing@0.12.1, tag: @firebase/storage@0.3.10, tag: @firebase/polyfill@0.3.20, tag: @firebase/performance@0.2.16, tag: @firebase/messaging@0.4.9, tag: @firebase/logger@0.1.23, tag: @firebase/installations@0.2.5, tag: @firebase/functions@0.4.16, tag: @firebase/firestore@1.4.11, tag: @firebase/database@0.5.1, tag: @firebase/database-types@0.4.3, tag: @firebase/app@0.4.15) +Author: Feiyang1 +Date: Thu Aug 22 15:23:43 2019 -0700 + + Publish firebase@6.4.1 + +commit 919bcbd94d14d0dab6371e36b3832445bab2861a +Author: Sebastian Schmidt +Date: Thu Aug 22 10:28:22 2019 -0700 + + Don't persist documents that we already have (#2099) + +commit 1dbf3bce7d8a37730f406671c979893f96dd2f6e +Author: Sebastian Schmidt +Date: Wed Aug 21 14:41:24 2019 -0700 + + Move isShutdown to state expectations (#2102) + +commit 716bf5b2060a022f1547936ac4d4a3b381126077 +Author: Yuchen Shi +Date: Wed Aug 21 14:07:11 2019 -0700 + + Support SnapshotListenOptions for fromRef. (#2056) + +commit 27083071e4a8678c5e109687daf1b9e972196c87 +Author: Sebastian Schmidt +Date: Tue Aug 20 10:34:29 2019 -0700 + + Fix spec test versions (#2098) + +commit 4d0d246ffbad14f50d05d28aba4135897943ccf1 +Author: kim-f <51006219+kim-f@users.noreply.github.com> +Date: Tue Aug 20 13:25:07 2019 -0400 + + Validate performance metrics and attributes before storing them (#1917) + + * Add validation for custom metrics and custom attributes, and throw a Firebase Performance error when a specified metric, attribute name, or attribute value fails validation. + + * [AUTOMATED]: Prettier Code Styling + + * Respond to comments: include check that values are not blank, and adjust test format. + + * [AUTOMATED]: Prettier Code Styling + + * Use single quotes in trace.test.ts. + + * [AUTOMATED]: Prettier Code Styling + + * Correct cases of == and != to === and !==. + + * Change "doesn't" to "doesnt" in test strings in order to use single quotes. Code formatter automatically converts strings containing \' to use double quotes. + + * Add import for Array.some to packages/polyfill/index.ts. + +commit 394ea1ba2c1386b3a90a35be6cd7900a971608d9 +Author: Brian Chen +Date: Mon Aug 19 16:59:29 2019 -0700 + + Fix lint against master (#2095) + +commit c8abbaa355b41dbe61d8256182e15db21f4cb931 +Merge: 06bad3eed 309d5cf8d +Author: Feiyang1 +Date: Mon Aug 19 10:35:36 2019 -0700 + + Merge branch 'release' + Release 6.4.0 + +commit 06bad3eeddda62e0e8bed1e9cb81622d2574d8af +Author: Christina Holland +Date: Fri Aug 16 11:48:43 2019 -0700 + + Do not throw error on duplicate service registration. (#2085) + +commit 5b5afa2567fc05b7887faf5d3c9069224c709803 +Author: Feiyang +Date: Fri Aug 16 10:15:16 2019 -0700 + + remove @firebase/app and @firebase/app-types from peerDependencies (#2082) + + * remove firebase/app and firebase/app-types from peerDependencies + + * make app-types a regular dependency to make admin sdk happy + + * demote @firebase/app and app-types to devDeps + +commit 7ab25c67fadd0b8aa76529c8d31e63478e156759 +Author: Mertcan Mermerkaya +Date: Fri Aug 16 15:21:14 2019 +0100 + + Add variety to valid FIDs for testing (#2089) + +commit ceee0d7b96655d6abfea07529f0b151c0ad9d73c +Author: Mertcan Mermerkaya +Date: Fri Aug 16 15:17:26 2019 +0100 + + Remove gcm_sender_id / manifest.json related code (#2088) + + It was deprecated three years ago. + + developers.google.com/web/updates/2016/07/web-push-interop-wins + +commit 2907439fd81637b4da8f1eaa3ef2842fec05f17b +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Thu Aug 15 22:09:51 2019 -0400 + + Allow user to unlisten to queries after shutdown. (#2083) + + * Can unlisten + + * explicitly check for shut down + + * [AUTOMATED]: Prettier Code Styling + + * better comment. + + * [AUTOMATED]: Prettier Code Styling + +commit 309d5cf8db4a438b67fe86e55e9ab4256a749181 (tag: rxfire@3.6.11, tag: firebase@6.4.0, tag: @firebase/testing@0.12.0, tag: @firebase/firestore@1.4.10, tag: @firebase/database@0.5.0) +Author: Christina Holland +Date: Thu Aug 15 14:29:25 2019 -0700 + + Publish firebase@6.4.0 + +commit cacb48ec8ac1d73959d88202b92053fe1691c77f +Author: Sebastian Schmidt +Date: Thu Aug 15 11:19:33 2019 -0700 + + Don't persist manufactured documents (#2079) + +commit 132eef67ae3ef2eb4fc0a5c7178b49a4be59cc5f +Author: Brian Chen +Date: Thu Aug 15 10:54:48 2019 -0700 + + Set delay to 0 for skipping TimerId delays (#2084) + +commit f18b0fb7845358839c96a5f07bdf87e862f07c62 +Author: wu-hui <53845758+wu-hui@users.noreply.github.com> +Date: Thu Aug 15 12:37:26 2019 -0400 + + Port waitForPendingWrites from android (#2081) + + * waitForPendingWrites + allow-unlisten-after-shutdown. + + * addressing comments + + * addressing comments #2 + +commit 0eeb71f465d6a177901b29e093e60ed4cf7dfa4d +Author: Renovate Bot +Date: Wed Aug 14 03:29:26 2019 +0300 + + Update all non-major dependencies (#2069) + + * Update all non-major dependencies + + * fix typing issue + +commit c822e78b00dd3420dcc749beb2f09a947aa4a344 +Author: Brian Chen +Date: Tue Aug 13 16:41:46 2019 -0700 + + Retrying transactions with backoff (#2063) + +commit 1674abfb1e85698f8c2fdbfd792ab08f76099c65 +Author: Brian Chen +Date: Tue Aug 13 12:11:39 2019 -0700 + + Ran lint on master (#2080) + +commit 56cbbfdf84174eebec60b07c37b50cba230b0095 +Author: Michael Lehenbauer +Date: Mon Aug 12 14:50:59 2019 -0700 + + Enable strictPropertyInitialization for Firestore (#2078) + + * Enable strictPropertyInitialization: Refactor Path to BasePath similar to Android. + + This avoids having uninitialized properties due to the init() method doing the construction. + + * Remove dummy FirebaseConfig class. + + This class doesn't exist on other platforms and was responsible for a bunch of + strict-property-initialization violations. + + * Initialize _dataConverter in constructor. + + Fixes a strict-property-initialization violation. + + * Fix or suppress uninitialized properties in IndexedDbPersistence. + + * Fix StreamBridge property types to correctly indicate they can be undefined. + + * Make sure abstract class members are marked abstract so they don't need to be initialized. + + * FieldValue.typeOrder + * Mutation.type / key / precondition + * PersistenceTransaction.currentSequenceNumber + + * Fix uninitialized LLRBEmptyNode properties. + + Throw errors instead of potentially returning undefined. + + I ran the SortedMap perf tests before/after this change and there was no discernible difference. + + * Fix uninitialized properties in MemoryPersistence. + + * Fix misc. uninitialized properties. + + * Suppress some intentionally uninitialized properties. + + These would be obnoxious to define as `| undefined` but we also can't initialize them in the constructor. + + * Fix some misc. uninitialized properties in tests. + + * Suppress some intentionally uninitialized properties in tests. + + * Enable strictPropertyInitialization. + + * Minor CR feedback. + +commit a20dbea402fa4ce173f2d419cb7290d65f4e1523 +Author: Michael Lehenbauer +Date: Mon Aug 12 13:53:27 2019 -0700 + + Enable strict mode for scripts/emulator-testing/. (#2066) + +commit e4eea3fc40aa55bb4ab1827fff9ea6b2c9034b17 +Author: Jan Wyszynski +Date: Fri Aug 9 18:01:55 2019 -0700 + + treat the `ns=` query param as the namespace name if it is present (#2060) + + * treat `ns=` query param as the namespace name if it is present + + * [AUTOMATED]: Prettier Code Styling + + * record ns queryparam override in RepoInfo class + + * [AUTOMATED]: Prettier Code Styling + + * update database test suite + + * more descriptive RepoInfo member name + + * Add to changelog + +commit 4ebedd071ddd4f4f7ab427a87fa6a725622225c3 +Author: Jan Wyszynski +Date: Fri Aug 9 16:14:10 2019 -0700 + + use fake "owner" credential when rtdb emulator env var is set (#2029) + + * omit access token exchange if talking to an emulator + + * [AUTOMATED]: Prettier Code Styling + + * create TokenProvider interface and add EmulatorAuthTokenProvider + + * [AUTOMATED]: Prettier Code Styling + + * Update packages/database/src/core/EmulatorAuthTokenProvider.ts + + Co-Authored-By: Yuchen Shi + + * break circular dependency by extracting env var constant + + * [AUTOMATED]: Prettier Code Styling + + * rename AuthTokenProvider -> FirebaseAuthTokenProvider etc. + + * [AUTOMATED]: Prettier Code Styling + + * fix ReadOnlyRestClient constructor comment + + * poke travis CI + + * remove unnecessary js docs + +commit 3f9e8e8f15d387e57b4e61762c1a33a830f83133 +Author: Michael Lehenbauer +Date: Fri Aug 9 13:10:15 2019 -0700 + + Enable strictBindCallApply for Firestore. (#2074) + +commit 140d352d9176549114f33fe234710d2e87818dbe +Author: Sebastian Schmidt +Date: Fri Aug 9 11:26:44 2019 -0700 + + Make initial view test actually use index-free queries (#2051) + +commit 10b62335ad2e7efd72487dd0c2df7899e0d6b61d +Author: Jan Wyszynski +Date: Fri Aug 9 11:15:15 2019 -0700 + + database sdk not correctly inferring emulator namespace name (#2064) + + * database sdk not correctly inferring emulator namespace name + + * add environment variable test + + * [AUTOMATED]: Prettier Code Styling + +commit 903dad89e1c36b5579affd6516a617e16da89729 +Author: Michael Lehenbauer +Date: Fri Aug 9 10:48:10 2019 -0700 + + Firestore: Enable noImplicitThis in tsconfig. (#2068) + +commit 8a33cae59460c9b7b77e7f7a396c9ff8a26f1fea +Author: Michael Lehenbauer +Date: Fri Aug 9 10:14:57 2019 -0700 + + Remove unnecessary tsconfig.json flags. (#2067) + + tsconfig.base.json enables "strict" now which implicitly enables "strictFunctionTypes", "strictNullChecks", and "noImplicitAny" so we don't need to do so explicitly. + + Disabling "alwaysStrict" was unnecessary since we have no violations. + +commit fb6d4aa9e034b1ba4aa06efd026754c6aa864064 +Author: Mertcan Mermerkaya +Date: Fri Aug 9 14:37:31 2019 +0100 + + Remove Pinar from Messaging owners (#2059) + +commit 89ead882d110cd1521148288c5fe275a5a965941 +Merge: 180798431 3a99edac5 +Author: Feiyang1 +Date: Thu Aug 8 17:02:40 2019 -0700 + + Merge remote-tracking branch 'origin/release' + Release 6.3.5 + +commit 3a99edac5af7cb978cd01a5b6a29b5138349768e (tag: rxfire@3.6.10, tag: firebase@6.3.5, tag: @firebase/webchannel-wrapper@0.2.24, tag: @firebase/util@0.2.25, tag: @firebase/testing@0.11.10, tag: @firebase/storage@0.3.9, tag: @firebase/polyfill@0.3.19, tag: @firebase/performance@0.2.15, tag: @firebase/messaging@0.4.8, tag: @firebase/logger@0.1.22, tag: @firebase/installations@0.2.4, tag: @firebase/functions@0.4.15, tag: @firebase/firestore@1.4.9, tag: @firebase/database@0.4.12, tag: @firebase/auth@0.11.8, tag: @firebase/app@0.4.14) +Author: Feiyang1 +Date: Thu Aug 8 16:23:35 2019 -0700 + + Publish firebase@6.3.5 + +commit 18079843109f5fc501ae21bd95d82339c1c471da +Author: Brian Chen +Date: Thu Aug 8 14:58:58 2019 -0700 + + Updating flaky test to use less writes (#2065) + +commit 862f41ac003174c1a2619a98c41937ebdcbceec1 +Author: Feiyang +Date: Wed Aug 7 13:46:45 2019 -0700 + + make renovate update transitive deps in the lock file (#2057) + +commit b1758c4089cd9a13f40e8311334f6ae66c42552b +Author: Sebastian Schmidt +Date: Wed Aug 7 13:45:28 2019 -0700 + + Unbreak .info/serverTimestampOffset (#2061) + +commit 80d0846598d5a155390701c3b9a93ac160ee12b0 +Author: Hui-Wu <50340818+Hui-Wu@users.noreply.github.com> +Date: Wed Aug 7 11:19:10 2019 -0400 + + port public shutdown to web sdk. (#2045) + + * pending firebaseApp change + + * [AUTOMATED]: Prettier Code Styling + + * Looks to be working. + + * browser passes/node fails + + * [AUTOMATED]: Prettier Code Styling + + * add settings for new instance + + * final self review. + + * addressing comments #1 + + * [AUTOMATED]: Prettier Code Styling + + * address comments #2 + +commit 7a2403ad4c794d0848a1dd5167a5a4c0b055d454 +Author: Renovate Bot +Date: Tue Aug 6 21:59:07 2019 +0300 + + Update all non-major dependencies (#2046) + +commit 4eabca0adcc356ac7076dc310ce0ad1aaef9e919 +Author: Renovate Bot +Date: Tue Aug 6 21:00:44 2019 +0300 + + Update dependency chromedriver to v76 (#2047) + +commit fc1f1bcef8131117795b2d5d83cc8208a493822c +Author: Sebastian Schmidt +Date: Mon Aug 5 15:52:34 2019 -0700 + + Make spec tests easier to debug (#2055) + + With this simple change, tests missing the "exclusive" tag will not be translated into JSON. Hence, we can set breakpoints in the spec builder functions. + +commit 3c3ddb46e9b628a1a8aad7ee16a2813558654a9e +Author: Sebastian Schmidt +Date: Fri Aug 2 15:00:38 2019 -0700 + + Add spec test for limit query initialization (#2050) + +commit 16bbe6c25c62bca4d572eb84b07cb59dde097920 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Fri Aug 2 12:37:36 2019 -0700 + + clear redirect result after signOut or getRedirectResult being called (#2049) + +commit 386fd24a13e7d7ca78e61b1d5d4f21b886247699 (tag: rxfire@3.6.9, tag: firebase@6.3.4, tag: @firebase/util@0.2.24, tag: @firebase/testing@0.11.9, tag: @firebase/storage@0.3.8, tag: @firebase/polyfill@0.3.18, tag: @firebase/performance@0.2.14, tag: @firebase/messaging@0.4.7, tag: @firebase/logger@0.1.21, tag: @firebase/installations@0.2.3, tag: @firebase/functions@0.4.14, tag: @firebase/firestore@1.4.8, tag: @firebase/database@0.4.11, tag: @firebase/auth@0.11.7, tag: @firebase/app@0.4.13, tag: @firebase/app-types@0.4.3) +Author: Feiyang1 +Date: Thu Aug 1 13:23:48 2019 -0700 + + Publish firebase@6.3.4 + +commit 2b6266776c37ddd31187b3ec6dc8e36b79e69e72 +Author: Feiyang +Date: Thu Aug 1 11:41:50 2019 -0700 + + fix an obnoxious uglify issue (#2039) + + * fix an obnoxious uglify issue + + * Add a changelog entry for RTDB + + * update changelog entry + + * just use issue # + +commit 41a27176301fb1f1f76f7220d4fa2e04811f48eb +Author: Sebastian Schmidt +Date: Wed Jul 31 14:38:05 2019 -0700 + + Add spec tests for limit queries with limbo documents (#2033) + +commit 576b00fc6aa4e2d7be0bf49c6c0846852c3f9f32 +Author: Feiyang +Date: Wed Jul 31 14:06:28 2019 -0700 + + Update a transitive dependency in lock file to support Chrome 76 for protractor tests (#2037) + +commit 80ae4d129eb502cf1719821cf6e855f11996bb6a +Author: Feiyang +Date: Mon Jul 29 10:46:18 2019 -0700 + + Added an internal API to allow removing a service instance (#2020) + + * Add an internal API to allow removing a service instance + + * [AUTOMATED]: Prettier Code Styling + + * add a test case for service that supports multiple instances + + * [AUTOMATED]: Prettier Code Styling + +commit d21965d55db27e20c918918d411119403d7767b3 +Author: Feiyang +Date: Mon Jul 29 10:45:57 2019 -0700 + + update node version requirement for the repo (#2021) + +commit 8271edfb49a17082c379bae160a0ebcbfbe215cb +Author: Renovate Bot +Date: Fri Jul 26 21:57:54 2019 +0300 + + Update all non-major dependencies (#2024) + + * Update all non-major dependencies + + * fix type integration tests + +commit 5ea26ed2178150024475aae671206129480b38e8 (tag: rxfire@3.6.8, tag: firebase@6.3.3, tag: @firebase/testing@0.11.8, tag: @firebase/firestore@1.4.7, tag: @firebase/database@0.4.10) +Author: Feiyang1 +Date: Fri Jul 26 11:25:18 2019 -0700 + + Publish firebase@6.3.3 + +commit 12c908ff2479724850109a2bfd8c891d0c49e5e3 +Author: Michael Lehenbauer +Date: Fri Jul 26 10:12:24 2019 -0700 + + Add undefined check for `process` to fix browser support (#2025). (#2028) + +commit 28c33a11072d3b74b1b6d16498eb8deb60c9c865 +Author: Brian Chen +Date: Thu Jul 25 15:17:35 2019 -0700 + + Only retry transactions on non-permanent errors (#2018) + +commit 568f923d7ebe35e5426f4f78cdff2930b6b70332 +Author: Jan Wyszynski +Date: Thu Jul 25 14:48:05 2019 -0700 + + infer namespace from subdomain in database emulator environment variable (#2016) + + * set database emulator namespace to databaseURL subdomain + + * [AUTOMATED]: Prettier Code Styling + + * use let binding for `dbUrl` + + * [AUTOMATED]: Prettier Code Styling + + * fix typos + + * remove unnecessary parser diff + + * nit + + * use RepoInfo namespace member for ns query parameter + + * type spec for `dbUrl` variable + +commit 4d23d589f7daeb64e7979b38922859f05b43c2e8 +Merge: bccc8a54d 6dc1400e6 +Author: Christina Holland +Date: Thu Jul 25 14:25:52 2019 -0700 + + Merge branch 'release' + 6.3.2 release + +commit 6dc1400e63ce4c5c3267d6663f99f7bf6e563459 (tag: rxfire@3.6.7, tag: firebase@6.3.2, tag: @firebase/webchannel-wrapper@0.2.23, tag: @firebase/util@0.2.23, tag: @firebase/testing@0.11.7, tag: @firebase/storage@0.3.7, tag: @firebase/storage-types@0.3.3, tag: @firebase/polyfill@0.3.17, tag: @firebase/performance@0.2.13, tag: @firebase/messaging@0.4.6, tag: @firebase/messaging-types@0.3.2, tag: @firebase/logger@0.1.20, tag: @firebase/installations@0.2.2, tag: @firebase/functions@0.4.13, tag: @firebase/functions-types@0.3.8, tag: @firebase/firestore@1.4.6, tag: @firebase/firestore-types@1.4.4, tag: @firebase/database@0.4.9, tag: @firebase/database-types@0.4.2, tag: @firebase/auth@0.11.6, tag: @firebase/auth-types@0.7.2, tag: @firebase/app@0.4.12, tag: @firebase/app-types@0.4.2) +Author: Christina Holland +Date: Thu Jul 25 14:04:08 2019 -0700 + + Publish firebase@6.3.2 + +commit bccc8a54d0e548b042b6c16ab16fa89a3fdb390a +Author: Brian Chen +Date: Wed Jul 24 12:06:34 2019 -0700 + + Surface transaction errors in browser (#2017) + +commit 13cdd14b838ee0de65451107040cb4780491a314 +Author: Brian Chen +Date: Wed Jul 24 10:57:49 2019 -0700 + + todo vanished (#2019) + +commit 5e506a636f191e1ce01e9e7fd1118c183bc5f39c +Author: Jan Wyszynski +Date: Mon Jul 22 14:55:56 2019 -0700 + + support FIREBASE_DATABASE_EMULATOR_HOST env var (#2005) + + * support FIREBASE_DATABASE_EMULATOR_HOST environment variable + + * [AUTOMATED]: Prettier Code Styling + + * use one env var definition, remove extra logic + + * [AUTOMATED]: Prettier Code Styling + + * nit: remove blank line + + * minor version bump and environment variable guard + + * [AUTOMATED]: Prettier Code Styling + + * fix unbound variable reference + + * don't export new env variable + + * [AUTOMATED]: Prettier Code Styling + + * revert minor version bump change + + * add cross-referencing comment, prefer env var over app options + +commit 05fd7fc69222ce458073c49acfee9f53719241be +Author: Renovate Bot +Date: Mon Jul 22 20:32:13 2019 +0300 + + Update dependency google-closure-compiler to v20190709 (#2008) + +commit 855c0ede8237a443dd2169cd766b73eafa0507bc +Author: Renovate Bot +Date: Mon Jul 22 19:24:00 2019 +0300 + + Update dependency google-closure-library to v20190709 (#2009) + +commit 5c919b22e77e4e63af4ae35e5acb47a9f79dddd8 +Author: Feiyang +Date: Fri Jul 19 17:09:56 2019 -0700 + + add coverage badge (#2013) + +commit 22fcb8a57cd7fbec3400177a83b63f1986810c6d +Author: Gil +Date: Fri Jul 19 15:11:00 2019 -0700 + + Upgrade to Firestore Emulator 1.6.2 (#2002) + + This just brings us up-to-date without any functional changes as far as + the SDK is concerned. + +commit e988015af937ce4fbbe693f65e6552a5d2a850ca +Author: Renovate Bot +Date: Sat Jul 20 00:48:51 2019 +0300 + + Update all non-major dependencies (#2007) + +commit e5a6d3185c753f12ae8489efa61d1fb99b84fe11 +Author: Brian Chen +Date: Fri Jul 19 11:07:07 2019 -0700 + + add changelog (#2011) + +commit ab9f2645c44032a278716819b21ab667f7461a46 +Merge: f2d96d82c ecb6f38ee +Author: Feiyang1 +Date: Thu Jul 18 17:31:23 2019 -0700 + + Merge branch 'release' + Merge with Firebase 6.3.1 release + +commit ecb6f38ee4b60a129accd0eead1b8a584b0408fa (tag: rxfire@3.6.6, tag: firebase@6.3.1, tag: @firebase/webchannel-wrapper@0.2.22, tag: @firebase/util@0.2.22, tag: @firebase/testing@0.11.6, tag: @firebase/storage@0.3.6, tag: @firebase/storage-types@0.3.2, tag: @firebase/polyfill@0.3.16, tag: @firebase/performance@0.2.12, tag: @firebase/performance-types@0.0.3, tag: @firebase/messaging@0.4.5, tag: @firebase/messaging-types@0.3.1, tag: @firebase/logger@0.1.19, tag: @firebase/installations@0.2.1, tag: @firebase/installations-types@0.1.2, tag: @firebase/functions@0.4.12, tag: @firebase/functions-types@0.3.7, tag: @firebase/firestore@1.4.5, tag: @firebase/firestore-types@1.4.3, tag: @firebase/database@0.4.8, tag: @firebase/database-types@0.4.1, tag: @firebase/auth@0.11.5, tag: @firebase/auth-types@0.7.1, tag: @firebase/app@0.4.11, tag: @firebase/app-types@0.4.1) +Author: Feiyang1 +Date: Thu Jul 18 17:19:57 2019 -0700 + + Publish firebase@6.3.1 + +commit f2d96d82c3beaf284e82682362230378961bd7f7 +Author: Feiyang +Date: Thu Jul 18 17:10:13 2019 -0700 + + Fix a regression that leads to larger bundle size (#2006) + + * Fix a regression that leads to larger bundle size + + * [AUTOMATED]: Prettier Code Styling + + * remove type annotations + +commit 9173c904d48f5bb71a796a0f4f7ded127cea0f7c +Author: Brian Chen +Date: Thu Jul 18 11:03:01 2019 -0700 + + Refactor Transaction and SyncEngine to use async/await (#1983) + +commit 663f3e937db45e9d74a439dbdc31097a7559ab77 +Author: alikn +Date: Thu Jul 18 09:41:20 2019 -0700 + + [Performance] do not access window before initialization (#2003) + + * [Performance] do not access window before initialization + +commit 59d5bcafb6977e728e76d3f4045368a496c53c5b +Author: Feiyang +Date: Wed Jul 17 11:46:45 2019 -0700 + + disable depbot (#2001) + +commit 22caf9f1ec31b7acb1df48cf84935bce225c5ebe +Author: Sebastian Schmidt +Date: Wed Jul 17 07:36:52 2019 +0700 + + Fix Spec tests 'Limbo documents stay consistent' (#1994) + +commit 6196a50f903c0fdaacfa1c1cb3d191804080e8e3 +Author: Feiyang +Date: Tue Jul 16 17:25:48 2019 -0700 + + add engines field to functions (#1997) + +commit 62b468021327daf89c1bf99b68a9b08e29706194 +Author: Brian Chen +Date: Tue Jul 16 17:02:33 2019 -0700 + + Run persistence and node tests in travis, update tests to not timeout (#1991) + +commit c9a881eb5fdd3408399c84a98eb71bfc7751f4ec +Author: Brian Chen +Date: Tue Jul 16 14:05:34 2019 -0700 + + Make running against the emulator the default for Firestore integration tests (#1995) + +commit c8bbad8c4537783fb009127ceb9e00052a1bd6fc +Author: Renovate Bot +Date: Tue Jul 16 20:01:25 2019 +0300 + + Update all non-major dependencies (#1985) + +commit 8032d55cbd224fdaa07f6260be38eae33434c61d +Author: Sebastian Schmidt +Date: Tue Jul 16 23:41:38 2019 +0700 + + Running prettier (#1993) + + * Running prettier for Firestore + + * Fix everything + +commit 5d676e136e5f88bbe3f0e64e69cfcb2ce9f43cc8 +Author: Gil +Date: Tue Jul 16 08:38:20 2019 -0700 + + Port null/NaN validation text from iOS (#1987) + + From https://github.com/firebase/firebase-ios-sdk/pull/2670 + +commit 3c8f85d0185e3305f0ba7790d46eebb8e9e78e62 +Author: Brian Chen +Date: Mon Jul 15 15:36:06 2019 -0700 + + add ts-ignore line (#1990) + +commit 444c3ae4b56518ddee794b2db4fad5d437566290 +Author: Christina Holland +Date: Mon Jul 15 10:33:13 2019 -0700 + + Enable strict mode on all packages except firestore and database (#1948) + +commit a899e7d41aee801a8f25dba3ddfd35f5c428eb95 +Author: Renovate Bot +Date: Mon Jul 15 20:31:04 2019 +0300 + + Update dependency karma-chrome-launcher to v3 (#1984) + +commit 01ff95fdafdc1c6344937b6b23bab2abcde3239e +Author: Feiyang +Date: Mon Jul 15 10:29:39 2019 -0700 + + update renovate rules (#1986) + +commit ce9f7545a5d06995ed234a68ca5b057efa049e1c +Author: Renovate Bot +Date: Mon Jul 15 19:56:46 2019 +0300 + + Pin dependency rxjs to 6.5.2 (#1961) + +commit 7533694226b99f764c78f3991416118bf3d97e56 +Author: Hui-Wu <50340818+Hui-Wu@users.noreply.github.com> +Date: Mon Jul 15 12:27:56 2019 -0400 + + change getMissingBaseDocuments (#1989) + + * change getMissingBaseDocuments + + * add empty line + +commit 271476b3c14712940f50ecaac8917581437712bc +Author: Renovate Bot +Date: Sat Jul 13 03:12:16 2019 +0300 + + Update dependency firebase-functions to v3 (#1967) + +commit 4e3ebcacadb40f101a39643152d9da8b2636b653 +Author: Brian Chen +Date: Fri Jul 12 17:08:41 2019 -0700 + + Fix preconditions in transactions (#1980) + +commit f6354576ec99350aa3e6b2c344c72bd7c8c68128 +Author: Renovate Bot +Date: Sat Jul 13 02:07:44 2019 +0300 + + Update dependency firebase-tools to v7 (#1968) + +commit d9cf2a5ba522b4d647c3fdf7efd92017184bf244 +Author: Renovate Bot +Date: Sat Jul 13 02:04:12 2019 +0300 + + Update dependency rollup-plugin-node-resolve to v5 (#1975) + +commit e294ecb96aa8c78c824143922c914bef6629b866 +Author: Renovate Bot +Date: Sat Jul 13 01:58:40 2019 +0300 + + Update dependency ts-loader to v6 (#1977) + +commit b8535ea780cfc2a176b9899071e511350e3e4bfa +Author: Renovate Bot +Date: Sat Jul 13 01:52:14 2019 +0300 + + Update dependency chromedriver to v75 (#1963) + +commit 7ab551f5a20c1cb71bddc55723f5b0a69715b626 +Author: Renovate Bot +Date: Sat Jul 13 01:40:07 2019 +0300 + + Update dependency firebase-admin to v8 (#1966) + +commit e5074484d66ab3c4be83abe5de3ac14a2e7f9635 +Author: Renovate Bot +Date: Sat Jul 13 01:31:47 2019 +0300 + + Update dependency husky to v3 (#1972) + +commit 79e1700ad6d85bd5d411c9cfc337c5022359706b +Author: Renovate Bot +Date: Sat Jul 13 01:29:34 2019 +0300 + + Update dependency karma-webpack to v4 (#1973) + +commit 2f42cadf036eef51bc6a22e96fb595f9f6f06316 +Author: Renovate Bot +Date: Sat Jul 13 01:26:13 2019 +0300 + + Update dependency rollup-plugin-commonjs to v10 (#1974) + +commit 40313d20edfaa784f5c9ed810dce48012933a769 +Author: Renovate Bot +Date: Sat Jul 13 01:23:20 2019 +0300 + + Update dependency rollup-plugin-terser to v5 (#1976) + +commit 37c13b3266c9003b3719f49dcdbf30dc74477ac0 +Author: Renovate Bot +Date: Sat Jul 13 01:09:54 2019 +0300 + + Update dependency del to v5 (#1964) + + * Update dependency del to v5 + + * update lock file + +commit 0bc236f34d2dc4f6f925a5d73589d479180266fd +Author: Sebastian Schmidt +Date: Sat Jul 13 04:36:29 2019 +0700 + + Adding Limit/Limbo spec tests for go/index-free (#1960) + +commit 493fe52d74b43200bc4e5afcc8f1f13495d66a0b +Author: Renovate Bot +Date: Fri Jul 12 23:32:25 2019 +0300 + + Update all non-major dependencies (#1962) + + * Update all non-major dependencies + + * fix type errors + + * [AUTOMATED]: Prettier Code Styling + + * fix types + + * [AUTOMATED]: Prettier Code Styling + + * fix more types + + * [AUTOMATED]: Prettier Code Styling + +commit 5ff1c6d8b9df7b8e4de92d4aa59451574ee77992 +Author: Christina Holland +Date: Fri Jul 12 11:16:03 2019 -0700 + + Update rollup warning message in Node. (#1949) + +commit 0d2e108323f36e5025723fba2a8181efc2013b36 +Author: Hui-Wu <50340818+Hui-Wu@users.noreply.github.com> +Date: Fri Jul 12 08:15:30 2019 -0400 + + Fix missing query results when it is a match after a local patch mutation. (#1957) + + When a local patch mutation is not acked by server yet, but the mutation makes a document matching a query, the document might not show up in the compensated query results. This PR fixes the bug. + + See firebase/firebase-android-sdk#155 + +commit fb5c762b83535ba5a66907307e8db44a1541c9d4 +Merge: ed17a5896 14605f9d1 +Author: Christina Holland +Date: Thu Jul 11 16:12:34 2019 -0700 + + Merge branch 'release' + 6.3.0 release + +commit 14605f9d1dede72528b4cc8a99b404f7e7606791 (tag: rxfire@3.6.5, tag: firebase@6.3.0, tag: @firebase/util@0.2.21, tag: @firebase/testing@0.11.5, tag: @firebase/storage@0.3.5, tag: @firebase/polyfill@0.3.15, tag: @firebase/performance@0.2.11, tag: @firebase/messaging@0.4.4, tag: @firebase/logger@0.1.18, tag: @firebase/installations@0.2.0, tag: @firebase/functions@0.4.11, tag: @firebase/firestore@1.4.4, tag: @firebase/firestore-types@1.4.2, tag: @firebase/database@0.4.7, tag: @firebase/auth@0.11.4, tag: @firebase/app@0.4.10) +Author: Christina Holland +Date: Thu Jul 11 14:27:26 2019 -0700 + + Publish firebase@6.3.0 + +commit ed17a58966afc0bf69cb58263273f58d02ccd125 +Author: Yuchen Shi +Date: Wed Jul 10 16:56:49 2019 -0700 + + RxFire: Bump peerDependency of firebase to 6.x.x. (#1944) + + * RxFire: Bump peerDependency of firebase to 6.x.x. + + * Support both firebase 5 and 6. + +commit a83f55726627703ab8a589c94023173c9419386b +Author: Feiyang +Date: Tue Jul 9 17:24:08 2019 -0700 + + remove whitespace (#1954) + +commit 7773700dd40f2c788acfd3e060ad97ca12c2abf6 +Author: Feiyang +Date: Tue Jul 9 16:47:12 2019 -0700 + + add renovate configuration (#1952) + +commit b3376e2c5705d9247fae54445175469400ca9003 +Author: Christina Holland +Date: Tue Jul 9 15:15:49 2019 -0700 + + Revert manual version bumps (#1950) + +commit 6a15cd7f64c2fd04e93146c22b899e1ff868a2e7 +Author: Brian Chen +Date: Mon Jul 8 17:22:13 2019 -0700 + + Standardize Firestore transaction errors (#1937) + +commit ca8d82958872e4da05f2ef70b8df8da282dacac1 +Author: Christina Holland +Date: Mon Jul 8 10:16:54 2019 -0700 + + Enable Typescript strict flag for Storage (#1935) + + Enable Typescript strict flag for Storage + +commit fc5a87c835d266c4e9a4123e936ea2efd792f823 +Author: Feiyang +Date: Wed Jul 3 09:41:05 2019 -0700 + + enable eslint for rxfire (#1873) + + * enable eslint in rxfire + + * fix rxfire lint issues + + * [AUTOMATED]: Prettier Code Styling + + * rebase on master + + * [AUTOMATED]: Prettier Code Styling + + * remove dev only file + + * update deps + + * fix type error + + * [AUTOMATED]: Prettier Code Styling + + * modify the build process + + * [AUTOMATED]: Prettier Code Styling + +commit f2f6eefeaa091edd9b17b13d4b8b8241d1069ebd +Author: Sebastian Schmidt +Date: Wed Jul 3 08:45:40 2019 -0700 + + Store the coerced base value in the BaseMutation (#1928) + +commit e8900fee2899168656e067bc886c1f1cad78af5b +Author: Mertcan Mermerkaya +Date: Tue Jul 2 13:30:57 2019 +0100 + + Handle case where the server does not return an FID (#1936) + +commit 634f84daa9478419a3a5940f85411c2a2ba6598e +Author: Christina Holland +Date: Mon Jul 1 16:56:45 2019 -0700 + + Set typescript strict option to true for functions and testing (#1915) + + Enable typescript script option + +commit 1b1827cf89b308d864f004f9a4787f68c4e2fa92 +Merge: c24ecf374 ad090577c +Author: Feiyang1 +Date: Mon Jul 1 11:40:23 2019 -0700 + + Merge branch 'release' + 6.2.4 release + +commit c24ecf374e87f8a166795740a1519f917cb4c0fd +Author: Feiyang +Date: Mon Jul 1 10:35:17 2019 -0700 + + Address version conflict when used together with firebase-admin (#1916) + + * abstract SDK_VERSION + + * some comment + + * remove the unnecessary build target + + * require default + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * remove experimental changes + + * remove unused var + + * only ignore MODULE_NOT_FOUND error + + * [AUTOMATED]: Prettier Code Styling + + * revert module export change + +commit 2348a259ca0e63e451f677909e71388fdb802e70 +Author: Mertcan Mermerkaya +Date: Mon Jul 1 18:25:04 2019 +0100 + + Use the FID from the server if client FID generation fails (#1925) + + Starting from SDK v0.2.0, the server will start returning a valid FID instead of returning an error if the client tries to register an invalid FID, and the SDK will save that FID to the DB, replacing the invalid one. In case of a failure with client side FID generation, getId will wait for a valid FID from the server before resolving instead of throwing or returning an invalid FID. + +commit be8940f3cdea69d09dffd73d152e185b157e7a0f +Author: Sebastian Schmidt +Date: Fri Jun 28 14:48:27 2019 -0700 + + Make Document.field() nullable (#1927) + +commit ad090577c0d3f02ad63c35c1064673a7f9448983 (tag: rxfire@3.6.4, tag: firebase@6.2.4, tag: @firebase/testing@0.11.4, tag: @firebase/performance@0.2.10, tag: @firebase/firestore@1.4.3, tag: @firebase/app@0.4.9) +Author: Feiyang1 +Date: Thu Jun 27 16:47:41 2019 -0700 + + Publish firebase@6.2.4 + +commit 43f003659b2a219959907239145ed7f3831233be +Author: Brian Chen +Date: Thu Jun 27 16:40:53 2019 -0700 + + Port android error messages over (#1924) + +commit 857b0fe3b761e46a016fcaf27b84d5b8fbb0241f +Author: Mertcan Mermerkaya +Date: Thu Jun 27 20:16:06 2019 +0100 + + Refactor and remove object utility functions (#1811) + +commit 19c3842671d57218841c8275106213eeba89d583 +Author: Mertcan Mermerkaya +Date: Thu Jun 27 18:52:25 2019 +0100 + + Delay opening a database connection until a request is made (#1919) + + Prevents errors during page load on browsers that don't support IndexedDB. + +commit 99ba9952d84d1da2e87f7c7ce0fe802bf0de836e +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Jun 26 20:47:04 2019 -0700 + + removed usage of deprecated methods (#1923) + +commit 1d9662228c827e3a3966b77111630a3b7f73d03e +Author: Feiyang +Date: Wed Jun 26 16:03:04 2019 -0700 + + Fix FirebaseApp overwriting FirebaseError name field (#1911) + + * use appName to avoid naming conflict with FirebaseError + + * remove warning msg when creating a FirebaseError + + * [AUTOMATED]: Prettier Code Styling + + * revert + +commit 7043422243ff0aa8f298a04cbc8f0450856c0908 +Author: Feiyang +Date: Wed Jun 26 11:28:50 2019 -0700 + + migrate Firestore to eslint (#1859) + + * migrate Firestore to eslint + + * [AUTOMATED]: Prettier Code Styling + + * replace tslint suppresion with eslint ones + + * disable no used var for params in firestore + + * [AUTOMATED]: Prettier Code Styling + + * enable no-console for test files + + * disable no-floating-promises for test files + + * 1. enable no-duplicate-imports 2. update deps + + * address mike's comments + + * [AUTOMATED]: Prettier Code Styling + + * move comments to the same line as the suppression + + * [AUTOMATED]: Prettier Code Styling + + * remove unneeded comment + + * revert local changes + + * enable no-explicit-any in test files + + * fix lint issues after rebasing with master + + * [AUTOMATED]: Prettier Code Styling + + * move protobufjs to devdeps + + * [AUTOMATED]: Prettier Code Styling + + * remove leftover suppression + +commit 0551030be679109f127a023f359729de584588e1 +Author: Brian Chen +Date: Tue Jun 25 17:17:43 2019 -0700 + + Backport updates from Android (multiple changes) (#1912) + +commit 15a32c6cc48e645de6cfcb518b744d16ead8a055 +Author: Christina Holland +Date: Tue Jun 25 15:56:08 2019 -0700 + + Enable Typescript strict flag for app, logger, and util packages (#1897) + + Full strict mode for app, logger, and util + +commit 56414e83fca9b4b1290914539501f06eb1add32d +Author: Christina Holland +Date: Tue Jun 25 15:09:59 2019 -0700 + + Merge branch 'release' + Release 6.2.3 + +commit 00cb96401b31af955f6e9e92a69834c00fd1faf9 +Merge: 6ef135584 a5b559016 +Author: Christina Holland +Date: Tue Jun 25 15:06:58 2019 -0700 + + Merge branch 'release' + Release 6.2.3 + +commit 6ef1355849f99acc06317d758f70ba93266a04aa +Author: James Daniels +Date: Tue Jun 25 14:24:21 2019 -0600 + + Empty import typings for firebase/storage (#1812) + +commit ea3adf16c0c4eb21018e7a51ba8db5d161acdb65 +Author: Michael Lehenbauer +Date: Tue Jun 25 12:53:25 2019 -0700 + + Fix prettier to avoid adding extra files. (#1914) + + Ensure we don't "git add" and submit extra files in the repo during our pre-push hooks. + +commit 9bb7e70bc4cb1394fcb53bf58a07198d521df0ee +Author: Konstantin Varlamov +Date: Mon Jun 24 23:03:05 2019 -0400 + + Fix array-contains queries (#1913) + + #1894 introduced a regression that made persisted queries deserialize incorrectly. Fix the regression and add tests. + + The root cause is that the refactoring introduced a type hierarchy of classes derived from `FieldFilter`, but serializer always deserializes persisted filters to the base class `FieldFilter`, never to the derived types. This would have affected array-contains queries, in queries, and key field queries. + + Fixes #1904. + +commit 95cbd6fba42de980025fca9947e50fba85a46bcd +Author: alikn +Date: Mon Jun 24 16:22:34 2019 -0700 + + Do not initialize performance if required apis are not available (#1895) + +commit a5b559016beaa61cba666e26d0dbf7d9ca3ba4a5 (tag: rxfire@3.6.3, tag: firebase@6.2.3, tag: @firebase/testing@0.11.3, tag: @firebase/app@0.4.8) +Author: Christina Holland +Date: Mon Jun 24 15:23:02 2019 -0700 + + Publish firebase@6.2.3 + +commit 728f4f54b4589c07a2d474deb94328a332c8fe39 +Author: Christina Holland +Date: Mon Jun 24 14:35:23 2019 -0700 + + Fix typo causing auth errors in Node. (#1910) + +commit 6e01b2a8a7b0939337f4b8bc5ea907545613c4ad +Author: Christina Holland +Date: Mon Jun 24 13:27:20 2019 -0700 + + Roll back to 6.2.1 and add RN and XMLHttpRequest fixes (#1909) + + Roll back import of newer AsyncStorage (#1902) and fix XMLHttpRequest import line + +commit c919b45b06061133c412ea7ac981a161fbd20a2e +Author: Sebastian Schmidt +Date: Mon Jun 24 10:34:23 2019 -0700 + + Don't store document with 0 version in Spec Test (#1903) + +commit a6b81804b00002e78cad267fbb8a215c2a06a9f9 (tag: rxfire@3.6.2, tag: firebase@6.2.2, tag: @firebase/testing@0.11.2, tag: @firebase/storage@0.3.4, tag: @firebase/performance@0.2.9, tag: @firebase/firestore@1.4.2, tag: @firebase/app@0.4.7) +Author: Christina Holland +Date: Fri Jun 21 16:12:50 2019 -0700 + + Publish firebase@6.2.2 + +commit cbdc78984495d4e07af94d675e6807edae44b467 +Author: Christina Holland +Date: Fri Jun 21 15:37:34 2019 -0700 + + Roll back import of newer AsyncStorage (#1902) + +commit 74a397afa3ef6509fb8bc8850b3bbd6c1220ea18 +Author: Gil +Date: Fri Jun 21 07:57:32 2019 -0700 + + Refactor Filters (#1894) + + * Rename RelationFilter to FieldFilter + + * Remove NullFilter and NanFilter (replaced by just using FieldFilter) + + * Rename RelationOp to Operator + + * Extract KeyFieldFilter from FieldFilter + + This makes it possible to validate arguments once rather than + per-document. + + * Extract ArrayContainsFilter from FieldFilter + + * Extract InFilter from FieldFilter + + * Extract ArrayContainsAnyFilter from FieldFilter + + * Factor out ArrayValue.contains + +commit 3caea2bf50f570ea1b03a99e72cad00bf6cc49b2 +Merge: 6ec76614a 6ae2cbfa9 +Author: Christina Holland +Date: Thu Jun 20 15:36:14 2019 -0700 + + Merge branch 'release' + Release 6.2.1 + +commit 6ae2cbfa9f7711d6643cfeac648408d772b5e211 (tag: rxfire@3.6.1, tag: firebase@6.2.1, tag: @firebase/webchannel-wrapper@0.2.21, tag: @firebase/util@0.2.20, tag: @firebase/testing@0.11.1, tag: @firebase/storage@0.3.3, tag: @firebase/performance@0.2.8, tag: @firebase/messaging@0.4.3, tag: @firebase/logger@0.1.17, tag: @firebase/installations@0.1.7, tag: @firebase/functions@0.4.10, tag: @firebase/functions-types@0.3.6, tag: @firebase/firestore@1.4.1, tag: @firebase/firestore-types@1.4.1, tag: @firebase/database@0.4.6, tag: @firebase/app@0.4.6) +Author: Christina Holland +Date: Thu Jun 20 14:59:08 2019 -0700 + + Publish firebase@6.2.1 + +commit 6ec76614a16a70c75a93cfb8494ee99234f7b849 +Author: Feiyang +Date: Thu Jun 20 13:40:12 2019 -0700 + + enable eslint for Storage (#1850) + + * storage auto fix + + * fix test files + + * more storage fixes + + * fix more lint issues + + * fix metadata.ts + + * [AUTOMATED]: Prettier Code Styling + + * update param type + + * revert accidental change + + * use unknown[] for rest param + + * Further improve Storage typings (#1860) + + * disable unused var check for function params + + * remove duplicate imports + + * [AUTOMATED]: Prettier Code Styling + + * update test command + + * fix something + + * fix some ts errors + + * [AUTOMATED]: Prettier Code Styling + + * fix some lint issues + +commit 32cb0e121254cce2d626f713b3875bf8f79c288b +Author: Michael Lehenbauer +Date: Thu Jun 20 10:10:18 2019 -0700 + + Make IOS_INDEXEDDB_BUG1 error more prominent when it happens (so it shows up in the error surfaced repeatedly by the AsyncQueue). (#1896) + +commit 7a52f753c94d326e690ccafed48d82c8959dcf72 +Author: Gil +Date: Wed Jun 19 10:09:32 2019 -0700 + + Fix the implementation of Bound.isEqual (#1893) + +commit ae2698f3e8f4e6ae3f464d6d071b2ef6c624da33 +Author: James Liu <37026441+zijianjoy@users.noreply.github.com> +Date: Wed Jun 19 08:36:27 2019 -0700 + + Update Fireperf HttpMethod from hardcoded value '1' to networkRequest object value. (#1887) + + Firebase Performance now accepts '0' as value for HttpMethod. '0' means HTTP_METHOD_UNKNOWN. + +commit 5856b9d60ea6c98b5f534a1893572d8437c04a43 +Author: Christina Holland +Date: Tue Jun 18 11:51:16 2019 -0700 + + Update React Native AsyncStorage import (#1879) + + Update to import AsyncStorage from new repo if available and fallback to the one included with React Native if not. + +commit dce78ca0899e9fbbef208047622e0afb1045f267 +Author: Mertcan Mermerkaya +Date: Tue Jun 18 16:52:00 2019 +0100 + + Fix a few linter issues (#1892) + +commit 7866e2235998de53458c11a063c0fc588d982ae1 +Author: Christina Holland +Date: Mon Jun 17 14:43:11 2019 -0700 + + Enable noImplicitAny Typescript compiler flag (#1862) + + Updated all packages except database to use noImplicitAny Typescript compiler flag. + +commit 9f109f85ad0d99f6c13e68dcb549a0b852e35a2a +Author: Feiyang +Date: Fri Jun 14 15:10:14 2019 -0700 + + enable eslint for functions (#1864) + + * enable eslint for functions + + * add ignore path + + * [AUTOMATED]: Prettier Code Styling + + * address Bryan's comments + + * update eslint version + + * update types + + * add messaging as devDep in functions + +commit 1804b1d920a99170acce981098e5a4eedcedface +Author: Feiyang +Date: Fri Jun 14 13:42:16 2019 -0700 + + enable eslint for installations (#1877) + + * enable eslint for installations + + * add eslint to the template project + + * add sinon as devDeps for logger + + * address mertcan's comments + + * add sinon to util + + * add missing dep to performance + +commit ba19625aa16f1ae21e6196b4e74ef753c5920073 +Merge: c55d1e9e2 64a9a0d33 +Author: Feiyang1 +Date: Fri Jun 14 10:11:14 2019 -0700 + + Merge with firebase 6.2.0 + +commit c55d1e9e269db59a74ea745e8744e8c33d57c007 +Author: Jack Steam +Date: Fri Jun 14 11:53:18 2019 -0500 + + Check that self.firebase is not undefined (#1868) + + * Check that self.firebase is not undefined + + * Add linting ignore and remove redundant condition + +commit fb45cd65e27ec858ca7170d5d8a9f47f49a70dcd +Author: Ryan Brewster +Date: Thu Jun 13 18:05:38 2019 -0700 + + Upgrade faye-websocket from 0.11.1 to 0.11.3 (#1880) + +commit 64a9a0d33ab0ac1918a912d98f3ec3a719d6e4f2 (tag: rxfire@3.6.0, tag: firebase@6.2.0, tag: @firebase/util@0.2.19, tag: @firebase/testing@0.11.0, tag: @firebase/storage@0.3.2, tag: @firebase/storage-types@0.3.1, tag: @firebase/performance@0.2.7, tag: @firebase/messaging@0.4.2, tag: @firebase/logger@0.1.16, tag: @firebase/installations@0.1.6, tag: @firebase/firestore@1.4.0, tag: @firebase/firestore-types@1.4.0, tag: @firebase/database@0.4.5, tag: @firebase/app@0.4.5) +Author: Feiyang1 +Date: Thu Jun 13 14:49:14 2019 -0700 + + Publish firebase@6.2.0 + +commit 5511cbd6c2659868bae524209a833b6894ddc8c9 +Author: Erik Macik <42585523+esmacik@users.noreply.github.com> +Date: Thu Jun 13 09:49:09 2019 -0700 + + add code fonts (#1871) + +commit b91f690d83aba450697e5c73ea5523fcf1d58b83 +Author: Christina Holland +Date: Wed Jun 12 11:57:56 2019 -0700 + + Fix storage Reference.put param type (#1876) + +commit 9678bf9a5692b0a33822cfdef27ddb27834cebb2 +Author: Brian Chen +Date: Wed Jun 12 11:30:32 2019 -0700 + + Add IN and ARRAY_CONTAINS_ANY (not publicly exposed) (#1843) + +commit dd098c6a87f23ddf54a7f9b21b87f7bb3fd56bdd +Author: Feiyang +Date: Wed Jun 12 11:01:44 2019 -0700 + + Migrate messaging to eslint (#1872) + + * add no-default-export to global rules + + * add some rules + + * Migrate messaging to eslint + + * [AUTOMATED]: Prettier Code Styling + + * fix duplicate imports + + * use suppression individually + + * [AUTOMATED]: Prettier Code Styling + +commit fd5a31a6bba01b79f9fd269c96926c8aa6248701 +Author: Mertcan Mermerkaya +Date: Wed Jun 12 13:14:12 2019 +0100 + + Generate a new token after getId calls if there is no valid token (#1869) + + Moved fetchAuthToken to helpers and renamed it to refreshAuthToken. + +commit 99e6cc8267d4eea4b2893a45d097c6cb20eddd15 +Author: Brian Chen +Date: Tue Jun 11 16:24:14 2019 -0700 + + Add support for running Firestore integration tests against the emulator (#1851) + +commit 3f2c7bf8a08978bea065ac1706af016e8646f234 +Author: Brian Chen +Date: Tue Jun 11 15:55:43 2019 -0700 + + Check that window is complete in BrowserConnectivityMonitor (#1870) + +commit 73f10767a8473468aa6fb6300abe93f998b59ecf +Author: egilmorez +Date: Tue Jun 11 13:42:58 2019 -0700 + + Minor style changes for a RTDB comment block (#1857) + + * Fixing some formatting. + + * Making some minor style changes in comments for database.Reference.push(). + +commit 021a38cbd29854923e6b49eda282bed09136f253 +Author: Michael Lehenbauer +Date: Mon Jun 10 16:10:15 2019 -0700 + + Remove unnecessary getMutationQueueMetadata() call. (#1863) + +commit 76539be9b3ab19f5be70275f2334bee9b022e3c4 +Author: Feiyang +Date: Mon Jun 10 13:28:24 2019 -0700 + + enable eslint in Performance (#1852) + + * enable eslint in Performance + + * [AUTOMATED]: Prettier Code Styling + + * use unknown[] for rest args + + * [AUTOMATED]: Prettier Code Styling + + * allow any for rest parameter + +commit 6673a92a29c8a67777dc7cab075e42a4f5354127 +Author: Michael Lehenbauer +Date: Mon Jun 10 07:05:53 2019 -0700 + + Provide warning and potential workaround for iOS Safari bug described by #1670. (#1854) + + * On iOS 12.2 we proactively warn about the "internal error was encountered in + Indexed Database Server" Bug. + * When the bug is actually encountered on iOS >= 12.2 an < 13 we log a custom + error message. + + Both log message and error link to https://stackoverflow.com/q/56496296/110915 which + provides potential error handling / recovery example. + +commit d164cac31ba8f147fa55bd6c62def193747d22ec +Author: egilmorez +Date: Fri Jun 7 12:32:36 2019 -0700 + + Fixing some formatting. (#1848) + +commit 15fee3ba7f447d1bb68c0baaa9a25f93b1b9bfcc +Author: Michael Lehenbauer +Date: Fri Jun 7 10:41:44 2019 -0700 + + Change test:node:persistence to use --require instead of --file so it actually works. (#1855) + +commit 568647953229a2e1eebae467cdcc077d6cf6363c +Author: Brian Chen +Date: Thu Jun 6 18:27:21 2019 -0700 + + Make yarn test:emulator work again (#1853) + +commit ce8ecb933eaffabc692c2023abc656ee2930e206 +Merge: 039f06be8 ff439705d +Author: Christina Holland +Date: Thu Jun 6 15:39:06 2019 -0700 + + Merge branch 'release' + Release 6.1.1 + +commit ff439705d1a57267660303fa8639c3e7761932ca (tag: rxfire@3.5.1, tag: firebase@6.1.1, tag: @firebase/util@0.2.18, tag: @firebase/testing@0.10.1, tag: @firebase/storage@0.3.1, tag: @firebase/performance@0.2.6, tag: @firebase/performance-types@0.0.2, tag: @firebase/messaging@0.4.1, tag: @firebase/logger@0.1.15, tag: @firebase/installations@0.1.5, tag: @firebase/functions@0.4.9, tag: @firebase/firestore@1.3.5, tag: @firebase/database@0.4.4, tag: @firebase/auth@0.11.3, tag: @firebase/app@0.4.4) +Author: Christina Holland +Date: Thu Jun 6 14:03:06 2019 -0700 + + Publish firebase@6.1.1 + +commit 039f06be85b15e0dad7206ebd9cb1b60a4da762f +Author: Fred Zhang +Date: Thu Jun 6 10:35:12 2019 -0700 + + Add listAll() to storage-types (#1829) + +commit ee610626bef1f6f05852041b2161c01c5e99aa59 +Author: Feiyang +Date: Wed Jun 5 13:40:36 2019 -0700 + + Enable linting and fix lint issues for app, util and logger (#1845) + + * add eslint rules + + * fix firebase/app lint issues + + * fix firebas/util lint issues + + * add eslint deps to util + + * fix firebase/logger lint issues + + * [AUTOMATED]: Prettier Code Styling + + * remove intermediate merge messages + + * add missing code during merge + + * rename parameter + +commit 7a15e7e54bbd80d04311865c46588b68eff93d3b +Author: Brian Chen +Date: Wed Jun 5 11:55:14 2019 -0700 + + Expose clearPersistence() publicly (#1717) + + Addresses (#449). + +commit 4b126b745aee48997aa0220b5c08773d46c89c1c +Author: Brian Chen +Date: Tue Jun 4 17:17:10 2019 -0700 + + Rename value to other in RelationFilter (#1844) + +commit bdfcd6ca82a21e57cdf5109504cfc83570f37e94 +Author: Feiyang +Date: Tue Jun 4 16:15:33 2019 -0700 + + eslint rules for firebase projects (#1831) + + * add eslint rules + + * ignore unused params with a leading _ + + * update curly and arrow-body-style rules + +commit 6668b59e2fa495fcea42a24a6b24821407ee703f +Author: Christina Holland +Date: Mon Jun 3 14:35:57 2019 -0700 + + Apply strictNullChecks to all packages except database (#1805) + + * TS changes before splitting database + + * Roll back database changes + + * [AUTOMATED]: Prettier Code Styling + + * Put back database nullcheck exception + + * Finish fixing strictNullCheck errors + + * Fix logger test. + + * Fix tests + + * Update primitive array types to type[] + + * [AUTOMATED]: Prettier Code Styling + + * Put test exclusion back in rxfire + + * Address PR comments + + * [AUTOMATED]: Prettier Code Styling + + * Addressing PR comments + + * Few more comments to address + + * change assertThrows to assume it never returns null + + * [AUTOMATED]: Prettier Code Styling + + * Fix additional warnings after merge + + * Fix storage test + + * [AUTOMATED]: Prettier Code Styling + + * Address comments in PR + +commit 54ee3837b69c352be05d4dcb738edb2c4e612c3b +Author: Brian Chen +Date: Mon Jun 3 13:53:07 2019 -0700 + + Update protos to include IN and ARRAY_CONTAINS_ANY (#1838) + +commit f701260854d67eed1df0075b3409428b5e55c641 +Merge: 3fdc252f5 bca79d621 +Author: Feiyang1 +Date: Mon Jun 3 10:10:22 2019 -0700 + + Merge branch 'release' + Release 6.1.0 + +commit 3fdc252f558b52dfb8cd5bc9afaa138768a65707 +Author: Christina Holland +Date: Mon Jun 3 10:03:36 2019 -0700 + + Fix display of deprecated tags in generated docs. (#1827) + + * Fix display of deprecated tag. + + * [AUTOMATED]: Prettier Code Styling + +commit db06f63056d84d7948f4bf6a67603ee564549e5b +Author: Christina Holland +Date: Mon Jun 3 10:03:14 2019 -0700 + + Update license checking script. (#1822) + + Update license update script and add missing license tags. + +commit ae78569ef2116ceac7145a2628696453f0e2464e +Author: Mertcan Mermerkaya +Date: Thu May 30 17:34:49 2019 +0100 + + Retry API requests once if the server returns a 5xx response (#1828) + +commit 6045a08995ed4549bce033eed90d31eb892c29a2 +Author: Mertcan Mermerkaya +Date: Thu May 30 11:22:30 2019 +0100 + + Remove return type generics (#1830) + +commit bca79d621854fe2a93fe9048f95960f9a1219f85 (tag: rxfire@3.5.0, tag: firebase@6.1.0, tag: @firebase/testing@0.10.0, tag: @firebase/storage@0.3.0, tag: @firebase/storage-types@0.3.0, tag: @firebase/performance@0.2.5, tag: @firebase/messaging@0.4.0, tag: @firebase/messaging-types@0.3.0, tag: @firebase/installations@0.1.4, tag: @firebase/functions@0.4.8, tag: @firebase/firestore@1.3.4) +Author: Feiyang1 +Date: Tue May 28 14:32:18 2019 -0700 + + Publish firebase@6.1.0 + +commit bc4a844c35e40a8f0fbb3053dc21e465426a6a40 +Author: Fred Zhang +Date: Tue May 28 13:27:27 2019 -0700 + + Storage List API (#1610) + +commit 2e6c4aa741f667f0726f7c4bf9f5c821837f1bd9 +Merge: cc4f2b54d 802fd8d5f +Author: Christina Holland +Date: Tue May 28 10:33:33 2019 -0700 + + Merge branch 'release' + Release 6.0.4 + +commit cc4f2b54d4b8b5106c7e686e6df2f3681a5919cc +Author: Mertcan Mermerkaya +Date: Tue May 28 16:43:18 2019 +0100 + + Fix throwing a Promise object instead of Error (#1826) + +commit 31438c18e7c525bf6181fa75826e8b87d7b61bb6 +Author: Feiyang +Date: Fri May 24 13:22:55 2019 -0700 + + fix the condition that checks if window is available (#1819) + +commit cd2a43f5d8e3221615ea631576f58e7455859324 +Author: Mertcan Mermerkaya +Date: Fri May 24 20:42:38 2019 +0100 + + Remove outdated Node version information (#1782) + +commit a3b2aca3d0395c65644a80a514e3151ea54e6102 +Author: Mertcan Mermerkaya +Date: Fri May 24 18:08:49 2019 +0100 + + Deprecate messaging.requestPermission (#1791) + +commit 802fd8d5f314ba87e2fb8c751d6012b5ba27515c (tag: rxfire@3.4.8, tag: firebase@6.0.4, tag: @firebase/util@0.2.17, tag: @firebase/testing@0.9.6, tag: @firebase/performance@0.2.4, tag: @firebase/messaging@0.3.22, tag: @firebase/installations@0.1.3, tag: @firebase/installations-types@0.1.1, tag: @firebase/firestore@1.3.3, tag: @firebase/database@0.4.3, tag: @firebase/app@0.4.3) +Author: Christina Holland +Date: Thu May 23 17:56:40 2019 -0700 + + Publish firebase@6.0.4 + +commit ae32b2b58a3969266ab701a6b2a4895b790c8ea8 +Author: Michael Lehenbauer +Date: Thu May 23 17:13:05 2019 -0700 + + Revert "Switch from 'grpc' to '@grpc/grpc-js' dependency. (#1804)" (#1813) + + This reverts commit 47711840afa61b27b4dfeeac0a6dd292658c140f. Since this + changes our minimum node dependency from v6 to v8, it is a breaking change and + can't be done at this time. + +commit 412cff973e681532f84e40d0be1caf0b655afc72 +Merge: cee7ad81a 1d5ccce8a +Author: Christina Holland +Date: Thu May 23 14:45:00 2019 -0700 + + Merge branch 'release' + Release 6.0.3 + +commit 1d5ccce8a84a7fe89565a77fba0b9920d41b3080 (tag: rxfire@3.4.7, tag: firebase@6.0.3, tag: @firebase/util@0.2.16, tag: @firebase/testing@0.9.5, tag: @firebase/performance@0.2.3, tag: @firebase/messaging@0.3.21, tag: @firebase/installations@0.1.2, tag: @firebase/firestore@1.3.2, tag: @firebase/database@0.4.2, tag: @firebase/app@0.4.2) +Author: Christina Holland +Date: Thu May 23 14:12:33 2019 -0700 + + Publish firebase@6.0.3 + +commit cee7ad81ac6393a2c0518c85a4dd401ac56611c4 +Author: Mertcan Mermerkaya +Date: Thu May 23 19:59:20 2019 +0100 + + Add types to ErrorFactory message parameters (#1720) + + * Add types to ErrorFactory message parameters + + * Add ErrorParams to packages that use ErrorFactory + +commit 6dc1533d9ba29521289d27e1b776a7dff10c64f3 +Author: Mertcan Mermerkaya +Date: Thu May 23 18:27:02 2019 +0100 + + Add Installations to Firebase package (#1763) + + * Add Installations types to firebase/index.d.ts + + * Add Installations to Firebase package + +commit 42eae2328825c8d912e61a1fc7e78cfaac6ca1a1 +Author: Brian Chen +Date: Wed May 22 17:43:56 2019 -0700 + + Check window in BrowserConnectivityMonitor (#1810) + +commit 772115abf63f70b694133c287117157396427a23 +Author: Brian Chen +Date: Wed May 22 16:48:50 2019 -0700 + + Allow firestore to recover quicker when a network change occurs (#1809) + +commit df1b58816a5f502853f4b6fde59033abca92f3c9 +Author: Brian Chen +Date: Tue May 21 14:39:46 2019 -0700 + + Add ConnectivityMonitor to Firestore(#1808) + +commit 47711840afa61b27b4dfeeac0a6dd292658c140f +Author: Michael Lehenbauer +Date: Tue May 21 12:04:52 2019 -0700 + + Switch from 'grpc' to '@grpc/grpc-js' dependency. (#1804) + + Fixes #1783, reduces package size, and should ease compatibility issues with Electron, etc. + +commit 18115186da7ee97ff06fcc05ba73fd45cd4438c2 +Author: Feiyang +Date: Tue May 21 11:37:16 2019 -0700 + + add packages to dep list for peer dep requirement (#1807) + +commit c8dcdc5ac76851cc4be32620802158d6f660916e +Author: Ryan Brewster +Date: Mon May 20 17:04:33 2019 -0700 + + Use @grpc/proto-loader in @firebase/testing (#1806) + + * Use @grpc/proto-loader in @firebase/testing + + * [AUTOMATED]: Prettier Code Styling + + * rename + +commit 3635f534fd4b491e7c7a29982d86cd44abf34ec5 +Author: Sebastian Schmidt +Date: Mon May 20 14:03:20 2019 -0700 + + Add performance spec tests for queries against large collections (#1802) + +commit 22a530200469a9a14b180abf8370ee643a58c2d4 +Author: Ryan Brewster +Date: Mon May 20 13:52:52 2019 -0700 + + Stop hacking around old gRPC misbehavior (#1803) + +commit dc50232fa8a0d46b35392071c5d9395d8a501fa2 +Author: Michael Lehenbauer +Date: Mon May 20 12:20:21 2019 -0700 + + Gracefully fall back to memory persistence for Firefox Private Browsing. (#1801) + + Fixes #801. + +commit 5f5f1c151686c72158e921bcc4954b0847be8269 +Author: Brian Chen +Date: Fri May 17 14:33:10 2019 -0700 + + Remove exception throwing from clearPersistence() (#1793) + +commit 2b165d552b61e6c25ce078bb08d8d714d436f94d +Author: Mertcan Mermerkaya +Date: Fri May 17 14:40:06 2019 +0100 + + Don't skip messaging tests in browsers that don't support messaging (#1790) + +commit 1e23e8869a710bd59bc820c8f6dc844901be456f +Author: Mertcan Mermerkaya +Date: Fri May 17 14:39:01 2019 +0100 + + Add tslib to Installations dependencies (#1788) + + This allows Rollup to detect tslib as an external dependency and doesn't bundle it in the package builds. It should prevent tslib being bundled twice in the main build. + +commit dd65ae7ec1d0880f0e209efccdd6f4456b21c870 +Author: Mertcan Mermerkaya +Date: Fri May 17 14:38:33 2019 +0100 + + Fix TODOs (#1787) + +commit a80cf4e6865b4ea4e93b8cfd855383b35104790f +Author: Mertcan Mermerkaya +Date: Thu May 16 17:55:32 2019 +0100 + + Delete unused code (#1789) + +commit 462047e2b664efd4612d670d73bec93caeace7f0 +Author: Christina Holland +Date: Mon May 13 11:04:22 2019 -0700 + + Separate Saucelabs cross-browser tests by package (#1756) + + Set up Saucelabs tests to run separately, on CI or locally. + +commit 9f6dbc82b54eaba6551cc969df9b8d43574371e7 +Author: Feiyang +Date: Fri May 10 13:22:09 2019 -0700 + + point ENVIRONMENTS.md to devsite (#1772) + + * point ENVIRONMENTS.md to devsite + + * remove environment support section to README + +commit 46ba69ae87c7515ba08d8e89493ad47039149505 +Author: Mertcan Mermerkaya +Date: Fri May 10 19:54:10 2019 +0100 + + Fix browser detection (#1773) + + Web Workers are browser too. + +commit 9a499734c2f7c81d79c9ad2689b4d5b7695978d6 +Author: Mertcan Mermerkaya +Date: Fri May 10 19:51:55 2019 +0100 + + Import package version from package.json (#1764) + +commit 38cb158a12793c3b2d39740909b1a8a64f1e638b +Merge: c0ab7b47b 78216f803 +Author: Feiyang1 +Date: Thu May 9 17:12:00 2019 -0700 + + Merge branch 'release' + Release 6.0.2 + +commit 78216f803e199adf801ce77cbe31ff56aefa8040 (tag: rxfire@3.4.6, tag: firebase@6.0.2, tag: @firebase/webchannel-wrapper@0.2.20, tag: @firebase/util@0.2.15, tag: @firebase/testing@0.9.4, tag: @firebase/storage@0.2.16, tag: @firebase/polyfill@0.3.14, tag: @firebase/performance@0.2.2, tag: @firebase/messaging@0.3.20, tag: @firebase/logger@0.1.14, tag: @firebase/installations@0.1.1, tag: @firebase/functions@0.4.7, tag: @firebase/firestore@1.3.1, tag: @firebase/database@0.4.1, tag: @firebase/auth@0.11.2, tag: @firebase/app@0.4.1) +Author: Feiyang1 +Date: Thu May 9 16:58:32 2019 -0700 + + Publish firebase@6.0.2 + +commit c0ab7b47ba0a43831c755e2f4f5dfcaec96473bd +Author: Brian Chen +Date: Thu May 9 16:05:41 2019 -0700 + + Standardize shutdown checking logic (#1776) + +commit 0c0000a4c075841368fedda41a5518aab648e090 +Author: Piérre Reimertz +Date: Thu May 9 20:09:51 2019 +0200 + + Update index.ts (#1710) + +commit 6064f2744bc01b00fa771ffd08e5309c89110f84 +Author: Feiyang +Date: Wed May 8 16:30:31 2019 -0700 + + report auth test failures (#1770) + + * report auth test failures + + * use firefox 66.0 + +commit f698323fe42d8c8ec189b46e32c362c29f3f8786 +Author: Ryan Brewster +Date: Wed May 8 14:57:50 2019 -0700 + + Fall back to FIRESTORE_EMULATOR_HOST if FIREBASE_FIRESTORE_EMULATOR_ADDRESS is not found (#1760) + +commit 5a615eb42e52b2db22a26c5569a2ff63f5be2c40 +Author: Ryan Brewster +Date: Wed May 8 14:54:04 2019 -0700 + + Update CODEOWNERS (#1771) + +commit 491598a499813dacc23724de5e237ec220cc560e +Author: Brian Chen +Date: Wed May 8 11:00:38 2019 -0700 + + Fix generate spec for Firestore spec tests (#1766) + +commit aac7864759831fa58f943da2d66385cd7c8d5d62 +Author: Brian Chen +Date: Wed May 8 11:00:11 2019 -0700 + + Add OnVersionChange listener to Firestore (#1762) + +commit fc58bfd1e19cdbfc5fa4ace2f34bf36a1320f43e +Merge: a3a8cb358 5d27b42f2 +Author: Feiyang1 +Date: Wed May 8 10:36:32 2019 -0700 + + Merge branch 'release' + Release 6.0.1 + +commit a3a8cb358d06e89b824274d31ccf3f7a54cf66a1 +Author: Feiyang +Date: Wed May 8 10:33:04 2019 -0700 + + downgrade protractor to use compatible chrome driver (#1768) + +commit 5d27b42f26989dd90f75d9efbb777d59f7cd7254 (tag: rxfire@3.4.5, tag: firebase@6.0.1, tag: @firebase/testing@0.9.3, tag: @firebase/auth@0.11.1) +Author: Feiyang1 +Date: Tue May 7 19:55:16 2019 -0700 + + Publish firebase@6.0.1 + +commit 1224821e720cebddcd66ab02dd12707eca6aa511 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue May 7 17:54:17 2019 -0700 + + replaced firebase promise with native promise (#1767) + +commit 201c53e7e245222cef4cd590f1baac9c5703941d +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue May 7 17:54:17 2019 -0700 + + replaced firebase promise with native promise (#1767) + +commit 63b93c3e490dfb136a6c99ebebd26e7dd04f905f +Author: Feiyang +Date: Tue May 7 13:49:53 2019 -0700 + + update doc html header (#1739) + +commit 3d474acc0275a1a2d82fdbf5d9c133fe3a96e745 +Author: Christina Holland +Date: Tue May 7 11:20:45 2019 -0700 + + Update yarn.lock (#1761) + +commit 59c3a699a5f2c04917c150f819789657485bfe65 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue May 7 11:14:26 2019 -0700 + + updated demo to remove deprecated APIs (#1755) + +commit f6afa45fe24f7adf5ea9a672100049c2ca8571db +Author: Feiyang +Date: Tue May 7 09:36:39 2019 -0700 + + Revamp environment check for firebase app (#1757) + + * rewrite environment check for firebase app + + * [AUTOMATED]: Prettier Code Styling + +commit 4a8faadaf5a0d8ae65ba5cff7a1e0203ea9c7700 +Merge: 52bdce3fd 0f35ed63b +Author: Christina Holland +Date: Tue May 7 08:57:58 2019 -0700 + + Merge branch 'release' + v6.0.0 + +commit 0f35ed63b6839a0b87badc3c9da63e48d855b274 (tag: rxfire@3.4.4, tag: firebase@6.0.0, tag: @firebase/testing@0.9.2, tag: @firebase/firestore@1.3.0, tag: @firebase/firestore-types@1.3.0, tag: @firebase/database@0.4.0, tag: @firebase/database-types@0.4.0, tag: @firebase/auth@0.11.0, tag: @firebase/auth-types@0.7.0, tag: @firebase/app@0.4.0, tag: @firebase/app-types@0.4.0) +Author: Christina Holland +Date: Tue May 7 08:27:18 2019 -0700 + + Publish firebase@6.0.0 + +commit 52bdce3fd7a7b04d130c7d0e4bba137f789e3d3e +Author: DPEBot +Date: Fri May 3 14:31:48 2019 -0700 + + Auto-update dependencies. (#1748) + + * Auto-update dependencies. + + * revert dep update because it doesn't work well with rpt2 + + * update yarn lock + + * update grpc + + * update lock file + + * revert firebase version + + * update lock file + + * exclude idb from dep update list + + * add .ncurc to performance + + * update lock file + + * downgrade rollup-plugin-copy-assets + + * update yarn lock + +commit 664b82c65f5aecb9cbef56d57babf01fbc1c7aa3 +Merge: 5d67b57cc fb7560720 +Author: Feiyang1 +Date: Thu May 2 16:23:15 2019 -0700 + + Merge branch 'release' into master-io + +commit fb756072079e9fb0ff8462985d781f10cc17b7f7 (tag: rxfire@3.4.3, tag: firebase@5.11.1, tag: @firebase/testing@0.9.1, tag: @firebase/performance@0.2.1) +Author: Feiyang1 +Date: Thu May 2 15:56:28 2019 -0700 + + Publish firebase@5.11.1 + +commit 9c59f5554a8db01be5d741cd6b837b20d6d57b28 +Author: alikn +Date: Thu May 2 14:58:04 2019 -0700 + + Update the condition in RC service of performance to allow config objects with no entries (#1747) + +commit 9f25ab67b9362cad07c76dad4d5fc6845bda33f7 +Author: Brian Chen +Date: Thu May 2 14:06:15 2019 -0700 + + Adding call to clearPersistence() into AsyncQueue (#1740) + +commit 20a4430bfd9162ad3b0d8200b776d7c1ae698e7a +Author: Mertcan Mermerkaya +Date: Thu May 2 20:49:04 2019 +0100 + + Rename message to errorInfo in Messaging errors (#1737) + +commit 5a411e011960676d38af747b0369f93ccf033666 +Author: Mertcan Mermerkaya +Date: Thu May 2 18:28:24 2019 +0100 + + Use Sinon fake timers in tests that deal with time (#1744) + + Fixes flaky tests. Removes some redundant code. + +commit 9673907ae7d8d2ca6bfe518234b1473c473a54ab +Author: Mertcan Mermerkaya +Date: Thu May 2 18:26:57 2019 +0100 + + Add @dwoffinden to Installations code owners (#1745) + +commit 5d67b57ccea26686a8ca0d856995e539602303f3 +Author: Feiyang +Date: Thu May 2 10:22:39 2019 -0700 + + Remove Promise from FirebaseNamespace (#1741) + + * Remove Promsie from FirebaseNamespae + + * remove the test case that checks promise + +commit a0605e64454ba56d6ee587469fcebf283ce4310a +Author: Sebastian Schmidt +Date: Wed May 1 16:18:38 2019 -0700 + + Rename multi-tab setting to synchronizeTabs (#1728) + + * Rename multi-tab setting to synchronizeTabs + + * [AUTOMATED]: Prettier Code Styling + + * Update error message + +commit 9d16808777f1e51a6b5bd642dfb1863ada80177c +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed May 1 15:49:48 2019 -0700 + + Auth deprecation (#1726) + + * Auth deprecation for V6 + + * updated externs and index.d.ts + + * [AUTOMATED]: Prettier Code Styling + + * fixed the deprecation message + + * added deprecation notation for the doc + +commit aca99669dd8ed096f189578c47a56a8644ac62e6 +Author: Sebastian Schmidt +Date: Wed May 1 15:44:44 2019 -0700 + + Revert "Revert "Fix the type annotations in the RTDB Query.on/off/once API. (#1204)" (#1723)" (#1724) + + This reverts commit b6bfae0af63491e2d8257af2aa748636be5c068b. + +commit a7bb0b5e8429b8540a47ea13358101a8b728ca72 +Author: Michael Lehenbauer +Date: Wed May 1 15:44:17 2019 -0700 + + Expose Collection Group queries API. (#1722) + +commit f7a46de181d05598b41947a9f27a7c7bb774a458 +Author: Feiyang +Date: Wed May 1 15:31:33 2019 -0700 + + Remove polyfills from all builds except for firebase.js (#1731) + +commit be1eb2c30e3554432b5d039c7f107b49dd9b27c0 +Author: rsgowman +Date: Wed May 1 15:59:08 2019 -0400 + + Remove use of deprecated grpc.load() method (#1669) + + * Workaround for deprecated grpc.load() method + + * Update to protobufjs 6.x + + * Switch serializer tests to test round trips + + Rather than separate tests for encoding/decoding. Similar to the other + platforms. + + * update descriptor.proto + + * Clean up some serializer stuff. + + 1. The switch to protobufjs 6.x seems to have removed the need for hasTag() (and actually it had broken our usage of it since the tags ended up changing from snake_case to camelCase). So I've removed hasTag() and set `oneofs: false` in protoLoaderOptions so the virtual "fooType" fields are no longer added. + 2. 'seconds' in timestamps should always be serialized as a string, since it's an int64 but we weren't doing that. I fixed it, which removed some of the special casing from rsgowman/grpc_load. + 3. I reworked the expect...RoundTrip methods into a single unified one which saves some repetition and I think is easier to make sense of. + 4. I re-added the disabled useProto3Json assert and instead tweaked the offending test not to try to round-trip through protobufjs. + + * Update grpc/proto-loader to 0.5.0. + +commit 46213bb2fdc5ac721b04d659d24fd03103d344ff (tag: rxfire@3.4.2, tag: firebase@5.11.0, tag: @firebase/webchannel-wrapper@0.2.19, tag: @firebase/util@0.2.14, tag: @firebase/testing@0.9.0, tag: @firebase/storage@0.2.15, tag: @firebase/storage-types@0.2.11, tag: @firebase/polyfill@0.3.13, tag: @firebase/performance@0.2.0, tag: @firebase/performance-types@0.0.1, tag: @firebase/messaging@0.3.19, tag: @firebase/messaging-types@0.2.11, tag: @firebase/logger@0.1.13, tag: @firebase/installations@0.1.0, tag: @firebase/installations-types@0.1.0, tag: @firebase/functions@0.4.6, tag: @firebase/functions-types@0.3.5, tag: @firebase/firestore@1.2.2, tag: @firebase/firestore-types@1.2.1, tag: @firebase/database@0.3.20, tag: @firebase/database-types@0.3.11, tag: @firebase/auth@0.10.2, tag: @firebase/auth-types@0.6.1, tag: @firebase/app@0.3.17, tag: @firebase/app-types@0.3.10) +Author: Feiyang1 +Date: Tue Apr 30 16:32:39 2019 -0700 + + Publish firebase@5.11.0 + +commit 96617d3d5b7a3d439e6c13ebb66d318fca7d8786 +Author: Feiyang +Date: Tue Apr 30 14:30:55 2019 -0700 + + make performance-types public (#1736) + +commit 932d7bea1568e6923bdd617d3830404f5578af84 +Author: Feiyang +Date: Tue Apr 30 12:23:18 2019 -0700 + + Firebase Performance and Installations (#1735) + + * Firebase Performance + + * Remove outdated test case + + * Increase timeout for test case that fails in CI + + * Fix flaky test + + * Fix messaging tests + + * null check before checking SDKVERSION + +commit b6a05fdbb4e6904d0d6a7c01f1611441dc3ab138 +Author: Michael Lehenbauer +Date: Tue Apr 30 10:42:10 2019 -0700 + + Fix stack traces and expected/actual values for custom equality mismatches. (#1730) + + We were losing the chai 'ssfi' flag which is needed to generate stack traces and so custom equality errors had no file / line number associated with them, making them hard to pinpoint. Using utils.transferFlags(), we now preserve these flags. + + I also noticed that the actual/expected values were swapped in the error messages and fixed that as well. + +commit 0acd32c07703a6976a21350e00d02bab9d74e7ac +Author: Mertcan Mermerkaya +Date: Tue Apr 30 16:55:59 2019 +0100 + + Refactor FirebaseError (#1725) + +commit b758647f990cc7bd66efeb8e5a0469fc30f2026f +Author: Christina Holland +Date: Mon Apr 29 16:07:29 2019 -0700 + + Add version and release notes badge (#1729) + + Add an NPM version badge and make release notes badge more prominent using https://shields.io/ + +commit d09bee6fbc3f8c4752989f821db1f4ce6f536504 +Author: DPEBot +Date: Sat Apr 27 12:11:42 2019 -0700 + + Auto-update dependencies. (#1727) + +commit 366713abf5a3443067056e32f0d8a255feb5e3cd +Merge: b6bfae0af ea6bd60c4 +Author: Christina Holland +Date: Thu Apr 25 11:19:29 2019 -0700 + + Merge branch 'release' + v5.10.1 + +commit ea6bd60c4fe4808a5cd784cd4c715c1c7065379d (tag: rxfire@3.4.1, tag: firebase@5.10.1, tag: @firebase/testing@0.8.1, tag: @firebase/firestore@1.2.1, tag: @firebase/auth@0.10.1) +Author: Christina Holland +Date: Thu Apr 25 10:36:28 2019 -0700 + + Publish firebase@5.10.1 + +commit b6bfae0af63491e2d8257af2aa748636be5c068b +Author: Sebastian Schmidt +Date: Wed Apr 24 16:59:40 2019 -0700 + + Revert "Fix the type annotations in the RTDB Query.on/off/once API. (#1204)" (#1723) + + This reverts commit e50b070fa531fa5c3911f2f597d9ab57b4457b36. + +commit e50b070fa531fa5c3911f2f597d9ab57b4457b36 +Author: Sebastian Schmidt +Date: Wed Apr 24 14:33:43 2019 -0700 + + Fix the type annotations in the RTDB Query.on/off/once API. (#1204) + +commit 233708903c03b4b2e9b791793fd6541e5b5d2717 +Author: Christina Holland +Date: Wed Apr 24 10:35:57 2019 -0700 + + Add app to component list (#1719) + + Add app to master list of components in `package.json` + +commit 721ac1cd64edd85bda7d3f4f317ffa1879ec9c54 +Author: Brian Chen +Date: Tue Apr 23 18:32:33 2019 -0700 + + Adding documentation for batch() and runTransaction() size limit (#1715) + +commit e641eddc3b7d5622b2bb175450e6194323fe1a57 +Author: Christina Holland +Date: Tue Apr 23 11:06:35 2019 -0700 + + Create package.json field for components (#1716) + + Centralized list of components to publish. + +commit b35ae725cfb0dc7c46877df1f5e0aae549b520d3 +Author: Brian Chen +Date: Tue Apr 23 09:41:46 2019 -0700 + + Add clearPersistence(), separate functionality out from shutdown() (#1712) + +commit dc705895f69107db334c8c25a1724d0cf2e5bdce +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Apr 23 01:24:42 2019 -0700 + + Track AuthEvent with ID to remove duplicate events (#1718) + +commit 37873b6154b1b5c580fa03f8812cd37ef4ac9ab6 +Merge: be5e65ffe f400e2905 +Author: Feiyang1 +Date: Mon Apr 22 21:28:25 2019 -0700 + + Merge branch 'release' + v5.10.0 + +commit be5e65ffe5b3d8fd07bf5d3c46fc22bec1f1e427 +Author: Sebastian Schmidt +Date: Fri Apr 19 13:36:50 2019 -0700 + + Remove extra (#1709) + +commit f400e29050af9ae293cfe473365b5047d725c5ba (tag: rxfire@3.4.0, tag: firebase@5.10.0, tag: @firebase/webchannel-wrapper@0.2.18, tag: @firebase/util@0.2.13, tag: @firebase/testing@0.8.0, tag: @firebase/storage@0.2.14, tag: @firebase/storage-types@0.2.10, tag: @firebase/polyfill@0.3.12, tag: @firebase/messaging@0.3.18, tag: @firebase/messaging-types@0.2.10, tag: @firebase/logger@0.1.12, tag: @firebase/functions@0.4.5, tag: @firebase/functions-types@0.3.4, tag: @firebase/firestore@1.2.0, tag: @firebase/firestore-types@1.2.0, tag: @firebase/database@0.3.19, tag: @firebase/database-types@0.3.10, tag: @firebase/auth@0.10.0, tag: @firebase/auth-types@0.6.0, tag: @firebase/app@0.3.16, tag: @firebase/app-types@0.3.9) +Author: Feiyang1 +Date: Thu Apr 18 14:08:27 2019 -0700 + + Publish firebase@5.10.0 + +commit 4b9894666e8d4bef62319e6d101b8fc22240f23f +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Apr 17 22:15:12 2019 -0700 + + Updates isWorker() check to test if importScripts and WorkerGlobalScope are defined (#1706) + +commit b5c8cf63cf1f2f5c258b759f24cfd27d43cc2b93 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Apr 17 22:14:23 2019 -0700 + + added admin_only_operation error (#1707) + +commit 26d95544b81071d2e1ef6f8c8d64711ac3b9656a +Author: Brian Chen +Date: Wed Apr 17 15:46:13 2019 -0700 + + Exclude iOS Safari < 10.0 and Android < 4.4 when checking isAvailable() to enable persistence (#1703) + +commit acaa10b41f9e3420ffcd663ae590d18d37c16a80 +Author: Mertcan Mermerkaya +Date: Wed Apr 17 22:27:34 2019 +0100 + + Use yarn install --frozen-lockfile in CI (#1676) + +commit 2b3b5e6d8b59de4250412816533e0decbf785fe5 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Apr 16 17:58:09 2019 -0700 + + replaced methods that are deprecated with new ones (#1704) + +commit 4e0348f5a4668968afd44e01d77829d87140b5e9 +Author: Feiyang +Date: Tue Apr 16 16:46:20 2019 -0700 + + update lock file (#1702) + +commit ac44bb2605eb1efff168197a1ec4a7b81a2d377e +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Apr 16 15:16:27 2019 -0700 + + Updated externs for AuthCredential serialization/deserialzation (#1701) + + Updated externs for AuthCredential toJSON/fromJSON + +commit 780c302fd6da799dafed45345b694a8a8a4a3c78 +Author: Christina Holland +Date: Tue Apr 16 11:53:25 2019 -0700 + + Add internal delete method to functions (#1687) + + Implement `INTERNAL.delete()` method for Functions service. + +commit eb8279410d2c45498c211acf074bb5987d1b1f91 +Author: DPEBot +Date: Tue Apr 16 11:11:45 2019 -0700 + + Auto-update dependencies. (#1692) + +commit aba75dff0a08e165b22711ffa8d99ca791acbc11 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Apr 16 10:52:49 2019 -0700 + + Expose toJSON and fromJSON on AuthCredential (#1629) + + toJSON/fromJSON for AuthCredential + +commit 97428d42e0b9eb8ada0b87130c87a8e6a3940e85 +Author: Brian Chen +Date: Mon Apr 15 16:06:54 2019 -0700 + + Throw error in subsequent function calls after the client is shutdown (#1695) + + * `ensureClientConfigured()` is now called in `delete()` to ensure that errors are thrown after `shutdown()` is called + +commit eaa6aa1d9bc721a7db97a32ba78b9d21dd099ebb +Author: Michael Lehenbauer +Date: Fri Apr 12 16:20:44 2019 -0700 + + Fix test:node:persistence command. (#1688) + + Since our code is TypeScript we use `--require ts-node/register` for mocha to + be able to run our code. We have this require in our global + `../../config/mocha.node.opts` file, but it apparently isn't applied before the + `--require test/util/node_persistence.ts` in our test:node:persistence + command-line. So I've had to add an explicit `--require ts-node/register` to + our command-line. + +commit a5d8837c1ae207ff5acf78e31ad1d13b1a698eec +Author: Michael Lehenbauer +Date: Fri Apr 12 14:57:12 2019 -0700 + + Use `--concurrency 4` instead of `--parallel` for tests. (#1693) + + This should make travis more reliable by limiting the amount of concurrency for our tests . + + `--concurrency 4` was also slightly faster than `--parallel` on my local + machine. Though any value above 1 was actually fairly comparable: + + --parallel: 342.63s + --concurrency 1: 498.26s + --concurrency 2: 351.23s + --concurrency 3: 342.50s + --concurrency 4: 336.55s + --concurrency 5: 349.82s + --concurrency 6: 348.19s + --concurrency 7: 341.47s + --concurrency 8: 348.52s + + Comparing a couple travis runs from before (with `--parallel`) to this PR (with `--concurrency 4`), it seems like this speeds things up a bit: + + Before: 679.74s / 678.04s + After: 595.03s / 635.62s + + And I notice the RTDB emulator starts muuuch faster: + Before: Emulator has started up after 67.517s! + After: Emulator has started up after 9.068s! + +commit b27f4c75c4a27ede3cad124d9090b6563f22927f +Author: Michael Lehenbauer +Date: Fri Apr 12 14:25:33 2019 -0700 + + Fix firestore.Timestamp case in docs table of contents. (#1691) + +commit eccfbe2398a80df162494a5873c52d48ca34aba7 +Merge: e0aba76b9 ab2ecd6c9 +Author: Christina Holland +Date: Thu Apr 11 15:25:54 2019 -0700 + + Merge branch 'release' + Release 5.9.4 + +commit ab2ecd6c9ece397459743cfb0c94bdcccdf5e0f3 (tag: rxfire@3.3.11, tag: firebase@5.9.4, tag: @firebase/webchannel-wrapper@0.2.17, tag: @firebase/util@0.2.12, tag: @firebase/testing@0.7.10, tag: @firebase/storage@0.2.13, tag: @firebase/storage-types@0.2.9, tag: @firebase/polyfill@0.3.11, tag: @firebase/messaging@0.3.17, tag: @firebase/messaging-types@0.2.9, tag: @firebase/logger@0.1.11, tag: @firebase/functions@0.4.4, tag: @firebase/functions-types@0.3.3, tag: @firebase/firestore@1.1.4, tag: @firebase/firestore-types@1.1.2, tag: @firebase/database@0.3.18, tag: @firebase/database-types@0.3.9, tag: @firebase/auth@0.9.8, tag: @firebase/auth-types@0.5.6, tag: @firebase/app@0.3.15, tag: @firebase/app-types@0.3.8) +Author: Christina Holland +Date: Thu Apr 11 15:11:41 2019 -0700 + + Publish firebase@5.9.4 + +commit e0aba76b9d7436ea750ca953c668b0210471c2ae +Author: Christina Holland +Date: Thu Apr 11 11:57:16 2019 -0700 + + Implement @webonly tag to exclude items from Node docs (#1679) + + - Use built-in Typescript AST tools to generate a temporary abridged copy of `index.d.ts` as a source for generating Node documentation. + + - `@webonly` tag used to indicate which sections to omit. + + - Custom Typedoc theme updated to not display `@webonly` as a tag section in doc output. + + - Rearrange signature/description ordering of overloaded methods. + +commit 077b88bb6c109b31bde0e9080bf49e28cc8a3248 +Author: Brian Chen +Date: Wed Apr 10 14:10:17 2019 -0700 + + Update documentation to use yarn build (#1681) + + * Add option to specify projectId in `yarn test:setup`. + * Test set up details added to CONTRIBUTING.md in `firestore` package. + +commit c2b6eb86fb8edbda3a1d5a43219adf58f9cbe9f2 +Author: Christina Holland +Date: Wed Apr 10 10:33:44 2019 -0700 + + Change a documentation link to match docs changes (#1684) + +commit a669ee56b6710e445092f899a1ef733f1fdc30b7 +Author: Michael Lehenbauer +Date: Tue Apr 9 15:44:33 2019 -0700 + + Add "experimentalForceLongPolling" option. (#1662) + +commit d4eb7e4e76513ad7677e67a4f2a9a69986ffcec5 +Author: Brian Chen +Date: Tue Apr 9 15:12:32 2019 -0700 + + Validate operator enum in Query.where() calls (#1677) + +commit 96ab56bac05ccaf506ed3a02ccad5ff7e01a07d0 +Author: Feiyang +Date: Tue Apr 9 14:18:32 2019 -0700 + + Refactor firebaseApp into multiple files (#1664) + + * refactor firebaseApp into multiple files + + * [AUTOMATED]: Prettier Code Styling + +commit 963b4f02a7593c2f6da8fe875d8e624e2b64c70f +Author: Mertcan Mermerkaya +Date: Tue Apr 9 18:42:41 2019 +0100 + + Run yarn (#1675) + + Looks like `yarn.lock` wasn't updated properly. + +commit 5b2322512812b1f51b749fa40dfda161e7b43776 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Apr 8 13:59:19 2019 -0700 + + Added the constructor defination on OAuthProvider (#1673) + +commit 81a4bae3327a236dd030d7e2ed1dc52a8c019401 +Author: DPEBot +Date: Mon Apr 8 12:10:25 2019 -0700 + + Auto-update dependencies. (#1654) + +commit 5849598178743dc2708a9cc89c06c887333a593f +Author: Christina Holland +Date: Mon Apr 8 11:03:44 2019 -0700 + + Run prettier on whole repo (#1663) + +commit e510af702ed186cc84524d97345fd2c15c79d58a +Author: Christina Holland +Date: Mon Apr 8 11:00:45 2019 -0700 + + Fix accidental reversion due to bad merge (#1672) + +commit 524b9aaf075ac6ccd6d57f386c2474d77ce156c1 +Merge: bcb1dfe88 5c8da05c4 +Author: Feiyang1 +Date: Fri Apr 5 17:02:13 2019 -0700 + + Merge branch 'release' + Release 5.9.3 + +commit bcb1dfe88869cf0e99d14f3785f256e643f927a8 +Author: Christina Holland +Date: Fri Apr 5 12:04:40 2019 -0700 + + Add npm script to run prettier on whole repo (#1661) + +commit 3c5338699e1e83a200a6e976d286e2031073db7f +Author: Michael Lehenbauer +Date: Fri Apr 5 11:43:33 2019 -0700 + + Fix up Firestore CHANGELOG.md to reflect recent releases. (#1660) + +commit 5c8da05c43df1d7da697bb12f8c36c28afb64380 (tag: rxfire@3.3.10, tag: firebase@5.9.3, tag: @firebase/testing@0.7.9, tag: @firebase/polyfill@0.3.10, tag: @firebase/messaging@0.3.16, tag: @firebase/firestore@1.1.3, tag: @firebase/database@0.3.17, tag: @firebase/auth@0.9.7, tag: @firebase/app@0.3.14) +Author: Feiyang1 +Date: Thu Apr 4 15:39:58 2019 -0700 + + Publish firebase@5.9.3 + +commit d6c1119c056ffcefb3a00338b6be3a51c929d5cc +Author: Feiyang +Date: Thu Apr 4 11:21:56 2019 -0700 + + update types (#1658) + +commit 01c63e493b3dafe00425f031ffed037c00c967c6 +Author: Mertcan Mermerkaya +Date: Wed Apr 3 21:39:50 2019 +0100 + + Delete Hash base class in util (#1657) + + Removes the Hash base class that is only used in Sha1 in @firebase/util. It only has a single property and only one class extends from it, so I think it's fair to say that it's not very useful. + + The actual reason of me doing this is that Rollup doesn't realize that extended classes that are transpiled to ES5 don't have side effects. Without this change, any package using Rollup that imports anything from @firebase/util (like FirebaseError or ErrorFactory) will also get Sha1 and Hash classes included in their bundle. I suspect that Webpack does something similar but I haven't checked. + + After this change, using Rollup, an iife build of a package that only exports ErrorFactory and FirebaseError from @firebase/util went from 1478 bytes to 544 bytes (minified + gzipped). + +commit b22e1ad48e59327658eb130bb6f5ff391a0a4c37 +Author: Christina Holland +Date: Wed Apr 3 10:53:15 2019 -0700 + + Add auto documentation section to contributing page (#1655) + +commit cbf1777cf9547f4e1066ce61d725ca005295460c +Author: Feiyang +Date: Wed Apr 3 10:02:48 2019 -0700 + + Add explicit type parameters for typescript 3.4 (#1656) + + * Add explicit type parameters for typescript 3.4 + + * [AUTOMATED]: Prettier Code Styling + +commit 5a98d84d496950d05a1abb8525f55f00548410da +Author: Mertcan Mermerkaya +Date: Tue Apr 2 18:10:12 2019 +0100 + + Remove "noImplicitAny: false" from the base TSConfig (#1653) + + This option is `false` by default, so there is no need to set it to `false` explicitly. + + Also because of this, when a package enables the `strict` option, they also need to enable `noImplicitAny` explicitly, even though it is already a part of the `strict` option. + +commit 8e81a47c072a353a685e08ec459819770e01cffe +Author: Natan Sągol +Date: Tue Apr 2 19:04:04 2019 +0200 + + Fix a typo in a build file of the auth package (#1635) + +commit 46e3280cbab95091b19c4a8c782b75e1064b9adc +Author: Abhijeeth Padarthi +Date: Tue Apr 2 21:08:52 2019 +0530 + + Fix lint (#1652) + + two NOs make a YES 😄 + +commit 4ec3191447d2a5ce51ed1acb01b1cdef810633c4 +Author: Christina Holland +Date: Mon Apr 1 11:02:48 2019 -0700 + + Make default testing project easier to select (#1638) + + Put JSCore Sandbox repo at top of list + +commit dbd57b1cdbef43276537d317bc78b7e40ae97c6d +Author: Xin Du (Clark) +Date: Fri Mar 29 06:12:08 2019 +0000 + + chore: upgrade core-js to v3 (#1623) + +commit c16363967ec894a47a76ea140782d9577101091b +Merge: 18aecbc27 61b936c80 +Author: Christina Holland +Date: Thu Mar 28 13:10:36 2019 -0700 + + Merge branch 'release' + Release 5.9.2 + +commit 61b936c80e385c8c92488e0765dc098d83809f22 (tag: rxfire@3.3.9, tag: firebase@5.9.2, tag: @firebase/testing@0.7.8, tag: @firebase/firestore@1.1.2) +Author: Christina Holland +Date: Thu Mar 28 13:04:24 2019 -0700 + + Publish firebase@5.9.2 + +commit 18aecbc27c5eae73aa0ab3de79034a2c254d6eb0 +Author: Mertcan Mermerkaya +Date: Thu Mar 28 19:00:30 2019 +0000 + + Improve AppError typings (#1645) + +commit d97b62c7ef7632174af651dc3ab49c321835b00e +Author: Mertcan Mermerkaya +Date: Thu Mar 28 18:41:41 2019 +0000 + + Use a const enum for ErrorCode (#1646) + +commit c2d7498720d211dc4ab631be883f5dbd139961bb +Author: Christina Holland +Date: Wed Mar 27 15:30:22 2019 -0700 + + Add license tags for new files since last license tag add (#1643) + +commit 57d254efa65840063370cfd905236a14d0c0c32d +Author: Christina Holland +Date: Wed Mar 27 13:25:51 2019 -0700 + + Fix bug causing extra Node doc files to not be deleted (#1637) + + Fix bug causing extra Node doc files to not be deleted + +commit 03a4c8dbf58bab3db5742c094c91f46bbf446155 +Author: egilmorez +Date: Mon Mar 25 15:51:28 2019 -0700 + + Add firestore.FieldValue.increment to index.d.ts (#1632) + + + * Adding firestore.FieldValue.increment. + +commit e4604d08b9c1367d13f9900e52753e499f31805d +Author: Christina Holland +Date: Fri Mar 22 11:31:29 2019 -0700 + + Add html extension to toc on homepage (#1625) + + * Add html extension to toc on homepage + + * Add javascript language tags that were missed earlier + +commit 2e5c8426d2c5149f047d9303ea051baa6c252cc9 +Author: egilmorez +Date: Fri Mar 22 10:58:31 2019 -0700 + + Fixing a few typos. (#1628) + + * Fixing a few typos. + + * Update index.d.ts + +commit 4f446f0a1c00f080fb58451b086efa899be97a08 +Merge: 49e8e66c3 8f7229ff7 +Author: Feiyang1 +Date: Thu Mar 21 15:06:44 2019 -0700 + + Merge branch 'release' + Release 5.9.1 + +commit 8f7229ff70d334baf06e6562f96d40df8a519a16 (tag: rxfire@3.3.8, tag: firebase@5.9.1, tag: @firebase/webchannel-wrapper@0.2.16, tag: @firebase/util@0.2.11, tag: @firebase/testing@0.7.7, tag: @firebase/storage@0.2.12, tag: @firebase/storage-types@0.2.8, tag: @firebase/polyfill@0.3.9, tag: @firebase/messaging@0.3.15, tag: @firebase/messaging-types@0.2.8, tag: @firebase/logger@0.1.10, tag: @firebase/functions@0.4.3, tag: @firebase/functions-types@0.3.2, tag: @firebase/firestore@1.1.1, tag: @firebase/firestore-types@1.1.1, tag: @firebase/database@0.3.16, tag: @firebase/database-types@0.3.8, tag: @firebase/auth@0.9.6, tag: @firebase/auth-types@0.5.5, tag: @firebase/app@0.3.13, tag: @firebase/app-types@0.3.7) +Author: Feiyang1 +Date: Thu Mar 21 14:59:05 2019 -0700 + + Publish firebase@5.9.1 + +commit 49e8e66c39414d132c4360e99bd5c71c6d71508c +Author: Fred Zhang +Date: Thu Mar 21 13:49:51 2019 -0700 + + s/firebase.Promise/Promise (#1620) + + * s/firebase.Promise/Promise + + * remove unecessary type annotations + +commit e7053c72b38ffed454d0367102032143f8f3f9aa +Author: Christina Holland +Date: Thu Mar 21 11:15:20 2019 -0700 + + Update doc generation styling and content (#1622) + + * Remove aside when unneeded + + * Header margin changes + + * Fixes for code highlighting + + * Update `toc.yaml` files and `index.d.ts` + +commit bb7355945835c5b8908487ef3b939f716d7f5c42 +Author: Michael Lehenbauer +Date: Wed Mar 20 19:07:34 2019 -0700 + + b/32935141: Clean up remaining TODOs in first-party-auth implementation. (#1614) + +commit 6e90afc0142355999196557a6be2be3fe2704824 (origin/fz/transient-failed) +Author: Feiyang +Date: Fri Mar 15 16:11:42 2019 -0700 + + exclude karma-sauce-launcher in dep auto update (#1609) + + * exclude karma-sauce-launcher in dep auto update + + * update yarn lock + +commit ac8955d9c514a624ae5e1d55cc799b068313e13c +Author: Christina Holland +Date: Fri Mar 15 14:33:01 2019 -0700 + + Modify doc generation script to also generate node reference docs (#1604) + + Modify docgen script to generate node docs as well. Create npm scripts to generate js docs, or node docs, or both. + +commit 7514ac5d0cbd31096308abad34f07ab62a4bd634 +Author: Fred Zhang +Date: Fri Mar 15 09:47:44 2019 -0700 + + Externalize Storage Domain Constant (#1602) + + * extract domain constant + + * clean up unused imports + + * s/uploadUrl/makeUrl s/normalUrl/makeUrl + + * s/domainRegex/hostRegex/ + +commit e27cab8d880b1b9fe4d9a9ef102abce468c79e96 +Author: Feiyang +Date: Thu Mar 14 16:55:01 2019 -0700 + + Add delete() back to index.d.ts (#1607) + + * Add delete() back to index.d.ts + + * include rxFire in repo level test + + * [AUTOMATED]: Prettier Code Styling + +commit 5e851188a71b2ca596eeb0e725a8e5cd4df0c7d8 +Author: Michael Lehenbauer +Date: Thu Mar 14 15:34:31 2019 -0700 + + b/123095740: Increase webchannel timeout to accommodate slow internet connections (#1447). (#1603) + +commit 9fe1b6a5bde9e421c4200736a7debbdf39233277 +Merge: 6a9b0e41a 5df8e2e00 +Author: Christina Holland +Date: Thu Mar 14 14:43:34 2019 -0700 + + Merge branch 'release' + Release 5.9.0 + +commit 5df8e2e00f99cb1a3711ff56f199bc445fbfc994 (tag: rxfire@3.3.7, tag: firebase@5.9.0, tag: @firebase/webchannel-wrapper@0.2.15, tag: @firebase/util@0.2.10, tag: @firebase/testing@0.7.6, tag: @firebase/storage@0.2.11, tag: @firebase/storage-types@0.2.7, tag: @firebase/polyfill@0.3.8, tag: @firebase/messaging@0.3.14, tag: @firebase/messaging-types@0.2.7, tag: @firebase/logger@0.1.9, tag: @firebase/functions@0.4.2, tag: @firebase/functions-types@0.3.1, tag: @firebase/firestore@1.1.0, tag: @firebase/firestore-types@1.1.0, tag: @firebase/database@0.3.15, tag: @firebase/database-types@0.3.7, tag: @firebase/auth@0.9.5, tag: @firebase/auth-types@0.5.4, tag: @firebase/app@0.3.12, tag: @firebase/app-types@0.3.6) +Author: Christina Holland +Date: Thu Mar 14 13:56:16 2019 -0700 + + Publish firebase@5.9.0 + +commit 6a9b0e41ac4226a16385b42f73ae9cf24519efa9 +Author: Michael Lehenbauer +Date: Thu Mar 14 09:43:21 2019 -0700 + + b/125385470: Fix transactions w/ auth issue on NodeJS. (#1605) + + In https://github.com/firebase/firebase-js-sdk/commit/81cd260aeb729c5003952988b19d5b32788510d4 we moved to sending our auth metadata directly in each RPC call, but for RPCs that take a callback (i.e. non-streaming RPCs like we use to commit a transaction), the auth metadata must be passed *before* the callback, but we were unconditionally passing it as the last argument: https://github.com/firebase/firebase-js-sdk/blob/a18b2905a161f302bf0fad7a32dd82507932093e/packages/firestore/src/platform_node/grpc_connection.ts#L145 + + I've fixed this by removing the getRpcCallable() helper which I felt wasn't being that helpful anymore. I also cleaned up ensureActiveStub() which accepted a token but didn't do anything with it. + +commit c91096e2bcb16bc73936bac44392277ae7304ceb +Author: Sebastian Schmidt +Date: Thu Mar 14 08:30:49 2019 +0800 + + Running yarn:prettier' (#1601) + +commit 53d4efcba688736959b5bb7e589f23f37ba409b1 +Author: Christina Holland +Date: Wed Mar 13 10:34:20 2019 -0700 + + Remove source links from generated reference docs (#1598) + +commit b66962d1aa1443e19493af6966f0c46060d88103 +Author: Sebastian Schmidt +Date: Thu Mar 14 00:14:13 2019 +0800 + + Adding missing export for DataSnapshot (#1600) + +commit c923efab982900f50141554d284b3d762fda97d1 +Author: Sebastian Schmidt +Date: Thu Mar 14 00:11:32 2019 +0800 + + Ensure consistent JSON Serialization of DocumentKeys (#1596) + + Stop relying on JSON.stringify() as part of generating canonicalId() since we haven't made any effort to implement sane toJSON() methods on our types. We now use toString() instead, which required implementing it on SortedMap. + +commit a738a9d1be9dc8309487c8d3ee2a888b180f55bf +Author: Feiyang +Date: Tue Mar 12 16:05:11 2019 -0700 + + add deps update configuration to all projects (#1599) + +commit c0ec7a058b00d99c0b50113269c491d837a209f5 +Author: Feiyang +Date: Tue Mar 12 14:38:23 2019 -0700 + + rename prepare to build, so build is not triggered after yarn install (#1592) + + * rename prepare to build, so build is not triggered after yarn install + + * [AUTOMATED]: Prettier Code Styling + + * build packages before running tests + +commit 71b7abf67bc715cb369f06b52b93ca508164dedf +Author: Mertcan Mermerkaya +Date: Tue Mar 12 17:10:20 2019 +0000 + + Fix FCM in Chrome Extensions (#1597) + + Prevents sending messages to Chrome Extension background pages, which are always considered visible in Chrome. That causes our SDK try to send the message to the background page and to not show the notification. + + I'll also investigate if background page being considered a visible client is a bug in Chrome itself, and try to get it fixed if I can. But for now this seems like a good workaround. + +commit 0c9badf22d71dc0b37e410784e94bd6027f01e93 +Author: Natan Sągol +Date: Mon Mar 11 22:16:27 2019 +0100 + + Add `repository.directory` field to all `package.json` files. (#1595) + + npm supports links to `package.json` files that are not in a root of + a repostiory by supplying `directory` field in `repository`, see + https://docs.npmjs.com/files/package.json.html#repository + +commit 2297f444e8f9b87a82806ddf66ec0d74edd4fb04 +Author: Jeff +Date: Mon Mar 11 13:01:36 2019 -0700 + + Fix links on npm (#1594) + + Links in the [documentation section](https://www.npmjs.com/package/rxfire#documentation) of the npm package description page don't work correctly. Using the full URL of the docs pages will fix that. + +commit 9bb3603c2d840986009b4cbb810db5b8a6a0e70a +Author: Michael Lehenbauer +Date: Sat Mar 9 09:56:33 2019 -0800 + + Fix webchannel-wrapper sourcemap. (#1590) + + I accidentally broke this while tweaking my last change to write to a temp folder. + +commit 54bdfc4cebb038ffe19b16bb263b1007132ca356 +Author: Feiyang +Date: Fri Mar 8 14:53:51 2019 -0800 + + update remaining outdated deps before enabling auto update (#1589) + + * update remaining outdated deps before enabling auto update + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * remove temporary script + +commit 6c729f79910796b1fa14a7a2cb9ac19374904377 +Author: Michael Lehenbauer +Date: Fri Mar 8 12:06:58 2019 -0800 + + Add changelog entry for CG query internals. (#1588) + +commit 21c0f3c0c2bf0e06bf40c2966da1033570c3fb5c +Author: Michael Lehenbauer +Date: Fri Mar 8 10:37:41 2019 -0800 + + Collection Group Queries w/ indexing (#1440) + + * Collection Group Queries w/ indexing + + * [AUTOMATED]: Prettier Code Styling + + * Initial review feedback. + + * CR Feedback: QueryIndexes renames. + + * QueryIndexes => IndexManager + * indexCollectionParent() => addToCollectionParentIndex() + + * Create index entries from MutationQueue.addMutationBatch(). + + * Add spec tests. + + * Index existing data. + + * [AUTOMATED]: Prettier Code Styling + + * lint + + * Fix FieldPath.documentId() handling with CG queries. + + * Cleanup + + * Re-add accidentally-removed test. + + * Delete accidentally checked-in vim swap file. + + * Update changelog. + + * Tweak test to use path(). + + * Add asserts to verify collection paths. + + * Simplify schema migration test. + + * CR feedback. + + * Tweak comment. + + * CR Feedback. + + * Port minor CR feedback back to JS. + + * Hide public API for CG queries until backend support is ready. + +commit 455d7dbcb772a6a755ad3fa57a27194cf7dc8e0a +Author: Christina Holland +Date: Fri Mar 8 10:10:25 2019 -0800 + + Fix doc generation script to preserve old filename capitalization (#1586) + + Fix doc generation script to preserve old filename capitalization + +commit 00bc0869f28ed3561651617a91c12a73cd027e92 +Author: Feiyang +Date: Fri Mar 8 10:09:07 2019 -0800 + + fix (typing): replace any with concrete types (#1585) + +commit ff30c2721c9fea7440f2db0eede14c96dbd915d8 +Author: Michael Lehenbauer +Date: Thu Mar 7 18:30:17 2019 -0800 + + Enable sourcemap generation throughout repo. (#1576) + + Enable sourcemaps in all builds for easier debugging / size analysis. + + * Merge existing sourcemaps when building. + * Enable sourcemap for webchannel-wrapper. + + I reworked the build to actually write the intermediate output from closure so + I could plumb the source map through straightforwardly. + +commit e2bbfd0d256a6cc3fb878917638affa6007fa311 +Author: Michael Lehenbauer +Date: Thu Mar 7 18:29:34 2019 -0800 + + Rerun prettier on firestore code (somehow some changes got missed). (#1587) + +commit 278678c5bbcbf60d1e5e61295945294dc8233c72 +Merge: d6bd056c3 eacb4863e +Author: Feiyang1 +Date: Thu Mar 7 14:58:15 2019 -0800 + + Merge branch 'release' + Release 5.8.6 + +commit eacb4863e0b7057f167db1d2bc7dce2bfd92a684 (tag: rxfire@3.3.6, tag: firebase@5.8.6, tag: @firebase/util@0.2.9, tag: @firebase/testing@0.7.5, tag: @firebase/storage@0.2.10, tag: @firebase/messaging@0.3.13, tag: @firebase/logger@0.1.8, tag: @firebase/functions@0.4.1, tag: @firebase/firestore@1.0.6, tag: @firebase/database@0.3.14, tag: @firebase/app@0.3.11) +Author: Feiyang1 +Date: Thu Mar 7 13:47:38 2019 -0800 + + Publish firebase@5.8.6 + +commit d6bd056c3a0cab972f842dc5bee49eb0ef25c192 +Author: Michael Lehenbauer +Date: Thu Mar 7 11:33:16 2019 -0800 + + Fix vscode test runners based on changes in #1561. (#1584) + + TS_NODE_COMPILER_OPTIONS={"module":"commonjs"}. This change propagates this + into .vscode/launch.json. + +commit 35276912e7733a28920493a18a9cc6c65c8ae9b5 +Author: Christina Holland +Date: Thu Mar 7 11:05:50 2019 -0800 + + Update firestore externs file to avoid closure compiler errors (#1582) + + Update firestore externs to avoid closure compiler errors + +commit 1afd682dc43da695c2e1ae72e7e76b8386763771 +Author: Gil +Date: Thu Mar 7 09:39:24 2019 -0800 + + Fix test runners based on changes in #1561 (#1583) + + Fix yarn test:node:persistence in packages/firestore and also IntelliJ + test runner definitions. + +commit 3b520a2bdb6f2c10af13bb75e8c37e02aff4d707 +Author: Sebastian Schmidt +Date: Wed Mar 6 18:50:24 2019 -0800 + + Adding FieldValue.increment() to changelog (#1581) + +commit d3645695cdcd4cba26725fe0a6056e04c4c9ede8 +Author: Sebastian Schmidt +Date: Wed Mar 6 13:55:02 2019 -0800 + + Add Numeric Add (#1368) + +commit 400fd786a59340fd9adcb2c7f083479445b8981f +Author: Feiyang +Date: Tue Mar 5 16:25:03 2019 -0800 + + update dependency to avoid an error when running release process (#1579) + +commit 5d0d047c97b7b0ef430227d0de9951a7bcbb3ec8 +Author: Michael Lehenbauer +Date: Tue Mar 5 13:21:11 2019 -0800 + + Improved query performance in the face of subcollections. (#1578) + + Ports an optimization from Android where we skip parsing documents that are in + subcollections beneath the collection we're querying over. + +commit ef858acf510a498b4aef904caa072ec6fefd6134 +Author: Feiyang +Date: Mon Mar 4 13:51:36 2019 -0800 + + test: update test related packages (#1564) + + * test: update test related packages + + * build: add missing dependency + + * update yarn lock + +commit 86c2e14ed487dc4a7ef79189c714da8329a0ef08 +Merge: b56d6785d a78636904 +Author: Christina Holland +Date: Fri Mar 1 16:33:08 2019 -0800 + + Merge branch 'release' + Release 5.8.5 + +commit a786369041e4cb8dddfdafcb0c250d6f6c184ed9 (tag: rxfire@3.3.5, tag: firebase@5.8.5, tag: @firebase/webchannel-wrapper@0.2.14, tag: @firebase/util@0.2.8, tag: @firebase/testing@0.7.4, tag: @firebase/storage@0.2.9, tag: @firebase/storage-types@0.2.6, tag: @firebase/polyfill@0.3.7, tag: @firebase/messaging@0.3.12, tag: @firebase/messaging-types@0.2.6, tag: @firebase/logger@0.1.7, tag: @firebase/functions@0.4.0, tag: @firebase/functions-types@0.3.0, tag: @firebase/firestore@1.0.5, tag: @firebase/firestore-types@1.0.3, tag: @firebase/database@0.3.13, tag: @firebase/database-types@0.3.6, tag: @firebase/auth@0.9.4, tag: @firebase/auth-types@0.5.3, tag: @firebase/app@0.3.10, tag: @firebase/app-types@0.3.5) +Author: Christina Holland +Date: Fri Mar 1 16:04:19 2019 -0800 + + Publish firebase@5.8.5 + +commit b56d6785d494abd146086a7125c82f3e93ed4609 +Author: Eduard +Date: Fri Mar 1 17:07:28 2019 +0400 + + rxfire rollup config fix (#1568) + + closes #1567 + +commit af8400154533deea189ff1475d55fcb16b25cb10 +Author: Christina Holland +Date: Wed Feb 27 10:07:52 2019 -0800 + + Add autodocumentation scripts that run Typedoc (#1553) + + * Add doc generation files + + * Update index.d.ts + +commit b8daf84bb2e1a3cc2f950e5a69b0df831575a7b6 +Merge: 33a00083b 6e1860b45 +Author: Christina Holland +Date: Wed Feb 27 09:43:54 2019 -0800 + + Merge branch 'master' into release + +commit 6e1860b451e9ff27cdbbc6ac62e0154d2b372e09 +Author: Mike Lyons +Date: Wed Feb 27 10:52:44 2019 -0500 + + [rxfire] Reference realtime database typings (#1258) + + Realtime database typings exist for rxfire but the package.json file does not reference them and vscode can't find them. This change adds the missing reference, matching auth/, firestore/, and storage/. + +commit 43ff0636abf1a72a6625fa01fe85960911d48c93 +Author: Firebaser <34425799+angulartist@users.noreply.github.com> +Date: Wed Feb 27 16:22:55 2019 +0100 + + Docs(rxfire): replace docChanges method with collectionChanges (#1527) + + docChanges not found in rxfire/firestore package, collectionChanges is the correct method + +commit afba06d27ab43e0094561dccadbc5ebccfe9cf89 +Author: Christina Holland +Date: Wed Feb 27 02:01:29 2019 -0800 + + Delete gitignored generated files in rxfire (#1565) + +commit 33a00083b9bf923e1c5b1d1d2582969fae59d82c +Author: Christina Holland +Date: Tue Feb 26 21:34:05 2019 -0800 + + Remove gitignored files + +commit 5a10a6d485a65099c6699c937095903a45bc67f9 +Author: Feiyang1 +Date: Tue Feb 26 17:28:26 2019 -0800 + + Add new storage owner + +commit 4502a57af055c5ed57a60a0c413a9fea26b84772 +Author: Feiyang +Date: Tue Feb 26 17:24:30 2019 -0800 + + include rxfire in the global build scripts (#1563) + +commit d0bf3790d71d87b9a5eaba1e7b45afa443604690 +Author: Feiyang +Date: Tue Feb 26 11:22:30 2019 -0800 + + build: update build tools (#1561) + +commit 883e6123c9b880f9d8f03005e2b0998f60ea872d +Author: Paulo Busato Favarato +Date: Mon Feb 25 18:59:21 2019 -0300 + + Values of updateProfile method can be not passed (optional) (#1534) + + * Values of updateProfile method can be not passed (optional) + + * Fix on the firebase index.ts file + +commit 05c9e06ea9bc93f47880616d213fdf58c892e6e2 +Author: Bryan Klimt +Date: Mon Feb 25 13:32:20 2019 -0800 + + Implement timeouts in HttpsCallables. (#1518) + + Up the default timeout for Firebase Functions to 70s, and add an API method to allow changing it on a per-function basis. + +commit 6b710d8709d57bf277fe08cfcf6d40d8f46489bf +Author: Feiyang +Date: Mon Feb 25 10:40:01 2019 -0800 + + fix(auth): add OAuthCredential in typing file. (#1559) + +commit 4d82d1e6e697d2a3fef09757a7cac3700116c052 +Author: Michael Lehenbauer +Date: Fri Feb 22 15:11:24 2019 -0800 + + Drop usage of XhrIoPool to save 3865 bytes. (#1558) + + It's not necessary for us to reuse xhr objects or set pool-wide headers / + credentials, so we can just instantiate XhrIo objects directly and save 3865 + bytes by not pulling in XhrIoPool. We could consider using XmlHttpRequest + directly instead of going through the XhrIo closure wrapper, but WebChannel + uses XhrIo too, so we get it "for free." + +commit 4983420937f1d8d0217a44ffdf505758f570dada +Author: Michael Lehenbauer +Date: Fri Feb 22 15:10:02 2019 -0800 + + Upgrade closure-builder and optimize build size. (#1557) + + * Upgraded closure-builder (necessary to be able to specify multiple defines). + * Disabled closure debug code (in particular logging) and several legacy + fallbacks that we don't need. + +commit 6a0154aee104a163d6d3b1a28d80fcbb9bace908 +Author: Feiyang +Date: Fri Feb 22 14:50:06 2019 -0800 + + Replace AnyJs and Unknown with unknown (#1556) + + * refactor(firestore): replace AnyJs with unknown + + * refactor(firestore): replace Unknown with unknown + + * refactor(firestore): use Array to avoid tslint error + +commit 5adf4571b2df3b2e6539c3d5ef7d9183d3b2125f +Author: Yifan Yang +Date: Fri Feb 22 13:20:53 2019 -0800 + + Replace database tests that hit production with emulator test. (#1540) + + * Replace current database test that hits production with emulator test. + + * Adjust emulator startup wait time to 30s normally, and 100s when on Travis. + +commit 548e4a7d235bd96fd8306f2f3490a6c55b923509 +Merge: e3d491acc 20bc0a982 +Author: Feiyang1 +Date: Fri Feb 22 10:38:41 2019 -0800 + + Merge branch 'release' + Release 5.8.4 + +commit e3d491acc70ae15dc8f70b8d13531aa4819eaf58 +Author: Feiyang +Date: Thu Feb 21 14:47:14 2019 -0800 + + build: update typescript version (#1552) + + * build: update typescript version + + * refactor(messaging) : use spread operator + + * refactor(database): use unknown instead of any + + * fix(firestore): fix test case error + +commit 20bc0a982cee1985c2b88ceb14f8ccc7974dcfa9 (tag: rxfire@3.3.4, tag: firebase@5.8.4, tag: @firebase/testing@0.7.3, tag: @firebase/firestore@1.0.4) +Author: Feiyang1 +Date: Thu Feb 21 14:39:10 2019 -0800 + + Publish firebase@5.8.4 + +commit a18b2905a161f302bf0fad7a32dd82507932093e +Author: Christina Holland +Date: Wed Feb 20 10:09:29 2019 -0800 + + Add a console warning when browser bundle is loaded in node. (#1536) + + Add warning in console if browser bundle is used in node. Include links to instructions for pointing to "main" bundle in Webpack and Rollup. + +commit 03a87c202f4c1e75ee8cd553d4ff9f85f1bdf9ff +Author: Scott Crossen +Date: Tue Feb 19 11:28:55 2019 -0800 + + Made rulesets that don't compile throw errors in testing sdk (#1545) + + Made rulesets that don't compile throw errors in testing sdk method + +commit 0c8d080ef2852644545c4291ce900ecb5b255c27 +Author: Christina Holland +Date: Fri Feb 15 16:26:06 2019 -0800 + + Fix bugs in internal rollup config (#1530) + + Fix bugs in internal rollup config and add remaining missing license tags. + +commit 6d6c8432eb880b9e6132a7feaa144dc1bd69863f +Merge: 2d966e367 effd072c6 +Author: Christina Holland +Date: Fri Feb 15 15:37:54 2019 -0800 + + Merge branch 'release' + Release 5.8.3 + +commit effd072c6d9506f711d3aa6f7a3788cad6325d95 (tag: rxfire@3.3.3, tag: firebase@5.8.3, tag: @firebase/webchannel-wrapper@0.2.13, tag: @firebase/util@0.2.7, tag: @firebase/testing@0.7.2, tag: @firebase/storage@0.2.8, tag: @firebase/storage-types@0.2.5, tag: @firebase/polyfill@0.3.6, tag: @firebase/messaging@0.3.11, tag: @firebase/messaging-types@0.2.5, tag: @firebase/logger@0.1.6, tag: @firebase/functions@0.3.7, tag: @firebase/functions-types@0.2.3, tag: @firebase/firestore@1.0.3, tag: @firebase/firestore-types@1.0.2, tag: @firebase/database@0.3.12, tag: @firebase/database-types@0.3.5, tag: @firebase/auth@0.9.3, tag: @firebase/auth-types@0.5.2, tag: @firebase/app@0.3.9, tag: @firebase/app-types@0.3.4) +Author: Christina Holland +Date: Thu Feb 14 14:19:12 2019 -0800 + + Publish firebase@5.8.3 + +commit 2d966e36775228e657de5555251c53add2b91ab0 +Author: Michael Lehenbauer +Date: Wed Feb 13 10:47:25 2019 -0800 + + Fix issues with enablePersistence() in second tab. (#1537) + + 1. Fixes #1531 (Firestore error uncaught in promise when primary lease check fails). + 2. Ensures IndexedDbPersistence doesn't set up its visibility handler, etc. if + it fails to initialize. + +commit e16a1724f8a628af82e946cd19fbffb43d3458c4 +Author: Feiyang +Date: Tue Feb 12 14:19:27 2019 -0800 + + Firestore Console Build (#1502) + + * Firestore Console Build + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * update license header + + * comments for console build + + * [AUTOMATED]: Prettier Code Styling + + * remove all wrappers + + * escape unicode characters when uglifying + + * export Timestamp + +commit 0b7b93bb9d0bfca0be29f1c6cad1d76fb1dc9cf5 +Author: rsgowman +Date: Tue Feb 12 16:40:10 2019 -0500 + + Forbid queries endAt an uncommitted server timestamp. (#1529) + + * Forbid queries endAt an uncommitted server timestamp. + + Without this, it still fails, but: + a) not until serializing the query, and + b) the error is an internal error, and + c) the error message is quite cryptic and has nothing to do with the problem. + + Port of https://github.com/firebase/firebase-android-sdk/pull/138 + +commit 10bf7c18eb79eb62e716ffe47951b77165c4c61f +Author: James Daniels +Date: Mon Feb 11 09:24:39 2019 -0800 + + Add James Daniels to RxFire owners (#1528) + +commit 92ad91e797c5f9084440bdb4ff304c2aae8b882a +Merge: 6b53e0058 f2cdb89d1 +Author: Feiyang1 +Date: Thu Feb 7 11:56:02 2019 -0800 + + Merge branch 'release' + 5.8.2 + +commit 6b53e0058483c9002d2fe56119f86fc9fb96b56c +Author: Christina Holland +Date: Fri Feb 1 16:19:20 2019 -0800 + + Add @license tags (#1507) + + Add @license tag to existing source file licenses and create alternate rollup config for optionally adding licenses to generated files for internal deployment. + +commit 74d72ce3a9b99ba82e566811388a73597b675698 +Author: Michael Lehenbauer +Date: Fri Feb 1 08:56:19 2019 -0800 + + Fix flaky test. (#1511) + + The "can return previous value through consecutive updates" test was flaky + because it did two consecutive server timestamp writes to the same field and + expected 2 local events. But if you do both writes within 1ms then the + snapshots will be indistinguishable (the estimated value for the server + timestamps will be the same) and so only 1 event will be raised. I added an + additional change to the second write to guarantee it triggers an event. + + While looking at the test, I also noticed it was slightly broken / incomplete. + There was an incorrect line attempting to disable the network and the test was + missing the remaining code to re-enable the network and verify the behavior. I + fixed that as well. + +commit f2cdb89d1eceb4fc0851459c0dbd80e8f82980e3 (tag: rxfire@3.3.2, tag: firebase@5.8.2, tag: @firebase/testing@0.7.1, tag: @firebase/firestore@1.0.2) +Author: Feiyang1 +Date: Thu Jan 31 16:47:34 2019 -0800 + + Publish firebase@5.8.2 + +commit d0f981e2821c0984ba641835e5ba3c10e97e7429 +Author: Michael Lehenbauer +Date: Thu Jan 31 16:31:15 2019 -0800 + + Remove "can write very large batches" test. (#1510) + + This reverts the test added in commit 20beaef8a74b1d9c379da90218f73a6b55aa4d98 + but leaves the test re-ordering. + + The test took ~6s to run causing some timeouts, and we're unlikely to regress + large batch support given IndexedDb doesn't have inherent size limitations for + us to work around. + +commit 1620d6ec9c039f000adb3ebd85888ecda40eceef +Author: Feiyang +Date: Thu Jan 31 15:46:06 2019 -0800 + + Use a different lerna command to accurately find changed packages (#1509) + + * remove skipped packages + + * [AUTOMATED]: Prettier Code Styling + + * manually point to the latest release tag + + * use a different lerna command to accurately find changed packages + + * [AUTOMATED]: Prettier Code Styling + + * remove skip logic + +commit 0c313d2404c7e0288cef5a1a4f375933fe3ca983 +Author: Feiyang +Date: Wed Jan 30 18:51:56 2019 -0800 + + Allow skipping packages in a release (#1505) + + * allow skipping packages in a release + + * [AUTOMATED]: Prettier Code Styling + + * add lerna issue link + + * [AUTOMATED]: Prettier Code Styling + +commit 27e683f2dc2bedb54d2dcf5d94c207932fafacad +Author: Feiyang +Date: Wed Jan 30 18:15:58 2019 -0800 + + update license header text (#1504) + +commit 4391a88ea4ed75ea7bdd2854deed50a64c9b40c6 +Merge: a28fec2b3 63344ca26 +Author: Feiyang1 +Date: Tue Jan 29 10:08:45 2019 -0800 + + Merge release branch + +commit a28fec2b36f7af76099e2e305971fccd7a425deb +Author: Doggy +Date: Mon Jan 28 22:10:13 2019 -0600 + + Update import path (#1492) + + Correct import path should be `firebase/storage` + +commit 20beaef8a74b1d9c379da90218f73a6b55aa4d98 +Author: Gil +Date: Mon Jan 28 17:21:21 2019 -0800 + + Verify large write batches support (#1501) + + Port can write very large batches from Android + +commit ff294e9966512324ff8d80dccf0e4a9015aff075 +Author: Ifiok Jr +Date: Fri Jan 25 22:31:32 2019 +0000 + + Include empty import file in npm installation (#1485) + + Fixes missing line from #1347 + +commit 3603066ea06e2d44f13f45c9c8b7e609f6d8d6c5 +Author: Feiyang +Date: Fri Jan 25 14:30:52 2019 -0800 + + update grpc to 1.18.0 (#1483) + +commit 63344ca26074bb116b4e12a78e1a86ef2aee2757 (tag: rxfire@3.3.1, tag: firebase@5.8.1, tag: @firebase/webchannel-wrapper@0.2.12, tag: @firebase/util@0.2.6, tag: @firebase/testing@0.7.0, tag: @firebase/storage@0.2.7, tag: @firebase/storage-types@0.2.4, tag: @firebase/polyfill@0.3.5, tag: @firebase/messaging@0.3.10, tag: @firebase/messaging-types@0.2.4, tag: @firebase/logger@0.1.5, tag: @firebase/functions@0.3.6, tag: @firebase/functions-types@0.2.2, tag: @firebase/firestore@1.0.1, tag: @firebase/firestore-types@1.0.1, tag: @firebase/database@0.3.11, tag: @firebase/database-types@0.3.4, tag: @firebase/auth@0.9.2, tag: @firebase/auth-types@0.5.1, tag: @firebase/app@0.3.8, tag: @firebase/app-types@0.3.3) +Author: Feiyang1 +Date: Thu Jan 24 13:32:35 2019 -0800 + + Publish firebase@5.8.1 + +commit fe48712fd9f0d1e1cd05bb2b706de5302d5c7d6e +Author: rsgowman +Date: Sat Jan 19 09:14:50 2019 -0500 + + Backport changelog fixups (#1484) + + https://github.com/firebase/firebase-android-sdk/pull/207 + +commit 512847e9322e1152078cd7248818738f0f362e89 +Author: Christina Holland +Date: Fri Jan 18 15:17:08 2019 -0800 + + Prettier prepush improvements (#1480) + + * Check user is running the correct version of prettier and exit and warn if not. + + * Run prettier only on *.js/*.ts files changed in this branch. + +commit 27a6de2d8a02cfc7f53da23e65623b3e6c0be058 +Author: Scott Crossen +Date: Fri Jan 18 11:13:45 2019 -0800 + + Added firestoreClearData() testing sdk method (#1453) + + Added firestoreClearData() testing sdk method + +commit 580c53cd2c933426faf08586fdd0c4011b3ecdce +Author: Yifan Yang +Date: Fri Jan 18 10:32:10 2019 -0800 + + Do not print duplicate error messages to stdout. (#1468) + + * Do not print duplicate error messages to stdout. + + * Upgrade to latest lerna version (v3.10.5). + +commit 61470e171988dbd81c3d06c409ed6f7c1fffbaf9 +Merge: f5b81a174 2ea8f2006 +Author: Feiyang1 +Date: Thu Jan 17 17:15:19 2019 -0800 + + Merge branch 'release' + 5.8.0 release + +commit 2ea8f2006bc09ca6cb0b2b86f0ed8aefa48d350c (tag: rxfire@3.3.0, tag: firebase@5.8.0, tag: @firebase/util@0.2.5, tag: @firebase/testing@0.6.0, tag: @firebase/storage@0.2.6, tag: @firebase/messaging@0.3.9, tag: @firebase/logger@0.1.4, tag: @firebase/functions@0.3.5, tag: @firebase/firestore@1.0.0, tag: @firebase/firestore-types@1.0.0, tag: @firebase/database@0.3.10, tag: @firebase/database-types@0.3.3, tag: @firebase/app@0.3.7) +Author: Feiyang1 +Date: Thu Jan 17 16:47:37 2019 -0800 + + Publish firebase@5.8.0 + +commit f5b81a17497024ba30c8786ae4490d098a4d0b54 +Author: Christina Holland +Date: Thu Jan 17 16:09:52 2019 -0800 + + Add @firebase/util dependencies to auth-types and storage-types (#1479) + + * Add @firebase/util to peerDependencies in package.json of auth-types and storage-types + +commit d7bb2ec0c1d2b52c4c63be19ac8fc0f2f77b9dc0 +Author: Yifan Yang +Date: Thu Jan 17 12:33:43 2019 -0800 + + Upgrade yarn from v1.10.1 to v1.13.0. (#1481) + +commit c9414d3e17812def8552195f3742b3b698edbb6b +Author: Ryan Brewster +Date: Thu Jan 17 12:20:53 2019 -0800 + + Run prettier on the whole codebase (#1482) + +commit 45b0591d4df4f9b0f8bcbebda51646770257c69e +Author: Yifan Yang +Date: Wed Jan 16 13:47:35 2019 -0800 + + Consolidate mocha configurations into config file. (#1469) + + * Consolidate mocha configurations into config file. + +commit 238c621400e55a9499b045684ad99761c642f89b +Author: Konstantin Varlamov +Date: Mon Jan 14 14:25:40 2019 -0500 + + Add a changelog entry for "Stop persisting last acknowledged batch ID" (#1477) + +commit 4b71b13f620a628d5833e141145257f536daebbb +Author: Konstantin Varlamov +Date: Mon Jan 14 13:22:24 2019 -0500 + + Port "Stop persisting last acknowledged batch ID" from iOS + + A straightforward port of https://github.com/firebase/firebase-ios-sdk/pull/2243. + +commit 604acf37ce920f58207cfb83c556412636048286 +Author: Michael Lehenbauer +Date: Fri Jan 11 09:57:13 2019 -0800 + + Change timestampsInSnapshots default to true. (#1464) + + Also update log messages instructing folks what to do if they're using the + soon-to-be-removed timestampsInSnapshots setting. + +commit aa62e43a29eca566de1bdc8fae8a9f9e23289345 +Author: Michael Lehenbauer +Date: Fri Jan 11 09:40:02 2019 -0800 + + Add comment regarding presence of '/documents' to fromQueryPath(). (#1474) + +commit 2e0d0ad94cc6b11f19892980f91d87b5238d829f +Author: Michael Lehenbauer +Date: Fri Jan 11 08:03:10 2019 -0800 + + Update to v1 protos. (#1473) + + 1. Update src/protos/update.sh script to use v1. + 2. Search/replace V1beta1 => V1 on firestore_proto_api.d.ts + 3. Check in output of src/protos/update.sh script (and remove old v1beta1 directory.) + 4. Search/replace all "v1beta1" instances to "v1". + 5. Include '/documents' for root document paths (v1 endpoint requires this now). + +commit 92e2bafd5fedc5601458566354aed2f6c95fc68b +Author: Feiyang1 +Date: Thu Jan 10 17:23:31 2019 -0800 + + [AUTOMATED]: License Headers + +commit 4be79fd83f5c2ebc031760f60766c8b371d7b0f5 +Merge: a2bc7e3a7 9513e3da1 +Author: Feiyang1 +Date: Thu Jan 10 17:21:40 2019 -0800 + + Merge branch 'release' + 5.7.2 release + +commit 9513e3da139caa23d0db09a558c6412c1742aa7e (tag: rxfire@3.2.3, tag: firebase@5.7.3, tag: @firebase/util@0.2.4, tag: @firebase/testing@0.5.3, tag: @firebase/storage@0.2.5, tag: @firebase/polyfill@0.3.4, tag: @firebase/messaging@0.3.8, tag: @firebase/logger@0.1.3, tag: @firebase/functions@0.3.4, tag: @firebase/firestore@0.9.3, tag: @firebase/database@0.3.9, tag: @firebase/app@0.3.6) +Author: Feiyang1 +Date: Thu Jan 10 14:10:17 2019 -0800 + + Publish firebase@5.7.3 + +commit a2bc7e3a78ba912a1c3f92d79a74050f43d80e0b +Author: Gil +Date: Wed Jan 9 18:15:53 2019 -0800 + + Break import cycle (#1470) + + LruParams.COLLECTION_DISABLED <=> CACHE_SIZE_UNLIMITED + +commit 791b2b37e62eca1b992d3dd75e9b3592eec8366b +Author: Yifan Yang +Date: Wed Jan 9 16:35:16 2019 -0800 + + Change downloaded emulator file mode to 'rwxr-xr-x'. (#1465) + + * Change downloaded emulator file mode to 'rwxr-xr-x'. + + The firestore emulator binary file cannot be started by 'java -jar' with + permission 'rw-r--r--' on Google corp workstation (Debian). The reason + why we didn't notice this before is that the emulator can run on macbook + (macOS Mojave) and Travis VM (Ubuntu Trusty) perfectly without this + change though. + + * Add comments explaining the change of file permission. + +commit 65d584cee6144d88086eaad555de4815a9e79a42 +Author: Feiyang +Date: Wed Jan 9 16:32:29 2019 -0800 + + update grpc to 1.17.0 (#1466) + +commit d96a80616bba66f7eb17be0ca8f07236ff1d96b9 +Author: Ifiok Jr +Date: Wed Jan 9 19:53:30 2019 +0000 + + Create empty-import.d.ts and reference it in submodule imports (#1347) + + * Create empty-import.d.ts and reference it in submodule imports + + * Add reference to typings for rxfire/database + +commit 78b99782bbdc630db53495c56ad350c870215ab1 +Author: Feiyang +Date: Wed Jan 9 10:27:26 2019 -0800 + + update npm-run-all to avoid potential exploit (#1406) + +commit 0b42ff8bb87236ab4fe3622d8a7167c83b76782c +Author: Michael Lehenbauer +Date: Wed Jan 9 10:18:38 2019 -0800 + + Fixes #1450: ThenableReference should extend Promise, not PromiseLike. (#1462) + + Since we implement .catch(), we should extend Promise. + +commit 1e7771cec5232ef968698aae1e3cbd8c614a60d1 +Author: Feiyang +Date: Tue Jan 8 16:12:02 2019 -0800 + + use secret team as code owners to avoid review requests spam. (#1458) + + * use secret teams to avoid review requests + + * [AUTOMATED]: Prettier Code Styling + +commit 9982004188aecad0d99e2778fbc2054ff97dfba2 +Author: Gil +Date: Tue Jan 8 14:18:48 2019 -0800 + + Treat ABORTED writes as retryable (#1456) + +commit d63df58299ef6c32af3cd89574fe5f0e1f578f3a +Author: Abraham Hernandez +Date: Mon Jan 7 16:50:16 2019 -0500 + + add code syntax highlighting (#1438) + +commit e89993518f608d8699e40a9f0d8537d1e255da6a +Author: Yifan Yang +Date: Fri Jan 4 15:09:22 2019 -0800 + + Upgrade firestore emulator version to v1.2.3. (#1454) + +commit 802c07c105aee4d2c3c99be640bf32b43c99b1ed +Author: Mertcan Mermerkaya +Date: Thu Jan 3 23:24:42 2019 +0000 + + Remove unused Rollup plugins (#699) + + * Remove unused Rollup plugins + + * Consider submodule imports from dependencies as external + + * Use CJS version of promise-polyfill for browserify support + +commit f6cfdbfaa76a652ea526c4a31469fc562c778c1c +Author: Sebastian Schmidt +Date: Wed Jan 2 16:15:39 2019 -0800 + + Remove some Array to SortedSet conversion (#1443) + + * Remove some Array to SortedSet conversion + + * Adding fromSet + +commit 72e109cc7e144d78aa5c19a865863a4eb3aa6ad5 +Author: Ryan Brewster +Date: Wed Jan 2 14:43:54 2019 -0800 + + Allow both databaseName and projectId (#1449) + +commit c6357fbaf99e80257816dafb28e748de4a039edf (tag: rxfire@3.2.2, tag: firebase@5.7.2, tag: @firebase/testing@0.5.2, tag: @firebase/firestore@0.9.2) +Author: Feiyang1 +Date: Thu Dec 27 15:20:17 2018 -0800 + + Publish firebase@5.7.2 + +commit 0bbf7088d76717bec7e4bd1c89af2edf0ae40690 +Author: Michael Lehenbauer +Date: Sun Dec 23 10:41:43 2018 -0800 + + Fixes #1436: Ensure only the primary tab tries to garbage collect. (#1441) + + Only schedule garbage collections on the primary tab and gracefully ignore + if they fail. + +commit 1888bd733dbb50ab6bf5423312ee00348fe33faf +Author: Konstantin Varlamov +Date: Sat Dec 22 16:52:43 2018 -0500 + + Port performance optimizations to speed up reading large collections from Android (#1433) + + Straightforward port of https://github.com/firebase/firebase-android-sdk/pull/123. + +commit 54df99722720f66ee619fa6bd1d15ae8714f654a +Author: Yifan Yang +Date: Thu Dec 20 15:00:53 2018 -0800 + + Add code for managing emulators and running database/firestore emulator tests via yarn commands. (#1435) + + Refactor code for managing database/firestore emulators. + + Add yarn commands for running database/firestore tests with their emulators. + +commit 088718ea0d9f16b6fc5ea48cd62daec30ac5a0d5 (tag: rxfire@3.2.1, tag: firebase@5.7.1, tag: @firebase/testing@0.5.1, tag: @firebase/firestore@0.9.1, tag: @firebase/database@0.3.8, tag: @firebase/auth@0.9.1) +Author: Feiyang1 +Date: Thu Dec 20 13:46:37 2018 -0800 + + Publish firebase@5.7.1 + +commit 5509eafcf44595cc751c6b62f651835b920b83aa +Author: Greg Soltis +Date: Mon Dec 17 13:24:30 2018 -0800 + + Add a custom error for schema downgrades, and a note about it (#1428) + + * Add a custom error for schema downgrades, and a note about it + +commit 6e89ddcca2e2b218ba7dae0bcd4275eacfd059c4 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Fri Dec 14 15:41:41 2018 -0800 + + change email validation logic to allow international emaill address (#1427) + +commit f970f9cd51c17897e397d5b0e30dc5abc3c4999d +Author: Greg Soltis +Date: Mon Dec 10 15:40:27 2018 -0800 + + Finish type migration and get rid of AnyDuringMigration (#1424) + + Remove AnyDuringMigration + +commit 35e3cb5ffd48b5a1cbdc78ea5f1b6f2134ad594e +Author: Yifan Yang +Date: Thu Dec 6 17:38:15 2018 -0800 + + Enable database test with local emulator. (#1414) + + * Fix flaky database transaction test. (#1408) + + * Change getFreshRepo() to only take a path, and use the DATABASE_URL constant. (#1410) + + * Enable Database SDK test with local emulators. + + * Address review feedback. + + * Address review comments. + + * Make whether to use emulator depend on whether env variable for emulator port is present or not. + + * Address pr feedback. + +commit 3520604105775902811310758eb1210f665585db (tag: rxfire@3.2.0, tag: firebase@5.7.0, tag: @firebase/testing@0.5.0, tag: @firebase/firestore@0.9.0, tag: @firebase/firestore-types@0.8.0, tag: @firebase/auth@0.9.0, tag: @firebase/auth-types@0.5.0) +Author: Feiyang1 +Date: Thu Dec 6 17:01:13 2018 -0800 + + Publish firebase@5.7.0 + +commit d93e15307e400443c23467c6646e5cd104380834 +Author: Greg Soltis +Date: Tue Dec 4 20:14:26 2018 -0800 + + Add LRU changelog entry (#1412) + + * Add LRU changelog entry + +commit 28bb3add8f7b8210a6d388e24e8206a92e32efb0 +Author: Greg Soltis +Date: Tue Dec 4 16:10:00 2018 -0800 + + Wire together LRU garbage collection (#1392) + + Wire together LRU garbage collection + + Added a garbage collection process to on-disk persistence that + removes older documents. This is enabled by default, and the SDK will attempt + to periodically clean up older, unused documents once the on-disk cache passes + a threshold size (default: 40 MB). + +commit c313962dc61b7f39e52a59625b96322b98591ac5 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue Dec 4 10:49:33 2018 -0800 + + Saml (#1343) + + Added SAML providers and exposed the API to enable OIDC providers. + +commit b3a5242ffb4e4354a88a7427fa185a7bf95bec28 +Author: rsgowman +Date: Fri Nov 30 15:09:01 2018 -0500 + + Rework FieldMask to use a SortedSet of FieldPaths (#1405) + + Rather than an array. + + Port of https://github.com/firebase/firebase-android-sdk/pull/137 + +commit 603cf63dd57daa5e53466a14f7f0a006d603bcfe +Author: Sunny Luo +Date: Sat Dec 1 03:30:12 2018 +0800 + + Update grpc to 1.16.1 to support node 11 (#1394) + + * Update grpc to 1.16.1 to support node 11 + + * Update grpc + +commit c3895ac255751c97cc2f622a707f28d7c3fb6753 +Author: Ryan Brewster +Date: Tue Nov 27 18:23:00 2018 -0800 + + Put another limit on gRPC backoff (#1403) + +commit b43ec038889de7df52779d60ce4df6ee3f4974d5 (tag: rxfire@3.1.0, tag: firebase@5.6.0, tag: @firebase/testing@0.4.0, tag: @firebase/auth@0.8.0, tag: @firebase/auth-types@0.4.0) +Author: Feiyang1 +Date: Thu Nov 29 14:50:01 2018 -0800 + + Publish firebase@5.6.0 + +commit 024b0744c99f1a85360cc32c31880b0a422d048d +Author: bojeil-google +Date: Mon Nov 26 17:39:03 2018 -0800 + + Fix error catching for IDBRequest.error. (#1401) + + `event.target.errorCode` is undefined, use event.target.error instead. + +commit 1baf7d6c18a8c314571a9f074ee7f034d5ad5250 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Nov 26 10:16:41 2018 -0800 + + added ability to custom FDL domain (#1382) + +commit 97cc3f89283d942a99c5c3e56e29eee331a0f5df +Author: Ryan Brewster +Date: Tue Nov 20 15:58:50 2018 -0800 + + Fix weird prettifier issue (#1393) + +commit b2b15d93038f445fe980dfb94d727a510e6a4ac0 (tag: rxfire@3.0.11, tag: firebase@5.5.9, tag: @firebase/util@0.2.3, tag: @firebase/testing@0.3.3, tag: @firebase/messaging@0.3.7, tag: @firebase/logger@0.1.2, tag: @firebase/functions@0.3.3, tag: @firebase/firestore@0.8.8, tag: @firebase/database@0.3.7, tag: @firebase/app@0.3.5) +Author: Feiyang1 +Date: Tue Nov 20 14:51:06 2018 -0800 + + Publish firebase@5.5.9 + +commit 249dab25a602d604a830cd616b2119b74b20aa2e +Author: Yifan Yang +Date: Tue Nov 20 13:49:00 2018 -0800 + + Upgrade mocha version to 5.2.0 in all packages. (#1375) + + We are trying to consolidate flags passed to mocha test + into mocha.opts (a mocha config file). In order for mocha + to support comments in this file, mocha needs to be upgraded + to its latest version (5.2.0 as of 11/09/2018). + +commit b3063e4158eed990cd283b0ed25b456f829a4b76 +Author: Ryan Brewster +Date: Mon Nov 19 19:42:56 2018 -0800 + + Limit gRPC's built-in exponential backoff (#1390) + + * Prevent gRPC from performing too much exponential backoff + + * [AUTOMATED]: Prettier Code Styling + + * Simplify comment + + * Set the initial backoff as low as possible + + * revert testing change + +commit 06ee761bd48ea86f1f280cabe94b253b1393d404 +Author: Ryan Brewster +Date: Sat Nov 17 03:04:44 2018 -0800 + + Expose database and firestore namespaces in the @firebase/testing module (#1386) + + * Expose database and firestore namespaces in the @firebase/testing module + + * random commit to trigger travis + +commit 1ed94fa8c61d8a3611d8c10a3b94dd3a5baf14c8 +Author: ooookai +Date: Mon Nov 12 06:22:43 2018 -0500 + + Update database.md (#1379) + +commit fcf1f6425883085c0f5349e35aad66d51698957c +Author: Greg Soltis +Date: Fri Nov 9 19:24:06 2018 -0800 + + Implement sequence number migration (#1374) + + * Implement sequence number migration + +commit 8375f67d0f56169bbf09681c3337dce9ade8006b +Author: Josep Sayol +Date: Sat Nov 10 03:07:11 2018 +0100 + + Fix waitsForCount EventAccumulator (tests) (#1378) + +commit ab4f7aba06df6bdaf506995f92689efc148b2787 +Author: Matt Gaunt +Date: Fri Nov 9 14:25:54 2018 -0800 + + Update CODEOWNERS (#1376) + + @mmermerkaya has messaging covered that I am no longer needed :) + +commit 6b3754fbe03a8a3794b4466c0b035ea6cb902326 +Author: Greg Soltis +Date: Thu Nov 8 19:14:34 2018 +0100 + + Use orphaned docs as part of GC calculation (#1355) + + * Use orphaned documents in sequence number count + +commit fb870c26dff6746b973a22969237e2b6a7db9bbc +Author: Ryan Brewster +Date: Wed Nov 7 18:08:57 2018 -0800 + + Throw a more helpful error if there isn't a 'sub' field (#1366) + + * Throw a more helpful error if there isn't a 'sub' field + + * fix test + +commit 3b498b15f2e6a37e6eab5f7dc61a724b5b5d0f65 (tag: rxfire@3.0.10, tag: firebase@5.5.8, tag: @firebase/testing@0.3.2, tag: @firebase/functions@0.3.2, tag: @firebase/functions-types@0.2.1, tag: @firebase/firestore@0.8.7, tag: @firebase/auth@0.7.9) +Author: Feiyang1 +Date: Thu Nov 8 14:59:45 2018 -0800 + + Publish firebase@5.5.8 + +commit d221abb42c7b6a4b898cbed8f631f45a7a9154ee +Author: Feiyang +Date: Tue Nov 6 15:19:38 2018 -0800 + + update yarn.lock (#1364) + +commit d248b9776bca13738d7e10e6caad6b2c10d8daad +Author: Feiyang +Date: Tue Nov 6 09:47:12 2018 -0800 + + generate source maps for auth build (#1313) + + * auth sourcemaps + + * [AUTOMATED]: Prettier Code Styling + +commit a6aa99953a1f35cba284ea3daaa3224ebecc38f1 +Author: Tyler Jones +Date: Tue Nov 6 07:53:08 2018 -0800 + + Upgrade GRPC to 1.16.0 (#1353) + +commit 9d6917efa8a3c3458968334f698b26ee9393ff65 +Author: Sebastian Schmidt +Date: Mon Nov 5 15:08:20 2018 -0800 + + Remove Mutation tombstones (#1354) + +commit f4f05202e975b4f73a352f5bb3ca97218349e3e0 +Author: Marco Pöhler +Date: Mon Nov 5 22:21:33 2018 +0100 + + added return type definition to useFuntionsEmulator (#1361) + +commit 8daa36ff0c52d40ce387350c3071a0227b41ba54 +Author: Josep Sayol +Date: Mon Nov 5 22:02:25 2018 +0100 + + [README] Supported Node.js versions for SDK development (#1359) + + Several dependencies currently have a `<=9` requirement on the Node.js engine version. The way the README is written, it may give people the impression that any version above 8 is also supported, but that's not the case for Node.js 10 and 11. + +commit 9f12e4a5d1a2d79da29b7a777aa6cddf414a4012 +Author: Yifan Yang +Date: Thu Nov 1 16:32:07 2018 -0700 + + Lockdown the version of yarn to 1.10.1 in our Travis environment. (#1351) + + The latest yarn (1.12.1 as of Nov 1st) appears to hang the CI build. + +commit 7fd329707612a0277f0c9a6fec925423e5bcc10e (tag: rxfire@3.0.9, tag: firebase@5.5.7, tag: @firebase/testing@0.3.1, tag: @firebase/storage@0.2.4) +Author: Feiyang1 +Date: Thu Nov 1 15:03:41 2018 -0700 + + Publish firebase@5.5.7 + +commit de179c994336c94f598e95d36f68ba743bafa637 +Author: Ifiok Jr +Date: Tue Oct 30 19:42:27 2018 +0000 + + add type for useFunctionsEmulator (#1263) + + According to this [comment](https://github.com/firebase/firebase-js-sdk/issues/941#issuecomment-401432710) this is now supported in the library. I just couldn't see it anywhere in the types. + +commit 61a93e43f113f400b67f75fc464f09bb8cf47d3f +Author: Michael McDonald +Date: Sun Oct 28 04:59:18 2018 +0100 + + Add support for `_` in buckets (#1318) + +commit c2fd8f779b2e584c83e6718eafc838aa43c4f888 (tag: rxfire@3.0.8, tag: firebase@5.5.6, tag: @firebase/testing@0.3.0, tag: @firebase/firestore@0.8.6) +Author: Feiyang1 +Date: Thu Oct 25 13:49:50 2018 -0700 + + Publish firebase@5.5.6 + +commit d8b89bfba607668502f4adfbb828fae490b31456 +Author: Feiyang +Date: Wed Oct 24 16:47:50 2018 -0700 + + update the version of firebase-tools (#1336) + +commit 29feeae98c04cdf2cd528e71b79bf24686a225e1 +Author: Feiyang +Date: Wed Oct 24 14:45:53 2018 -0700 + + update yarn.lock (#1335) + +commit 0e85e42e84a592a6ce2028685983a22cf8db6fec +Author: Ryan Brewster +Date: Wed Oct 24 14:13:34 2018 -0700 + + Make npm happier about security vulnerabilities (#1333) + + * Make npm happier about security vulnerabilities + + * lock + +commit 16662c9d49e0438599a091730abe1769acf120a5 +Author: Ryan Brewster +Date: Wed Oct 24 13:23:32 2018 -0700 + + Export more functions from the firebase module (#1332) + + * Export more functions from the firebase module + + * [AUTOMATED]: Prettier Code Styling + + * Remove unnecessary import + + * Remove console log + +commit 1fce8f40dfb10c1bdbca24b0bc931cd9078f81ac +Author: Feiyang +Date: Wed Oct 24 10:12:00 2018 -0700 + + create component bundles in umd to support lazy loading in requireJS (#1325) + + * create component bundles in umd to support lazy loading in requireJS + + * [AUTOMATED]: Prettier Code Styling + +commit 5bac19c5bbbcfa4fc2e749cb4e6aaf1b107c9755 +Author: Sebastian Schmidt +Date: Tue Oct 23 15:09:52 2018 -0700 + + Remove Symbol.iterator (#1330) + +commit ffd1526420a39a064ebdafcba02214141530a8f0 +Author: Ryan Brewster +Date: Tue Oct 23 14:38:04 2018 -0700 + + Switch @firebase/testing dependency from '@firebase/app' to 'firebase' (#1331) + + * Introduce protos to communicate with the Firestore Emulator + + * [AUTOMATED]: Prettier Code Styling + + * PR feedback + + * Add apache license to emulator protos + + * Wrap firebase instead of @firebase/app + + * Remove @firebase/app dependencies + + * Switch from dep -> peer dep + + * Force re-authentication + + * idk + + * Use an environment variable to find the protos + + * [AUTOMATED]: Prettier Code Styling + + * Remove sadness typescript + + * Remove log + +commit da28e5b8abe9846c1f58a32710355232576fafa0 +Author: Sebastian Schmidt +Date: Tue Oct 23 14:02:39 2018 -0700 + + Add missing Porting Notes (#1327) + +commit f1637385bb2792093d318cda651de829cc08c613 +Author: Sebastian Schmidt +Date: Tue Oct 23 14:02:22 2018 -0700 + + Remove non-test only invocation of findIndex (#1328) + +commit 55cde2ab8e083bc8caa0b3af864bb75c97fc6712 +Author: Ryan Brewster +Date: Mon Oct 22 19:14:52 2018 -0700 + + Make @firebase/testing publishable (#1326) + +commit 6ebdb03d10a112190a138ed2f46d0ad017c39d3a +Author: Ryan Brewster +Date: Mon Oct 22 17:55:06 2018 -0700 + + Introduce protos to communicate with the Firestore Emulator (#1323) + + * Introduce protos to communicate with the Firestore Emulator + + * [AUTOMATED]: Prettier Code Styling + + * PR feedback + + * Add apache license to emulator protos + +commit 54b9f8e8079b945975a4791d4bae6e2904d5244e (tag: rxfire@3.0.7, tag: firebase@5.5.5, tag: @firebase/firestore@0.8.5) +Author: Feiyang1 +Date: Thu Oct 18 15:39:26 2018 -0700 + + Publish firebase@5.5.5 + +commit 51c87a28addbd190f63468869f1bc3215ead33fb +Author: Feiyang +Date: Thu Oct 18 11:13:33 2018 -0700 + + update documentation to show the correct import syntax (#1274) + + * update documentation to show the correct import syntax + + * update import syntax for firebase/app + + * add example for native es6 module in node + + * update warning message to use the correct syntax for typescript + +commit 5046327cb5150cd5b876149445d0cbf97a57adf3 +Author: Feiyang +Date: Wed Oct 17 16:59:43 2018 -0700 + + update storage owner (#1311) + + * update storage code owner + +commit fdff378d333ad69c56adfa29e803df3d8ed98904 +Author: Ryan Brewster +Date: Wed Oct 17 16:57:13 2018 -0700 + + Allow environment variables to override the default emulator addresses (#1312) + + * Allow environment variables to override the default emulator addresses + + * [AUTOMATED]: Prettier Code Styling + + * Add type signatures + +commit 698743451c22ec0c48525c0035e96fb473aa83dc +Author: Greg Soltis +Date: Wed Oct 17 16:09:10 2018 -0700 + + Implement byte counting for the RemoteDocumentCache. (#1309) + + * Implement byte counting for the RemoteDocumentCache. + +commit 5f70881b8efbd133ef73dcbd378d5cb56492376e +Author: Scott Crossen +Date: Tue Oct 16 16:28:25 2018 -0700 + + Removed warning messages when using testing SDK (#1307) + + * Removed warning messages when using testing SDK + + * [AUTOMATED]: Prettier Code Styling + + * changed artifact in test case comment + + * reworked code to spam setLogLevel instead of setDefaultLogLevel + + * Update logger.test.ts + +commit 4d2fa6c528662d312c237f7012807a8e0e40d665 +Author: Emerson Jair +Date: Mon Oct 15 12:25:04 2018 -0300 + + Fix RxFire auth docs with wrong import path (#1297) + + The imports should be `rxfire/auth` instead of `rxfire/firestore`. + This could lead beginner developers to frustration since they wouldn't be able to use the examples from the docs successfully. + +commit 7ebb2d6ea11f7aa2b0b6e1f5ed56821a09cab92c (tag: rxfire@3.0.6, tag: firebase@5.5.4, tag: @firebase/webchannel-wrapper@0.2.11, tag: @firebase/firestore@0.8.4, tag: @firebase/auth@0.7.8) +Author: Feiyang1 +Date: Thu Oct 11 15:38:15 2018 -0700 + + Publish firebase@5.5.4 + +commit 5c84f505a28af99e5e2c7e63bbdc03d65e704158 +Author: Michael Lehenbauer +Date: Thu Oct 11 14:10:04 2018 -0700 + + Fix #798: Avoid eval() in webchannel-wrapper. (#1304) + + Set goog.json.USE_NATIVE_JSON to true in our webchannel-wrapper build to avoid + fallback to eval() which isn't necessary, since we already rely on JSON.parse() + throughout the codebase. + +commit 53bdf9d7e48e41ba800db9dada3ed271e085946c +Author: Sebastian Schmidt +Date: Wed Oct 10 15:16:04 2018 -0700 + + Clear reference set when we lose our primary lease (#1289) + +commit f85dbce8f620145f4c235f7a414514153b51337a +Author: Feiyang +Date: Wed Oct 10 13:00:31 2018 -0700 + + update firebase version in readme example (#1303) + +commit 755327097b09e3ac0a3d18da0ea5fb66a74cb816 +Author: Greg Soltis +Date: Wed Oct 10 10:14:11 2018 -0700 + + Make ReferenceSet.containsKey synchronous since it no longer needs the GarbageSource interface (#1301) + + ReferenceSet used to have an async method for this so it could conform to the GarbageSource interface, but that no longer exists. So, we can have a synchronous containsKey implementation. + +commit fa9c3e5b449e30773546b992bbce41fb857885d3 +Author: Greg Soltis +Date: Tue Oct 9 19:34:28 2018 -0700 + + Fix error in Memory LRU implementation (#1299) + + * Implement iterator for object map + + * Use iterator to fix memory lru bug + +commit a9f4bc7071f70b7bfcc49f4ee9c45757ce7da67b +Author: Sebastian Schmidt +Date: Mon Oct 8 18:47:49 2018 -0700 + + [Multi-Tab] Separate GC threshold from Primary Election threshold (#1295) + +commit 334716862ca34f7c3fd908dd982fc1527ccd2fb1 +Author: Sebastian Schmidt +Date: Mon Oct 8 13:13:57 2018 -0700 + + Detect when another tab was primary before regaining lease (#1287) + +commit 474b0f56cb670a322c1b18d909838ec7fd669947 +Author: Feiyang +Date: Fri Oct 5 16:16:22 2018 -0700 + + use apply instead of call to invoke iife (#1291) + +commit 9e28b7ddfcf715cfce675033b87f274dfdd7472f +Author: Sebastian Schmidt +Date: Fri Oct 5 13:15:16 2018 -0700 + + Remove LocalStore.start() (#1290) + +commit 281356332dee1867bafd409d248c70a84d6fc2fe +Author: Sebastian Schmidt +Date: Thu Oct 4 15:18:09 2018 -0700 + + Update CHANGELOG.md (#1286) + +commit dce420b85ff2e8ca310720fe49c427d56da2de55 (tag: rxfire@3.0.5, tag: firebase@5.5.3, tag: @firebase/firestore@0.8.3) +Author: Feiyang1 +Date: Thu Oct 4 14:54:47 2018 -0700 + + Publish firebase@5.5.3 + +commit dd3ea8fd4dadca3a119aa8e3bdbad3ae38272a72 +Author: Greg Soltis +Date: Thu Oct 4 14:36:44 2018 -0700 + + Merge LRU tracking PRs (#1285) + + * Implement IndexedDB LRU Reference Delegate, add LRU tests (#1224) + * Implement LRU Reference Delegate for Memory Persistence (#1237) + * Implement Eager Reference Delegate for Memory Persistence, drop old GC (#1256) + * Remove sequential forEach, replace with parallel forEach + +commit 211a9b16d922d14f77b4f668457f6a5b79d6b1af +Author: Sebastian Schmidt +Date: Wed Oct 3 15:58:52 2018 -0700 + + Stop iterating when we encounter an error (#1284) + +commit 322357244dfc3f35ae97e7d522d40d345b216b51 +Author: Sebastian Schmidt +Date: Wed Oct 3 15:02:37 2018 -0700 + + [Multi-Tab] Detect and recover from GCed Remote Document Changelog (#1272) + +commit 6f08d5dc204c25ffb54e4f29b588747c0066d4f8 +Author: Sebastian Schmidt +Date: Wed Oct 3 15:02:00 2018 -0700 + + Always update LocalStorage state (#1282) + +commit 32792521a235fc46d15a3b384772525dda04329d +Author: Feiyang +Date: Wed Oct 3 14:40:18 2018 -0700 + + update yarn.lock with integrity field (#1283) + +commit f213ba661d5ca61d3cbd897cd4b6c415614d1f0a +Author: Sebastian Schmidt +Date: Wed Oct 3 13:57:41 2018 -0700 + + Don't use the escaped persistence keys when we write to Local Storage (#1281) + +commit 31c1bf444f3a6a398727ca33e5a2424e0701be4f +Author: Sebastian Schmidt +Date: Wed Oct 3 13:13:03 2018 -0700 + + Using readWrite query mode for (#1280) + +commit 9c7354fe6d9e46c9a573468fb681e41f551b2626 +Author: rsgowman +Date: Wed Oct 3 14:17:44 2018 -0400 + + Backporting reviewer suggested comments from cl/214509458 (#1277) + + This is the web port of + https://github.com/firebase/firebase-android-sdk/pull/49 + +commit 64d11a49df86bf8f86a9aac8fd6c996781996ee0 +Author: Sebastian Schmidt +Date: Wed Oct 3 11:09:42 2018 -0700 + + Uncomment in all the files (#1278) + +commit 8347840b2b2ba7b3ffef6968ea5ab24ed93ca0cf +Author: Feiyang +Date: Tue Oct 2 22:29:19 2018 -0700 + + print debug info in release cli (#1276) + +commit f2cfd21efbc21bc1594e4b7bc5322c122155b13d +Author: Sebastian Schmidt +Date: Tue Oct 2 14:23:10 2018 -0700 + + Backfill Firestore Changelog (#1275) + +commit 950499d5edcc037052b46cbb6712ab44f19903d8 +Author: Sebastian Schmidt +Date: Mon Oct 1 15:55:00 2018 -0700 + + Fix map() (#1271) + +commit f2159b97dbbd3207c230eb1eda667b2a155c52da +Author: Sebastian Schmidt +Date: Mon Oct 1 15:02:41 2018 -0700 + + Add hasCommittedMutations to NoDocument equals (#1245) + +commit 5ca119a3cafb2f211cb0884b068a51da5761e5bf +Author: Sebastian Schmidt +Date: Mon Oct 1 12:20:32 2018 -0700 + + Allow iterables in PersistencePromise.map/forEach/waitFor (#1269) + +commit c577a7eea0d34e0a3f85bd95db6c24a25f3fef02 +Author: Michael Lehenbauer +Date: Fri Sep 28 12:38:29 2018 -0700 + + Add priming logic to integration tests to avoid cold start issues. (#1259) + +commit 1221dba9ae05cec8ed002555871aab815e1f187b (tag: rxfire@3.0.4, tag: firebase@5.5.2, tag: @firebase/webchannel-wrapper@0.2.10, tag: @firebase/firestore@0.8.2, tag: @firebase/auth@0.7.7) +Author: Feiyang1 +Date: Thu Sep 27 16:22:10 2018 -0700 + + Publish firebase@5.5.2 + +commit 25138510ac679b614689ac9f34b5f2c690a17b00 +Author: Feiyang1 +Date: Thu Sep 27 15:24:16 2018 -0700 + + update lock file + +commit 57b9231ccc1038cae8f2077fcdcd60f7a94d8f34 +Author: Feiyang +Date: Thu Sep 27 09:48:42 2018 -0700 + + remove incorrect typing (#1252) + +commit e9e025527cbe57e5a1670128b45e2757a6b07f44 +Author: Ryan Brewster +Date: Wed Sep 26 17:41:38 2018 -0700 + + Fix a few issues with the @firebase/testing package.json (#1253) + + * Remove file-system dependency + + * Manually include request + + * [AUTOMATED]: Prettier Code Styling + + * Import firestore in tests + + * [AUTOMATED]: Prettier Code Styling + + * Fixed version + +commit 85abf9aef69d820bd953e613430d0875c18a6ff8 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Sep 26 14:22:21 2018 -0700 + + Maps backend error REJECTED_CREDENTIAL to client error (#1251) + +commit 331a507f4f83710375fec9cd028ad7715373e112 +Author: Sebastian Schmidt +Date: Wed Sep 26 09:03:04 2018 -0700 + + Remove computeInitialDocChanges (#1246) + +commit 0beb028de38c74198592f47618400f9905d605da +Author: Feiyang +Date: Tue Sep 25 21:14:01 2018 -0700 + + support es6 module in webchannel-wrapper (#1248) + + * support es6 module in webchannel-wrapper + + * [AUTOMATED]: Prettier Code Styling + +commit 9d8181084d4cc9fa60849e8e59cd38af34ad9704 +Author: Sebastian Schmidt +Date: Tue Sep 25 15:11:40 2018 -0700 + + Update test comments (#1247) + +commit d7a7f0abbdc11f993ca9f4536c13240126161b0f +Author: Feiyang +Date: Fri Sep 21 11:12:38 2018 -0700 + + wrap component with try catch outside of iife for old browser compatibility (#1239) + +commit 3dd9bcf6e1283677d95d91e4b20c75b997c00499 +Author: Michael Lehenbauer +Date: Fri Sep 21 11:01:58 2018 -0700 + + Firestore: Add "max-line-length" and "ordered-imports" tslint rules. (#1238) + + This enforces a maximum line length (of 100) and import ordering via tslint rules and fixes all violations. + + The line length violations were fixed manually. Prettier already targets a line length of 80 for code (but this isn't a strict limit) so mostly I just split string literals and long comments, but I did have to use tslint:disable in one place since prettier was formatting at > 100 chars. + + The import ordering violations were fixed automatically via yarn lint:fix. + +commit 1e948e602c2675e8c049a807b6727e97c7da5706 (tag: rxfire@3.0.3, tag: firebase@5.5.1, tag: @firebase/webchannel-wrapper@0.2.9, tag: @firebase/functions@0.3.1, tag: @firebase/firestore@0.8.1, tag: @firebase/database@0.3.6, tag: @firebase/auth@0.7.6) +Author: Feiyang Chen +Date: Thu Sep 20 14:39:11 2018 -0700 + + Publish firebase@5.5.1 + +commit a4ab0f68d50575c9cd409199e6963fc76dbf1d81 +Author: Feiyang +Date: Wed Sep 19 12:08:42 2018 -0700 + + Functions test fix (#1236) + + * check the browser compatibility more reliably before running the test + + * [AUTOMATED]: Prettier Code Styling + +commit 33871d4787955eb6793dc02f76080a077f48c6bc +Author: Feiyang +Date: Tue Sep 18 10:16:52 2018 -0700 + + add @Feiyang1 to the global code owners list (#1231) + +commit 03a78c7de538a3d57df4d8668c0289eb526061b7 +Author: Ryan Brewster +Date: Mon Sep 17 16:25:06 2018 -0700 + + Ensure that we set the subject for unsecured JWTs (#1217) + + * Ensure that we set the subject for unsecured JWTs + + * feedback + +commit 0841153c592868c8b9a040e662941b66c35de1b3 +Author: Michael Lehenbauer +Date: Mon Sep 17 14:46:43 2018 -0700 + + Upgrade closure-builder dependency to 2.3.0. (#1230) + + Java 10 removed the -d64 flag, which closure-builder was passing. Updating to the latest version resolves the issue. + + Also removed auth's unused dependency on closure-builder. + +commit d257bf8cc8064c7fda74f341a1547157e56a0c28 +Author: Feiyang +Date: Thu Sep 13 18:30:32 2018 -0700 + + change build order, so d.ts files are created in the right place (#1223) + +commit 68f8c6f0c746d38c7eb969659adde3fc291ac17e (tag: rxfire@3.0.2, tag: firebase@5.5.0, tag: @firebase/util@0.2.2, tag: @firebase/messaging@0.3.6, tag: @firebase/firestore@0.8.0, tag: @firebase/firestore-types@0.7.0, tag: @firebase/database@0.3.5, tag: @firebase/auth@0.7.5, tag: @firebase/app@0.3.4) +Author: Josh Crowther +Date: Thu Sep 13 15:43:54 2018 -0700 + + Publish firebase@5.5.0 + +commit c067eefd2dca364fac09ad0bc4d22a91cab9c35c +Author: Ryan Brewster +Date: Mon Sep 10 10:26:20 2018 -0700 + + Consider JWTs with empty signatures to be valid (#1218) + + * Recognize unsecured JWTs as valid + + * [AUTOMATED]: Prettier Code Styling + +commit 713222c3f495c357d15c023d0628254db12cef58 +Author: Nicolas Garnier +Date: Fri Sep 7 03:49:49 2018 +0200 + + Switch from cordova-universal-links-plugin to cordova-universal-links… (#1187) + + * Switch from cordova-universal-links-plugin to cordova-universal-links-plugin-fix + +commit 2b16a589a619d64d3a331f9fd5f2e7e98ea48406 +Author: Sebastian Schmidt +Date: Thu Sep 6 18:12:55 2018 -0700 + + Expose multi-tab flag (#1199) + +commit 33ea1086b5dabe53e91237537f95eb870a197309 +Author: Michael Lehenbauer +Date: Thu Sep 6 11:12:54 2018 -0700 + + b/111221684: Improve error message when passing empty strings to API methods. (#1211) + + In particular, doc("") and collection("") give better messages than saying the path must be even or odd-length. + +commit e2098a2a3d0cd5f21c31448bc1fbc9cf135bfc2a +Author: Michael Lehenbauer +Date: Thu Sep 6 09:41:11 2018 -0700 + + b/112778345: Improve argument validation for get(). (#1210) + + In particular, we'll throw a decent error if you accidentally pass a callback function to get(). + +commit 3e7a12faafad6a87ec3df8ef66e5fb2d5547a4b0 +Author: Sebastian Schmidt +Date: Thu Sep 6 09:40:34 2018 -0700 + + Remove TODOs (#1201) + +commit 01cd608f167e8f9d924d491808846f78f1c6a321 +Author: Sebastian Schmidt +Date: Thu Sep 6 09:40:12 2018 -0700 + + Remove TODO about making size O(1) (#1209) + +commit 588900a99c9a76d786298358ab60c4389489d2ef +Author: Michael Lehenbauer +Date: Thu Sep 6 09:20:37 2018 -0700 + + b/113691610: Prefix "methodName" in FieldTransform with underscore (#1208) + +commit 0e1f6e5d709cdc021d0dde2ad0c17d20bae88885 +Author: Sebastian Schmidt +Date: Wed Sep 5 20:05:37 2018 -0700 + + Don't drop empty objects during merge (#1202) + +commit eea6851f168e72d3f3411015407290213acce6f8 +Author: Sebastian Schmidt +Date: Wed Sep 5 18:58:43 2018 -0700 + + Update CHANGELOG.md (#1198) + +commit a5e16d4655da41bfbb73d833efde40aedb46900d +Author: Sebastian Schmidt +Date: Wed Sep 5 17:31:36 2018 -0700 + + Adding readwrite-primary mode (#1203) + +commit dbc8d70966c4edb630a6836a0d36a40d62eb7927 +Author: Greg Soltis +Date: Wed Sep 5 16:03:15 2018 -0700 + + Add sequence number to QueryData (#1194) + + * Add sequence numbers to QueryData + + * [AUTOMATED]: Prettier Code Styling + + * Dont used separate db prefix + + * [AUTOMATED]: Prettier Code Styling + +commit 5e109b17126e8a2d3b1b686df45d34f0d57c77a4 +Author: James Daniels +Date: Wed Sep 5 15:44:34 2018 -0700 + + Package.json has bad types reference (#1192) + +commit 65ea95112523e9f4bab76b57ea4f65487868e83f +Author: Sebastian Schmidt +Date: Wed Sep 5 14:15:06 2018 -0700 + + Rename LocalStorage to WebStorage (#1200) + +commit f30be09c7b32a1ade2cf849192033577b4571488 +Author: Michael Lehenbauer +Date: Wed Sep 5 13:40:35 2018 -0700 + + Offline get() improvements. (#1197) + + 1. Changed MAX_WATCH_STREAM_FAILURES to 1 per conversation with @wilhuff and + @jdimond. + 2. Fixed a "race" where when a get() triggered a watch stream error, we'd + restart the stream, then get() would remove its listener, and so we had no + listener left once the watch stream was "opened". Without a listen to send + we'd be stuck in Offline state (even though we should be Unknown whenever + we have no listens to send), resulting in the next get() returning data + from cache without even attempting to reach the backend. + +commit ad2d178dfa5d7701fc19c0422e703791456e075b +Author: Sebastian Schmidt +Date: Tue Sep 4 23:24:07 2018 -0700 + + Remove Held Write Acks (#1156) + +commit d99c197d5af2a2a301868757c8db329b04341f59 +Author: James Daniels +Date: Tue Sep 4 12:29:37 2018 -0700 + + Port AF2 duplicate emission changes to rxfire (#1185) + +commit 9493faaac962edcac7212339e1d3f28fab6b40e9 +Author: Greg Soltis +Date: Fri Aug 31 12:50:23 2018 -0700 + + Add sequence numbers and sync them (#1172) + + * Add sequence numbers and sync them + + * Lint and comments + + * FirestoreClient and ListenSequence review feedback + + * Make webStorage non-optional + + * Return a promise of removeddocs from removeMutationBatch + + * [AUTOMATED]: Prettier Code Styling + + * Rename sequence number parsing function + + * [AUTOMATED]: Prettier Code Styling + + * IndexedDb startup refactoring to throw proper errors early + + * Renamed tests + + * Refactor Syncer interface for sequence numbers to conform to other examples + + * [AUTOMATED]: Prettier Code Styling + + * Shorten the comment + + * Drop 'only' + + * Add comment re multiClientParams + + * SharedClientState existing doesn't imply multiple clients + + * Remove start() from Persistence interface (#1179) + + * WIP on switching to static constructors + + * Remove start() from Persistence interface, use static helpers for IndexedDbPersistence construction + + * [AUTOMATED]: Prettier Code Styling + + * Mark start() private + + * Remove unused import + + * Use explicit type, switch async to Promise.resolve + + * Export the type + + * Condense a few lines + + * Use persistence key to scope sequence numbers to a project + + * [AUTOMATED]: Prettier Code Styling + + * Fix test to use new sequence number key + + * updateSequenceNumber -> writeSequenceNumber + + * Add comments to interface, switch to assert for sequenceNumberHandler + + * [AUTOMATED]: Prettier Code Styling + +commit ac7f9ced0fd18088c17ed76470095f0dcde7a15d +Author: Sebastian Schmidt +Date: Fri Aug 31 11:23:55 2018 -0700 + + Escpae the persistence key everywhere & scope online state by project (#1182) + +commit 47d09ab4eda4d1603791b11613bba1f127f706f6 (tag: rxfire@3.0.1, tag: firebase@5.4.2, tag: @firebase/firestore@0.7.2, tag: @firebase/auth@0.7.4) +Author: Josh Crowther +Date: Thu Aug 30 13:59:02 2018 -0700 + + Publish firebase@5.4.2 + +commit 9d96d959474489c0ded88075f956df2066550696 +Author: Sebastian Schmidt +Date: Thu Aug 30 13:22:57 2018 -0700 + + Don't raise hasPendingWrites for documents outside of limit (#1178) + +commit 00b50e170d2df2b44e93f37aa58acf79101a863e +Author: Sebastian Schmidt +Date: Tue Aug 28 11:42:34 2018 -0700 + + Keep Query state consistent when primary lease is lost (#1162) + +commit f15f1f07fa8c5a65135d3a83ceb1654a5b841e62 +Author: Sebastian Schmidt +Date: Tue Aug 28 11:42:21 2018 -0700 + + Remove Multi-Tab TODOs (#1161) + + * Remove TODOs that are no longer applicable + + * [AUTOMATED]: Prettier Code Styling + +commit 3f3b3a742c0de026250071bbba7ac267d21eccb5 +Author: Sebastian Schmidt +Date: Tue Aug 28 11:42:03 2018 -0700 + + Adding Firestore team to code owners (#1104) + +commit 1d5e6392e4acd8fcb788ce36c1b428e58bfc6572 +Author: bojeil-google +Date: Mon Aug 27 16:02:34 2018 -0700 + + Various Auth fixes. (#1171) + + * `navigator.serviceWorker.ready` rejects in chrome extensions. + We need to catch that and suppress it. + + * Returns the credential when available in AuthErrorWithCredential + + This returns credentials in errors even when no email or phoneNumber is returned. + This is needed to help recover from credential auth/credential-already-in-use in multiple accounts per email settings, eg: user calling linkWithPopup/Redirect when the OAuth credential is already in use. + In this case, the top level email is null and the developer can't do account lookup but at least they can still recover. The developer can signInWithCredential after and handle merges manually. + +commit 19ed65ae14501e9fbb30e5190400c7dc38fd33aa +Author: bojeil-google +Date: Mon Aug 27 09:18:58 2018 -0700 + + Updates `navigator` check for environments that don't support it. (#1166) + +commit c08851c15092ad37ad5ea3d2953b173a5b903233 +Author: Sebastian Schmidt +Date: Fri Aug 24 14:28:08 2018 -0700 + + Enable strictNullChecks (#1159) + +commit 546440e34ed759dacb2d3aa6fd095fe76768897a (tag: rxfire@3.0.0, tag: firebase@5.4.1, tag: @firebase/firestore@0.7.1, tag: @firebase/auth@0.7.3) +Author: Josh Crowther +Date: Thu Aug 23 14:28:18 2018 -0700 + + Publish firebase@5.4.1 + +commit 96bbc99f890f02f22d3543ffee2e25b34c520bd9 +Author: David East +Date: Wed Aug 22 16:36:07 2018 -0600 + + RxFire: Peer deps versions and Rollup config (#1160) + + * changing peerDeps and rollup config + + * [AUTOMATED]: Prettier Code Styling + +commit d2f0667fceb4bb2cbc8b08f536bf3785d1de9801 +Author: bojeil-google +Date: Wed Aug 22 11:16:20 2018 -0700 + + Auth memory leak fix (#1121) + + Rewrites Auth indexedDB polling to avoid using infinite promise chaining. + +commit 7d9f11175cae14a00ceef8249c3bb4eaf32e6870 +Author: Sebastian Schmidt +Date: Tue Aug 21 15:38:58 2018 -0700 + + Schema migration that drops held write acks (#1149) + +commit 9dbf6b0d82b0feeee6d316c3b5901372c587437e +Author: Sebastian Schmidt +Date: Tue Aug 21 11:47:39 2018 -0700 + + Adding forEach Helper (#1150) + +commit 813a174135812016768afb087c5a1d599d9f8dc6 +Author: Sebastian Schmidt +Date: Tue Aug 21 10:43:56 2018 -0700 + + Speed up FieldPath validation tests (#1147) + +commit 76c2772a3cc7448613eeced56363504c0c227e1c +Author: Sebastian Schmidt +Date: Tue Aug 21 10:41:52 2018 -0700 + + Make MaybeDocument an abstract class (#1153) + +commit 4625e847b02140ea0fa2317c975c70309a4e2c95 +Author: Sebastian Schmidt +Date: Mon Aug 20 14:41:33 2018 -0700 + + Change removeMutationBatch to remove a single batch (#1148) + + * Change removeMutationBatch to remove a single batch + + * Review tweaks + +commit 86fea68a40f30c0fa591159ca99db188de04e216 +Author: bojeil-google +Date: Mon Aug 20 11:11:25 2018 -0700 + + Various auth fixes (#1141) + + * Fixes exportPrototypeProperties for multiple properties where the last property overrides the previous properties. + + * Fixes fireauth.messagechannel.Sender. + + Currently, this does not allow sending multiple messages from the same sender, since the port can only be transferred one time. The implementation has been modified to open a new messagechannel on each message instead. + Note this does not affect indexeddb usage of this utility since a new sender is created each time and one message sent. + + * Fixes service worker indexedDB on some slow browsers, which was detected in Edge. + + Unfortunately, some browsers (detected in Edge) are too slow to detect the first ack event and timeout quickly. + Instead what we can do is assume the following: + 1. one service worker activated at one time. + 2. The service worker once subscribed to the keyChanged event will not unsubscribe. + So on initialization, the client will ping the service worker when it's ready to get all subscribed events with a long timeout. + If the service worker responds with the keyChanged event, we can deduce that the sw can handle this event. + The next time a change event occurs, we can safely use a long ACK timeout. + +commit 3e98afa488d828348b9fe6d6c2468194f308fc7d +Author: Sebastian Schmidt +Date: Mon Aug 20 10:30:34 2018 -0700 + + Add Changelog entry for ReactNative fix (#1146) + +commit 74c57cfabf40d85b4f1ce4f514ad39e7978846ec +Author: Sebastian Schmidt +Date: Sun Aug 19 09:57:25 2018 -0700 + + Support BrowserPlatforms with no window or document (#1140) + +commit f241dd86d8283c5df59979e68606ca6444f14a53 +Author: Michael Lehenbauer +Date: Sat Aug 18 12:18:57 2018 -0700 + + mikelehen/revert offline get improvements (#1137) + + * Revert "Disable some spec tests on mobile (#1134)" + + This reverts commit a56134b66d1f74f44a8851f34b04567372f9ddb3. + + * Revert "Offline get() improvements. (#1133)" + + This reverts commit 14f9a71f43f3068cdbc274aed2924cf2fc105173. + +commit a56134b66d1f74f44a8851f34b04567372f9ddb3 +Author: Greg Soltis +Date: Fri Aug 17 15:22:30 2018 -0700 + + Disable some spec tests on mobile (#1134) + + * Disable some spec tests on mobile + + * [AUTOMATED]: Prettier Code Styling + +commit 229832f6bc968146c08e6bd6b28be098b305205b +Author: Greg Soltis +Date: Fri Aug 17 11:49:53 2018 -0700 + + Stop saving persistence layer across spec tests (#1129) + + * Add no-memory-persistence flag to spec tests. + + * Restart persistence for spec tests + + * [AUTOMATED]: Prettier Code Styling + + * No more negative tags + + * [AUTOMATED]: Prettier Code Styling + + * Put back the no-platform tags + + * [AUTOMATED]: Prettier Code Styling + +commit 14f9a71f43f3068cdbc274aed2924cf2fc105173 +Author: Michael Lehenbauer +Date: Fri Aug 17 11:44:21 2018 -0700 + + Offline get() improvements. (#1133) + + 1. Changed MAX_WATCH_STREAM_FAILURES to 1 per conversation with @wilhuff and + @jdimond. + 2. Fixed a "race" where when a get() triggered a watch stream error, we'd + restart the stream, then get() would remove its listener, and so we had no + listener left once the watch stream was "opened". Without a listen to send + we'd be stuck in Offline state (even though we should be Unknown whenever + we have no listens to send), resulting in the next get() returning data + from cache without even attempting to reach the backend. + +commit 95f3d18d5cd665ba02f77dff6d4f8d4f396fbaf3 +Author: Michael Lehenbauer +Date: Fri Aug 17 09:24:48 2018 -0700 + + Make backoff account for already-elapsed time. (#1132) + +commit 7ef7d517e4484afffd6b7bbb72adcc28c38c44b0 +Author: Sebastian Schmidt +Date: Thu Aug 16 15:59:22 2018 -0700 + + Attempt to delete client metadata row (#1131) + +commit 4152a2991cbc693eb63b7d1e72bf7f63f873a4ba +Author: Sebastian Schmidt +Date: Thu Aug 16 15:53:20 2018 -0700 + + Remove unused lastUpdateTime (#1130) + +commit bc40f0e5ee68672e1f390bbb6f7a30e561739912 +Author: Sebastian Schmidt +Date: Thu Aug 16 14:37:08 2018 -0700 + + Garbage Collect Query State (#1128) + +commit 032786d5d2d1d319adf175eeab82c62a8c5a12a3 +Author: Sebastian Schmidt +Date: Thu Aug 16 13:48:05 2018 -0700 + + Only delete zombied entries on commit success (#1127) + +commit ae5a0481ab4a760ac6e46383ce5c3e03e5d409d5 +Author: David East +Date: Thu Aug 16 14:38:17 2018 -0600 + + Rxfire docs update and adding the snapshot to the percentage observable (#1124) + + * update rxfire docs + + * update RxFire docs + + * [AUTOMATED]: Prettier Code Styling + +commit cc8967d3204244d4522ab1b9dab845f6d024f7c0 (tag: rxfire@2.0.0, tag: firebase@5.4.0, tag: @firebase/firestore@0.7.0, tag: @firebase/firestore-types@0.6.0) +Author: Josh Crowther +Date: Thu Aug 16 11:58:21 2018 -0700 + + Publish firebase@5.4.0 + +commit 9869db3229c321f000ec8bb3186211ad2442fd61 +Author: Josh Crowther +Date: Thu Aug 16 11:41:40 2018 -0700 + + Reverting version to 1.x for relase purposes + +commit 8f85b135218e2ca1a9920611c57c2a095b10a87a +Author: Michael Lehenbauer +Date: Thu Aug 16 08:04:08 2018 -0700 + + Update Firestore changelog for token change fix (4ec654d). (#1122) + + * Update Firestore changelog for token change fix (4ec654d). + +commit 0ba4225b134d430ab47adff5830f061437eaec79 +Author: Greg Soltis +Date: Wed Aug 15 16:09:37 2018 -0700 + + Keep stopping starting (#1125) + +commit d26866c693411b7ecc35bbe416f787fcd33e12b6 +Author: Sebastian Schmidt +Date: Wed Aug 15 13:49:25 2018 -0700 + + Delete leftover zombied client IDs (#1123) + +commit 4ec654de49c09724877bc09096348302536c245a +Author: Michael Lehenbauer +Date: Wed Aug 15 09:03:48 2018 -0700 + + firebase-ios-sdk/1499: Restart streams on any token change. (#1120) + + * firebase-ios-sdk/1499: Restart streams on any token change. + + See https://github.com/firebase/firebase-ios-sdk/issues/1499 + + This reworks our UserListener into a CredentialChangeListener which + fires on any token change, even if the User did not change. This allows + us to restart our streams (but not switch mutation queues, etc.) on token + changes. + +commit fc37f4cf7d0088632c8511d7fb2a076ad38974a4 +Author: Greg Soltis +Date: Tue Aug 14 15:13:21 2018 -0700 + + Stop starting the remote document cache (#1116) + + * Stop starting the remote document cache + + * Review feedback + + * MultiTab -> MultiClient + +commit d559e80697e923a2816eaccf76726423b45e991c +Author: Sebastian Schmidt +Date: Tue Aug 14 13:54:48 2018 -0700 + + Delete stale client metadata (#1119) + +commit 994107291caee20371c4d4fba95a40a80200d2cc +Author: Sebastian Schmidt +Date: Tue Aug 14 11:17:02 2018 -0700 + + Update Changelog with Multi-Tab Schema Changes (#1118) + +commit 89d46be765feb7c4c6576985dd0fa707a1bfbe97 +Author: Sebastian Schmidt +Date: Mon Aug 13 11:13:29 2018 -0700 + + Using mutable spec runner (#1114) + +commit b30ce32c519f1e4db608017b252982ddc3821774 +Author: Michael Lehenbauer +Date: Mon Aug 13 11:06:22 2018 -0700 + + Tweak array-contains test for partial object matches. (#1115) + + Ensure b/112521956 cannot happen (makes sure we don't partially match against objects in the array) + +commit d130e94c29628e2ab178f4657267350d7e0e784e +Author: Jeff Delaney +Date: Sun Aug 12 09:05:50 2018 -0700 + + rxfire: added functions to map RTDB changes to values (#1062) + +commit 5ff6dc0fa5a1c0fe48ac821a0eeda43e1ce72a2d +Author: Sebastian Schmidt +Date: Fri Aug 10 15:37:29 2018 -0700 + + Garbage Collect the Remote Document Changelog (#1108) + +commit 66873904ce90b4f971be55903bb1e20c7ed1ccc3 +Author: Michael Lehenbauer +Date: Fri Aug 10 09:52:44 2018 -0700 + + GRPC Tweaks. (#1109) + + * Don't lowercase RPC names because the gRPC stub supports both now. + * Remove event handlers / asserts that have been proven safe / unnecessary. + +commit d21071e913405533194504fceebad29cd5b05e61 +Author: Sebastian Schmidt +Date: Thu Aug 9 19:55:41 2018 -0700 + + Garbage Collect Mutation Batch Keys (#1106) + +commit b6e601067e1014c14e4e6f9808d5eed8e51b2cdb +Author: Greg Soltis +Date: Thu Aug 9 16:13:49 2018 -0700 + + Drop QueryCache.start() (#1107) + + * Drop QueryCache.start() + + * [AUTOMATED]: Prettier Code Styling + +commit b16bbcd5541b8f3d8b0e4a25ab26993cb232d923 +Author: Greg Soltis +Date: Thu Aug 9 09:10:06 2018 -0700 + + Drop limbo collector (#1105) + + * Remove calls to collect limbo docs + + * Pre-event sorting merge + + * Remove limbo collector + + * [AUTOMATED]: Prettier Code Styling + + * Chain promises, wait for them + + * [AUTOMATED]: Prettier Code Styling + + * Drop unnecessary type + + * Actually await the promise + +commit 541683ba2a323293289465043f97254a55898650 +Author: Sebastian Schmidt +Date: Wed Aug 8 15:37:40 2018 -0700 + + Remove mutation data from client state (#1102) + +commit c6d39934daf5f0fbcd3f9011f8f125685d83ed39 +Author: Sebastian Schmidt +Date: Wed Aug 8 15:26:42 2018 -0700 + + Spec Test: Sorting Query events (#1103) + +commit 28c0c065b8ba1bd9337cc1a7a3ca0d2e340ebb29 +Author: Sebastian Schmidt +Date: Tue Aug 7 23:03:04 2018 -0700 + + Use previous message for primary lease error (#1100) + +commit 2beaaea73c7df3eb9954c70f00ff2743928e7a85 +Author: Michael Lehenbauer +Date: Tue Aug 7 17:13:28 2018 -0700 + + Fixed `get({source: 'cache'})` to return nonexistent documents from cache. (#1096) + + Port of https://github.com/firebase/firebase-ios-sdk/pull/1642 + +commit 9684f84d901812d25632ae3bfc74c9f66fa86b2d +Author: Sebastian Schmidt +Date: Tue Aug 7 16:55:58 2018 -0700 + + Updating the indexeddb_persistence class comment (#1099) + +commit cb4b5296d7409bef6872aff93e94fdd222290535 +Author: Sebastian Schmidt +Date: Tue Aug 7 16:15:28 2018 -0700 + + Removing/Addressing TODOs (#1097) + +commit fb05d40e638cfc6cd33fdaee516cf54ca85faa55 +Author: Sebastian Schmidt +Date: Tue Aug 7 15:28:07 2018 -0700 + + Using BATCHID_UNKNOWN instead of null (#1098) + +commit 007ef8fc39f063f1feeb519068cc54fa02aa7864 +Author: David East +Date: Mon Aug 6 12:46:56 2018 -0600 + + rxfire public (#1093) + +commit 180b5e5bded92fc574713301d817f98aadbb13c7 +Author: Sebastian Schmidt +Date: Mon Aug 6 08:44:59 2018 -0700 + + Multi-Tab Renames (#1088) + +commit 2f17ba02a3a139678b849cd53b2199156e5bc6d1 +Author: Sebastian Schmidt +Date: Fri Aug 3 14:12:30 2018 -0700 + + Multi-Tab Persistence + + As per go/multi-tab. + + This feature is not yet enabled for third-party users. + +commit dc9a5d18883e329e29191aeb0f4a2de70e7ccbbe +Author: Michael Lehenbauer +Date: Fri Aug 3 13:37:22 2018 -0700 + + Enable no-floating-promises lint check and fix / suppress violations. (#1087) + + I noticed that we were failing to wait for promises in a couple places so I enabled no-floating-promises lint check and cleaned up all the violations. To make this a bit easier I introduced enqueue() vs enqueueAndForget() on the AsyncQueue, with the latter returning void instead of a Promise. + +commit b4ab8963543f0a49862f86d123c62ad4e7ccfcc6 (tag: firebase@5.3.1, tag: @firebase/firestore@0.6.1, tag: @firebase/auth@0.7.2) +Author: hiranya911 +Date: Fri Aug 3 10:18:37 2018 -0700 + + Publish firebase@5.3.1 + +commit 4af084323401e2fe8ae4f45600cd3f50e0e51b72 +Author: hiranya911 +Date: Thu Aug 2 23:00:16 2018 -0700 + + Removing the temp git diff hack + +commit c906eee41c7a6af3f7c1a2ce1a878a3741cfcba8 +Author: hiranya911 +Date: Thu Aug 2 21:50:01 2018 -0700 + + Updating yarn.lock for rxjs + +commit d31bb12c54d7f880c5b1e328ab3159d3053b8ce1 +Author: hiranya911 +Date: Thu Aug 2 20:07:44 2018 -0700 + + Temporarily logging the git diff + +commit d4251ae168240e51002c211cc652e64eb5720cb0 +Author: Hiranya Jayathilaka +Date: Thu Aug 2 17:47:07 2018 -0700 + + Revert "Prep rxfire release" (#1086) + + * Revert "Rxfire build fix (#1085)" + + This reverts commit fd413785eac96e6e11bc61f31561bd6d459d5f26. + + * Revert "Enable strict function types (#1082)" + + This reverts commit 22ed571bc9089f4912b23286c35015f9995a2138. + + * Revert "Fixes servicerworker/client state syncing (#1074)" + + This reverts commit 2dab48d13e2b79af96721ad05e30a9d1a91a1498. + + * Revert "Prep rxfire release (#1079)" + + This reverts commit c74c3b91ec7f26aed7d7cc10f384afdb6e73e4d4. + +commit fd413785eac96e6e11bc61f31561bd6d459d5f26 +Author: David East +Date: Thu Aug 2 16:19:17 2018 -0600 + + Rxfire build fix (#1085) + + * fix rxfire build + + * [AUTOMATED]: Prettier Code Styling + +commit 22ed571bc9089f4912b23286c35015f9995a2138 +Author: Greg Soltis +Date: Thu Aug 2 11:35:51 2018 -0700 + + Enable strict function types (#1082) + + * Strict + + * More strictness + + * [AUTOMATED]: Prettier Code Styling + + * Lint and cleanup + + * Use Unknown type + +commit 2dab48d13e2b79af96721ad05e30a9d1a91a1498 +Author: bojeil-google +Date: Thu Aug 2 11:31:25 2018 -0700 + + Fixes servicerworker/client state syncing (#1074) + + * Fixes servicerworker/client state syncing + + Defines the MessageChannel based utility for communicating window <=> window and window <=> worker. + + Adds receiver in indexedDB when operating from a service worker to listen to keyChanged events. + On detection, indexedDB is synced and a response is returned to sender whether the key change was processed. It may be that the key change was already detected. This would return false. + + Adds a sender when an indexedDB write operation occurs and a service worker is available. The client will send a keyChanged message to the service worker to process the change and blocks on it. On response, the indexedDB write operation will resolve. The operation will resolve on success or failure. This is a best effort approach. If the service worker fails to process, the write operation should still succeed. + + Updates obsoleted APIs in web worker. + +commit c74c3b91ec7f26aed7d7cc10f384afdb6e73e4d4 +Author: David East +Date: Wed Aug 1 15:09:30 2018 -0600 + + Prep rxfire release (#1079) + +commit e4ec0366c40f21457874c1462c08ca1bc5b122f2 +Author: Greg Soltis +Date: Wed Aug 1 11:22:15 2018 -0700 + + Ensure owner lease in owner lease refresh loop (#1072) + + * Ensure owner lease in owner lease refresh loop + + * Make it actually do the thing this time + +commit bb97c2739fd704b757c5b9087a79996990b24820 +Author: Greg Soltis +Date: Wed Aug 1 10:09:49 2018 -0700 + + Fix unsound type signature (#1075) + +commit e8460bc73cc6165ca022a3b9872cabd54af8262c +Author: Michael Lehenbauer +Date: Tue Jul 31 16:13:04 2018 -0700 + + Rename idleTimer and fix comments. (#1068) + +commit 08907dbeffe2737f4bb125da2d7570d99a9800fa +Author: Gil +Date: Tue Jul 31 14:31:40 2018 -0700 + + Add a CHANGELOG entry for #1052 (#1071) + + * Add a CHANGELOG entry for #1052 + + * Add notes for #1055 + +commit ca008a4827a8fd871d1f6b9379064efee79c5035 +Author: Konstantin Varlamov +Date: Tue Jul 31 14:24:22 2018 -0400 + + Port optimizations to LocalDocumentsView from iOS (#1055) + + * add a method to find batches affecting a set of keys (port of [1479](https://github.com/firebase/firebase-ios-sdk/pull/1479)); + * use the newly-added method to avoid rereading batches when getting documents in `LocalDocumentsView` (port of [1505](https://github.com/firebase/firebase-ios-sdk/pull/1505)); + * avoid rereading batches when searching for documents in a collection (port of [1533](https://github.com/firebase/firebase-ios-sdk/pull/1533)). + + Speedup was measured by running tests in browser and checking time spent writing 10 batches of 500 mutations each, and then querying the resulting 5K docs collection from cache in offline mode. For this case, the writing speedup is about 3x, and querying speedup is about 6x (see PR for more details). + +commit 063f729fc156fae6158f66d0992c23c5c401ce01 +Author: Greg Soltis +Date: Tue Jul 31 10:48:20 2018 -0700 + + Add a type parameter to Persistence (#1047) + + * Cherry pick sequence number starting point + + * Working on typed transactions + + * Start plumbing in sequence number + + * Back out sequence number changes + + * [AUTOMATED]: Prettier Code Styling + + * Fix tests + + * [AUTOMATED]: Prettier Code Styling + + * Fix lint + + * [AUTOMATED]: Prettier Code Styling + + * Uncomment line + + * MemoryPersistenceTransaction -> MemoryTransaction + + * [AUTOMATED]: Prettier Code Styling + + * Review updates + + * Style + + * Lint and style + + * Review feedback + + * [AUTOMATED]: Prettier Code Styling + + * Revert some unintentional import churn + + * Line 44 should definitely be empty + + * Checkpoint before adding helper function for stores + + * Use a helper for casting PersistenceTransaction to IndexedDbTransaction + + * [AUTOMATED]: Prettier Code Styling + + * Remove errant generic type + + * Lint + + * Fix typo + +commit 1f25d0dff5f7b5379cdb666ff9fc5cf42fb53c79 +Author: Gil +Date: Tue Jul 31 08:45:38 2018 -0700 + + Implement global resume token (#1052) + + * Add a spec test that shows correct global resume token handling + + * Minimum implementation to handle global resume tokens + + * Remove unused QueryView.resumeToken + + * Avoid persisting the resume token unless required + + * Persist the resume token on unlisten + +commit f14ebc245f58832776ec9fcde307175fba84f54e +Author: Michael Lehenbauer +Date: Mon Jul 30 16:37:10 2018 -0700 + + Refactor PersistentStream (no behavior changes). (#1041) + + This breaks out a number of changes I made as prep for b/80402781 (Continue + retrying streams for 1 minute (idle delay)). + + PersistentStream changes: + * Rather than providing a stream event listener to every call of start(), + the stream listener is now provided once to the constructor and cannot + be changed. + * Streams can now be restarted indefinitely, even after a call to stop(). + * PersistentStreamState.Stopped was removed and we just return to + 'Initial' after a stop() call. + * Added `closeCount` member to PersistentStream in order to avoid + bleedthrough issues with auth and stream events once stop() has + been called. + * Calling stop() now triggers the onClose() event listener, which + simplifies stream cleanup. + * PersistentStreamState.Auth renamed to 'Starting' to better reflect that + it encompasses both authentication and opening the stream. + + RemoteStore changes: + * Creates streams once and just stop() / start()s them as necessary, + never recreating them completely. + * Added networkEnabled flag to track whether the network is + enabled or not, since we no longer null out the streams. + * Refactored disableNetwork() / enableNetwork() to remove stream + re-creation. + + Misc: + * Comment improvements including a state diagram on PersistentStream. + * Fixed spec test shutdown to schedule via the AsyncQueue to fix + sequencing order I ran into. + +commit a80a597b57c7ac3cb91cc197b72913b5afcc014f +Author: David East +Date: Mon Jul 30 16:42:44 2018 -0600 + + RxFire: Api Change and documentation (#1066) + + * api changes and doc updates + + * fixes + +commit f86d8c97fd12e637a986a97235a56b380ef49301 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Jul 30 15:03:11 2018 -0700 + + Catch invalid provider id error (#1064) + +commit 5c485dc45e9725db1f6788f4995bca15424ab37c +Author: Sebastian Schmidt +Date: Mon Jul 30 13:07:50 2018 -0700 + + Add Watch update perf test (#1059) + +commit 6abb55fbee3070b7c8da51f1394edf5717f1da28 +Author: Sebastian Schmidt +Date: Mon Jul 30 12:29:37 2018 -0700 + + Don't look up TargetId in notifyLocalViewChanges (#1065) + +commit d9e432eb6405144ea0daaf1fa293a578182754ad +Author: Konstantin Varlamov +Date: Sun Jul 29 17:32:44 2018 -0400 + + Firestore: in tests, silence the verbose warning about old timestamp behavior (#1058) + + This cleans up the few leftover places where the warning was still being outputted in tests. Running locally, I get a clean log. + +commit 718953e7a6f78577deaa440972178fbd2651b1b3 +Author: Sebastian Schmidt +Date: Fri Jul 27 09:28:15 2018 -0700 + + Add benchmark spec tests (#1048) + +commit fc2e9678de067e04848eae998e041d63d3e21625 +Author: Greg Soltis +Date: Wed Jul 25 15:03:37 2018 -0700 + + Ensure persistence started (#1043) + + * Ensure persistence is started when passed to the local store + + * [AUTOMATED]: Prettier Code Styling + + * Review responses + +commit b8a061b62e933b20db80a98e7a6339810ea7133c +Author: Jeff Delaney +Date: Wed Jul 25 11:47:39 2018 -0700 + + (rxfire): unwrap operator (#982) + + * (rxfire): unwrap operator + added a custom rxjs operator to map collections/docs to their data payload + + * (rxfire): rm unused lines from spec + + * (rxfire) data mapping functions + refactored unwrap operator in favor of pure data mapping functions + +commit d61fbb25e10d0eeeeb338a9b3f20524e8b226d1b +Author: Sebastian Schmidt +Date: Tue Jul 24 22:50:06 2018 -0700 + + Upgrade GRPC to 1.13.1 (#1042) + +commit f4dd23109150a7ef142319db5f10053f693d93c7 +Author: Gil +Date: Tue Jul 24 09:57:48 2018 -0700 + + Use Alex's suggested phrasing instead (#1028) + +commit 8309eb3727b9b7d4016e1c688df5bff29e01a4a1 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Jul 23 11:08:43 2018 -0700 + + catch server error RESET_PASSWORD_EXCEED_LIMIT (#1037) + +commit 86c8077a011c817be52b6f1047e1040ea6e9e6d6 +Author: Ryan Brewster +Date: Fri Jul 20 15:55:42 2018 -0700 + + Add iat to fake access token payload (#1022) + + * Add iat to fake access token payload + + * [AUTOMATED]: Prettier Code Styling + + * Simpler tests + + * [AUTOMATED]: Prettier Code Styling + + * Do not clobber iat + +commit 5118935e516b5d9407c25306fc4802a43bc92f88 +Author: rsgowman +Date: Fri Jul 20 16:23:43 2018 -0400 + + Fix to #1027 to allow SnapshotVersion == 0 (#1033) + +commit 2d7a74ce8a169e22061a8cdc14ae7fb2ef87441a +Author: rsgowman +Date: Fri Jul 20 13:40:05 2018 -0400 + + Unify local.QueryData with the other platforms (#1027) + + This makes it line up with it's own docs, and also the other platforms. + +commit 60a58d998b63b7a3af918064fc0b74e495c86e73 (tag: firebase@5.3.0, tag: @firebase/firestore@0.6.0, tag: @firebase/firestore-types@0.5.0, tag: @firebase/auth@0.7.1) +Author: Josh Crowther +Date: Thu Jul 19 14:33:20 2018 -0700 + + Publish firebase@5.3.0 + +commit d60f6590d28680bf139062db86c65ff38121f5b3 +Author: Greg Soltis +Date: Thu Jul 19 14:18:19 2018 -0700 + + Remove unnecessary `any` (#1030) + + * Fix an errant any usage + + * [AUTOMATED]: Prettier Code Styling + +commit fffdb75e69c06a0affcc18a4d7bf13dfb4025513 +Author: Michael Lehenbauer +Date: Thu Jul 19 12:52:13 2018 -0700 + + Ensure that we create an empty TargetGlobal row. (#1029) + + Ensure the v3 migration unconditionally creates the TargetGlobal row. Remove the no-longer-necessary v2 schema migration. + +commit 4b51dee11ce415fe0d4ba6e0bce82f0a5ee08472 +Author: Gil +Date: Thu Jul 19 10:29:48 2018 -0700 + + Add a release note for the fix to #1548 (#1024) + +commit e6ab89470b567c1e00644b171d235252b7ffd38c +Author: Gil +Date: Wed Jul 18 19:58:47 2018 -0700 + + Add a schema migration that drops the query cache (#1019) + + * Add a schema migration that drops the query cache + + This is a force fix for potential existence filter mismatches caused by + https://github.com/firebase/firebase-ios-sdk/issues/1548 + + The essential problem is that when resuming a query, the server is + allowed to forget deletes. If the number of incorrectly synthesized + deletes matches the number of server-forgotten deletes then the + existence filter can give a false positive, preventing the cache from + self healing. + + Dropping the query cache clears any client-side resume token which + prevents a false positive existence filter mismatch. + + Note that the remote document cache and mutation queues are unaffected + so any cached documents that do exist will still work while offline. + + * Implement review feedback + +commit 593cd2015d985ff71908d3655a087ba456a521c7 +Author: Sebastian Schmidt +Date: Wed Jul 18 17:16:15 2018 -0700 + + Making sure we don't export 'experimental' (#1023) + +commit 3d26806317e13a7ab9643cf57bd1ba62d0552856 +Author: Michael Lehenbauer +Date: Wed Jul 18 15:47:33 2018 -0700 + + Fix getRemoteKeysForTarget() method name in comment. (#1020) + + While porting I noticed this was slightly wrong. targetContainsDocument() is the method in WatchChangeAggregator. The SyncEngine method I meant to reference is getRemoteKeysForTarget(). + +commit 6d663926d71b47f6a12b28440254012b4829dbbe +Author: Gil +Date: Wed Jul 18 12:38:19 2018 -0700 + + Allow remote updates from watch to heal a cache with synthesized deletes in it (#1015) + + * Write a spec test for the busted cache + + * Modify spec test to demonstrate deletedDoc issue. (#1017) + + * Allow updates for targets where the document is modified + +commit 3d1a15c7ec877c4e0425e74b26d0d6d9d835b7a0 +Author: Josh Crowther +Date: Wed Jul 18 10:59:44 2018 -0700 + + Add @firebase/util as a dep of @firebase/testing + +commit 49c81b1fa90326aef9133204d007285179856858 +Author: Josh Crowther +Date: Wed Jul 18 10:53:56 2018 -0700 + + Updating yarn.lock + +commit 5c338d1d9e69b2f65b173ccd50ad1e0361847b9d +Author: Michael Lehenbauer +Date: Wed Jul 18 10:33:47 2018 -0700 + + b/72533250: Fix issue with limbo resolutions triggering incorrect manufactured deletes. (#1014) + + This fixes an issue occurring when a limbo target receives a documentUpdate, + then a global snapshot, and then a CURRENT. Because there was a global + snapshot before the CURRENT, WatchChangeAggregator has no pending document + updates and calls SyncEngine.targetContainsDocument() to see if we previously got any + document from the backend for the target. See: + https://github.com/firebase/firebase-js-sdk/blob/6905339235ad801291edc696dd75a08e80647f5b/packages/firestore/src/remote/watch_change.ts#L422 + + Prior to this change, targetContainsDocument() returned false because + it relies on our Views to track the contents of the target, and we don't + have Views for limbo targets. Thus WatchChangeAggregator incorrectly + manufactures a NoDocument document update which deletes data from our + cache. + + The fix is to have SyncEngine track the fact that we did indeed get + a document for the limbo resolution and return true from + targetContainsDocument(). + +commit 6905339235ad801291edc696dd75a08e80647f5b +Author: Sebastian Schmidt +Date: Mon Jul 16 14:21:28 2018 -0700 + + Setting GarbageSource in SyncEngine's constructor (#1010) + +commit f1a5e2e2e9c1dfa0928635df2ca01d537622faea +Author: Tony Meng +Date: Mon Jul 16 13:38:33 2018 -0700 + + Enable firestore sdk to talk to emulator (#1007) + + * Enable firestore sdk to talk to emulator + + * [AUTOMATED]: Prettier Code Styling + + * Revert firestore sdk changes + + * [AUTOMATED]: Prettier Code Styling + + * Revert credentials.ts + + * Cleanup + + * [AUTOMATED]: Prettier Code Styling + + * Set webSafe=false + + * Combine initializeTestApp and initializeFirestoreTestApp + + * [AUTOMATED]: Prettier Code Styling + + * Cleanup + + * [AUTOMATED]: Prettier Code Styling + + * Update major version since this is a breaking change that will cause the testing sdk to no longer work with old versions of the RTDB emulator + + * Completely remove admin sdk + + * Change version back to 0.1.0 + +commit e12558899bc1a3b8757b157e640b0f296d7a8467 +Author: rsgowman +Date: Fri Jul 13 17:06:28 2018 -0400 + + Move fieldFilter (free function) to Filter.create() (#988) + + This is a refactoring to unify filter creation across platforms. + +commit ad69a2133eb6250d2cbea9860877a40d0a6b6fcc +Author: Michael Lehenbauer +Date: Thu Jul 12 15:46:43 2018 -0700 + + Expose array transforms and array contains queries. (#1004) + + Also remove test code that was combining multiple array contains queries since those were disallowed in 04c9c3a. + +commit a8e3b5ac800125c6e7478aa1c4b31be1a94f643e +Author: David East +Date: Thu Jul 12 16:09:48 2018 -0600 + + RxFire Realtime Database (#997) + + * initial database code + + * test setup + + * database tests + + * auditTrail and database tests + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Josh's comments. Database docs + + * [AUTOMATED]: Prettier Code Styling + + * Firestore docs + + * auth docs + + * declaration fixes + + * switch to peerDeps + + * [AUTOMATED]: Prettier Code Styling + + * test config + +commit d7cc609f1b6b61b3dd89fc88c318ec935d325bcc +Author: Carlos A. Cabrera +Date: Wed Jul 11 13:25:09 2018 -0500 + + Added missing type for optional database url. (#1001) + +commit 81cd260aeb729c5003952988b19d5b32788510d4 +Author: Ryan Brewster +Date: Tue Jul 10 10:35:15 2018 -0700 + + Embed metadata directly into the RPC call (#979) + + * Embed metadata directly into the RPC call + + * [AUTOMATED]: Prettier Code Styling + + * Use ...args + + * [AUTOMATED]: Prettier Code Styling + + * Minimize diff + + * Add the OAuth assertion back in + +commit 284a746b36157a9943387f7126c47aa6c11a654b +Author: Josh Crowther +Date: Mon Jul 9 11:41:04 2018 -0700 + + Add @davideast as a CODEOWNER (#996) + +commit 7cd0b5d3cd414a0777ed8e92ba31d2b1a3f612d0 +Author: Konstantin Varlamov +Date: Tue Jul 3 15:55:41 2018 -0400 + + Force refresh token if RPC fails with "Unauthenticated" error (#940) + + "Unauthenticated" is presumed to mean that token is expired (which might happen if local clock is wrong) and retried, subject to the usual backoff logic. + +commit 63e141488d9025eb5433b97132e6266a87f35310 +Author: Michael Lehenbauer +Date: Mon Jul 2 09:42:03 2018 -0700 + + Refactor pendingWrites / write pipeline. (#972) + + No functional changes. Just renames, moves, added comments, etc. + + * pendingWrites => writePipeline + * canWriteMutations() renamed canAddToWritePipeline() + * commit() => addToWritePipeline() + * lastBatchSeen removed since we can compute it on demand from + writePipeline. + * Removed cleanUpWriteStreamState() and instead inlined it in + disableNetworkInternal() since I didn't like the non-symmetry with + cleanUpWatchStreamState() which is called every time the stream closes. + * Lots of comment cleanup. + +commit 27d27789ad7cb6fc157f60488e151d7f83f710e8 +Author: bojeil-google +Date: Fri Jun 29 20:51:25 2018 -0700 + + Clears getRedirectResult() in AuthEventManager for a specified Auth instance when it is deleted. (#973) + + app.auth().getRedirectResult() => resolves with redirect result provided previous page called a redirect operation. + app.delete(); // deletes auth instance corresponding to app and clears redirect result. + // re-initialize app with same parameters. + app = firebase.initializeApp(config); + app.auth().getRedirectResult() should resolve with null. + + This is needed for firebaseui-web react wrapper which on component unmount will delete the firebaseui instance (which deletes the internal auth instance). When the component is mounted again, the previously temp auth instance was still caching the redirect result. + https://github.com/firebase/firebaseui-web/issues/440 + + Cleans up private property access in AuthEventManager tests. + +commit 7210db80b3e9ab9a5f20f3bcb56d1be3f98a3b8b +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Fri Jun 29 14:53:03 2018 -0700 + + fixed updateCurrentUser test failure on IE11/10 (#971) + +commit cd4b9afd4c93b404a6ce3785d24642d9cdfce8f5 +Author: Sebastian Schmidt +Date: Thu Jun 28 16:21:34 2018 -0700 + + Add spec test support for target-scoped resume tokens (#969) + +commit 3f353b8ca3548e03d185d532677f50db02dfdfdf (tag: firebase@5.2.0, tag: @firebase/functions@0.3.0, tag: @firebase/functions-types@0.2.0, tag: @firebase/firestore@0.5.6, tag: @firebase/database@0.3.4) +Author: Josh Crowther +Date: Thu Jun 28 14:14:55 2018 -0700 + + Publish firebase@5.2.0 + +commit 40205f3617abfb8b3e553a156d76ddca63d9a82b +Author: Josh Crowther +Date: Wed Jun 27 11:04:48 2018 -0700 + + Add some top level reviewers (#964) + +commit d134c39d4840195256c47174087da16ec02d08e0 +Merge: 189bcead9 fb759b481 +Author: David East +Date: Tue Jun 26 17:35:27 2018 -0600 + + Merge pull request #933 from firebase/rxfire-infra + + WIP: RxFire + +commit fb759b481b1b3882f07abc81ea82b4d0d9a2ce67 +Merge: 22d6f13a9 189bcead9 +Author: David East +Date: Tue Jun 26 16:56:41 2018 -0600 + + Merge branch 'master' into rxfire-infra + +commit 189bcead915258de79035fe0db61531811a03d7a +Author: Sebastian Schmidt +Date: Tue Jun 26 15:56:15 2018 -0700 + + Add onBlocked handler for schema upgrade (#963) + +commit 22d6f13a9615b10444878f309f14b153004cad79 +Author: David East +Date: Tue Jun 26 16:44:45 2018 -0600 + + package.json files + +commit dca768fa6b2b348f4b03bbc33a59540fb5770284 +Author: David East +Date: Tue Jun 26 16:34:50 2018 -0600 + + package.json files + +commit 5831f835d42f26348840852c287b273a6fe5bd0e +Author: David East +Date: Tue Jun 26 16:06:39 2018 -0600 + + package.json files + +commit 97ce638dc7edb484048318b4023e9bc5f8084c71 +Author: David East +Date: Tue Jun 26 15:29:06 2018 -0600 + + updated comments + +commit 07fb713e3f8d347f44a64af67f7379ba020b2dbf +Author: David East +Date: Tue Jun 26 15:18:40 2018 -0600 + + [AUTOMATED]: Prettier Code Styling + +commit ee8915df3288f83f15338e3752b3842b71a93082 +Author: David East +Date: Tue Jun 26 15:17:45 2018 -0600 + + forEach to for + +commit 8887b5125f883b2d569c2e301ae6cffe31d23f58 +Merge: 85c9da43a e87d98a35 +Author: David East +Date: Tue Jun 26 15:10:54 2018 -0600 + + Merge branch 'rxfire-infra' of https://github.com/firebase/firebase-js-sdk into rxfire-infra + +commit 85c9da43ad52d1239d89dfffd060777e2453be58 +Author: David East +Date: Tue Jun 26 15:09:05 2018 -0600 + + addressing Josh's comments. + +commit e87d98a35f90ed2fbcb289b9ddc4b8b2eba6a1cd +Merge: 065729c81 1bc1c4673 +Author: David East +Date: Tue Jun 26 14:36:27 2018 -0600 + + Merge branch 'master' into rxfire-infra + +commit 1bc1c4673277bd9e058058c66f6999de08327655 +Author: Bryan Klimt +Date: Mon Jun 25 19:34:57 2018 -0400 + + Add a method to allow using Functions with the local emulator. (#956) + + * Add a method to allow using Function with the local emulator. + * Add the function to the .d.ts. + +commit 7a41fe71fd3effd71b61548546e290015f58456b +Author: Bryan Klimt +Date: Mon Jun 25 17:41:49 2018 -0400 + + Add an optional parameter for region to Functions constructor. (#961) + + * Add region to functions constructors. + +commit ff35149142bedcb819d829f349870310194ade25 +Author: Fabio Crisci +Date: Mon Jun 25 18:56:51 2018 +0200 + + Remove startsWith because it's not supported in IE11 (#960) + +commit c2bd513b3232dd96b3f26af4dcfc697e56bf5076 (tag: firebase@5.1.0, tag: @firebase/messaging@0.3.5, tag: @firebase/firestore@0.5.5, tag: @firebase/auth@0.7.0, tag: @firebase/auth-types@0.3.4) +Author: Josh Crowther +Date: Thu Jun 21 11:26:59 2018 -0700 + + Publish firebase@5.1.0 + +commit 3c064a3a60fa4eb558012839cf9a77913996876a +Author: Christian Rackerseder +Date: Wed Jun 20 20:40:44 2018 +0200 + + Exporting firebase as namespace (#885) + +commit f21f3ca421f0de2dd8a1b168be4a23833698d2ae +Author: Thai Pangsakulyanont +Date: Thu Jun 21 01:39:25 2018 +0700 + + :memo: Add firebase-functions to README. (#924) + +commit 870fd29981fa813ac5563b6d77036a822fba4488 +Author: Mertcan Mermerkaya +Date: Wed Jun 20 15:35:08 2018 +0100 + + Add "browser version" to issue template (#925) + +commit f305430096c845e2820aba9079f9e6f96f2cac4f +Author: Greg Soltis +Date: Mon Jun 18 14:12:11 2018 -0700 + + Add support for 'no-lru' tag to spec tests (#935) + + * Add no-lru tag to spec tests + + * [AUTOMATED]: Prettier Code Styling + + * Review feedback + + * More accurate type + + * [AUTOMATED]: Prettier Code Styling + +commit 18ee278fd49a903944b3788267560044bf5b185b +Author: bojeil-google +Date: Mon Jun 18 13:07:25 2018 -0700 + + fix(auth): Fixes issue when hybrid indexedDB fallsback to localStorage (#937) + + because the write/read test fails because multiple windows or instances + try to write/read/delete from the same indexedDB entry. Instead of a + common key __sak, we use a random one minimizing the chances of + collision. + +commit 78b36cb3bb653c0c24615ed8a9691f1814190211 +Author: Mertcan Mermerkaya +Date: Mon Jun 18 19:14:55 2018 +0100 + + Add FcmOptions interface and link property (#942) + +commit 065729c818ec76330d93f5c618f888faf91a5a61 +Author: David East +Date: Fri Jun 15 13:50:57 2018 -0600 + + [AUTOMATED]: Prettier Code Styling + +commit 76a1124e4da6e44f63fed5f2a61a02ac511f300a +Author: David East +Date: Fri Jun 15 13:49:57 2018 -0600 + + josh comments + +commit 4cb0a992a15a22bf187712c60de9d6081395feb4 +Merge: ddc24aa48 3d1a53a70 +Author: David East +Date: Fri Jun 15 12:37:51 2018 -0600 + + Merge branch 'rxfire-infra' of https://github.com/firebase/firebase-js-sdk into rxfire-infra + +commit ddc24aa48ba20f8f3b053137f217d3df9d0856e6 +Author: David East +Date: Fri Jun 15 12:37:48 2018 -0600 + + firestore build + +commit 3d1a53a706e760aa131f72c641a6b9f4bd4d93c2 +Merge: 4503a55a8 c808a571a +Author: Josh Crowther +Date: Fri Jun 15 11:21:40 2018 -0700 + + Merge branch 'master' into rxfire-infra + +commit 4503a55a826e2e1d9e9c537952bd6470bfa3d89e +Author: David East +Date: Fri Jun 15 12:08:45 2018 -0600 + + [AUTOMATED]: Prettier Code Styling + +commit f4ea936b7896a9160c5d26ff7bf8fa1b9fdfeda8 +Author: David East +Date: Fri Jun 15 12:07:43 2018 -0600 + + comments + +commit cec2d572e26c86e0c38c4fb37337497499e113fa +Author: David East +Date: Wed Jun 13 12:00:09 2018 -0600 + + [AUTOMATED]: Prettier Code Styling + +commit da2cfb70defc84d20210d5e789d4cbde5442c20a +Author: David East +Date: Wed Jun 13 11:59:12 2018 -0600 + + fix double emission in docChanges() + +commit 9d9769c5abe9e77dd3cc3dddd393f58befe1692f +Author: David East +Date: Wed Jun 13 10:37:15 2018 -0600 + + fixed declaration problem + +commit c808a571ad8be2639a65fc4b2fb84dd57c1b61b5 +Author: rsgowman +Date: Wed Jun 13 11:40:09 2018 -0400 + + Refine onSnapshot tests to ensure correct number of events emitted (#903) + + * Refine onSnapshot tests to ensure correct number of events emitted + + Behaviour was already correct. This PR is effectively just porting the + existing iOS tests to typescript. + +commit a7a49f64f301008e946a4b082855a9dca9315ff0 +Author: David East +Date: Tue Jun 12 15:16:01 2018 -0600 + + [AUTOMATED]: License Headers + +commit 28c3a1135ed7b9c45fbcc8a9325652737d975fa2 +Author: David East +Date: Tue Jun 12 15:16:00 2018 -0600 + + [AUTOMATED]: Prettier Code Styling + +commit c2ffbdef0c26c64ec1c896d529151b5b467fd783 +Author: Josh Crowther +Date: Tue Jun 12 11:06:38 2018 -0700 + + Removing tsconfig.json from prod build (#915) + + * Remove the .npmignore and provide a pkg.files + + * [AUTOMATED]: Prettier Code Styling + +commit 3cdc3d7331333ac5aa996c9507c8f881040139f9 +Author: David East +Date: Mon Jun 11 20:35:22 2018 -0600 + + Firestore tests + +commit 4ca7bdf65069cefe096dfe012e796052b2429cce +Author: Josh Crowther +Date: Mon Jun 11 10:22:52 2018 -0700 + + Update yarn.lock + +commit f2a447291107a9deadca4d945043ea2f25f457bc +Author: Natan Sągol +Date: Mon Jun 11 09:15:42 2018 +0200 + + Added ES module bundle to the auth package (#819) + + * Added ES module build to the auth package. + + * [auth] Improved build efficiency by reusing Clousure Compiler output. + + * [auth] Improved a test script to accomodate hoisting. + + * [AUTOMATED]: Prettier Code Styling + + * Removed build step from a test script in the auth package. + + * Fixed an issue with getting a PID of a local server in auth tests. + + Issue was caused by getting a PID of a command creation, rather than the + command itself. + + * Changed a local method name in a gulp taks of an auth package. + + The new name should better reflect the purpose of a function. + + * Improved a documentation, spacing and prevented duplicate calls in auth + test script. + + * Formatted constants in auth package's gulpfile to fit in 80 columns. + + * Added a comment to explain the purpose of a wrap method used in auth + package's gulpfile. + + * Reformatted a gulpfile in the auth package according to reviewer's + comments. + + * Added spaces to multiline assignments to align with a style guide in the + auth package's gulpfile. + +commit 953483100621007ee40d3fbed4226600ee9c4129 +Author: Sebastian Schmidt +Date: Tue Jun 5 12:24:42 2018 -0700 + + Initializing WatchStreamAggregator before starting stream (#905) + + The WatchStreamAggregator has to be started before the stream, as at least on iOS we can receive message during stream start. + +commit 5e82b606c8e9f7e4e27ca321529b4fb36791dab6 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Jun 4 09:46:26 2018 -0700 + + Auth type update (#870) + + * updated type declaration for auth + + * [AUTOMATED]: Prettier Code Styling + + * updated verifyPhoneNumber return type + +commit 4673f7dbd8bdf8777ddd7d49f2e2e0d46300642e +Author: Michael Lehenbauer +Date: Mon Jun 4 07:43:44 2018 -0700 + + Test for b/72533250: Limbo documents resolve as deleted if snapshot received before CURRENT (#892) + + This is a test that demonstrates b/72533250 if you uncomment the line after the TODO. + + I'm punting on the actual bugfix at the moment because I think the best fix is a semi-large refactor. + +commit 4a85602be0ae5418530f3f9c1f9c86d71939aafd +Author: Josh Crowther +Date: Fri Jun 1 18:01:52 2018 -0700 + + Adding @hiranya911 to root owners (#895) + +commit 23c576ee54700ecdfb0e474c3e0116e1ab2fb6ac +Merge: 0f1425a9b 606171fa1 +Author: Yifan Yang +Date: Fri Jun 1 15:47:50 2018 -0700 + + Merge pull request #894 from firebase/yifany-browser-version + + Update Chrome and Safari version in cross-browser test. + +commit 606171fa1f746ed2e4081526df4c0c801185a53e +Author: Yifan Yang +Date: Fri Jun 1 14:08:41 2018 -0700 + + Allow failures from SauceLabs tests. + +commit 29296015af2aa72c1121ab22f3b7bfaf34136c93 +Author: Yifan Yang +Date: Fri Jun 1 13:13:37 2018 -0700 + + Update Chrome and Safari version in cross-browser test. + +commit 5661262d102006527df7b92a4ce6048150b0c905 +Author: David East +Date: Fri Jun 1 14:21:55 2018 -0600 + + firestore + +commit 1676c7b6b61d29dcc4043849e1b43a61fff37d5f +Author: David East +Date: Fri Jun 1 13:40:22 2018 -0600 + + functions observable + +commit af4a60169423162081488ccbe074ab87a550bba9 +Author: David East +Date: Fri Jun 1 13:08:19 2018 -0600 + + testing config. storage observables. + +commit 0f1425a9b0487bac917d263342f27730564236fb +Author: Mertcan Mermerkaya +Date: Fri Jun 1 16:06:40 2018 +0100 + + Remove Alec from Messaging owners (#893) + +commit 236d4d00112f00b278fe888229af4073c9af5387 +Author: Sebastian Schmidt +Date: Thu May 31 16:54:53 2018 -0700 + + Cleaning up test (#891) + +commit 233161d9ab0eb73591a3c287662337036d6488fe +Author: Mertcan Mermerkaya +Date: Thu May 31 16:06:13 2018 +0100 + + Check if cookies are enabled (#886) + + Messaging needs cookies to be enabled. + +commit 3e806caa65f45a893e46a55e4553b3b1debb24b4 +Author: Sebastian Schmidt +Date: Wed May 30 13:59:07 2018 -0700 + + Allow field deletes for SetOptions.mergeFields (#877) + +commit 2f7375a2c338112a4bef95f5b47872a3e5ffc19c +Author: Sebastian Schmidt +Date: Wed May 30 10:01:07 2018 -0700 + + Using LimboResolution for Limbo Resolution (#878) + +commit 96a10922ffdf3f986b1183070a2ccf15bed331fa +Author: Sebastian Schmidt +Date: Fri May 25 15:23:01 2018 -0700 + + Refactor RemoteEvent (#784) + +commit a08cfe6af7708f61a0f26924bf03ec8a0c446eaa +Author: Sebastian Schmidt +Date: Fri May 25 13:21:27 2018 -0700 + + Moving getStore() to SimpleDb (#869) + +commit cc5f15ee59238193dbf97f918302c69f218188b7 +Author: David East +Date: Fri May 25 13:42:13 2018 -0600 + + operators as external + +commit 1756126216ebde828a3e2f531c8852b1d427712f (tag: firebase@5.0.4, tag: @firebase/storage@0.2.3, tag: @firebase/storage-types@0.2.3, tag: @firebase/polyfill@0.3.3, tag: @firebase/messaging@0.3.4, tag: @firebase/messaging-types@0.2.3, tag: @firebase/functions@0.2.4, tag: @firebase/functions-types@0.1.3, tag: @firebase/firestore@0.5.4, tag: @firebase/firestore-types@0.4.3, tag: @firebase/database@0.3.3, tag: @firebase/database-types@0.3.2, tag: @firebase/auth@0.5.3, tag: @firebase/auth-types@0.3.3, tag: @firebase/app@0.3.3, tag: @firebase/app-types@0.3.2) +Author: Josh Crowther +Date: Thu May 24 15:55:03 2018 -0700 + + Publish firebase@5.0.4 + +commit b10c057a9c2e5b68233a970de86acde8b81a0525 +Author: Michael Lehenbauer +Date: Thu May 24 10:33:49 2018 -0700 + + Improves "Could not reach Firestore backend." log message. (#864) + + Improved message: + + Could not reach Cloud Firestore backend. Connection failed 2 times. Most recent error: FirebaseError: [code=unavailable]: 14 UNAVAILABLE: Connect Failed + This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend. + + Or: + + Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. + This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend. + +commit 300a1a699914017cb4dfc6ae79fec639283b0816 +Author: David East +Date: Wed May 23 15:13:57 2018 -0600 + + rxfire initial setup + +commit 4d16f51dd97b0a3faed41697660933ca03263b7c +Author: Mertcan Mermerkaya +Date: Wed May 23 18:22:55 2018 +0100 + + Use isArrayBufferEqual to compare VAPID keys (#862) + + * Use isArrayBufferEqual to compare VAPID keys + + Fixes #860. + + * Create a new VAPID key object instead of using the imported object in tests. + + This should be close enough to storing and retrieving it from IndexedDB and should prevent === comparison from working. + +commit 916c6927e39a4460c05ccffaa9d8423a244be639 +Author: Sebastian Schmidt +Date: Tue May 22 16:32:37 2018 -0700 + + Reworking PersistencePromise.waitFor to not use chaining (#851) + + * [AUTOMATED]: Prettier Code Styling + + * Reworking PersistencePromise.waitFor to not use chaining + + * it.only -> it.skip + +commit 47625d7d321413a3fd23d93c04aea27141aac901 +Author: Yifan Yang +Date: Tue May 22 14:48:23 2018 -0700 + + Saucelabs (#795) + + * Enable WebSocket transport and disable karma retry. + + * Reduce karma log verbosity. + + * Enable database and firestore saucelabs test. + + * fix + + * Enable database and firestore tests on multi-browsers including IE11. + + * Make test of database and firestore non-blocking due to their flakiness. + +commit b658d8cd3d572593ccadd2167ed6c2ee515bd20a +Author: Moritz Gunz +Date: Tue May 22 22:26:31 2018 +0200 + + Add missing tslib dependency (#856) + +commit 26222866e9e2c69bdadc1e2a4d7b5197805c4813 +Author: Sebastian Schmidt +Date: Tue May 22 11:29:59 2018 -0700 + + Adding ability to run prettier for Firestore (#854) + +commit e1fef76e025069bf87a1e635588dfe70a693d0e0 +Author: Josh Crowther +Date: Mon May 21 15:27:25 2018 -0700 + + Update the @firebase/* Package README.md Files (#853) + + * Updating all the @firebase/* package readmes + + * Consistency with other components + + * Addressing Nits + + * Nit: Josh sucks at english + +commit 9556469908b1101eae0fb294314f6106a1a2280d +Author: Sebastian Schmidt +Date: Mon May 21 13:29:35 2018 -0700 + + Explain when to use @firebase/firestore (#847) + +commit d068bc5d588cdf2de60ffcc1a36a5fd62064d2ad +Author: Sebastian Schmidt +Date: Mon May 21 11:53:32 2018 -0700 + + Adding Firestore to README/Cleaning up Externs (#844) + +commit e9caf3385dd91a96a1d860566066f90859f32b8f +Author: Sebastian Schmidt +Date: Mon May 21 10:35:18 2018 -0700 + + Propagating RTDB type changes (#845) + +commit f6fd8f52be282cc8e5f2e7a21948262eaffb343c +Author: Sebastian Schmidt +Date: Fri May 18 14:41:26 2018 -0700 + + Falling back on ABORTED_ERROR (#846) + +commit 3fa62ef9fe7176c8657b4d0f944afb17556b99c4 +Author: Justin Sprigg +Date: Sat May 19 03:59:29 2018 +1000 + + Update rtdb types (#840) + +commit 87b274b6f1c38bb4f10979496f4e44ea81186e91 +Author: Micah J Waldstein +Date: Fri May 18 12:52:54 2018 -0400 + + Add a link to the release notes in README.md (#842) + + Every time there is a new release, I need to go searching for this - not sure that everyone is aware of where these are placed online, seems to make sense to have a link included here. + +commit c3b33b20f2db8f9ffb25a179c0ce803b1e769f35 (tag: firebase@5.0.3, tag: @firebase/util@0.2.1, tag: @firebase/polyfill@0.3.2, tag: @firebase/messaging@0.3.3, tag: @firebase/functions@0.2.3, tag: @firebase/firestore@0.5.3, tag: @firebase/firestore-types@0.4.2, tag: @firebase/database@0.3.2, tag: @firebase/app@0.3.2) +Author: Josh Crowther +Date: Thu May 17 14:10:34 2018 -0700 + + Publish firebase@5.0.3 + +commit c660c35f039dc275cb5a275ddb1db7227d38fd84 +Author: Josh Crowther +Date: Thu May 17 11:27:05 2018 -0700 + + Add pkg.browser to firebase/app (#836) + +commit 04c9c3aed2428a349f87470c55a904bb5aa57042 +Author: Michael Lehenbauer +Date: Wed May 16 16:45:02 2018 -0700 + + b/79432277: Limit Queries to only a single array-contains clause. (#835) + +commit 2e5aa285cd34cb50c6c2c0b613d366375ab0ac33 +Author: Yifan Yang +Date: Wed May 16 15:40:11 2018 -0700 + + Enable IE11 testing on SauceLabs. (#821) + + * Enable IE11 testing on SauceLabs. + + * Use babel preset env instead of plugins. + +commit 5b59d75174b210725d20a80390028ca7c6c5eb87 +Author: Mertcan Mermerkaya +Date: Wed May 16 22:59:09 2018 +0100 + + Update import statements in documentation (#832) + + Prevents issues like #820. + +commit 7e7d36e516c53c9ec6c529ebf190598d7bb298b9 +Author: Sebastian Schmidt +Date: Wed May 16 14:17:35 2018 -0700 + + [AUTOMATED]: Prettier Code Styling (#833) + +commit a56cbafd564a1e9cad5be366fa58643118745c92 +Author: Jeff Sisson +Date: Wed May 16 12:48:55 2018 -0400 + + Allow storing Object.create(null) in Firestore (#827) + + Fixes #811 + +commit fbd5bd6324180158eef888cb2a8919c88023085e +Author: Michael Lehenbauer +Date: Tue May 15 17:05:00 2018 -0700 + + Mikelehen/doc changes for each (#825) + + Add 'forEach' (and 'map' for good measure) to Array methods we intercept on QuerySnapshot.docChanges. + +commit 1c5258c6881d77eb8b38eabfe86b6cc2a8f9d84e +Author: Sebastian Schmidt +Date: Tue May 15 16:06:45 2018 -0700 + + Treating onabort as an error (#823) + +commit 611949dba13010b5c070021364d41ccaba4f4386 +Author: Mertcan Mermerkaya +Date: Tue May 15 20:06:13 2018 +0100 + + Rename ControllerInterface, which is a class, to BaseController (#817) + +commit dd11cd17aada45a19732d6517a7d740e722546d2 +Author: Sebastian Schmidt +Date: Tue May 15 10:59:01 2018 -0700 + + Remove part of the mergeField comment (#822) + +commit 6a95a7ada63d4eab8d71a12ff7ead0871ab5b458 +Author: Mertcan Mermerkaya +Date: Tue May 15 18:23:50 2018 +0100 + + Fix messaging being optional and isSupported type definitions (#793) + + Fixes firebase.messaging() method being optional in TS types. + + Modifies isSupported so it is a namespace export and not a property on the factory function, which is not actually exported. + +commit 4ff990a9f0a0d804a63bcd49f22e2cd86a216721 +Author: Sebastian Schmidt +Date: Fri May 11 23:50:06 2018 -0700 + + Add listen spec tests (#812) + +commit c150044665bc5fa7b52553b5d7cf9e7a1c863865 +Author: Mertcan Mermerkaya +Date: Fri May 11 19:04:44 2018 +0100 + + Update grpc to 1.11.3 (#785) + + * Update grpc to 1.11.3 + + * [AUTOMATED]: Prettier Code Styling + +commit c1b4f40257c2a3f04c843bf3995927640af9ab1a +Author: pinarx +Date: Fri May 11 18:01:27 2018 +0100 + + Update messaging CODEOWNERS (#810) + +commit f99e42c00503265905aa67baabb03079d20a81c5 (tag: firebase@5.0.2, tag: @firebase/storage@0.2.2, tag: @firebase/storage-types@0.2.2, tag: @firebase/messaging@0.3.2, tag: @firebase/messaging-types@0.2.2, tag: @firebase/functions@0.2.2, tag: @firebase/functions-types@0.1.2, tag: @firebase/firestore@0.5.2, tag: @firebase/firestore-types@0.4.1, tag: @firebase/database@0.3.1, tag: @firebase/database-types@0.3.1, tag: @firebase/auth@0.5.2, tag: @firebase/auth-types@0.3.2, tag: @firebase/app@0.3.1, tag: @firebase/app-types@0.3.1) +Author: Josh Crowther +Date: Thu May 10 13:32:37 2018 -0700 + + Publish firebase@5.0.2 + +commit bd01dfe010bb0a07870a707c4fa697dbf8241336 +Author: Josh Crowther +Date: Thu May 10 13:18:38 2018 -0700 + + Disable the publish renderer for canary builds + +commit 97a3727ed3009d4ac0815cf13e1713f0986092b8 +Author: Josh Crowther +Date: Thu May 10 13:38:49 2018 -0600 + + Multiple Issue Fixes (#805) + + * Revert "SubImport Typings Fix (#796)" + + This reverts commit 3110d6b5e2976e11ac6de73a494faf7cd572ab4b. + + * Fixes #799 + + * Fixes #791, #800 + + * [AUTOMATED]: Prettier Code Styling + + * Add submodule typings tests + +commit e04cfb159bbc484b0ea527498370af2f4ea479f7 +Author: Josh Crowther +Date: Thu May 10 12:20:22 2018 -0600 + + Refactor firebase node builds (#804) + +commit 44de46da687a384e6a458a40ef60e17e5edd193f +Author: Sebastian Schmidt +Date: Thu May 10 09:53:38 2018 -0700 + + Update Firestore Changelog (#803) + +commit dd6937176d543352373181fce24ab67065ac1b96 +Author: Mertcan Mermerkaya +Date: Thu May 10 17:12:55 2018 +0100 + + Fix variable and class names (#802) + + * Fix variable and class names + + Fixes abbreviations in variable and class names to match Google TypeScript style guide, which follows the Java style guide: https://google.github.io/styleguide/javaguide.html#s5.3-camel-case + + Also changes some variable names in tests. + + * [AUTOMATED]: Prettier Code Styling + +commit 3110d6b5e2976e11ac6de73a494faf7cd572ab4b +Author: Josh Crowther +Date: Wed May 9 14:13:55 2018 -0600 + + SubImport Typings Fix (#796) + + * WIP: Fix #791 + + * Updating .gitignore + +commit 9fd02293703c20a9c624f28ec6b54325f67e9ffa +Author: Mertcan Mermerkaya +Date: Wed May 9 18:48:41 2018 +0100 + + Refactoring Messaging (#730) + + * Some more async/await + + * Remove deprecated callback API + + * Make manifestCheck a function + +commit e91742db40332061e13cdb6245d38bebed346c71 +Author: Mertcan Mermerkaya +Date: Wed May 9 16:50:31 2018 +0100 + + Refresh token instead of breaking if VAPID key doesn't exist (#794) + +commit 8922c3aeaf74493e1aefc4edd54e85606442479e +Author: Mertcan Mermerkaya +Date: Tue May 8 20:48:40 2018 +0100 + + Add tests for *-types packages (#789) + +commit 9c953fa337f4e6e4cbcdf67e32888bea349be377 (tag: firebase@5.0.1, tag: @firebase/storage@0.2.1, tag: @firebase/storage-types@0.2.1, tag: @firebase/messaging@0.3.1, tag: @firebase/messaging-types@0.2.1, tag: @firebase/functions@0.2.1, tag: @firebase/firestore@0.5.1, tag: @firebase/auth@0.5.1, tag: @firebase/auth-types@0.3.1) +Author: Josh Crowther +Date: Tue May 8 12:08:28 2018 -0700 + + Publish firebase@5.0.1 + +commit b351749bc17816a8577f132cf4bf8025721c315a +Author: Mertcan Mermerkaya +Date: Tue May 8 19:52:43 2018 +0100 + + Update Observer and Messaging types to match internal types (#786) + + * Fix Observer and Messaging types + + * [AUTOMATED]: Prettier Code Styling + + * Add second generic with Error as default + +commit 785cc8b49f149068dbabb6f7482ac0763aeec85e +Author: paulstelzer +Date: Tue May 8 20:51:38 2018 +0200 + + Fix #787 (#788) + + Generic type 'Observer' requires 1 type argument(s). + +commit 6003c32e9d80b3c1a09600e8f2b999623febb748 (tag: firebase@5.0.0, tag: @firebase/util@0.2.0, tag: @firebase/storage@0.2.0, tag: @firebase/storage-types@0.2.0, tag: @firebase/messaging@0.3.0, tag: @firebase/messaging-types@0.2.0, tag: @firebase/functions@0.2.0, tag: @firebase/firestore@0.5.0, tag: @firebase/firestore-types@0.4.0, tag: @firebase/database@0.3.0, tag: @firebase/database-types@0.3.0, tag: @firebase/auth@0.5.0, tag: @firebase/auth-types@0.3.0, tag: @firebase/app@0.3.0, tag: @firebase/app-types@0.3.0) +Author: Josh Crowther +Date: Tue May 8 10:31:33 2018 -0700 + + Publish firebase@5.0.0 + +commit 21f83a630627e9e4a5e620571273875d3a7de4c3 +Author: Michael Lehenbauer +Date: Tue May 8 08:45:55 2018 -0700 + + Test cleanup: Create indexeddbshim SQLite files in a temporary directory now that https://github.com/axemclion/IndexedDBShim/issues/319 is fixed. (#781) + +commit 84686bab79215020464eb61e130883d5187de469 +Author: Mertcan Mermerkaya +Date: Tue May 8 14:29:18 2018 +0100 + + Combine Observer and PartialObserver types (#770) + + * Combine Observer and PartialObserver types + + Uses Partial from TS to create a PartialObserver from Observer. + + * Fix Observer types in messaging + + * Fix Observer types in app-types + + * [AUTOMATED]: Prettier Code Styling + +commit 3c40284d96f8d6f3d30a281178849cf5a5424727 +Author: Michael Lehenbauer +Date: Mon May 7 16:17:09 2018 -0700 + + Array Contains support (not publicly exposed yet). (#764) + + Port of https://github.com/firebase/firebase-ios-sdk/commit/e4384c3e809556e75907df74cd116307f397472f + +commit 403c12367bbfee93209f2de6e4b9d77f9601c4d7 +Author: Mertcan Mermerkaya +Date: Mon May 7 20:17:28 2018 +0100 + + Add types for messaging.isSupported() (#769) + + * Add types for messaging.isSupported() + + * Change messaging type in app + +commit de19a840a4e7a82c45093f1db3c90f495bbe02fa +Author: Ryan Brewster +Date: Mon May 7 11:31:23 2018 -0700 + + Allow passing in .rules or .rulesPath (#775) + + * Allow passing in .rules or .rulesPath + + * [AUTOMATED]: Prettier Code Styling + + * Remove duplicated test + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: Prettier Code Styling + +commit 238fabece4df0d09fbcd577115237a6366c516d9 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon May 7 11:04:26 2018 -0700 + + fixed wrong return type in auth-extern (#783) + +commit e441ffbb42bd24db8457ee89a1c8d6042f0d625e +Author: Michael Lehenbauer +Date: Mon May 7 10:35:19 2018 -0700 + + Add arrayUnion() and arrayRemove() Transforms (not publicly exposed yet) (#763) + +commit a413ec21163e68aa15d3d46eb21f8bdc4e8bea4f +Author: Mertcan Mermerkaya +Date: Sat May 5 00:33:01 2018 +0100 + + Enable Messaging tests on Sauce Labs (#773) + + * Enable messaging tests on multi-browsers. + + * optional: add karma-safari-launcher + + * Modify messaging tests to be enabled on Safari. + + * Fix issues + + * Skip maxAction test on browsers that do not support actions + +commit 7f4ae1f7e4a33bc1fde86bb64cbedd8166c0cbf5 +Author: Josh Crowther +Date: Thu May 3 14:48:51 2018 -0600 + + IE11 "Can't redefine non-configurable property 'length'" Error (#772) + + * Fix IE11 property override issue + + * [AUTOMATED]: Prettier Code Styling + +commit 77647467a4075fb082a3eb9601227ef0f520b7f5 +Author: Mertcan Mermerkaya +Date: Thu May 3 10:10:49 2018 +0100 + + Check browser support before instantiating controllers (#700) + + * Check browser support before instantiating controllers + + Prevents issues such as #658 by making sure we don't call any unsupported methods by accident. + + Also adds some tests for index.ts. + + * Skip tests on unsupported browsers + + * Ignore 'unsupported-browser' errors in namespace validation + + * Check browser support within SW + + * Implement isSupported static method + + * [AUTOMATED]: Prettier Code Styling + +commit dfd09bc2c053c43e77205c0cbf965714a3aebc6f +Author: Sebastian Schmidt +Date: Wed May 2 17:35:04 2018 -0700 + + Speed up spec tests with connection backoffs (#766) + +commit f096ba0eff279b2a44fcacf3bcd4b672ef8b0fe9 +Author: Michael Lehenbauer +Date: Wed May 2 14:55:34 2018 -0700 + + b/78539022: Fix test at risk of range violation errors depending on time-of-day. (#765) + + micros could underflow or overflow if the test was run at the wrong time... Replaced with hardcoded timestamps as I don't think making it time-dependent gains us interesting additional coverage. + +commit fa5d157751ae64524691150f6bb512b94d86b6f6 +Author: Greg Soltis +Date: Wed May 2 11:17:03 2018 -0700 + + Port limbo document identification (#744) + + * Port local store test changes + + * [AUTOMATED]: Prettier Code Styling + + * Assert target ids + + * Add first test for event changes + + * Implement update filtering + + * [AUTOMATED]: Prettier Code Styling + + * Now linted + + * Review feedback + + * [AUTOMATED]: Prettier Code Styling + + * Swap to use targetId rather than targetChange + + * [AUTOMATED]: Prettier Code Styling + + * Start work on limbo doc identification + + * Finish porting limbo document tracking + + * [AUTOMATED]: Prettier Code Styling + + * Docs changes + + * [AUTOMATED]: Prettier Code Styling + + * Add comment from iOS version + + * Reflow + + * [AUTOMATED]: Prettier Code Styling + + * Rewrite comment + +commit 4ffc979b8fb17e39af64343200d26991a781fe10 +Author: Michael Lehenbauer +Date: Wed May 2 10:44:08 2018 -0700 + + Disable httpHeadersOverwriteParam for ReactNative to address #703. (#717) + +commit 099688f9458048697fd84b9b3b696a50f2e3744b +Author: Michael Lehenbauer +Date: Wed May 2 08:59:56 2018 -0700 + + Fix up changelog. (#761) + + A bunch of the "Unreleased" changes have actually been released, so I broke them out + into the appropriate versions. Also added a changelog entry for the 0.4.1 patch release + to fix Node.JS support. + +commit de6750bc2f38428a84d17f415927c0c35a1cb9fb +Author: Mertcan Mermerkaya +Date: Wed May 2 16:40:04 2018 +0100 + + Fix Edge not setting default transaction mode (#762) + +commit 533e5762aa8e79c5e223d9b7d41f02e0d8ade7a8 +Author: Mertcan Mermerkaya +Date: Wed May 2 13:36:22 2018 +0100 + + Don't overwrite user defined data (#760) + + This operation was safe when we didn't allow users to define "data" on their notification. Not anymore. + +commit 2de84e586fbc2edce26b6d0bee8fc8541916a53f +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Tue May 1 17:15:42 2018 -0700 + + updated externs and type def (#758) + + * updated externs and type def + + * updated comments + +commit 53d15106091470b80c4a1d5de4dce9801488ee9b +Author: Sebastian Schmidt +Date: Tue May 1 13:45:26 2018 -0700 + + Adding mergeFields support to the Web SDK (#701) + +commit 0997040b6a231e54cbc2d6f8c293a78e83451220 +Author: Josh Crowther +Date: Tue May 1 12:37:13 2018 -0600 + + 5.0.0 Breaking Changes (#741) + + All breaking changes for the 5.0.0 release. + +commit 7edf6499f038a2f6340d937fcf37b6c0dd1c4ad7 +Author: Shyam Chen +Date: Wed May 2 00:37:19 2018 +0800 + + docs(firebase): gcloud -> google-cloud (#718) + +commit 66980bde61c436e826cff124818538ccd052121f +Author: Marco Pöhler +Date: Tue May 1 18:36:10 2018 +0200 + + Added TypeScript definitions for firebase.functions() (#724) + + * added typing for functions + + * [AUTOMATED]: Prettier Code Styling + + * renamed firebase.functions.FirebaseFunctions to firebase.functions.Functions, moved Firestore/FunctionsErrorCodes to ErrorStatus in their namespaces. + + * returned back to FirestoreErrorCode as ErrorStatus in the firestore namespace for now. + +commit 9751e46a6db466fe86f634b5af1c612eec9537e0 +Author: Michael Lehenbauer +Date: Tue May 1 09:01:16 2018 -0700 + + Fix a couple test issues cropping up from mock_persistence work (#753) + + 1. We weren't actually calling db.INTERNAL.delete(), leading to lingering webchannel connections in tests. + 2. Fixed a missed reference to mock_persistence.ts. + +commit 5f3716d872d5247d92e5d124fd25ab860d498c71 +Author: Greg Soltis +Date: Mon Apr 30 16:25:18 2018 -0700 + + Port feedback on event filtering (#749) + + * Move filtering onto mapping subclasses + + * [AUTOMATED]: Prettier Code Styling + + * Fix comment + + * Clean the lint trap + +commit 8251c17aca64932486a58d7a226cd1bdbc903254 +Merge: b28c74f57 055c3b01d +Author: Sebastian Schmidt +Date: Mon Apr 30 14:04:20 2018 -0700 + + Merge pull request #746 from firebase/mrschmidt-mockrename + + Renaming mock_persistence to node_persistence + +commit 055c3b01da549d235ad8a7e4019586daa0cf11ff +Author: Sebastian Schmidt +Date: Mon Apr 30 13:37:49 2018 -0700 + + Renaming mock_persistence to node_persistence + +commit b28c74f579354ba951a21ae0289767d82c7c6237 +Author: Greg Soltis +Date: Mon Apr 30 11:57:32 2018 -0700 + + Port https://github.com/firebase/firebase-ios-sdk/pull/1122 (#727) + + * Port local store test changes + + * [AUTOMATED]: Prettier Code Styling + + * Assert target ids + + * Add first test for event changes + + * Implement update filtering + + * [AUTOMATED]: Prettier Code Styling + + * Now linted + + * Review feedback + + * [AUTOMATED]: Prettier Code Styling + + * Swap to use targetId rather than targetChange + + * [AUTOMATED]: Prettier Code Styling + +commit 8d1f1bf8276d3ff88b21ea08279f5404079a8770 +Author: Mertcan Mermerkaya +Date: Mon Apr 30 17:39:18 2018 +0100 + + Add a warning for notifications with too many actions (#731) + +commit 5adab2cf12a6e3825aa0d6810897bc92004347e4 +Author: Michael Lehenbauer +Date: Fri Apr 27 16:52:08 2018 -0700 + + Add VS Code launcher for persistence tests and minor cleanup. (#735) + + * Add SQLite files to .gitignore so they don't pollute 'git status' or + accidentally get committed. + * Use node-cleanup instead of process.on('exit') since it catches ctrl-C. + Unfortunately it can't catch a pure SIGKILL. + +commit f49eaec07c80b2d8cdced3f71a3c1e11db786f50 +Merge: 4b4eebc26 ce5157aa7 +Author: Sebastian Schmidt +Date: Fri Apr 27 12:15:35 2018 -0700 + + Using an IndexedDB mock for Node testing + + Using an IndexedDB mock for Node testing + +commit ce5157aa7de92ba066464e18029922257399a714 +Author: Sebastian Schmidt +Date: Fri Apr 27 11:49:53 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit c28dc97c2db3089ebad51ebc33827191c881c18a +Author: Sebastian Schmidt +Date: Fri Apr 27 11:49:26 2018 -0700 + + Review comments + +commit 8a6f571daa96a0da7da6a423924cebf60d58b812 +Author: Sebastian Schmidt +Date: Fri Apr 27 10:58:44 2018 -0700 + + Fixing lint + +commit dfdce5bb8c75895d1df0bdbaaf3ce15a1b385d9e +Author: Sebastian Schmidt +Date: Fri Apr 27 10:36:57 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 630e0a64e6ae8b0ec5ffcda5c4b4f934496d535f +Author: Sebastian Schmidt +Date: Fri Apr 27 10:36:29 2018 -0700 + + Review comments + +commit a168703eeb9c527bc57c761375fc7adcafb0577a +Author: Sebastian Schmidt +Date: Thu Apr 26 13:33:42 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 7d87122ac1a47231d07b9f1070d909c8e6d8e9c4 +Author: Sebastian Schmidt +Date: Thu Apr 26 12:36:25 2018 -0700 + + Debugging like it's 1999 + +commit 4b4eebc269b22320e744a391ecd1a69ac38f3827 +Author: Michael Lehenbauer +Date: Wed Apr 25 17:33:00 2018 -0700 + + Use correct assert() method so we get good error messages. (#728) + + BEFORE: + AssertionError: expected null to roughly deeply equal undefined + + AFTER: + AssertionError: expected { Object (elements) } to roughly deeply equal { Object (elements) } + + expected - actual + { + "elements": [ + { + - "internalValue": "foo" + + "internalValue": "tag" + "typeOrder": 4 + } + ] + } + +commit b60ffffdbd020bf47a0be22faac4a7731ce37c73 +Author: Greg Soltis +Date: Wed Apr 25 13:45:55 2018 -0700 + + Port of https://github.com/firebase/firebase-ios-sdk/pull/1114 (#722) + + * Port local store test changes + + * [AUTOMATED]: Prettier Code Styling + + * Assert target ids + +commit 0e141c07bf38b20a1a67abf507ca35772ff66890 +Author: Michael Lehenbauer +Date: Wed Apr 25 11:54:06 2018 -0700 + + Ban xit and xdescribe (and suppress existing violations). (#725) + +commit 2471497b87c8fd65af37443498a422f2274b55fe +Author: Matt Gaunt +Date: Wed Apr 25 04:48:31 2018 -0700 + + Update base64-to-array-buffer.ts (#721) + + Use global atob instead of window so it works in SW. + +commit 9d41b963d9e4a6cf54be20adb92dc8a4c8487c9c +Author: Mertcan Mermerkaya +Date: Wed Apr 25 12:48:01 2018 +0100 + + Do nothing for action clicks (#702) + + * Do nothing for action clicks + + * [AUTOMATED]: Prettier Code Styling + + * Address comment + +commit bfa8a5e453fd7925d5ffd1bf739731a8109b454f +Author: Michael Lehenbauer +Date: Fri Apr 20 17:38:25 2018 -0700 + + Update Firestore protos (#713) + +commit 878d392f212fef10b04c00d0f697f625c8271712 (tag: firebase@4.13.1, tag: @firebase/firestore@0.4.1) +Author: Josh Crowther +Date: Fri Apr 20 12:40:03 2018 -0700 + + Publish firebase@4.13.1 + +commit fd996899096a057c7765281db98a5bc48410ac56 +Author: Josh Crowther +Date: Fri Apr 20 11:59:21 2018 -0700 + + Firestore Proto Loading Fix (#712) + + * Fix firestore proto issue + + * [AUTOMATED]: Prettier Code Styling + + * Re-enable browser builds for firestore + + * Fix typings reference + + * Fixing linter error + +commit 7c1aa4470c0f5474b11fe57ada4edff65ed90adc (tag: firebase@4.13.0, tag: @firebase/webchannel-wrapper@0.2.8, tag: @firebase/util@0.1.11, tag: @firebase/storage@0.1.9, tag: @firebase/storage-types@0.1.3, tag: @firebase/polyfill@0.3.1, tag: @firebase/messaging@0.2.4, tag: @firebase/messaging-types@0.1.3, tag: @firebase/logger@0.1.1, tag: @firebase/functions@0.1.1, tag: @firebase/functions-types@0.1.1, tag: @firebase/firestore@0.4.0, tag: @firebase/firestore-types@0.3.0, tag: @firebase/database@0.2.2, tag: @firebase/database-types@0.2.1, tag: @firebase/auth@0.4.2, tag: @firebase/auth-types@0.2.1, tag: @firebase/app@0.2.0, tag: @firebase/app-types@0.2.0) +Author: Josh Crowther +Date: Thu Apr 19 14:46:45 2018 -0700 + + Publish firebase@4.13.0 + +commit 6991857c6742d99ca0a64f60a306380de85ea19b +Author: Mertcan Mermerkaya +Date: Thu Apr 19 22:32:35 2018 +0100 + + Update grpc to version 1.10.1 (#694) + + * Update grpc in firestore + + Fixes #515 + + * Fix tests + + Not sure how, but updating grpc made the test start using long@4.0.0, which has some extra properties (https://github.com/dcodeIO/long.js/commit/bc96a70758cf1e431af6956e56d70dd181943162) that broke the deep equals check. + + In any case, all dependencies that are referenced should be added to package.json explicitly. I added the relevant tslint rules and also added other missing deps. + + * Revert TSLint changes + +commit fcb277a832058407a33456b2887a6b9990708b28 +Author: Mertcan Mermerkaya +Date: Wed Apr 18 11:25:36 2018 +0100 + + Lint rules, refactoring and better types (#684) + + * Enable TSLint rule "no-any" in src/ + + * Enable noImplicitAny + + * Use the same ErrorFactory object in all of messaging + + * Enable TSLint variable-name rule + + * Move all testing utils to testing-utils/ + + * Async/await fixes + + * Enable TSLint no-redundant-jsdoc rule + + * Use any instead of ts-ignore + + * Remove any types from messaging-types + + * Add better types for Message Payload + + * Remove another any + +commit ffcaf85117ca0ac4a082cbcb19dbf91730c3cc12 +Author: Josh Crowther +Date: Tue Apr 17 14:00:00 2018 -0700 + + Add pkg.files entry to each package.json (#695) + + * Add pkg.files entry to each package.json + + * Removing trailing slash + +commit 456059954bac0f3d1a8fa0546bc302c0e573af77 +Author: Josh Crowther +Date: Fri Apr 13 16:46:40 2018 -0700 + + Firestore Node.js External Fix (#686) + + * Reference the external Node 'util' lib + + * [AUTOMATED]: Prettier Code Styling + +commit 92aea91ddabb2af6b8f2095cb965e5fad30d511c +Author: Yifan Yang +Date: Fri Apr 13 16:26:54 2018 -0700 + + Skip deployment if it is not master build in main repo. (#685) + +commit eaec0b8060db6dbaef8e0fd96293af4049897d50 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Fri Apr 13 13:57:43 2018 -0700 + + expose custom claims (#681) + + * expose custom claims + + * idtoken type declaration + + * idtoken type declaration + + * [AUTOMATED]: Prettier Code Styling + + * style issue fix + + * [AUTOMATED]: Prettier Code Styling + + * add namesapce + + * [AUTOMATED]: Prettier Code Styling + +commit 05e05b81dc84cf89a62af6da3b19ca2480c0006a +Author: Yifan Yang +Date: Thu Apr 12 19:24:39 2018 -0700 + + Fix deployment procedures. (#682) + + Install stage was mistakenly set to be skipped by PR #674. + +commit c0643926c1cfea44df248e0c909f2f18422ae268 +Author: Josh Crowther +Date: Thu Apr 12 15:35:54 2018 -0700 + + Saucelabs Badges/Attribution (#680) + + * Add saucelabs badge and associated shoutout + + * Update Link + +commit cadf5883b38e56ef44fdbb334fad6d56160881e3 +Author: Yifan Yang +Date: Thu Apr 12 15:35:42 2018 -0700 + + Expand browsers support (#674) + + * Add karma config for running all tests with SauceLabs. + + IE11 is not supported due to the compatibility issue. It will be + enabled once the issue is resolved. + + Currently these tests are excluded for saucelabs testing: + + 'packages/database/*', + 'packages/firestore/*', + 'packages/messaging/*', + 'integration/firestore/*', + 'integration/messaging/*'. + + Database and firestore tests appear to be flaky on saucelabs and + tend to take much longer time than running in local browsers. Message + tests use service worker functionality which is not supported by Safari + and Edge currently. They will be included later on when these problems + are resolved. + + * Group Travis jobs for different test commands into one test stage. + + Deployment starts only after all jobs in test stage have succeeded. + + * Add karma Firefox launcher to each applicable package. + + In case of a pull request build on Travis where saucelabs testing + is not available, tests will run locally in Chrome and Firefox on + Travis VMs instead. + + https://docs.travis-ci.com/user/pull-requests/#Pull-Requests-and-Security-Restrictions + + * fix nit + +commit 231110c34d590f41269fa6c8068680904648733f +Author: Michael Lehenbauer +Date: Thu Apr 12 15:17:25 2018 -0700 + + Minor additional UserDataConverter cleanup. (#677) + + * Rearrange methods based on usage order. + * Minor cleanup tweaks. + +commit 8b29658a074bd48225efe81731e151251b0ed659 +Author: rsgowman +Date: Thu Apr 12 17:46:21 2018 -0400 + + GetOptions for controlling offline behaviour (#463) + + Add option to allow the user to control where DocumentReference.get() + and Query.get() fetches from. By default, it fetches from the server (if + possible) and falls back to the local cache. It's now possible to + alternatively fetch from the local cache only, or to fetch from the + server only (though in the server only case, latency compensation is + still enabled). + +commit 27a77fda0bf22c851208476606819c4789276642 +Author: Mertcan Mermerkaya +Date: Thu Apr 12 22:29:55 2018 +0100 + + Add types for Service Worker Controller (#673) + +commit aaee15d5c9d47ee8dd25504fc5e0aa8cea670f03 +Author: Mertcan Mermerkaya +Date: Thu Apr 12 21:46:35 2018 +0100 + + Upgrade dependencies (#676) + + * Run yarn upgrade + + * [AUTOMATED]: Prettier Code Styling + + * Remove unused dependencies, add mocha in messaging/ + + * Update @types/mocha + + * Remove version ranges from package.json files + + * Update most dependencies to their latest versions + + * Save exact dependency versions by default + + * Revert firestore grpc update + +commit 00659cadd3b0a118c53e541d4a69e897a7fce3e1 +Merge: 078f83a09 e1d458173 +Author: Sebastian Schmidt +Date: Wed Apr 11 11:37:47 2018 -0700 + + Enabling TSLint for our test cases + + Enabling TSLint for our test cases + +commit e1d4581733a13f3bd386e834fe91c636456e1a2c +Author: Sebastian Schmidt +Date: Wed Apr 11 11:12:36 2018 -0700 + + Comment + +commit 078f83a09631b3fe9d882db1eed4b80e7da41251 +Author: Mertcan Mermerkaya +Date: Wed Apr 11 19:04:26 2018 +0100 + + Enable noUnusedLocals in TS compiler options (#672) + + * Enable noUnusedLocals in TS compiler options + + * [AUTOMATED]: Prettier Code Styling + +commit 3327845b0f68c2c2a5aff69ab05efe8861e08a73 +Author: Mertcan Mermerkaya +Date: Wed Apr 11 17:39:37 2018 +0100 + + Use core-js for polyfills (#671) + + * Use core-js for polyfills + + * Remove DOM polyfill, it's not used + + * Only polyfill parts of ES2015 we currently use + +commit 7463443a867d3303b723a404d33a3fef9a7b29a2 +Author: Mertcan Mermerkaya +Date: Wed Apr 11 15:03:11 2018 +0100 + + Async/await refactor and test fixes (#660) + + * Add async/await to SWController and tests + + * Combine IID Model tests and remove duplicated code + + * Delete empty test + + * Replace Promise calls with async + + * [AUTOMATED]: Prettier Code Styling + +commit f1f5fe21b132a86486d8866da074d80a663087b8 +Author: Sebastian Schmidt +Date: Tue Apr 10 17:30:19 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit c595fe150026c254d0358862c8b34d8d81f4842f +Author: Sebastian Schmidt +Date: Tue Apr 10 17:29:52 2018 -0700 + + Addressing lint errors after master merge + +commit 682c7fc49db304369b03b1f17f5eaeac496487a7 +Author: Sebastian Schmidt +Date: Tue Apr 10 17:06:58 2018 -0700 + + Update package.json + +commit 544fefea3bc1e3705c1b02a32c4e5bcf60105a24 +Merge: 1fa9aa29b d0a614c86 +Author: Sebastian Schmidt +Date: Tue Apr 10 17:06:33 2018 -0700 + + Merge branch 'master' into mrschmidt-enforcinglint + +commit d0a614c86822facc9e9efef1974c2a4877ad6296 +Author: Josh Crowther +Date: Tue Apr 10 17:05:58 2018 -0700 + + Porting Polyfills Fix (missing in master) (#668) + + * Fix polyfills for fetch + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Removing legacy file + +commit ca57c4d3ea188beee2020b69c5ba64acdef4a676 +Author: Mertcan Mermerkaya +Date: Wed Apr 11 00:54:44 2018 +0100 + + Remove redundant lib declarations (#663) + + es2015 includes es5 and es2015.promise + + https://github.com/Microsoft/TypeScript/blob/master/lib/lib.es2015.d.ts + +commit 3fe3d2c4fb3fd1740ec3b7dc61e0c0732bee50a6 +Merge: b87933477 11a1d7b9c +Author: Sebastian Schmidt +Date: Tue Apr 10 16:52:29 2018 -0700 + + Merge pull request #665 from firebase/mrschmidt-noconsole + + TSLINT: Adding No-Console rule + +commit b8793347791053881d2c1cbeb35d99d84356643d +Merge: 14c2c4a33 0bca4827a +Author: Sebastian Schmidt +Date: Tue Apr 10 16:52:19 2018 -0700 + + Merge pull request #664 from firebase/mrschmidt-returntypes + + Enable TSLint Return Type Check + +commit 1fa9aa29b353c5ea8ac40cdd5ccdac9382ac3715 +Author: Sebastian Schmidt +Date: Tue Apr 10 16:52:07 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit e45b40f76e23d4cfcc1e45c4d1d17919aadb6945 +Author: Sebastian Schmidt +Date: Tue Apr 10 16:51:37 2018 -0700 + + Actually using TSLint for the test files + +commit 14c2c4a33b98691e6eef7c511a08b239471569b9 +Author: Josh Crowther +Date: Tue Apr 10 16:05:28 2018 -0700 + + Build Refactoring (#653) + + * Removing gulp dependency from the default build path + + * Updating .gitignore + + * @firebase/util Build Refactor + + * @firebase/testing Build Refactor + + * @firebase/template Build Refactor + + * @firebase/storage Build Refactor + + * @firebase/polyfill Build Refactor + + * @firebase/messaging Build Refactor + + * @firebase/logger Build Refactor + + * @firebase/functions Build Refactor + + * @firebase/database Build Refactor + + * @firebase/app Build Refactor + + * @firebase/firestore Build Refactor + + * @firebase/app version replace + + * Fix script rename in @firebase/util + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Remove unnecessary build artifacts + + * Removing unused test files from types-* packages + + * [AUTOMATED]: Prettier Code Styling + + * firebase Package Build Refactor + + * [AUTOMATED]: Prettier Code Styling + + * Refactor peerDependencies to properly reference the entire major 0 + + * Change NPM Publish Concurrency + + * Add sourcemaps + + * Refactor messaging named export + + * Add try-catch block for firebase-app error + + * Add package-lock.json to the .gitignore + + * Adding a package.json to remove duplicate .d.ts + +commit aeed607cd00f5887a1bb087a4d62d29f522240e5 +Author: Spencer Phippen +Date: Tue Apr 10 15:53:52 2018 -0700 + + Deprecate downloadURL property in Storage metadata types. (#651) + + * Deprecate downloadURL property in Storage metadata types. + + * Mark Storage downloadURL deprecation in additional TypeScript definition files. + +commit 11a1d7b9c1371654e643f9377c9dc7ee77bdd542 +Author: Sebastian Schmidt +Date: Tue Apr 10 15:37:23 2018 -0700 + + Adding No-Console rule + +commit eeab13f72d75fe1b89aa5667413ba6c49f20b66b +Author: Mertcan Mermerkaya +Date: Tue Apr 10 22:51:30 2018 +0100 + + Replace "any" types (#661) + +commit 0bca4827a822426a20eb4832ee5a49fe174d55bf +Author: Sebastian Schmidt +Date: Tue Apr 10 14:48:21 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit c0fc185b1b3dfd0e21d5de650dd8d957be4a66bb +Author: Sebastian Schmidt +Date: Tue Apr 10 14:47:52 2018 -0700 + + Adding return types everywhere + +commit 452a4be0de4a8f9f5c9163ffb0600d2c741787b7 +Author: Mertcan Mermerkaya +Date: Tue Apr 10 19:25:19 2018 +0100 + + Fix TokenDetails in messaging/ (#649) + + Makes sure that we use only one type of TokenDetails object, both in the code and in the database. + + Updates DB and adds a function to fix the old values. + + Fixes and adds tests. + +commit 49072850edad4eef07eb629b164062f75c01659e +Author: bojeil-google +Date: Tue Apr 10 08:51:55 2018 -0700 + + Update Auth codeowners (#657) + + Remove @tmsch from auth code owners + +commit fe0d69455a07c8b1c94464475b393e0c6d991760 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Apr 9 14:51:01 2018 -0700 + + Indexeddb fix (#655) + + * indexedDB fix for issues in Firefox multi-tab and private mode browsing. + + * fix for network error when navigator.onLine is incorrectly false. + +commit 1e3254d51239362613de7a26ce4d2dc00f41d57b +Merge: f95425ff4 7e56c8227 +Author: Sebastian Schmidt +Date: Mon Apr 9 12:20:14 2018 -0700 + + Merge pull request #650 from firebase/mrschmidt-promisefix + + Waiting for writes in acknowledgeBatch + +commit f95425ff4ae175282e4eb56a049c362332eb9b75 +Merge: 547538332 b466ab09c +Author: Sebastian Schmidt +Date: Mon Apr 9 11:38:52 2018 -0700 + + Merge pull request #652 from firebase/revert-613-mrschmidt-remvoepath + + Revert "Removing .path from Database Typings" + +commit 547538332facf4740efc255dfe4df09c6473e0dc +Author: pinarx +Date: Mon Apr 9 19:32:40 2018 +0100 + + Add @mmermerkaya to CODEOWNERS + +commit b466ab09cd382dce9f1415f88b2e5131b7cdb2b8 +Author: Sebastian Schmidt +Date: Mon Apr 9 11:07:20 2018 -0700 + + Revert "Removing .path from Database Typings" + +commit 7e56c822792a2d9095efd2224265334bb81a32cf +Author: Sebastian Schmidt +Date: Mon Apr 9 10:08:55 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 5d9e543c407a53d06b2b52da1ccfbd3c9685efad +Author: Sebastian Schmidt +Date: Mon Apr 9 10:08:25 2018 -0700 + + Waiting for writes in acknowledgeBatch + +commit fce6f7a73d3e9fe1ebb12d9f7ca1a5df42d60b26 +Merge: 6754b7fb8 5ad3285e9 +Author: Sebastian Schmidt +Date: Sun Apr 8 09:47:18 2018 -0700 + + Merge pull request #613 from firebase/mrschmidt-remvoepath + + Removing .path from Database Typings + +commit 6754b7fb8e6cf41bd420c6c93a6c2248c0a888de +Author: Mertcan Mermerkaya +Date: Sat Apr 7 11:40:34 2018 +0100 + + Re-enable --strict flag in messaging/ (#643) + + * Reenable --strict in messaging/ + + * Revert "Remove some assertions that are no longer needed as --strict is disabled" + + This reverts commit 6ea7e54640ea3c19942a1881a3f738d89b51dafe. + + * Fix strict issues in messaging/ + + * Fix type errors in app/ + + * Fix errors + + * Fix errors + +commit 5e71095ce13683ab78ae34153223f327a32ca88f +Author: Spencer Phippen +Date: Fri Apr 6 12:12:48 2018 -0700 + + Specify types of observer and next function for UploadTask.on (#642) + +commit 1f985cfe20469ad7423890fd3980f9e3bc86b2d1 +Author: Mertcan Mermerkaya +Date: Fri Apr 6 19:34:38 2018 +0100 + + Refactor IndexedDb operations (#645) + + * Refactor IndexedDb operations + + Simplifies a lot of IndexedDb operations and removes most of the duplicated code. Also refactors tests. + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Fix failing tests + + * Address comments + + * Address comments + +commit 9eace31bef7235bb0a5a796aa23a843616aed19d +Author: Mertcan Mermerkaya +Date: Fri Apr 6 17:22:30 2018 +0100 + + Add typedef TSLint rule (#644) + + * Add typedef TSLint rule + + Requires type definitions for function parameters and signatures, and class/interface member variables. + + * Fix errors + +commit b45baec26372fbefab84502f9400023a43a15a16 +Author: Mertcan Mermerkaya +Date: Fri Apr 6 13:46:01 2018 +0100 + + Add TSLint and (mostly uncontroversial) rules (#641) + + * Add TSLint and (mostly uncontroversial) rules + + Fixed lint errors. Added running TSLint to the test command in package.json. + + * Remove some assertions that are no longer needed as --strict is disabled + + * [AUTOMATED]: Prettier Code Styling + + * Add a few more rules from Google TS style that are already passing + + * Fix tests + +commit 12e839d7e5fcb2b3c147a8eccda911259252b74b +Author: Josh Crowther +Date: Thu Apr 5 14:21:32 2018 -0700 + + Misc Fixes (#640) + + * Remove resetWorkingTree call + + * Remoing package-lock.json + + * Refactor @firebase/template versions + + * Pin gulp version for auth + + * Update all packages to gulp@^4.0.0 + + * Revert "Remove resetWorkingTree call" + + This reverts commit 064dd2bc5cd46d77a256c60c86b617683b7c0fb1. + + * Fix issue with messaging compilation throwing on FirebaseApp + +commit 7857c212f944a2a9eb421fd4cb7370181bc034b5 +Author: Mertcan Mermerkaya +Date: Thu Apr 5 22:14:35 2018 +0100 + + Add types (#637) + + * Add types to @firebase/messaging + + This makes src/ compatible with --noImplicitAny. test/ still needs work. + + * [AUTOMATED]: License Headers + + * Remove casts + +commit a1020bfdce850b8e2e75186ed4bdd1a9f1d28dbd +Author: Josh Crowther +Date: Thu Apr 5 10:55:21 2018 -0700 + + Fixing type could be null errors (#639) + +commit a4778d61118eaf1bc4b3e3240bfe1a44f6dd705a +Author: Josh Crowther +Date: Wed Apr 4 15:16:41 2018 -0700 + + automaticDataCollectionEnabled Flag (#625) + + * Adding new FirebaseAppConfig type + + * Adding automaticDataCollectionEnabled flag, and config object support to initializeApp + + * [AUTOMATED]: Prettier Code Styling + +commit 315a7581c8d94718e67bcf682466a82ca0577852 +Author: Matt Gaunt +Date: Wed Apr 4 11:28:51 2018 -0700 + + IID Model types (#626) + + * Adding idd-types + + * Adding iid-types + + * Adding iid-types + + * [AUTOMATED]: Prettier Code Styling + + * Correcting comment + + * Fixing merge mismatch + +commit 8c54f6a21d16d683c3222ae1157b151f72bb85ad +Author: Mertcan Mermerkaya +Date: Wed Apr 4 19:10:22 2018 +0100 + + Add --strict flag to TSConfig and fix errors (#629) + + * Add --strict flag to TSConfig and fix resulting errors + + This doesn't really fix anything, but explicit "any"s are still better than implicit "any"s. + + * Remove unnecessary 'use strict's + + * Add a type-check command and run it as part of tests + + * [AUTOMATED]: Prettier Code Styling + +commit 073cc191a1457cadc70bf9604078367cd034ccd0 +Author: Matt Gaunt +Date: Wed Apr 4 10:27:58 2018 -0700 + + Fixes getToken in SW (#623) + +commit 2a0a33f039d9309f607af118ba2b68c021037a32 +Author: Mertcan Mermerkaya +Date: Wed Apr 4 11:07:03 2018 +0100 + + Refactor default exports into named exports (#622) + + Following Google TS best practices. + +commit 4f280965a2f285e4eecb88ade276747031bf9769 +Author: pinarx +Date: Tue Apr 3 11:17:47 2018 +0100 + + Fix a bug that was introduced in PR: #591 (#614) + + * Fix a bug that was introduced in PR: #591 + + * [AUTOMATED]: Prettier Code Styling + + * rewording and reordering functions to adhere to comments. + +commit 790c15827351af85608580864d935972d7cedd69 +Merge: 92f380950 5959b54e1 +Author: Sebastian Schmidt +Date: Mon Apr 2 16:55:11 2018 -0700 + + Adding .skip and .only for validation tests + + Adding .skip and .only for validation tests + +commit 5959b54e15b60cb06aa2d2a57c5ab18572309f32 +Author: Sebastian Schmidt +Date: Mon Apr 2 16:27:27 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 957056e3d305f1cb70b27844e6a29b2e79d126ad +Author: Sebastian Schmidt +Date: Mon Apr 2 16:26:49 2018 -0700 + + Removing usage of "any" + +commit 7072718d8872191f3ab9f6353be1be9daa5d5a20 +Author: Sebastian Schmidt +Date: Mon Apr 2 15:25:57 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 756288bce1daa7073e7872840d793d0285a1b6c8 +Author: Sebastian Schmidt +Date: Mon Apr 2 15:25:26 2018 -0700 + + Adding .skip and .only for validation tests + +commit 5ad3285e9e44c284ee427993e9f3ad682fe80f69 +Author: Sebastian Schmidt +Date: Mon Apr 2 11:17:35 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 5512c8cd2cb1f802426e8940291709f7a8f4f912 +Author: Sebastian Schmidt +Date: Mon Apr 2 11:17:09 2018 -0700 + + Removing package-lock + +commit 6235eca547cf201f40486e4450f8674214c54c7a +Author: Sebastian Schmidt +Date: Mon Apr 2 11:14:31 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 1b930610c7496f405974914bc0e8c666d6308555 +Author: Sebastian Schmidt +Date: Mon Apr 2 11:14:00 2018 -0700 + + Removing .path from Database Typings + +commit 92f380950c6ce3991ea577575c60ce81e327dc27 +Author: Yukimasa Funaoka <37928585+mochiya98@users.noreply.github.com> +Date: Tue Apr 3 01:14:20 2018 +0900 + + Fix implicit global variable (#610) + +commit 1608edb5f1b8d3dae342727b4914e3edc8b5dcd8 +Author: Konstantin Varlamov +Date: Fri Mar 30 14:54:12 2018 -0400 + + Make Timestamp a part of the public Firestore API. (#544) + + * Make Timestamp a part of the public Firestore API. + + * Accept Timestamps as a parameter where Dates are currently accepted. + + * Add an option to settings to control how timestamp fields are returned. + + This is a transitional state; eventually, Timestamp will live in a new + separate package (common-types/). + + The behavior to return timestamp fields as dates is now legacy. It's on + by default to allow for a transitional period. The new behavior to + return Timestamp objects instead is opt-in, but will become default in + the future. The advantage Timestamps have is higher precision than + native browser Date. If the new behavior is not enabled, a warning is + logged on startup urging users to upgrade. + +commit b5aa5b8335cd13ce8c30c188843723f3a766ac53 +Author: Sebastian Schmidt +Date: Thu Mar 29 19:13:32 2018 -0700 + + Fixing Storage Types (#588) + + * Fixing Storage Types + + * [AUTOMATED]: Prettier Code Styling + +commit 541fbbefd13d0d7a7a2058c983bbcbb8e894102a +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Thu Mar 29 17:23:49 2018 -0700 + + fixed checkActionCode for email signin (#606) + +commit 5cfbafd60ec88e64e2119c16855f09e822a99d8b (tag: firebase@4.12.1, tag: @firebase/webchannel-wrapper@0.2.7, tag: @firebase/messaging@0.2.3, tag: @firebase/firestore@0.3.7, tag: @firebase/auth@0.4.1) +Author: Josh Crowther +Date: Thu Mar 29 15:05:06 2018 -0700 + + Publish firebase@4.12.1 + +commit b14678002bf6e8cc9ebd7561efbafe29315ceb8e +Author: Michael Lehenbauer +Date: Thu Mar 29 09:36:28 2018 -0700 + + Small cleanup to FieldValue sentinel code to make it easier to add more sentinels in the future. (#603) + +commit babd759e87699857c31c4798b7ffe92bdee894fb +Author: Michael Lehenbauer +Date: Wed Mar 28 16:31:58 2018 -0700 + + Update packages/firebase/app/index.d.ts with all the API changes we've made in the last couple months. (#600) + +commit ac4dac3a037683089b9f16e5a0881edd45426738 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Mar 28 15:48:29 2018 -0700 + + Paring FDL link in getActionCodeFromSignInEmailLink to support deep link (#604) + +commit 3259004ee0a3b8a448a0d045bf599bcee5f8586a +Author: Josh Crowther +Date: Wed Mar 28 13:28:15 2018 -0700 + + Remove unneeded declare module statement (#599) + +commit dd86fc7ab1e684ad8a734189b65c495f0c6057db +Author: Matt Gaunt +Date: Wed Mar 28 11:41:58 2018 -0700 + + Tweaks message for useServiceWorker error (#598) + +commit a538b83846fc34560fccd02644601a4bdaacc0dc +Author: pinarx +Date: Wed Mar 28 16:58:56 2018 +0100 + + PushSubscription validation (#591) + + * Check pushSubscription details when validating a token: this should enable us to deal with permission changes where new push subscriptions are generated but the token is not validated + +commit faa54d8cb07efcfbdc0c9e7fc1455830f07a49c5 +Author: Josh Crowther +Date: Mon Mar 26 12:55:37 2018 -0700 + + Updates the @firebase/webchannel-wrapper Version (#596) + + * Updating closure-builder version + + * Update yarn.lock + +commit d90beabb584d34236980462e783b6f69e98a5c11 +Author: Michael Lehenbauer +Date: Fri Mar 23 17:56:25 2018 -0700 + + Fix issue that could cause offline get()s to wait up to 10 seconds. (#592) + + OnlineStateTracker was reverting to OnlineState Unknown on every stream attempt + rather than remaining Offline once the offline heuristic had been met (i.e. 2 + stream failures or 10 seconds). This means that get() requests made while + offline could be delayed up to 10 seconds each time (or until the next backoff + attempt failed). + +commit bb93e470f8cb1cb5d7bad30b91d8bec6ad27b77d +Author: Michael Lehenbauer +Date: Fri Mar 23 16:33:08 2018 -0700 + + [AUTOMATED]: Prettier Code Styling + +commit 8a10e7cb6371ca5f4287e9b50981ca9dd8732032 +Author: pinarx +Date: Thu Mar 22 16:19:28 2018 -0700 + + Unify pushSubscription/publicVapidKey retrievals (#587) + + Use await/async and unify pushSubscription/publicVapidKey retrievals + +commit ab0faeb9e066cd7c5ef1b40c8779eaea40080ac5 +Author: pinarx +Date: Thu Mar 22 10:33:21 2018 -0700 + + Move getPushSubscription method to ControllerInterface. (#579) + + * rename getPushSubscription + + * [AUTOMATED]: Prettier Code Styling + + * replace renamed variable + + * all + + * [AUTOMATED]: Prettier Code Styling + +commit 84896ec489ef162555c5b48881822982281d8921 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Mar 21 11:15:47 2018 -0700 + + added new method declarations (#583) + +commit 563e048f17c756376a76a2f8b11ae7f9450eb9ff +Author: bojeil-google +Date: Tue Mar 20 13:41:04 2018 -0700 + + Fetch API missing support handling (#578) + + * Fixes vague errors thrown in older browsers such as IE10/11 and iOS mobile Safari related to worker support. + Most of these are attributed to lack of support for fetch related APIs even when web workers are still supported. + In that case we throw an operation not supported in environment error on operations that require http requests. + + * Added yarn.lock auto changes. + +commit ef14d4f81beb4cfb21f6f5a2fa61a197ff9eea4e (tag: firebase@4.12.0, tag: @firebase/polyfill@0.3.0, tag: @firebase/functions@0.1.0, tag: @firebase/functions-types@0.1.0, tag: @firebase/firestore@0.3.6, tag: @firebase/database@0.2.1, tag: @firebase/auth@0.4.0, tag: @firebase/auth-types@0.2.0) +Author: Josh Crowther +Date: Tue Mar 20 11:12:10 2018 -0700 + + Publish firebase@4.12.0 + +commit d59b72493fc89ff89c8a17bf142f58517de4c566 +Author: Bryan Klimt +Date: Tue Mar 20 10:42:38 2018 -0700 + + @firebase/functions release + +commit 908227cac856652d5f5408df1da365f069463223 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Mar 19 12:35:48 2018 -0700 + + added typedef for passwordless and new sign in methods which returns UserCredential (#575) + +commit c25e7a186b38190f626a97f892ddfc6c5c53acee +Author: bojeil-google +Date: Mon Mar 19 10:46:19 2018 -0700 + + Adds tests in demo app for service worker compatibility with Firebase Auth (#571) + + * Adds tests in demo app for service worker compatibility with Firebase Auth. + + This modifies the service worker to append the ID token in every fetch + request via a custom HTTP header. + + Using Functions with Hosting, an HTTP endpoint was setup which will + parse the ID token from the header and verify it using Admin SDK and + then return a status response. + + A button is added to the demo app to test this. When a user is signed + in, the user's uid is returned, otherwise an error is shown. + + * [AUTOMATED]: License Headers + + * Fixes comment. + + * Renames /echoIdToken endpoint to /checkIfAuthenticated. + +commit 9d00c6f0c57f8ddd73a740766918eece7a53c6aa +Author: gonzaloriestra +Date: Mon Mar 19 16:53:05 2018 +0100 + + add missing function in auth interface (#574) + +commit d3ec2e02b0f4095bd2a13ca7ef67e3c67461db44 +Author: bojeil-google +Date: Fri Mar 16 11:04:02 2018 -0700 + + Adds Auth tests to demo app for web worker environment functionality. (#567) + + This helps test that Auth API works as expected in that environment. + +commit df183a5ce45c435e9d36dbb1125cd244a2dc044c +Author: Michael Lehenbauer +Date: Thu Mar 15 12:04:02 2018 -0700 + + Remove assert I accidentally left in (I meant to remove it when I re-added the defensive check above). (#565) + +commit 1b3ba41f7c5207907a32601e552168e29281948e +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Thu Mar 15 10:18:10 2018 -0700 + + Refactor Auth storage test (#530) + + * refactored storage test + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: Prettier Code Styling + + * migrate storage from localstorage to indexedDb + + * added worker compatibility, exposed finally, updated error message + + * appended photo size for google hosted image + +commit 2cb9ef50c0894fa0d154e5cd1ae1784105c1744b +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Thu Mar 15 10:17:49 2018 -0700 + + Passwordless (#529) + + * passwordless signin + + added new files for passwordless signin + + added licence + + exported function + + * updated externs and types + + * [AUTOMATED]: Prettier Code Styling + + * added passwordless sign in in demo and fixed type + + * remove email in localstorage after used for passwordless sign in + +commit b949d81363e664f7be651c6a4a94265470e042ce +Author: Michael Lehenbauer +Date: Wed Mar 14 16:22:47 2018 -0700 + + Fix for b/74749605: Cancel pending backoff operations when closing streams. (#564) + +commit bf7a221e905a2d50ef0773d7528b25aaedf8ff6a +Author: Josh Crowther +Date: Wed Mar 14 14:23:45 2018 -0700 + + Set log level to VERBOSE if enableLogging(true) is passed (#561) + +commit 0c5cbe038968fcedf55d123f47bf3db4a0b6dfde +Author: Abe Haskins +Date: Wed Mar 14 14:09:11 2018 -0700 + + Fixes #562, Adds usePublicVapidKey to firebase/index.d.ts (#563) + +commit 786082d542a5d80611c110e9c9ff3592d129cd3b +Author: Michael Lehenbauer +Date: Mon Mar 12 11:30:13 2018 -0700 + + Fix MutationQueue issue resulting in re-sending acknowledged writes. (#559) + + getNextMutationBatchAfterBatchId() was not respecting highestAcknowledgedBatchId and therefore we were resending writes if they had been acknowledged but not removed (aka the held write acks case). This showed up when a user disabled / enabled the network as reported here and I've included a spec test to emulate that case: firebase/firebase-ios-sdk#772 + +commit 69c9a971fa4e48bf965369744559e4c9a2fab12b +Author: Josh Crowther +Date: Thu Mar 8 15:00:44 2018 -0800 + + Fix issues that arose in latest release flow + +commit 6aed77a501ae66f42ea61323cc67b1f1c8ff6954 +Author: Josh Crowther +Date: Thu Mar 8 14:46:53 2018 -0800 + + Update yarn.lock + +commit 98ab8e5d76fd1b37205bca175fba79bbbb4c34e1 (tag: firebase@4.11.0, tag: @firebase/polyfill@0.2.0, tag: @firebase/messaging@0.2.2, tag: @firebase/logger@0.1.0, tag: @firebase/firestore@0.3.5, tag: @firebase/database@0.2.0) +Author: Josh Crowther +Date: Thu Mar 8 14:41:44 2018 -0800 + + Publish firebase@4.11.0 + +commit 7681d0355f632f420e833e40dc2c627d07dd845a +Author: Michael Lehenbauer +Date: Wed Mar 7 14:28:12 2018 -0800 + + Remove "google-cloud-resource-prefix" header in favor of "database" url parameter in WebChannel requests. (#554) + + I verified that the client still works against prod and that the ?database=... paremeter was included in every WebChannel network request. + + NOTE that prior to this change we were including the "google-cloud-resource-prefix" header on non-streaming RPC requests, but with this change we will not include the header or use the "database" url parameter. + +commit 121c1674a998e03e44b8509da27fd1710d5898a1 +Author: Josh Crowther +Date: Tue Mar 6 14:56:46 2018 -0800 + + Fixes an issue with staged release version (#552) + + * Refactor so staging releases use a staging version + + * [AUTOMATED]: Prettier Code Styling + +commit 03d224f08b7267a4ceb57ec12ed62fb215a62d83 +Author: Josh Crowther +Date: Tue Mar 6 12:19:32 2018 -0800 + + Release Fixes (#551) + + * Fix some issues w/ the release process. + + This commit addresses two issues: + + - The banner text not correctly displaying on macOS due to the changed emoji spacing + - The release CLI throwing errors when trying to stage an unpublished package + + * [AUTOMATED]: Prettier Code Styling + + * Refactor to handle production initial releases + + * [AUTOMATED]: Prettier Code Styling + +commit 2b20a14bdce1004a7f6f0fd0dac134bb13ef7837 +Author: Zev Goldstein +Date: Tue Mar 6 11:59:02 2018 -0500 + + removes unecessary lcov-result-merger dependency (#547) + +commit a0583f76d975c8183c0a1f46468688d8ffc1f060 +Author: Josh Crowther +Date: Mon Mar 5 10:45:15 2018 -0800 + + Shim refactor (#550) + + * Refactor to organize shims by Object + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + +commit 0fa319e5e019dd0d40ab441d2ff9f8f6d4724e43 +Author: Michael Lehenbauer +Date: Fri Mar 2 17:23:26 2018 -0800 + + Add 10 second timeout waiting for connection before client behaves as-if offline. + + * Refactored OnlineState tracking out of RemoteStore and into new OnlineStateTracker component. + * Added a 10 second timeout to transition from OnlineState.Unknown to + OnlineState.Offline rather than waiting indefinitely for the stream to succeed or fail. + * Added a SpecTest to verify OnlineState timeout behavior. + * Misc cleanup: + * Renamed OnlineState states: Failed => Offline, Healthy => Online + * Renamed TimerIds (ListenStreamConnection => ListenStreamConnectionBackoff) + * Added a dummy .catch() handler to the CancelablePromises returned by + AsyncQueue.enqueueAfterDelay() to avoid UnhandledPromiseRejection log spam + due to canceled timers. + * Added ability to run timers from spec tests (including assigning string + names to TimerId enum values) + * Added TimerId.All to match iOS and make it easier to run all timers from spec + tests. + +commit aba869cf779b32da2901ac1502577e240ec2efbb +Author: Michael Lehenbauer +Date: Fri Mar 2 14:05:47 2018 -0800 + + [AUTOMATED]: Prettier Code Styling + +commit dbed6899923aceedb87860a1381b478d8d9880c4 +Author: Sebastian Schmidt +Date: Thu Mar 1 09:45:46 2018 -0800 + + Database API: Ref from Ref (#534) + +commit fbb2aabe2527cafce4dca1d56bd34f8e0e0a0d65 +Author: Josh Crowther +Date: Wed Feb 28 11:41:40 2018 -0800 + + Remove the "private" flag from the @firebase/logger package (#537) + +commit c1a07da3d4607e175f7952c7bff8205359164336 +Author: Josh Crowther +Date: Wed Feb 28 11:36:36 2018 -0800 + + Refactor npm publish command (#536) + +commit 3d6289dd7853240a09887cbf2fea06b0a33ac357 +Author: Josh Crowther +Date: Wed Feb 28 10:49:47 2018 -0800 + + @firebase/logger (#473) + + * Start work on @firebase/logger package + + * Refactor to remove debug dep + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Expose a LogHandler type + + * Allow users to "silence" our logging + + * Adding some comments + + * Do @firebase/firestore integration + + * Do @firebase/database integration + + * [AUTOMATED]: Prettier Code Styling + + * Refactor to propagate the default level if changed + + * Add some basic tests + + * [AUTOMATED]: Prettier Code Styling + + * Feedback from @mikelehen and @schmidt-sebastian + + Refactor to also log fatal issues + + Refactor to not attempt to log if the level is invalid + + Adding docs and more feedback + + * [AUTOMATED]: Prettier Code Styling + + * Fixing an error message + + * Updating yarn.lock + + * Address @mikelehen feedback + + * [AUTOMATED]: Prettier Code Styling + + * Refactor logClient.log -> logClient.debug + + * Update deps + + * More @mikelehen feedback + + * Fixing comment + + * Feedback from @schmidt-sebastian + +commit 9cda9c927bfd2b19eff13357beac6646ec9f1413 +Author: Greg Soltis +Date: Tue Feb 27 09:48:07 2018 -0800 + + Keep track of number of queries in the query cache (#510) + + * Adding Schema Migration + + * Pseudocode for Schema Migration + + * [AUTOMATED]: Prettier Code Styling + + * IndexedDb Schema Migration + + * Lint cleanup + + * Removing unused import + + * Removing user ID from instance row + + * [AUTOMATED]: Prettier Code Styling + + * Review comments + + * Lint fixes + + * Review + + * [AUTOMATED]: Prettier Code Styling + + * Fixing the tests + + * Closing the Database in the Schema tests + + * [AUTOMATED]: Prettier Code Styling + + * Changing test helper to close the DB + + * [AUTOMATED]: Prettier Code Styling + + * Making v2 the default version + + * [AUTOMATED]: Prettier Code Styling + + * Addressing comment + + * [AUTOMATED]: Prettier Code Styling + + * Renamed to ALL_STORES + + * Start work on adding query counts + + * Implement target count + + * [AUTOMATED]: Prettier Code Styling + + * Separate out add and update for the query cache + + * [AUTOMATED]: Prettier Code Styling + + * Comments and formatting + + * Comments and restructuring + + * [AUTOMATED]: Prettier Code Styling + + * Use SimpleDb, shorten iOS-y name + + * [AUTOMATED]: Prettier Code Styling + + * addTargetCount -> saveTargetCount + + * Fix lint warnings + + * Comment fixes + + * Rename test file + + * Add expectation for 0 targets if none were added + + * [AUTOMATED]: Prettier Code Styling + + * Switch to PersistenceTransaction for schema upgrade + + * Fix the other tests + + * [AUTOMATED]: Prettier Code Styling + + * Update comment + + * Add some asserts, revert to PersistencePromise + + * Add assert + + * [AUTOMATED]: Prettier Code Styling + + * helpers moved + + * Review feedback + + * Switch to just using fail() + + * Rename updateMetadata + + * Renaming and thread metadata through schema upgrade + + * Use the proper assert + + * Review feedback + + * [AUTOMATED]: Prettier Code Styling + + * Drop note re running time, initialize metadata to null + + * Fix tests that weren't calling start + + * [AUTOMATED]: Prettier Code Styling + +commit e70ef379c6cf2d4e00c72ff2feda82d6dda44bd1 (tag: firebase@4.10.1, tag: @firebase/util@0.1.10, tag: @firebase/storage@0.1.8, tag: @firebase/storage-types@0.1.2, tag: @firebase/polyfill@0.1.6, tag: @firebase/messaging@0.2.1, tag: @firebase/messaging-types@0.1.2, tag: @firebase/firestore@0.3.4, tag: @firebase/firestore-types@0.2.2, tag: @firebase/database@0.1.11, tag: @firebase/database-types@0.1.2, tag: @firebase/auth@0.3.4, tag: @firebase/auth-types@0.1.2, tag: @firebase/app@0.1.10, tag: @firebase/app-types@0.1.2) +Author: Josh Crowther +Date: Thu Feb 22 14:21:38 2018 -0800 + + Publish firebase@4.10.1 + +commit cde4e44a2e552791d9c0249a20e435e2ec15929d +Author: Josh Crowther +Date: Wed Feb 21 16:25:56 2018 -0800 + + Dependencies Update (#528) + + * Run "yarn upgrade-interactive --latest" + + * Update gulp to a proper NPM dep + + * Regen yarn.lock + + * Fix typescript generics issues + + * [AUTOMATED]: Prettier Code Styling + +commit 0226ed23128f4a0a9fbc5896c207d3157c9d06de +Author: Josh Crowther +Date: Wed Feb 21 16:03:26 2018 -0800 + + Remove bash grouping + +commit 1b44b4d6166ccd523a3beefda89349c9e4162609 +Author: Josh Crowther +Date: Wed Feb 21 15:58:16 2018 -0800 + + Fixing fork testing issues + +commit 3ee5bdfde8ea59e884d4551c216646e41f44c2aa +Author: Natan Sągol +Date: Wed Feb 21 22:34:55 2018 +0100 + + Remove `return Promise.resolve()` statements from the codebase (#422) + + * Remove `return Promise.resolve()` statements from the codebase. + + * Fix compilation errors. + + * Fix more compiler errors. + + * Use `tslib` module and `importHelpers` Typescript compiler option. + + It reduces the size of TypeScript packages (namely `firebase-database`, + `firebase-firestore`, `firebase-messaging` and the combined `firebase`) + be reusing TypeScript helper methods (e.g. `__awaiter`) which were + included in every single file relying on features not available + in ES5 (emitted during transpilation process). + + * [AUTOMATED]: Prettier Code Styling + + * Regenerate top-level yarn.lock + + * Add `tslib` as a dependency to app, polyfill, storage, template and util packages. + + Since we set `importHelpers` compiler option to `true` in the base config, + we need to add `tslib` to all packages. `*-types` packages are omitted + since they do not contain any executable code. + + * Revert unnecessary change in comment formatting. + + * Revert moving comments out of empty else block to make + the context more clear. + + Addresses @mikelehen review + https://github.com/firebase/firebase-js-sdk/pull/422#pullrequestreview-98041340 + +commit 3aec5ac28d0439599af77184b1ffe86e0e16d790 +Author: Matt Gaunt +Date: Wed Feb 21 10:14:50 2018 -0800 + + Updating API surface (#527) + +commit dbe5fff5039ec09da651c724bb12d3a1da30bed2 +Author: Matt Gaunt +Date: Tue Feb 20 16:16:00 2018 -0800 + + Messaging - IDB Cleanup (#523) + + * Goes through and deletes old IDB entries + + * [AUTOMATED]: Prettier Code Styling + + * Fixing tests with db name differences + + * Altering some logic / logs + +commit e78411043f424c42505f768d3b8b5890fb5124b8 +Author: Josh Crowther +Date: Tue Feb 20 16:12:51 2018 -0800 + + Version Patch for Firebase Admin (#524) + + * Patch the version info and the firebase.SDK_VERSION + + * [AUTOMATED]: Prettier Code Styling + +commit b6b4e2fb968549dd1a680797c497af8a2466a493 +Author: Tony Meng +Date: Fri Feb 16 13:58:24 2018 -0800 + + Add testing module (#514) + + * Adding testing module + + * Typescript it + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Do not register testing module with firebase + + * [AUTOMATED]: Prettier Code Styling + + * Feedback + + * Add owners + +commit 2e147ff61da8fc7a62c9b72d8e9a7e0c28d862c5 +Author: Tony Meng +Date: Fri Feb 16 13:53:30 2018 -0800 + + Fix query string parsing (#518) + + * Fix query string parsing + + * [AUTOMATED]: Prettier Code Styling + + * Feedback + +commit fc81427d4ed8df51752608030aa289b8631531b3 (tag: firebase@4.10.0, tag: @firebase/util@0.1.9, tag: @firebase/storage@0.1.7, tag: @firebase/polyfill@0.1.5, tag: @firebase/messaging@0.2.0, tag: @firebase/firestore@0.3.3, tag: @firebase/database@0.1.10, tag: @firebase/app@0.1.9) +Author: Josh Crowther +Date: Thu Feb 15 16:31:25 2018 -0800 + + Publish firebase@4.10.0 + +commit db389db97bf3698384a4d708f4be70beecfabb0c +Author: Tony Meng +Date: Tue Feb 13 16:17:42 2018 -0800 + + Support ns queryparam (#496) + + * Support ns query param + + * [AUTOMATED]: Prettier Code Styling + + * Add tests + + * Strip query params from the host + + * Feedback + + * [AUTOMATED]: Prettier Code Styling + + * Feedback + + * Always use the query param when not connecting to production + + * Improve test coverage + +commit 2cacc75e54f48dcb89b95454861c56216579556a +Author: Michael Lehenbauer +Date: Tue Feb 13 10:40:31 2018 -0800 + + Upgrade closure-builder dependency to fix b/68061273 (slow response time in Microsoft Edge). (#509) + +commit f173ad0f5648e579dd662b52b9f763b0805f5aff +Author: Josh Crowther +Date: Tue Feb 13 09:32:56 2018 -0800 + + Refactor dev scripts to properly include top-level files (#508) + +commit 515eff7c82f0ab15eb1ac72f2caf703ce1442b4a +Author: Josh Crowther +Date: Mon Feb 12 12:55:21 2018 -0800 + + Disabling Flaky Tests (#505) + + * Disable int tests (due to flakiness) + + * [AUTOMATED]: Prettier Code Styling + +commit 09f7b137bc76ea8318611b404e7c05c9e8ad7cba +Author: Sebastian Schmidt +Date: Mon Feb 12 09:57:01 2018 -0800 + + Updating firebase/index.d.ts (#500) + +commit fce4168309f42aa038125f39818fbf654b65b05f +Author: Michael Lehenbauer +Date: Sun Feb 11 15:39:13 2018 -0800 + + Improve usage and testing of delayed operations. (#499) + + Core changes: + * Moves ExponentialBackoff to the AsyncQueue (matches iOS / Android). + * Adds a TimerId enum for identifying delayed operations on the queue and + uses it to identify our existing backoff and idle timers. + * Added AsyncQueue.hasDelayedOperation(id) and .runDelayedOperationsEarly(id) + which can be used from tests to check for the presence of an operation and + to schedule them to run early. + * Idle tests now use these mechanisms. + * Spec tests now use this rather than setting initalBackoffDelay to 1ms. + * Reworked mechanism by which DelayedOperation objects get removed from + AsyncQueue's delayedOperations list to make sure it happens synchronously. + + Cleanup: + * Renamed schedule() to enqueue() and scheduleWithDelay() to + enqueueAfterDelay(). + * Reorders AsyncQueue.enqueueAfterDelay() arguments to put operation last. + +commit 7a611b645fbedcd6c732853ed19e3f6a1a2638d5 +Author: Matt Gaunt +Date: Thu Feb 8 14:10:01 2018 -0800 + + Adds usePublicVapidKey() (#482) + + * Uses new token models, adds usePublicVapidKey() and improved integration + tests. + + * Updated yarn lock + + * Resetting karma config + +commit 453677f005d04e47be2324b9c1577051139652c0 +Author: Sebastian Schmidt +Date: Tue Feb 6 18:07:48 2018 -0800 + + Adding no-unused-vars to TSLint (#493) + +commit a1e346ff93c6cbcc0a1b3b33f0fbc3a7b66e7e12 +Author: Michael Lehenbauer +Date: Tue Feb 6 12:20:20 2018 -0800 + + Refactor AsyncQueue's "delayed scheduling" support and add cancellation. (#489) + + * Introduces a DelayedOperation helper class in AsyncQueue to encapsulate + delayed op logic. + * Adds cancellation support which I want to use in + https://github.com/firebase/firebase-js-sdk/pull/412 + * Updates the idle timer in persistent_stream.ts to use new cancellation support. + * Remove delayedOperationsCount in favor of keeping delayedOperations populated + correctly at all times. + * Fixes a preexisting issue in AsyncQueue.schedule() where the returned promise + would always be resolved with undefined, instead of the result of your op. + Also remove an AnyDuringMigration usage. + +commit 2db58a051bda565e5ca8d4bd98058709363e17c6 +Author: Josh Crowther +Date: Mon Feb 5 15:40:55 2018 -0800 + + Release CLI Fixes (#490) + + * Add --skipRebuild and --skipTests flags + + * Temporary: Target localhost NPM server + + * Refactor git push step + + * Refactor to push to current branch + + * Refactor commitAndTag fxn + + * Adding some logging + + * Refactor tag pushing + + * Revert "Temporary: Target localhost NPM server" + + This reverts commit dd4ab7155137060d2e194f3fbec062c2edf766e2. + + * [AUTOMATED]: Prettier Code Styling + + * Comments from @hiranya911 + +commit 49dcb25ca01c86e9b5329030ab315c06d118f386 +Author: zxu +Date: Fri Feb 2 13:52:04 2018 -0500 + + renaming isUnauthenticated() to isAuthenticated() for better style (#484) + +commit 631e1ad1687dd51acf2f496badf200c48ad046d0 (tag: firebase@4.9.1, tag: @firebase/util@0.1.8, tag: @firebase/messaging@0.1.9, tag: @firebase/firestore@0.3.2, tag: @firebase/database@0.1.9, tag: @firebase/auth@0.3.3, tag: @firebase/app@0.1.8) +Author: Josh Crowther +Date: Thu Feb 1 16:02:06 2018 -0800 + + Publish + +commit 9fb3c4c3c706760ab0f2651f53f19c1c6f081dbe +Author: Sebastian Schmidt +Date: Thu Feb 1 15:34:55 2018 -0800 + + Actually using the option name in validateNamedPropertyEquals (#480) + +commit 8f76c286dc70187f701806d3abdc42c1b36b9627 +Author: Gil +Date: Thu Feb 1 06:16:18 2018 -0800 + + Remove SortedMap.getPredecessorKey (#477) + + This is dead code. + + I think it was probably useful in the RTDB because of the way it + notified of changes, but we give changes with indexes in Firestore so I + think we don't need it. + + This parallels https://github.com/firebase/firebase-ios-sdk/pull/735 + +commit bcc8983a0cae673bafc386935c64e9245c60c84c +Author: bojeil-google +Date: Wed Jan 31 20:08:30 2018 -0800 + + fix(auth): Fixes broken universallinks.subscribe in Android when multiple listeners are set. (#478) + +commit fcc77c2dccb9780450def9d511540e64991f3723 +Author: Michael Lehenbauer +Date: Mon Jan 29 08:58:37 2018 -0800 + + Add changelog entry for my last PR (oops) and also add enable/disableNetwork() which we missed last release. (#472) + +commit fca1076f166293a4ee9a60148c80463e54e43618 +Author: Michael Lehenbauer +Date: Fri Jan 26 14:21:56 2018 -0800 + + Fix b/72502745: OnlineState changes cause limbo document crash. (#470) + + Context: I made a previous change to raise isFromCache=true events when the + client goes offline. As part of this change I added an assert for + "OnlineState should not affect limbo documents", which it turns out was not + valid because: + * When we go offline, we set the view to non-current and call + View.applyChanges(). + * View.applyChanges() calls applyTargetChange() even though there's no target + change and it recalculates limbo documents. + * When the view is not current, we consider no documents to be in limbo. + * Therefore all limbo documents are removed and so applyChanges() ends up + returning unexpected LimboDocumentChanges. + + Fix: I've modified the View logic so that we don't recalculate limbo documents + (and generate LimboDocumentChanges) when the View is not current, so now my + assert holds and there should be less spurious removal / re-adding of limbo + documents. + +commit 81d6b1e196ca2ee4ac9bc7c3984a3d483a2f2c82 +Author: Michael Lehenbauer +Date: Fri Jan 26 12:48:25 2018 -0800 + + [AUTOMATED]: Prettier Code Styling (#469) + +commit c647fe42cf92f6947a6a2fe21b82e46446922b9e +Author: Josh Crowther +Date: Thu Jan 25 11:05:19 2018 -0800 + + Refactor script to create .npmrc in home directory + +commit 0213f96f8e98859188461ad65d31839c264b1f10 +Author: Josh Crowther +Date: Thu Jan 25 10:40:14 2018 -0800 + + Add @pinarx to the CODEOWNERS for messaging update sandbox URL (#466) + +commit 4a397948573b8d8ab01bffb475ac7414ddadcda0 +Author: Josh Crowther +Date: Thu Jan 25 10:38:46 2018 -0800 + + Move the .npmrc creation to a before_install step + +commit 2874d8745e5097f2f20d937b9397160f1853e83f +Author: Josh Crowther +Date: Thu Jan 25 10:07:26 2018 -0800 + + Skipping cleanup step breaking deploy in Travis CI + +commit 5cffa3e829f50c5923cb2f67ddeb2554a7d648ed +Author: Josh Crowther +Date: Thu Jan 25 09:54:44 2018 -0800 + + Update yarn.lock (#467) + +commit c102e7be2af83894e64cf6f3482d65084aee40af +Author: Josh Crowther +Date: Thu Jan 25 09:47:30 2018 -0800 + + Automated Release Process (#451) + + * Update inquirer version + + * Initial work on automating release process + + * Fix array index mismatch error + + * Add ability to auto commit and tag + + * Refactoring util functions + + * Add step to clean git tree + + * Fix missing fxn + + * Change to force mode + + * Refactor git clean to use exec + + * Reorder steps to not commit changes till later, add rebuild and test processes + + * Adding indicators to long running processes + + * Add missing dep + + * Build in reset mechanism + + * Adding in a log statement + + * Refactoring the test setup stuff + + * Testing the testing + + * Fixing scoping issue + + * Fixing another scoping issue + + * Fixing the result is undefined issue + + * Refactor from exec -> spawn + + * Expose test output to the console + + * Revert "Expose test output to the console" + + This reverts commit d0ae119b1dfb7d868faed8ad0c42c447c0947d22. + + * Refactor so we don't use a spinner for the test run + + * Adding the version check + + * Updating the CLI to tag and push releases + + * Initial work on NPM publish + + * Continuing work on npm publish + + * Redirect npm publish stdio + + * Add some logging to the NPM publish + + * More logging + + * Add newline to end of JSON files + + * Remove disabling comments + + * Remove "dry-run" stuff + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Remove the old publish scripts + + * [AUTOMATED]: Prettier Code Styling + + * Fix issue where validation wasn't properly being captured + + * Add missing push verification + + * [AUTOMATED]: Prettier Code Styling + + * Add banner text + + * [AUTOMATED]: Prettier Code Styling + + * Changing publish to fail fast + + * Add npm whoami check + + * Add .yarnrc + + * Remove logic to update peerDependencies + + See: https://github.com/lerna/lerna/issues/1018 for rationale. + + * for...in -> for...of + + * Point .yarnrc to public NPM registry + + * [AUTOMATED]: Prettier Code Styling + + * Add ability to get releaseType from command line args + + * Fix await/async issue + + * Refactor to handle canary builds + + * Update version names and associated tagging + + * Remove early return (for debugging) + + * Update .yarnrc for testing + + * Add try-catch to async fxn + + * Change error messaging + + * [AUTOMATED]: Prettier Code Styling + + * Refactor to exclude prerelease versions from the git log + + * More canary updates + + * Refactor to only push to github on prod releases + + * Add error logging + + * Fix misassigned var issue + + * Pass raw releaseType + + * Fix private package issue + + * Removing trim() call + + * Remove log + + * Add comment describing canary versioning + + * Update comments + + * Removing early return + + * Temporarily disabling validation + + * Fix scoping issue + + * Add auto-reset to the working tree for non-production releases + + * Fetch an uncached version of the pkg.json for final push + + * Fix whitespace issues, filter to public packages + + * Parallelize the publishing of packages + + * Fix issues + + * Refactor to show parallel spinners + + * Return Listr obj + + * Fix a bad variable ref + + * Run the publish + + * Pass the proper variable along + + * Add a console log + + * Adding some whitespace + + * Refactor logs + + * [AUTOMATED]: Prettier Code Styling + + * Add git validation before release + + * Compare git sha's before allowing publish + + * Compare git sha's before allowing publish + + * Debugging + + * Fix conditional + + * Remove unneeded log + + * Refactor to get the latest master sha + + * Remove "at head" check + + * [AUTOMATED]: Prettier Code Styling + + * Update .yarnrc to point to remote NPM + + * Re-enable build verification + + * Travis CI canary builds + + * Updating yarn.lock (autogenerated) + + * [AUTOMATED]: Prettier Code Styling + + * Copy of master yarn.lock + + * Commiting isolated yarn.lock changes + + * [AUTOMATED]: Prettier Code Styling + + * Refactor to do a single script value as travis doesn't support multiple scripts + + * Refactor root -> projectRoot from @hiranya911 + + * Add logging around npm whoami + + * Removing comma + + * [AUTOMATED]: Prettier Code Styling + + * Refactor production push verification order + + * Adding some notes to the process + + * [AUTOMATED]: Prettier Code Styling + +commit 2689287940543b5340a58bdf9e82aac810e58aa0 +Author: Mathias Døhl +Date: Thu Jan 25 18:45:44 2018 +0100 + + fix: Closure Compiler ES6 Wildcard import not supported (#370) + +commit 9fcdd378fdd9253248bb385ce87161de64b54592 +Author: Josh Crowther +Date: Wed Jan 24 18:51:04 2018 -0800 + + Add a new package template (#433) + + * Adding a private "template" package for easier bootstrapping + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + +commit e938bfbcbfc807d47d4bf9280d4b4a7583b6515b +Author: Sebastian Schmidt +Date: Mon Jan 22 13:57:48 2018 -0800 + + Allowing hosts with port (#460) + +commit c653c56e0a1da30117f1a5d824a4d3bb13528742 +Author: Ryan Baxley +Date: Mon Jan 22 14:32:47 2018 -0500 + + Allow localhost:port database URL (#426) + + * Allow localhost database URL + + * Setting domain on localhost server address + + * [AUTOMATED]: Prettier Code Styling + + * Allow namespace to be invalid if the host is localhost + + * [AUTOMATED]: Prettier Code Styling + +commit 1b6b9ab3c02756ebe33246f49c766e520c91263b +Author: Michael Lehenbauer +Date: Mon Jan 22 10:03:55 2018 -0800 + + Update VSCode launch.json to match updated package.json config. (#459) + +commit ac95e754c059ec618c1bc9a47a99a0dc2ffc42bf +Author: Michael Lehenbauer +Date: Mon Jan 22 07:34:32 2018 -0800 + + Refactor integration/api/ tests to have no src/ dependencies. (#454) + + This lets us run these tests (via firebase-js-sdk/integration/firestore/) + against the minified build without risk of accidentally mixing in non-minified + classes (leading to tests misbehaving or skipping testing the minified code + that we were intending to test). + + Fixes b/71721842 and b/66946692. + + Changes include: + * Split integration/api into api/ and api_internal/ + * Move Idle Timeout tests (that drain the async queue) to api_internal/ and + removes semi-public db.INTERNAL.drainAsyncQueue() method. + * Remove src/ dependencies from integration/api tests: + * Split integration/util/helpers.ts into helpers.ts (with no src/ + dependencies) and internal_helpers.ts (with src/ dependencies). + * Create test/util/promise.ts with Deferred<> implementation to avoid depending + on src/util/promise.ts. + * Move EventsAccumulator into its own + test/integration/util/events_accumulator.ts file. + * Change minified test build (/integration/firestore/) to only include the + desired test/ code without pulling over any src/ code. + +commit a586a7f2a487a5a88aecaebe4b188019c50752f5 (tag: firebase@4.9.0, tag: firebase-webpack-test@0.2.1, tag: firebase-typescript-test@0.2.1, tag: firebase-package-typings-test@0.2.1, tag: firebase-messaging-selenium-test@0.2.1, tag: firebase-browserify-test@0.2.1, tag: @firebase/util@0.1.7, tag: @firebase/messaging@0.1.8, tag: @firebase/firestore@0.3.1, tag: @firebase/firestore-types@0.2.1, tag: @firebase/database@0.1.8, tag: @firebase/app@0.1.7) +Author: Josh Crowther +Date: Thu Jan 18 15:39:43 2018 -0800 + + Publish + + - @firebase/app@0.1.7 + - @firebase/database@0.1.8 + - firebase@4.9.0 + - @firebase/firestore-types@0.2.1 + - @firebase/firestore@0.3.1 + - @firebase/messaging@0.1.8 + - @firebase/util@0.1.7 + - firebase-browserify-test@0.2.1 + - firebase-package-typings-test@0.2.1 + - firebase-messaging-selenium-test@0.2.1 + - firebase-typescript-test@0.2.1 + - firebase-webpack-test@0.2.1 + +commit cae0bf1fec9daa95a512c447e3e6a31ae7e52f21 +Author: Michael Lehenbauer +Date: Thu Jan 18 09:26:33 2018 -0800 + + Upgrade ts-node and disable its cache. (#446) + + I upgraded ts-node while investigating a cache-related issue and that solved my issue, but it also led me to realize that the cache is inaccurate and can hide type failures. + + By default ts-node caches the JS output for each TS file it encounters. But if A.ts depends on types in B.ts and B.ts changes, ts-node will still use the cached compilation of B.ts even if it no longer should compile. + + Disabling the cache adds ~6s to incremental test time but ensures we don't miss type violations. It should have no effect on travis which always starts with a clean cache. + +commit 7d9af1b4b27b535083f44f85a6c6a58f7c228099 +Author: Sebastian Schmidt +Date: Wed Jan 17 14:32:56 2018 -0800 + + Adding lint hook (#448) + +commit f55eb55c4b2af6df3c4d56f10a05cf796bdfb6dd +Author: Sebastian Schmidt +Date: Wed Jan 17 13:44:38 2018 -0800 + + Removing last lint errors (#447) + +commit efcb608032b6acdabca21628e65ee74ef13fa6b5 +Author: Sebastian Schmidt +Date: Wed Jan 17 10:19:55 2018 -0800 + + Removing any from LLRBTree (#442) + +commit 623728088f61f0ba44c651fa871255a938645356 (tag: firebase@4.9.0-2, tag: firebase-webpack-test@0.2.1-1, tag: firebase-typescript-test@0.2.1-1, tag: firebase-package-typings-test@0.2.1-1, tag: firebase-messaging-selenium-test@0.2.1-1, tag: firebase-browserify-test@0.2.1-1, tag: @firebase/firestore@0.3.1-1, tag: @firebase/firestore-types@0.2.1-1) +Author: Josh Crowther +Date: Wed Jan 17 09:34:48 2018 -0800 + + Publish + + - firebase@4.9.0-2 + - @firebase/firestore-types@0.2.1-1 + - @firebase/firestore@0.3.1-1 + - firebase-browserify-test@0.2.1-1 + - firebase-package-typings-test@0.2.1-1 + - firebase-messaging-selenium-test@0.2.1-1 + - firebase-typescript-test@0.2.1-1 + - firebase-webpack-test@0.2.1-1 + +commit fc46797c12843327b300e2d99b3611a5d5269f11 +Merge: 68b9c44e4 77bf1fbda +Author: Josh Crowther +Date: Wed Jan 17 09:33:13 2018 -0800 + + Merge branch 'master' of https://github.com/firebase/firebase-js-sdk + +commit 77bf1fbdac16e08053958638f72d1df5001c29cc +Author: Sebastian Schmidt +Date: Wed Jan 17 09:28:59 2018 -0800 + + Adding generics to the Connection API (#441) + +commit 68b9c44e4c88b1a20010c9a3b7dde82c3d6f0d46 (tag: firebase@4.9.0-1, tag: firebase-webpack-test@0.2.1-0, tag: firebase-typescript-test@0.2.1-0, tag: firebase-package-typings-test@0.2.1-0, tag: firebase-messaging-selenium-test@0.2.1-0, tag: firebase-browserify-test@0.2.1-0, tag: @firebase/firestore@0.3.1-0, tag: @firebase/firestore-types@0.2.1-0) +Author: Josh Crowther +Date: Wed Jan 17 09:26:10 2018 -0800 + + Publish + + - firebase@4.9.0-1 + - @firebase/firestore-types@0.2.1-0 + - @firebase/firestore@0.3.1-0 + - firebase-browserify-test@0.2.1-0 + - firebase-package-typings-test@0.2.1-0 + - firebase-messaging-selenium-test@0.2.1-0 + - firebase-typescript-test@0.2.1-0 + - firebase-webpack-test@0.2.1-0 + +commit 571a3a9cf9e10bb279144e74886a5cac839464df (tag: firebase@4.9.0-0, tag: firebase-webpack-test@0.2.0-0, tag: firebase-typescript-test@0.2.0-0, tag: firebase-package-typings-test@0.2.0-0, tag: firebase-messaging-selenium-test@0.2.0-0, tag: firebase-browserify-test@0.2.0-0, tag: @firebase/firestore@0.3.0-0, tag: @firebase/firestore-types@0.2.0-0) +Author: Josh Crowther +Date: Wed Jan 17 09:17:58 2018 -0800 + + Publish + + - firebase@4.9.0-0 + - @firebase/firestore-types@0.2.0-0 + - @firebase/firestore@0.3.0-0 + - firebase-browserify-test@0.2.0-0 + - firebase-package-typings-test@0.2.0-0 + - firebase-messaging-selenium-test@0.2.0-0 + - firebase-typescript-test@0.2.0-0 + - firebase-webpack-test@0.2.0-0 + +commit b381dc9ec1786de19f15b83027173b2bcfcd9dd3 +Author: Sebastian Schmidt +Date: Wed Jan 17 08:52:38 2018 -0800 + + Removing some of the 'any' usage in our Promise implementation (#437) + +commit 6e60bb09484a9abf2ec1d6739c7275830dc82499 +Author: Sebastian Schmidt +Date: Tue Jan 16 11:06:34 2018 -0800 + + Welcoming the new year (#439) + + * Welcoming the new year + + * [AUTOMATED]: Prettier Code Styling + +commit 6abd6484730971e2390b2b9acbb61800852fb350 +Merge: a55dba2e1 57fadf180 +Author: Michael Lehenbauer +Date: Fri Jan 12 11:23:44 2018 -0800 + + Merge pull request #429 from firebase/firestore-api-changes + + Firestore API Changes + +commit 57fadf1801cf3c199edb871a88fdc10cc3c1b1b5 +Author: Sebastian Schmidt +Date: Thu Jan 11 19:47:43 2018 -0800 + + Added missing entries in CHANGELOG.md + +commit 02b1fde976461013c2d64a5eec9f22a1c9940158 +Author: Sebastian Schmidt +Date: Thu Jan 11 19:37:09 2018 -0800 + + Fix a bunch of lint warnings in Firestore (#427) + +commit 3a3687fa00ac8d988959b65a41ecec632620d471 +Merge: 2a2d1989a a55dba2e1 +Author: Sebastian Schmidt +Date: Thu Jan 11 19:11:15 2018 -0800 + + Merge branch 'master' into firestore-api-changes + +commit a55dba2e140e866abe7c951551d1629cbd9d32a5 +Author: Sebastian Schmidt +Date: Thu Jan 11 19:10:50 2018 -0800 + + Accepting new backend error message for missing docs (#428) + +commit 2a2d1989ad1d8711be2a88231b5e4cfbfd914752 +Author: zxu +Date: Thu Jan 11 17:05:44 2018 -0500 + + Firestore `isEqual()` on Public Types (#396) + + * refactoring equals => isEqual + * bug fix + * Blob, FieldPath, GeoPoint equality test + * isEqual for FieldValue, DocumentReference, Query + * isEqual for CollectionReference, DocumentSnapshot, QuerySnapshot + * isEqual for SnapshotMetadata + * update firestore-types + * add missing import + * small refactoring adding ViewSnapshot.isEqual() + +commit 7b8640d264e969244689232e1398195b95fbf225 (tag: firebase@4.8.2, tag: firebase-webpack-test@0.1.3, tag: firebase-typescript-test@0.1.3, tag: firebase-package-typings-test@0.1.1, tag: firebase-messaging-selenium-test@0.1.3, tag: firebase-browserify-test@0.1.3, tag: @firebase/webchannel-wrapper@0.2.6, tag: @firebase/util@0.1.6, tag: @firebase/storage@0.1.6, tag: @firebase/storage-types@0.1.1, tag: @firebase/polyfill@0.1.4, tag: @firebase/messaging@0.1.7, tag: @firebase/messaging-types@0.1.1, tag: @firebase/firestore@0.2.3, tag: @firebase/firestore-types@0.1.1, tag: @firebase/database@0.1.7, tag: @firebase/database-types@0.1.1, tag: @firebase/auth@0.3.2, tag: @firebase/auth-types@0.1.1, tag: @firebase/app@0.1.6, tag: @firebase/app-types@0.1.1) +Author: Josh Crowther +Date: Thu Jan 11 11:31:12 2018 -0800 + + Publish + + - @firebase/app-types@0.1.1 + - @firebase/app@0.1.6 + - @firebase/auth-types@0.1.1 + - @firebase/auth@0.3.2 + - @firebase/database-types@0.1.1 + - @firebase/database@0.1.7 + - firebase@4.8.2 + - @firebase/firestore-types@0.1.1 + - @firebase/firestore@0.2.3 + - @firebase/messaging-types@0.1.1 + - @firebase/messaging@0.1.7 + - @firebase/polyfill@0.1.4 + - @firebase/storage-types@0.1.1 + - @firebase/storage@0.1.6 + - @firebase/util@0.1.6 + - @firebase/webchannel-wrapper@0.2.6 + - firebase-browserify-test@0.1.3 + - firebase-package-typings-test@0.1.1 + - firebase-messaging-selenium-test@0.1.3 + - firebase-typescript-test@0.1.3 + - firebase-webpack-test@0.1.3 + +commit bd553a13f06271fe37b4453cdcb4870b3321da8d +Author: Josh Crowther +Date: Thu Jan 11 10:27:10 2018 -0800 + + Removing internal URL (#425) + +commit 5d52a82eea3e8b379ebe7fda35fe1acd4e5a67fe +Author: Josh Crowther +Date: Thu Jan 11 10:25:36 2018 -0800 + + Add a "declare module" statement to index.d.ts (#424) + +commit d849aa1ef7a52ea82a356c3b92530cb2865ae3ae (tag: firebase@4.8.2-0, tag: firebase-webpack-test@0.1.3-0, tag: firebase-typescript-test@0.1.3-0, tag: firebase-package-typings-test@0.1.1-0, tag: firebase-messaging-selenium-test@0.1.3-0, tag: firebase-browserify-test@0.1.3-0, tag: @firebase/webchannel-wrapper@0.2.6-0, tag: @firebase/util@0.1.6-0, tag: @firebase/storage@0.1.6-0, tag: @firebase/storage-types@0.1.1-0, tag: @firebase/polyfill@0.1.4-0, tag: @firebase/messaging@0.1.7-0, tag: @firebase/messaging-types@0.1.1-0, tag: @firebase/firestore@0.2.3-0, tag: @firebase/firestore-types@0.1.1-0, tag: @firebase/database@0.1.7-0, tag: @firebase/database-types@0.1.1-0, tag: @firebase/auth@0.3.2-0, tag: @firebase/auth-types@0.1.1-0, tag: @firebase/app@0.1.6-0, tag: @firebase/app-types@0.1.1-0) +Author: Josh Crowther +Date: Tue Jan 9 13:46:36 2018 -0800 + + Publish + + - @firebase/app-types@0.1.1-0 + - @firebase/app@0.1.6-0 + - @firebase/auth-types@0.1.1-0 + - @firebase/auth@0.3.2-0 + - @firebase/database-types@0.1.1-0 + - @firebase/database@0.1.7-0 + - firebase@4.8.2-0 + - @firebase/firestore-types@0.1.1-0 + - @firebase/firestore@0.2.3-0 + - @firebase/messaging-types@0.1.1-0 + - @firebase/messaging@0.1.7-0 + - @firebase/polyfill@0.1.4-0 + - @firebase/storage-types@0.1.1-0 + - @firebase/storage@0.1.6-0 + - @firebase/util@0.1.6-0 + - @firebase/webchannel-wrapper@0.2.6-0 + - firebase-browserify-test@0.1.3-0 + - firebase-package-typings-test@0.1.1-0 + - firebase-messaging-selenium-test@0.1.3-0 + - firebase-typescript-test@0.1.3-0 + - firebase-webpack-test@0.1.3-0 + +commit 143897186fcc70632273e59452f01bd976061864 +Author: Josh Crowther +Date: Tue Jan 9 10:45:57 2018 -0800 + + Add @license annotation to externs (#421) + +commit 84a7e7998c7f5782d973a4e4b9f5ac3d96079676 +Author: Josh Crowther +Date: Mon Jan 8 13:48:28 2018 -0500 + + Partial Typings Revert (#401) + + * Partial revert of a6b6689 to fix wrapper package typings + + * Add helper to setup links to all packages + + * [AUTOMATED]: Prettier Code Styling + + * Add a simple test to validate that the typings are properly exported + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Fix database typings issue + + * [AUTOMATED]: Prettier Code Styling + + * Fixing nit from @hiranya911 + +commit 7789ad54082c879d219371bec2b65ea88d6301e7 +Author: Josh Crowther +Date: Mon Jan 8 13:17:22 2018 -0500 + + package.json Fixes (#416) + + * Add "author" field to package.json files + + * Add repository field to package.json + +commit 1a1bd233b0f459932f8f970836fb7ec2c13d1ee5 +Author: Sebastian Schmidt +Date: Fri Jan 5 13:59:16 2018 -0800 + + Fixing potential race in ServerTimestamp tests (#413) + + * Fixing potential race in ServerTimestamp tests + + * Removing firebase as any + +commit b3c2b5b3bc1595ab51abe180f00cd35545ab9cef +Author: Michael Lehenbauer +Date: Thu Jan 4 09:20:16 2018 -0800 + + Update yarn.lock. + +commit d61c0a56f974cc690088027bfa8cf4aace627f43 +Author: Justin Sprigg +Date: Fri Jan 5 04:10:35 2018 +1100 + + Narrow ThenableReference type definition (#410) + + Fixes #354 + +commit 3daa975eb754fa88f843cd794a303fb07dfe53e5 +Author: Michael Lehenbauer +Date: Thu Jan 4 09:07:00 2018 -0800 + + Add an initial tslint.json and add a "yarn lint" command to use it. (#409) + +commit acb7321fe9a48e0e581059672c4149ae32b96fbc +Merge: 3f5d7f787 3822d3a27 +Author: Sebastian Schmidt +Date: Tue Jan 2 15:57:24 2018 -0800 + + Merge + +commit 3822d3a27521c96a999669a0760863e8809cbb32 +Author: Thomas Broadley +Date: Wed Dec 27 12:18:35 2017 -0500 + + docs: fix typos (#397) + +commit 72cd164614b3eef29012c6343fd38ce38fef46d6 +Author: Austin Peterson +Date: Wed Dec 27 12:17:47 2017 -0500 + + Replace all instances of 'intialize' with 'initialize'. (#399) + +commit 3f5d7f78762b590d3bfd5d3185fb3eb96fbb742c +Author: Greg Soltis +Date: Thu Dec 21 15:39:04 2017 -0800 + + Add requested log line (#395) + +commit 403a0b868c00542ced2f9c91486af4abc20b6903 +Author: Josh Crowther +Date: Tue Dec 19 13:32:17 2017 -0800 + + Ensure app-types package includes private.d.ts (#391) + +commit 6c4a686f31859f2146a1001ae890db51ad4b984b +Author: Michael Lehenbauer +Date: Tue Dec 19 10:18:48 2017 -0800 + + Rename EventManager.onOnlineStateChanged => applyOnlineStateChange (#385) + +commit d8c20f08672e644fbab85ecbd11b5dc246f43454 (tag: firebase@4.8.1, tag: firebase-webpack-test@0.1.2, tag: firebase-typescript-test@0.1.2, tag: firebase-messaging-selenium-test@0.1.2, tag: firebase-browserify-test@0.1.2, tag: @firebase/util@0.1.5, tag: @firebase/storage@0.1.5, tag: @firebase/storage-types@0.1.0, tag: @firebase/messaging@0.1.6, tag: @firebase/messaging-types@0.1.0, tag: @firebase/firestore@0.2.2, tag: @firebase/firestore-types@0.1.0, tag: @firebase/database@0.1.6, tag: @firebase/database-types@0.1.0, tag: @firebase/auth@0.3.1, tag: @firebase/auth-types@0.1.0, tag: @firebase/app@0.1.5, tag: @firebase/app-types@0.1.0) +Author: Josh Crowther +Date: Mon Dec 18 16:00:29 2017 -0800 + + Publish + + - @firebase/app-types@0.1.0 + - @firebase/app@0.1.5 + - @firebase/auth-types@0.1.0 + - @firebase/auth@0.3.1 + - @firebase/database-types@0.1.0 + - @firebase/database@0.1.6 + - firebase@4.8.1 + - @firebase/firestore-types@0.1.0 + - @firebase/firestore@0.2.2 + - @firebase/messaging-types@0.1.0 + - @firebase/messaging@0.1.6 + - @firebase/storage-types@0.1.0 + - @firebase/storage@0.1.5 + - @firebase/util@0.1.5 + - firebase-browserify-test@0.1.2 + - firebase-messaging-selenium-test@0.1.2 + - firebase-typescript-test@0.1.2 + - firebase-webpack-test@0.1.2 + +commit 8fca35fca700a27954316542ccdb0640743316af +Author: Sebastian Schmidt +Date: Mon Dec 18 12:23:42 2017 -0800 + + Adding Snapshot Options to deal with Server Timestamps (#361) + +commit 60c9d4acaf5b89448f5789d6bb7dc4072da16d78 +Author: Greg Soltis +Date: Mon Dec 18 10:25:01 2017 -0800 + + Expose network management (#378) + + * Drop a few unused parameters to RemoteStore + + * [AUTOMATED]: Prettier Code Styling + + * Start work on exposing network management + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Drop unnecessary remote_store test + + * [AUTOMATED]: Prettier Code Styling + + * Update comments + + * Drop a few unused parameters to RemoteStore + + * [AUTOMATED]: Prettier Code Styling + + * Start work on exposing network management + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Drop unnecessary remote_store test + + * Update comments + + * fix another firebaseInternal reference + + * Add spaces + + * [AUTOMATED]: Prettier Code Styling + + * Add conditional logic to shutdown() and handleUserChange() + + * Move state changes out of disableNetworkInternal + + * Drop extra debounce + + * Update comments + +commit 9f0674af10e67b99096b511afbdc619f2da27925 +Author: Michael Lehenbauer +Date: Fri Dec 15 16:21:13 2017 -0800 + + Add changelog entry for new warning log messages. (#382) + + * Add changelog entry for offline warning. + + * Make offline warning an `error` instead of `debug`. (#379) + + * Add changelog entry for resource-exhausted log message. + +commit 0c80882bf26fd7e95675f661cbea7a3d9a69d675 +Author: rsgowman +Date: Thu Dec 14 14:04:23 2017 -0500 + + Remove 'tags' from log.error() statements. (#376) + + While log.debug() statements take a tag parameter, log.error() + statements do not. (Note that they still work even with a tag parameter + since log.error() takes in a va_list.) + +commit 8f6270639538d07e14d6cbb4e6871a4f1c07b84b +Author: Greg Soltis +Date: Thu Dec 14 10:27:27 2017 -0800 + + Make disable internal sync and update notes about OnlineState (#380) + + * Make disableNetworkInternal explicitly synchronous + + * Add notes to OnlineState type + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: Prettier Code Styling + + * Update comments per Michael's suggestions + + * More fixup + +commit 414e78bc7f7e452830c1b1d0321097c67b31ba13 +Author: rsgowman +Date: Thu Dec 14 13:19:52 2017 -0500 + + Always log resource exhausted errors to console ... (#375) + + ... when receiving webchannel messages. Even without debug mode one + (i.e. even when the caller hasn't called + firebase.firestore.setLogLevel('debug')). + + Without this, the developer would have no idea why firestore was not + returning any data, as it would just silently not work. + + b/69638501 + +commit 2fa51d3b45705e9f27f500ab4def078905cbed4e +Author: zxu +Date: Wed Dec 13 16:15:41 2017 -0500 + + Make offline warning an `error` instead of `debug`. (#379) + + * make offline warning an `error` instead of `debug` + + By default, debug is not shown. We actually want the default behavior to show offline warning, if offline. + + * not using tag in `log.error` + +commit 0eaecd8fcd44afec72e7910f5111589eb0a349f7 +Author: Michael Lehenbauer +Date: Wed Dec 13 09:45:45 2017 -0800 + + b/68276665: Raise isFromCache=true events when offline (#358) + + * Plumbs OnlineState changes through to views. + * View sets this.current to false on OnlineState.Failed, triggering + isFromCache=true events. It will automatically be returned to true + once the listen is reestablished and we get a new CURRENT message. + * Updated tests (and added one new one) to verify behavior. + * Unifies setOnlineStateToUnknown(), setOnlineStateToHealthy(), and + updateAndBroadcastOnlineState() into a single updateOnlineState() + method. + * Split disableNetwork() into `public disableNetwork()` and + `private disableNetworkInternal(targetOnlineState: OnlineState)`. + * Some miscellaneous comment cleanup. + +commit 39d1bffb65637e9b738af25b46554864c1e6c091 +Author: Sebastian Schmidt +Date: Wed Dec 13 17:07:58 2017 +0800 + + Making DocumentSnaphot.data() nullable (#364) + + * Making DocumentSnapshot nullable + +commit dedd2dcfb8840419aa2eb967d60a4c6753f034e6 +Author: Sebastian Schmidt +Date: Wed Dec 13 09:48:04 2017 +0800 + + [AUTOMATED]: Prettier Code Styling + +commit 7a23ec5f03dbbafe1b16af596bff1e66cc3b7b7e +Author: Josh Crowther +Date: Tue Dec 12 14:45:11 2017 -0500 + + Updating CODEOWNERS file (#373) + +commit aefa9517a2a3bdcf2ff8ef77f9238568dd557cd9 +Author: Ryan Brewster +Date: Mon Dec 11 11:08:23 2017 -0800 + + Encode strings as UTF-8 before/after converting to base64 (#362) + + * Add test that catches error + + * Even simpler test + + * Steal goog.crypt UTF8 encoding + + * [AUTOMATED]: Prettier Code Styling + + * More test cases + +commit a6b66892806d8393d20fad4f11325ba5b1a0e701 +Author: Josh Crowther +Date: Mon Dec 11 09:45:20 2017 -0500 + + Typings Refactor (#334) + + * Add @firebase/app-types + + * Add @firebase/auth-types stub + + * Add @firebase/database-types stub + + * Add @firebase/firestore-types stub + + * Add @firebase/messaging-types stub + + * Add @firebase/storage-types stub + + * Add "typings" field to components package.json + + * Add typings dependencies to each component + + * Add @firebase/messaging-types + + * Add @firebase/storage-types + + * Add @firebase/auth-types + + * Refactor the Persistence object on FirebaseAuth class + + * Add @firebase/firestore types + + * Fix compilation type module require issues + + * Add @firebase/database types + + * Fix issues in firestore/storage types + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Refactor firebase package types + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Review feedback from @mikelehen + + * [AUTOMATED]: Prettier Code Styling + + * Reintroduce private constructors + + * Remove "as any" cast in firebase_export.ts + + * [AUTOMATED]: Prettier Code Styling + + * Removing unneeded comment + + * Address feedback from @schmidt-sebastian + + * Fix disparities with prod externs + + * Adding new @firebase/auth methods + + * [AUTOMATED]: Prettier Code Styling + +commit a2c99358a0d63242e39c5c0ab36364259446e694 +Author: Greg Soltis +Date: Fri Dec 8 11:48:58 2017 -0800 + + Drop unused params (#360) + + * Drop a few unused parameters to RemoteStore + + * [AUTOMATED]: Prettier Code Styling + +commit 819eda131ab67796269b20e7d088144879ed6931 (tag: firebase@4.8.0, tag: firebase-webpack-test@0.1.1, tag: firebase-typescript-test@0.1.1, tag: firebase-messaging-selenium-test@0.1.1, tag: firebase-firestore-integration-test@1.0.1, tag: firebase-browserify-test@0.1.1, tag: @firebase/webchannel-wrapper@0.2.5, tag: @firebase/util@0.1.4, tag: @firebase/storage@0.1.4, tag: @firebase/polyfill@0.1.3, tag: @firebase/messaging@0.1.5, tag: @firebase/firestore@0.2.1, tag: @firebase/database@0.1.5, tag: @firebase/auth@0.3.0, tag: @firebase/app@0.1.4) +Author: Josh Crowther +Date: Thu Dec 7 15:33:22 2017 -0800 + + Publish + + - @firebase/app@0.1.4 + - @firebase/auth@0.3.0 + - @firebase/database@0.1.5 + - firebase@4.8.0 + - @firebase/firestore@0.2.1 + - @firebase/messaging@0.1.5 + - @firebase/polyfill@0.1.3 + - @firebase/storage@0.1.4 + - @firebase/util@0.1.4 + - @firebase/webchannel-wrapper@0.2.5 + - firebase-browserify-test@0.1.1 + - firebase-firestore-integration-test@1.0.1 + - firebase-messaging-selenium-test@0.1.1 + - firebase-typescript-test@0.1.1 + - firebase-webpack-test@0.1.1 + +commit c6c09764a7bca1521e21bacfbbaf65b12da86665 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Wed Dec 6 16:48:02 2017 -0800 + + handled empty auth uri error (#353) + +commit 72536c468d2375794a3b18c20fd032d6f0adf178 +Author: zxu +Date: Wed Dec 6 16:18:13 2017 -0500 + + Firestore log offline warning (#352) + + * Firestore log offline warning iff not ever online and not log before. + +commit 631c4634fdba4cffdab879a06ec01b9df3c062ca +Author: Josh Crowther +Date: Tue Dec 5 13:14:05 2017 -0500 + + Lerna exact (#351) + + * Update packages to publish exact versions + + * Removing scopes from lerna commands + +commit 1fddc3b57f229d4d7bcb047396d3b57635bc2c05 +Author: wti806 <32399754+wti806@users.noreply.github.com> +Date: Mon Dec 4 14:47:43 2017 -0800 + + Merged first part of revamp_sign_in_methods (#344) + + * Merged first part of revamp_sign_in_methods + + * used new sign in methods in test app + + * added second part of revamp sign in methods + + * added new APIs to Auth externs + + * [AUTOMATED]: Prettier Code Styling + + * fixed indentation + + * updated auth externs for sign-in methods + + * changed format of type name is reference doc + +commit b70a30960fce937c0b625de762fa184a55002117 +Author: Robin +Date: Mon Dec 4 17:08:53 2017 +0100 + + extended build config webchannel-wrapper to support web worker - based on issue #285 (#346) + +commit cc92e4af5f9a78ac5b0bd69bc0b46463b35ac930 +Author: Greg Soltis +Date: Mon Dec 4 07:23:10 2017 -0800 + + Add Java dependency (#347) + + Closure compiler requires java 8, update docs. + +commit e979cc7793ee0a4f1c22590e4635f975615627b6 (tag: firebase@4.7.0, tag: @firebase/util@0.1.3, tag: @firebase/storage@0.1.3, tag: @firebase/messaging@0.1.4, tag: @firebase/firestore@0.2.0, tag: @firebase/database@0.1.4, tag: @firebase/app@0.1.3) +Author: Josh Crowther +Date: Thu Nov 30 13:05:22 2017 -0800 + + Publish + + - @firebase/app@0.1.3 + - @firebase/database@0.1.4 + - firebase@4.7.0 + - @firebase/firestore@0.2.0 + - @firebase/messaging@0.1.4 + - @firebase/storage@0.1.3 + - @firebase/util@0.1.3 + +commit dd8042b76e0c0d498761eb85098b4d3babff29c3 +Author: jhuleatt +Date: Wed Nov 29 14:35:29 2017 -0800 + + Remove IE9 and 10 in ENVIRONMENTS.md (#342) + + https://github.com/firebase/firebase-js-sdk/issues/341 + +commit b703bafb0a8cb36da77f12862faac195399d7d32 +Author: Josh Crowther +Date: Tue Nov 28 13:24:57 2017 -0800 + + Add .sh extension to missing scripts (#339) + +commit 790fa1af995a2f89623b477757820708f7ce8ff1 +Author: Josh Crowther +Date: Tue Nov 28 09:58:48 2017 -0800 + + Publish helper (#326) + + * Adding publish script to automate publish workflow + + * Adding scripts to aid in publishing the SDK + + * Implement @hiranya911 feedback + + * Added "prod" flag + +commit 9f356b6e9ecdf15a7eb16ca554c0c595b7ae8ccd +Author: Michael Lehenbauer +Date: Mon Nov 20 16:29:01 2017 -0800 + + Add Node.JS support to changelog. (#327) + +commit 087375c5cf1b3acadec99b93b2a63079118e6434 +Author: Michael Lehenbauer +Date: Mon Nov 20 11:36:58 2017 -0800 + + Revive Node.JS Support for Cloud Firestore (fixes #221). (#319) + + * Fix miscellaneous node / GRPC bit rot. + * Re-add grpc dependency (upgraded). + * Avoid protobufjs dependency by loading protos via grpc. + * Remove crazy grpc stream error handling nonsense that is no longer + necessary after https://github.com/grpc/grpc/pull/9101 + * Clean up grpc_connection logging (and consistently use util.inspect()). + * Fix WebChannel / GRPC Connection compatibility issues. + * Add an explicit mapping from "RPC name" (e.g. "BatchGetDocuments") to the + REST url path (e.g. "batchGet") for WebChannel, and for GRPC just assume + the first letter should be lowercased (e.g. "batchGetDocuments"). + * Split Connection.invoke() into invokeRPC() and invokeStreamingRPC(), with + the latter accepting a stream of results and aggregating them into an + array (needed to support BatchGetDocuments RPC). + * Fix serializer issues + * Query limits are an 'Int32Value' but we were serializing them as a normal + int which GRPC / protobufjs didn't like. + * Several proto "oneof tags" were outdated. + * Add build steps to copy protos into npm package. + * Run integration tests for Node.JS + * Added to 'test:node' script in package.json and in .vscode/launch.json + * Include index.ts for browser and index.node.ts for node so the appropriate + PlatformSupport gets registered. + * Misc cleanup + * Remove unused MockPlatform since we use the normal NodePlatform now. + * Remove 'google-auth-library' CredentialsProvider that we used to use for + node.js (before we were integrated with FirebaseAuth). + * Fixed several tests that were hitting node.js warnings about unhandled + promise failures. + * mocha commmand-line args: + * "--compilers ts:ts-node/register" was deprecated in favor of + "--require ts-node/register" + * Remove "--retries 5" when running mocha tests from VS Code. + * Consistently use "--require" instead of "-r" + * Add "--exit" when running from VS Code. + +commit 2e1b376206f6dc03ad0723f94802492ba0311a34 +Author: Michael Lehenbauer +Date: Fri Nov 17 09:19:01 2017 -0800 + + Add Webchannel change to changelog. (#324) + +commit 796828d979d60dd9a5ebd7f903c87f963a9d31e0 +Author: Michael Lehenbauer +Date: Fri Nov 17 08:12:10 2017 -0800 + + b/68251551: Send headers via URL Param to avoid CORS preflight round-trip. (#322) + + Send headers via URL Param to avoid CORS preflight round-trip. + +commit 7db74e6111051eab499b0d3e95fb0789200cb14a +Author: Josh Crowther +Date: Thu Nov 16 15:26:37 2017 -0800 + + Instrument Repo for Code Coverage (#268) + + * First pass coverage implementation + + * Instrumenting node coverage where appropriate + + * [AUTOMATED]: Prettier Code Styling + + * Configure to pipe to coveralls + + * Configure karma to report coverage by browser + + * Augment .travis.yml to report coverage + + * Refacor .travis.yml to use yarn for consistency + + * Refactor to properly use lcovonly reporter + + * Refactor to run coverage scripts only on success + + * [AUTOMATED]: Prettier Code Styling + +commit c5e318c0a1e6960b40542650464332d5e3b6c502 +Author: Michael Lehenbauer +Date: Thu Nov 9 16:19:23 2017 -0800 + + Update Firestore changelog. (#313) + + * changelog + + * Add React Native fix. + + * Revert "Add React Native fix." + + This reverts commit f19e49e82c2ded9e85c76667f184a792e3a29c9c. + + * Add version number, and FieldValue.delete() feature missed in the 0.1.2 notes. + +commit 1f0712ea6361d956f2e1402ca7380c8f720ee54e +Author: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> +Date: Thu Nov 9 16:14:32 2017 -0800 + + Firestore: in tests, fix SpecWatchFilter type to work on upcoming Typescript 2.7 (#310) + + * Fix definition of SpecWatchFilter:firestore tests + + Previously, the type SpecWatchFilter in spec_test_runner was specified + as a tuple, but it was later used with `push` and is actually an array with a + first element that is guaranteed to be present, and of type TargetId[]. + + In Typescript 2.7, tuples will be fixed-length and this usage will fail. + This changes the definition of SpecWatchFilter to an interface + that extends Array and whose required '0' property + is a TargetId[]. + +commit cbb07d346e59e5187ac12ff96aa52e7e3cca2b8a (tag: firebase@4.6.2, tag: @firebase/webchannel-wrapper@0.2.4, tag: @firebase/firestore@0.1.4, tag: @firebase/auth@0.2.2) +Author: Josh Crowther +Date: Thu Nov 9 15:27:35 2017 -0800 + + Publish + + - @firebase/auth@0.2.2 + - firebase@4.6.2 + - @firebase/firestore@0.1.4 + - @firebase/webchannel-wrapper@0.2.4 + +commit 6dbc3c957b22145a795e5bbb951fe8bce973db7f +Author: Josh Crowther +Date: Thu Nov 9 15:14:19 2017 -0800 + + Supply default (working) config for CI environment (#312) + +commit 7ac5c2e3f226b75e0066055c42483dbc69a2af84 +Author: Michael Lehenbauer +Date: Wed Nov 8 14:18:34 2017 -0800 + + b/68783609: Ensure test cleanup runs for failed spec tests. (#307) + +commit 43785a46a2410842be7f748fe8f5f515959140d1 +Author: Michael Lehenbauer +Date: Wed Nov 8 12:25:08 2017 -0800 + + Upgrade closure-builder to fix #183. (#304) + +commit 14c0a37459518d5283487c954cbfcce0a420a9f5 +Author: Michael Lehenbauer +Date: Wed Nov 8 11:43:32 2017 -0800 + + Ensure test cleanup runs after failed tests. (#305) + +commit d2b14365957779e350759b3dafded30b76f267a5 +Author: Michael Lehenbauer +Date: Tue Nov 7 18:40:51 2017 -0800 + + Remove no-longer-necessary asyncIt wrappers. (#302) + +commit 88c85ef639657bc172ed14f20ecb80ec1f4aa404 +Author: Sebastian Schmidt +Date: Tue Nov 7 16:32:04 2017 -0800 + + Sending an empty write request before tearing down the WriteStream. (#297) + +commit c8bcb678454ad850d2959d50a9dce2ce6a602fd4 +Author: Michael Lehenbauer +Date: Tue Nov 7 00:49:11 2017 +0100 + + b/68058918: Async Queue error handling testing / improvement. (#296) + + * Adds testing to ensure that the original error is preserved and propagated in + the face of multiple failures in the queue (this already worked). + * Adds an asynchronous exception on queue failures so that they can be caught by + crash reporting libraries (otherwise, only subsequent failures with + "AsyncQueue is already failed: ..." would be caught). + +commit 4803cd38f99137bedfc773a528268b406e2ab33a +Author: Michael Lehenbauer +Date: Tue Nov 7 00:20:56 2017 +0100 + + b/67049845: Remove error logging on failed WebChannel RPCs. (#299) + + (and also remove inaccurate comments / logs about retrying) + +commit e6c1653d5b4cb871df0569d3280bd5776eb9d4b4 +Author: Michael Lehenbauer +Date: Mon Nov 6 23:11:48 2017 +0100 + + Fix broken Firestore test. (#298) + + This test had two problems: + + 1. After reading the document a second time (as doc) it was validating fromCache on the old version (snapshot). + 2. It wasn't returning the Promise, causing the failure to happen asynchronously and not be noticed by mocha. + + This in turn seems to have (sometimes?) caused errors about offline persistence being enabled in a different tab. I fixed the test and implemented it with more chaining instead of nesting. :-) + +commit d43d461aaa2496d4cd12fd593373f6dad214716f +Author: Sebastian Schmidt +Date: Fri Nov 3 18:40:15 2017 -0700 + + Closing the write and the watch stream after 60s of idleness (#275) + +commit 369b411b52de56ad38c82993c9dca4b6bd7b82a4 +Author: bojeil-google +Date: Thu Nov 2 17:14:39 2017 -0700 + + fix(auth): fixes various Auth bugs. (#287) + + Fixes verifyAssertion unrecoverable errors when returnIdpCredential is set to true. + In this case, the error code is returned along with the credential in the errorMessage without any + ID token/refresh token. + + Catch, suppress/handle when localStorage is null or when `localStorage.getItem` + throws a security error due to access being disabled by the browser for whatever reason. + +commit 7dc12c2cad4652b64ec1a78b00c6376082845005 +Author: bojeil-google +Date: Thu Nov 2 16:22:50 2017 -0700 + + Adds a demo app to help test and facilitate Firebase Auth API development (#279) + + * Adds a demo app to help test and facilitate Firebase Auth API development. + +commit 60d8f4f6ec7a222014f389352d732b3a556eed0b +Author: Josh Crowther +Date: Thu Nov 2 15:48:32 2017 -0700 + + Disable automatic integration tests (#289) + +commit 0ea11f25910615b5a9643b44177356ca6374dc13 (tag: firebase@4.6.1, tag: @firebase/util@0.1.2, tag: @firebase/storage@0.1.2, tag: @firebase/polyfill@0.1.2, tag: @firebase/messaging@0.1.3, tag: @firebase/firestore@0.1.3, tag: @firebase/database@0.1.3, tag: @firebase/auth@0.2.1, tag: @firebase/app@0.1.2) +Author: Josh Crowther +Date: Thu Nov 2 15:06:26 2017 -0700 + + Publish + + - @firebase/app@0.1.2 + - @firebase/auth@0.2.1 + - @firebase/database@0.1.3 + - firebase@4.6.1 + - @firebase/firestore@0.1.3 + - @firebase/messaging@0.1.3 + - @firebase/polyfill@0.1.2 + - @firebase/storage@0.1.2 + - @firebase/util@0.1.2 + +commit 305a3f95d18f99912970f120194f060a0db30ecb +Author: Josh Crowther +Date: Thu Nov 2 15:02:42 2017 -0700 + + Update publish scripts + +commit 53d762207a1369f2c5cd9c647bfd83d0a21cf33c +Author: Josh Crowther +Date: Wed Nov 1 19:00:28 2017 -0700 + + Adding new auth code owner (#288) + +commit eedae9b4f255a3a985f45da7fddff4411308241a +Author: Josh Crowther +Date: Wed Nov 1 15:13:12 2017 -0700 + + Add a debug script to integration/firestore (#286) + +commit f2c4e6dbbcc32adc475545166801ef2006ea6b69 +Author: Josh Crowther +Date: Tue Oct 31 14:15:09 2017 -0700 + + Pin Node version to 8 (released as LTS) (#282) + +commit a7c71d4f97db69ed5e061dc1fce4ca05c6a928d9 +Author: Josh Crowther +Date: Tue Oct 31 10:59:24 2017 -0700 + + Temporarily disable flakey messaging tests (@gauntface to investigate) (#281) + +commit 263596a6aeb059acf19a619b00716b9a0ae624c4 +Author: Josh Crowther +Date: Mon Oct 30 16:49:58 2017 -0700 + + Open Source Firebase Authentication (#273) + + * Open source Firebase Auth + + * Cleans up some comments in the Auth open sourced code. + + * Recommiting yarn.lock + +commit dc17ad5531c531504c5df7aca7fb4c3f9d373feb +Author: Josh Crowther +Date: Mon Oct 30 14:20:26 2017 -0700 + + Update Package Dependencies (#270) + + * Update dependencies throughout application + + * Adjust to mocha 4 breaking runner issues + + * Updating webpack dep + +commit 41f80d0aadb6dc9d9c85e731887ddcbe772b5c04 +Author: Todd Pressley +Date: Mon Oct 30 17:16:15 2017 -0400 + + typo in comment (#276) + +commit deedb015d3bd7b63dca10459f87180a73e5c77a9 +Author: Josh Crowther +Date: Fri Oct 27 11:07:15 2017 -0700 + + Refactor messaging integration test to retry test failures (#271) + +commit 53d13c56323f5940d4955b2d366c6dbc3aae9d51 +Author: Josh Crowther +Date: Wed Oct 25 16:34:07 2017 -0700 + + Fixing Typings for RTDB (#264) + + * Re-exported the typings from database for admin use case + + * [AUTOMATED]: Prettier Code Styling + + * Fixing case issue + + * Whoops, missed one + +commit e1dceac317168fb7017ddf84a49c3c3cac1601c0 +Author: Sebastian Schmidt +Date: Wed Oct 25 13:55:47 2017 -0700 + + Creating Stream Tests for the Web Client (#260) + +commit 0f888d1272e02ade50c40e49f6b187b8f1c0c98a +Author: Michael Lehenbauer +Date: Wed Oct 25 13:05:36 2017 -0700 + + Firestore typings fix: Add firestore() to firebase.app.App. (#263) + +commit fba3c06cfd7baee797c1bec629ade4c200b01d18 +Author: Michael Lehenbauer +Date: Mon Oct 23 10:11:09 2017 -0700 + + Fix generate_spec_json script. (#257) + + * The tsconfig path was broken after the recent repo refactor. + * We were accidentally leaving a .ts in the destination json file names. + * I made it so the destination directory doesn't need to exist in advance. + +commit e104359325f970e84360309a71a7c07d7f67aa05 +Author: Gil +Date: Mon Oct 23 09:27:23 2017 -0700 + + Update CHANGELOG for Firestore v0.1.2 (#254) + +commit 52a4cdffd0a6d41f224c4d1c20312e1c8ee17133 +Author: Josh Crowther +Date: Mon Oct 23 08:07:30 2017 -0700 + + Update the test:setup script to configure firestore settings (#240) + + * Update test:setup command to configure firestore + + * [AUTOMATED]: Prettier Code Styling + + * Add required "indexes" field + + * Update the README.md for firestore + +commit b7566d11f52f34e41e5c3349c8db0f9349e937cd +Author: Sebastian Schmidt +Date: Sat Oct 21 18:34:30 2017 -0700 + + Allowing field deletes with merge-enabled sets (#248) + +commit a8181f4560725b902daab1dc3d31a48f3f96e919 +Author: Michael Lehenbauer +Date: Fri Oct 20 15:31:40 2017 -0700 + + Avoid using hardcoded document paths which could cause conflicts when tests are running concurrently (e.g. on Travis). (#250) + +commit eba194f7ec4a2e8b4fe6c365fa4407c5e1922c99 +Author: Michael Lehenbauer +Date: Fri Oct 20 10:07:49 2017 -0700 + + Dev-X improvements for running Firestore tests. (#243) + + See new packages/firestore CONTRIBUTING.md doc for new abilities. + + Changes: + * Add --local flag to run against a localhost Firestore server. + * Add --unit and --integration flags to limit to unit or integration tests. + * Make --grep work with karma / mocha to limit the tests that run. + * Change default karma port to 8089 to avoid conflicting with localhost + Firestore server on 8080 (and other common web servers that default + to 8080). + +commit 8db58d37ba420c793b2ac7561d8dd9d39cec3ff9 (tag: firebase@4.6.0, tag: @firebase/messaging@0.1.2, tag: @firebase/firestore@0.1.2, tag: @firebase/database@0.1.2, tag: @firebase/auth@0.2.0) +Author: Josh Crowther +Date: Thu Oct 19 15:12:52 2017 -0700 + + Publish + + - @firebase/auth@0.2.0 + - @firebase/database@0.1.2 + - firebase@4.6.0 + - @firebase/firestore@0.1.2 + - @firebase/messaging@0.1.2 + +commit f5e674c5c6e8a056c08dfee69b78c637f7432430 +Author: bojeil-google +Date: Thu Oct 19 10:30:08 2017 -0700 + + fix(externs): fix missing auth externs for 4.6.0 (#241) + + * fix(externs): fix missing auth externs for 4.6.0 + + * Update auth typings + + * [AUTOMATED]: Prettier Code Styling + +commit f046e0e5d7657ea9d57a5103c366fee15095d278 +Author: Josh Crowther +Date: Wed Oct 18 15:34:10 2017 -0700 + + Leverage Cached Token from firebase-tools (#215) + + * Build in a check for the cached firebase-tools refresh_token + + * [AUTOMATED]: Prettier Code Styling + +commit 0a6ad04befd820ec52b05040e86ff52a62e37fa5 +Author: Matt Gaunt +Date: Wed Oct 18 15:15:31 2017 -0700 + + Tidy firebase-messaging Tests (#232) + + * Tidied tests to more reliably close and delete indexedDB databases before and after each test + + * Update package.json + +commit 3ca20c7a562d007091b4fc27d64ad7fffefa28e1 +Author: Josh Crowther +Date: Wed Oct 18 13:11:55 2017 -0700 + + Fixing named prop "_lat" (#238) + + * Fixing named prop "_lat" + + * Adding comment to regex + +commit c2e1d3db632704bb6ac797d41bd63d07d1055f56 +Author: Michael Lehenbauer +Date: Wed Oct 18 11:26:59 2017 -0700 + + Try to address flaky database transaction tests. (#235) + + The test "Transaction without local events (2)" is inherently racey (we're trying to do 4 sets on one connection before the other connection retries the transaction 25 times). And when it fails, it could cause the rest of the tests to fail by not calling restoreHash(). So I've disabled the test and made the restoreHash handling a bit more robust so similar cascading failures can't happen in the future. + +commit f13188b0f98d635a3148a58ebcb3a2d27c87e094 +Author: Josh Crowther +Date: Wed Oct 18 11:23:36 2017 -0700 + + Reimport auth from internal (#237) + +commit 326a187ae83648314680470e246dd9c4a22d16cc +Author: Gil +Date: Wed Oct 18 10:12:33 2017 -0700 + + Add an initial CHANGELOG for firestore (#233) + + * Add an initial CHANGELOG for firestore + + * Add notes for v4.5.1 + + * Use Firestore package versions, not global Firebase versions + + * Empty commit + +commit 383f772c1e75e1148517ca352af3d1dc87bb40f9 +Author: Gil +Date: Tue Oct 17 15:25:55 2017 -0700 + + Fix validation of nested arrays to allow indirect nesting (#228) + + * Fix validation of nested arrays to allow indirect nesting + + With this change indirectly nested arrays are allowed. We still disallow + directly nested arrays. + + Fixes internal bug b/66253451. + + Port of https://github.com/firebase/firebase-ios-sdk/pull/377 + + * Add IntelliJ .iml files to .gitignore + + * Use comments to name literal arguments + +commit 4b555720172c71c8a4b70fad89193a4330b01840 +Author: Michael Lehenbauer +Date: Mon Oct 16 16:07:11 2017 -0700 + + Firestore: Add isEqual() and port DocumentReference array test. (#222) + + * Ports the test for the fix I made for Android for DocumentReference objects in arrays (bug not present in Web). + * Implements isEqual() on Query and DocumentReference + +commit 646dbb2dca6f099fa325b14ce85364275ac4b647 (tag: firebase@4.5.2, tag: @firebase/webchannel-wrapper@0.2.3, tag: @firebase/util@0.1.1, tag: @firebase/storage@0.1.1, tag: @firebase/polyfill@0.1.1, tag: @firebase/messaging@0.1.1, tag: @firebase/firestore@0.1.1, tag: @firebase/database@0.1.1, tag: @firebase/auth@0.1.1, tag: @firebase/app@0.1.1) +Author: Josh Crowther +Date: Mon Oct 16 10:24:54 2017 -0400 + + Bump firebase NPM packages + + - @firebase/app@0.1.1 + - @firebase/auth@0.1.1 + - @firebase/database@0.1.1 + - firebase@4.5.2 + - @firebase/firestore@0.1.1 + - @firebase/messaging@0.1.1 + - @firebase/polyfill@0.1.1 + - @firebase/storage@0.1.1 + - @firebase/util@0.1.1 + - @firebase/webchannel-wrapper@0.2.3 + +commit 9777c4b8533ce4dbeee97354743af8eac4523948 +Author: Josh Crowther +Date: Mon Oct 16 06:46:48 2017 -0700 + + @firebase/app Version Fix (#227) + + * Replace version in @firebase/app, add test to validate + + * [AUTOMATED]: Prettier Code Styling + +commit 95d04900d0558b2c6075474d7aaf57755259e5b2 +Author: Josh Crowther +Date: Mon Oct 16 06:13:13 2017 -0700 + + Add "react-native" prop to firebase/package.json (#224) + +commit f696a8fd511dcde1e703b2e63cef39e1ff0042a0 +Author: Josh Crowther +Date: Thu Oct 12 16:39:40 2017 -0700 + + Adding an entrypoint for firebase-admin-node (#216) + + * Expose init function for admin SDK + + * Fixing issues with module.exports for @firebase/database + + * [AUTOMATED]: Prettier Code Styling + + * Refactor namespaces -> namespace + +commit 9f4fb913e042ea2cb743a0b5ad81610540527447 +Author: Josh Crowther +Date: Thu Oct 12 15:07:21 2017 -0700 + + Refactor firestore int tests to be a private package (#218) + +commit 3e78ff3905ba06ccba6334787d754fa141f4d80c +Author: Josh Crowther +Date: Thu Oct 12 14:59:37 2017 -0700 + + Disabling travis branch restriction (#219) + +commit 6c4c2aad6e38d6ff2606d047899b63539f44a622 +Author: Michael Lehenbauer +Date: Thu Oct 12 14:42:38 2017 -0700 + + b/66916481: Reenable serializer unit tests. (#214) + + * Imports the protos we need (and adds an update.sh to re-import in the future) + * Reenables our serializer unit tests (for node only). + +commit fbb5f17d8eed279f652ba7087767205fdb7b333d (tag: v4.5.1) +Author: Josh Crowther +Date: Thu Oct 12 12:46:42 2017 -0700 + + Removing duplicate require (#217) + +commit 93622b217e0b49a05bc0fbbba00658950fa38d6e +Author: Michael Lehenbauer +Date: Thu Oct 12 10:54:16 2017 -0700 + + Firestore: Exclude node tests in the browser. (#213) + +commit 0a574801d3b3decd4fbd0b148307d5021c9e9e5c +Author: Josh Crowther +Date: Thu Oct 12 10:01:37 2017 -0700 + + Update READMEs of all of the packages (#210) + +commit 31d0f8dce31d73b4419459548b1b9081a3d9dbed +Author: Josh Crowther +Date: Wed Oct 11 17:23:57 2017 -0700 + + Removing storage/messaging from node build (included by accident) (#209) + +commit 33f1a0d0ef91b6a5072a9cb0f42ff25fb4d596dc +Author: Josh Crowther +Date: Wed Oct 11 17:18:05 2017 -0700 + + Fix default include problem (#208) + +commit 7b790bddcfb729740cb2cd96115fb33ec844ac21 +Author: Michael Lehenbauer +Date: Wed Oct 11 15:50:43 2017 -0700 + + Expose enable/DisableNetwork() via INTERNAL so it can be used in tests (but don't add to our .d.ts at least for now). (#207) + +commit 9a82f4360da1347fb1e7855b82b86d7cd0fcaa5a +Author: Josh Crowther +Date: Wed Oct 11 10:39:43 2017 -0700 + + Augmenting .npmignore and .gitignore (#206) + +commit de8c146c2593e292e5e0d49b1cc1e6828dc18c40 +Author: Josh Crowther +Date: Wed Oct 11 10:16:05 2017 -0700 + + Adding Firestore minified int tests (#199) + + * Fixing firestore integration tests + + * Regen yarn.lock + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Refactor timeout/retry logic to be globally applied + + * Documenting changes to firestore int tests + + * Fixing tests to properly build the firestore int tests + + * Trim dist directory for consistent rebuilds + + * [AUTOMATED]: Prettier Code Styling + + * Fixing some whitespace issues + +commit 1d9f803e50d6d26d770880567e34735fa37d0bf3 +Author: Sebastian Schmidt +Date: Wed Oct 11 17:40:27 2017 +0200 + + Adding goOnline/goOffline to the Web SDK (#201) + +commit d15d48c8358d1042de33d63f942ac678ff50d36f +Author: Bryan Klimt +Date: Tue Oct 10 16:12:57 2017 -0700 + + Update README files to fix names of packages. (#204) + +commit 3f827b82aa83cb6b5538bb7881f3253e9af0d15f +Author: Josh Crowther +Date: Mon Oct 9 14:17:37 2017 -0700 + + Fix for issue where firestore could not be loaded alongside firebase.js (#196) + + * Add gulpfile to properly build firebase.js binary + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Update yarn.lock + + * Refactor to use external maps (THANKS @mikelehen) + + * Add firebase files to .prettierignore + +commit d49daa04dee5bdae84cdb038cd9cf4b3b747c6a4 +Author: Michael Lehenbauer +Date: Mon Oct 9 13:39:54 2017 -0700 + + Avoid "private" getter _databaseId, since it breaks the minified build. (#197) + + Avoid "private" getter _databaseId, since it breaks the minified build. + + This should work fine, but there seems to be an issue with our minification process where usages of _databaseId get minified but the actual property does not, causing runtime errors. :-( + + I've opened https://github.com/firebase/firebase-js-sdk/issues/194 and https://github.com/firebase/firebase-js-sdk/issues/195 to track the underlying causes. + +commit 73a586c92afe3f39a844b2be86086fddb6877bb7 +Author: Josh Crowther +Date: Fri Oct 6 20:15:50 2017 -0700 + + Monorepo Refactor (#171) + + * Refactor monorepo to use yarn workspaces and lerna + + WIP: testing + + Refactor folder structure to use lerna + + WIP: more testing + + feat(util): add deferred class + + Publish + + - @firebase/app@0.1.1 + - @firebase/util@0.2.0 + + WIP: asdoifj + + WIP: build artifact + + WIP: asdf + + Cleaning up from .gitignore + + Add prepublish script + + Isolate base configs + + Making top level scripts parallel + + Adding storage + + Add messaging + + Adding database code + + TODO: Fix all of the broken issues and import the rest of the utils + + Adding type info + + add database + + Adding firebase package + + Generating ES Module builds + + Attaching firebase.js to the global scope + + Adding lint-staged to the build + + Removing commitizen dependency + + Updating metafiles + + Working on devx + + Add react-native package + + Move packages/firebase -> packages/core + + Fix issues with package.json + + Bump core version + + testing a thing + + Add more entries to the .npmignore + + * Refactor to better separate ESM/CJS builds + + * Adding test:setup script + + * Fix breaking test (sourcemaps loaded in the test breaks the regex) + + * Remove commitizen message from CONTRIBUTING.md + + * WIP: Migrate integration tests + + * Adding namespace integration tests + + * Add messaging integration tests + + * Fix issue with indv-module builds + + * Committing yarn.lock + + * Import 4.4.0 Changes + + * Add dev scripts, move core -> firebase + + * Add missing dependencies, flesh out dev experience + + * Add top level repl for test/debugging + + * Make the REPL pretty + + * Refactor to scope prepublish execution + + * Add @firebase/auth + + * Fixing broken int tests + + * Picking up missing changes from edad44d9bc30689635e994c9d4ba99adfb799af7 + + * Adding comment to .prettierignore + + * Fixed issue where firebase didn't exist on reset + + * Update yarn.lock for lint-staged + + * Refactor test setup script and .travis.yml + + * Fix firebase package dep versions + + * Refactor precommit hook -> prepush hook + + * [AUTOMATED]: Format Styling + + * Update prettier and prettierrc + + * [AUTOMATED]: Format Styling + + * Adding dist to .prettierignore + + * Fixing some oddities in yarn.lock + + * Refactor hooks prepublish -> prepare + + * Updating top-level scripts + + * Add pretest validation/checking + + * [AUTOMATED]: Prettier Code Styling + + * Running travis tests w/ xvfb-run + + * Add a spinner instead of the prettier stdio + + * update yarn.lock + + * [AUTOMATED]: Prettier Code Styling + + * Fixing child process STDOUT + + * [AUTOMATED]: Prettier Code Styling + + * Switch to using stopAndPersist() + + * Moving file gitHooks/index.js -> gitHooks/prepush.js + + * Remove legacy .lintstagedrc + + * Add typinngs file for those only including fiebase/app + + * Add initial stub for @firebase/polyfill + + * Adding new clean yarn.lock + + * Refactor const -> var (no transpiling) + + * Add automated license header validation + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Aesthetic prepush validation things + + * [AUTOMATED]: Prettier Code Styling + + * Add karma-sauce-launcher + + * Attempt 1: Try to get saucelabs browser testing working + + * Attempt 2: Adding sauceLabs config prop to karma.base + + * [AUTOMATED]: Prettier Code Styling + + * Attempt 3: Getting rid of the connectOptions + + * [AUTOMATED]: Prettier Code Styling + + * Fix CODEOWNERS + + * Add module boilerplate for @firebase/firestore + + * Refactor Firestore source to standalone package + + * Remove unneeded typings + + * Remove unneeded promise dependency + + * Fix top level paths + + * Bump firebase package version + + * Fix firestore source paths + + * Fix @firebase/app reference + + * Refactor to fix TSC errors + + * Refactor to make node unit tests work + + * Publish + + - @firebase/app@0.1.0 + - @firebase/auth@0.1.0 + - @firebase/database@0.1.0 + - firebase@4.5.1 + - @firebase/firestore@0.1.0 + - @firebase/messaging@0.1.0 + - @firebase/polyfill@0.1.0 + - @firebase/storage@0.1.0 + - @firebase/util@0.1.0 + + * Add firestore to main firebase binary + + * Pin firebase package to strict versions + + * Fix browser firestore tests + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Changing base karma browsers + + * Disabling cross-browser karma tests + + * [AUTOMATED]: Prettier Code Styling + + * Removing sauce_connect addon from .travis.yml + + * Refactor messaging test script + + * Refactor the browserNoActivityTimeout + + * [AUTOMATED]: Prettier Code Styling + + * Adding polyfills to the main browser bundles + + * Add firestore/README.md + + TODO(jshcrowthe): Fix these tests per the comments in this file + + * Fix firestore VSCode scripts + + * Fix regex for firestore __data__ prop + + * [AUTOMATED]: Prettier Code Styling + + * Initial Commit + + * Add a brief README.md + + * Add *.tgz to .npmignore + + * Publish: v0.1.1 + + * Turn on advanced optimizations for this code + + * Leverage "ADVANCED_OPTIMIZATIONS" mode in closure compilation + + * 0.2.0 + + * Add XhrIo prototype overrides + + * 0.2.1 + + * Remove unneeded lockfile + + * Fixing dependency versions + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * TEMP: Remove saucelabs reporter + + * Fix prettier styling bug (fights with closure) + + * Update firebase/app typings + + * Leverage default exports + + * Updating top-level README.md + + * Refactor mocha timeout to be 20 seconds for firestore + + * Addressing some review comments from @mikelehen + + * temp + + * Fixing license header spacing issues + + * Refactor license header check + + * [AUTOMATED]: Prettier Code Styling + + * [AUTOMATED]: License Headers + + * Revert "[AUTOMATED]: License Headers" + + This reverts commit 559068ceb070519f39207e15886e147787cd941a. + + * Revert "Refactor license header check" + + This reverts commit 34c671ab9730d6480e487b6ddcd7283f7df3979a. + + * Fixing more license headers + + * Add @wilhuff and @wti806 to CODEOWNERS + + * Adding one more --auto-watch flag + + * Add 3 retries to firestore tests + + * Bumping browserNoActiityTimeout + + * @firebase/app - package.json housekeeping + + * @firebase/auth - README.md housekeeping + + * @firebase/database - README.md housekeeping + + * @firebase/firestore - README.md housekeeping + + * Updating auth readme + + * @firebase/messaging - README.md housekeeping + + * Updating database readme + + * Fixing issue with messaging/package.json (copy-paste fail) + + * @firebase/polyfill - README.md housekeeping + + * @firebase/storage - README.md housekeeping + + * @firebase/util - README.md housekeeping + + * Fixing package.json repo links + + * Refactor from PromiseLike -> Promise + + * Add firebase externs + + * [AUTOMATED]: Prettier Code Styling + + * Fix license values in package.json + +commit 8bbbece1e8978ea92a23a49e2d5d7f02052f4c69 +Author: Sebastian Schmidt +Date: Fri Oct 6 14:09:26 2017 -0700 + + fix(Firestore): Rejecting 'null' and 'undefined' as arguments for CollectionRef.doc() (#188) + +commit 7593f5ef268867d922491dc6acb91150347fb746 +Author: bojeil-google +Date: Thu Oct 5 14:49:56 2017 -0700 + + fix(externs): fix auth externs (#186) + + Updates Auth references with the missing OAuthCredential and OAuthProvider classes. In addition adds the missing data from ActionCodeInfo. + +commit f49c8b5c50919014d852847c755d0eb13a0fc803 (tag: v4.5.0) +Author: Josh Crowther +Date: Tue Oct 3 07:16:32 2017 -0700 + + Add Cloud Firestore Support + +commit da87982ad06e15c1430419b4ac01de5ae7fd9bfe +Author: Gil +Date: Wed Sep 27 18:15:27 2017 -0700 + + Add licenses to files that are missing them (#172) + +commit 88bbce8aeb676ffc456de84cec76b86bff5cca68 +Author: Gil +Date: Wed Sep 27 18:15:15 2017 -0700 + + Fix indentation in license headers (#173) + + * Fix license indent for js files + + * Fix license indent for ts files + +commit b8c9782f3d20d359141626bce51b7c7b55d18f22 +Author: Michael Lehenbauer +Date: Thu Sep 21 17:13:16 2017 -0700 + + fix(typings): Remove incorrect firebase.Promise type definition. (#165) + + We were defining our own Promise type, but it's not compatible with the normal + es2015.promise type definition, which can result in compile errors if you try to + use them together. + +commit bfcd89e596f4cc90f7e4afecf9cb4d740cda5b65 +Author: Josh Crowther +Date: Thu Sep 21 16:40:48 2017 -0700 + + chore(publish): 4.4.0 (#162) + + * WIP: update yarn.lock + + * WIP: Import Auth + + * chore(publish): 4.4.0 + +commit 942874a551dc885cb7a7ade469ef263a10f5bad9 +Author: Josh Crowther +Date: Thu Sep 14 17:28:21 2017 -0700 + + fix(externs): fix auth externs (#160) + + * fix(externs): fix auth externs + + * refactor(auth): Refactor firebase.auth.Auth instantiation + +commit edad44d9bc30689635e994c9d4ba99adfb799af7 +Author: Josh Crowther +Date: Thu Sep 14 15:38:10 2017 -0700 + + feat(database): enable database multi-resource support (#159) + + * feat(database): enable database multi-resource support + + * refactor(database): fix property names + +commit c4d6e20de936c06ba2f0ea126f8b8021997d7eda +Author: Josh Crowther +Date: Thu Sep 7 13:42:59 2017 -0700 + + chore(release): 4.3.1 (#153) + +commit cd49e2b733346c8767ec4182d98be2bbfd6bcf8d +Author: Matt Gaunt +Date: Wed Sep 6 11:24:05 2017 -0700 + + Messaging smoke test (#129) + + * test(messaging): Smoke tests + + * test(messaging): Adding full test logic + + * test(messaging): Adding integration tests in new folder + + * fix(messaging): fixed a small runner issue to ensure each run is reproducable + + * refactor(travis.yml): make it so push commits only run on master + + * fix(messaging): Add mocha devDep + +commit c4fbf8bb49d38b1a8b9f3a6c51e814ee120db742 +Author: bojeil-google +Date: Wed Aug 23 12:09:27 2017 -0700 + + fix(externs): Added externs for 4.3.0 release. (#140) + + * fix(externs): Added externs for 4.3.0 release. + + * docs(typings): updating typings from externs + +commit 3652c1d42997a1fdc413efd2d756483e857bbcc1 +Author: Josh Crowther +Date: Thu Aug 17 14:05:52 2017 -0700 + + chore(release): 4.3.0 (#135) + + * chore(release): 4.3.0 + + * feat(auth): import from auth source (8/16/2017) + +commit e71cc70fe44d4cee950361113235cbd802e248bf +Author: Sebastian Schmidt +Date: Wed Aug 16 19:20:48 2017 -0700 + + fix(database): Including bandwidth usage in error message for queries without indexes (#138) + +commit bca804a61665ce0ad1d08ec6ac595a35035ff4c5 +Author: Josh Crowther +Date: Tue Aug 15 14:21:18 2017 -0700 + + refactor(test): Refactor integration test suite (#131) + + * refactor(test): refactor to leverage a test matrix in CI environments + + WIP: fiddling with Travis YML Jobs + + WIP: refactor build matrix + + WIP: remove integration tests (Will reimpl) + + WIP: remove files that snuck in + + WIP: remove unneeded arg + + WIP: add node_modules bin to path + + fix(*): remove project config (intended to be supplied) + + WIP: reset TEST_ENV for int tests + + WIP: update Travis yarn dep + + WIP: use before_install script instead of install script + + * WIP: slight glob refactor + + WIP: reimplement browserify/webpack integration tests + + WIP: fiddling with int test CI + + WIP: build matrix for Integration tests (parallelize those jobs too) + + WIP: trying to parallelize int tests + + WIP: remove unneeded env assignment + + WIP: blahhh... + + WIP: should work... + + WIP: removing env + + WIP: removing test harness I haven't started yet + + test(typescript): add typescript namespace tests + + * refactor(tests): refactor test harness to be more isolate + + * docs(integration-tests): add README.md to explain high level concepts + + * test(integration): add service worker testing + + * refactor(tests): better isolate the tests from the main package by leveraging their own binaries + + * fix(storage): remove unnecessary console.log statements + + * fix(travis.yml): remove unneeded test script argument + + * test(quickstart): add quickstart integration tests + + refactor(quickstart-tests): refactor to use FIREBASE_PROJECT as an env var rather than an arg + + fix(tests): ensure that the wdio binary is pointing to the proper location + + fix(deps): add dep to quickstart package.json + + refactor(deps): move ts-node dep to devDeps + + fix(quickstart-tests): run tests on saucelabs + + WIP: refactor to remove reload (causing flakiness issues) + + refactor(quickstart): refactor to only navigate to the base URL instead of reloading the page + + fix(quickstarts): fix timing issue with reloads + + WIP: try limiting the scope to the :first-child + + WIP: refactor the tests to reference the intended post directly rather than indirectly. + + WIP: refactor to not iterate + +commit 16ca08bf45065b7c6a253dfe5043fdd6683e8881 +Author: Tyler Rockwood +Date: Sat Aug 12 10:26:15 2017 -0700 + + Remove the need to return undefined in typings (#126) + + * Remove the need to return undefined + + Fixes: https://stackoverflow.com/questions/45386915/wrong-function-definition-in-typescript + + * Also fix firebase.d.ts + +commit 7ccc77c6b2e30d9aeb0df36b028a0f1d3714dcc4 +Author: Josh Crowther +Date: Fri Jul 28 12:00:02 2017 -0700 + + Contributing updates [triage-skip] (#113) + + * WIP: update CONTRIBUTING.md + + * WIP: 1st draft contributing guidelines + + * WIP: slight updates + + * WIP: updates from review + + * WIP: changes from @hiranya911 + +commit 63d77684e1cefb6b5342d5eda4dc778fad1edf37 (tag: v4.2.0) +Author: Josh Crowther +Date: Thu Jul 27 15:37:43 2017 -0700 + + chore(publish): 4.2.0 (#109) + +commit 4b6936a6be64fb03a07b458c308b079a0d5a417b +Author: Josh Crowther +Date: Thu Jul 27 13:56:10 2017 -0700 + + fix(ie11): add Array.prototype.find/findIndex polyfills (#115) + + These two functions are part of ES2015 and are not present in IE11. In the migration we removed + closure compiler which was injecting these by default + +commit c58719c13862e59e91145d9566bc323bee2eaa9d +Author: bojeil-google +Date: Tue Jul 25 15:53:25 2017 -0700 + + feat(auth): Adds support to specifying Auth state persistence. (#105) + + * feat(auth): Adds support to specifying Auth state persistence. + fix(auth): Adds missing phoneNumber property in UserInfo. + fix(auth): Fixes incorrect return type in reauthenticateAndRetrieveDataWithCredential. + + * docs(*): automatic .d.ts update from externs + + * feat(auth): import from auth source + +commit bc1f67c448804a28fa64e91611ea60398890bcaa +Author: Josh Crowther +Date: Tue Jul 25 15:53:09 2017 -0700 + + style(*): Automate Code Formatting (#90) + + * style(*): add prettier automation + + * fix(deps): fix issue where new typescript version was causing errors in the build + + Something breaks in version 2.4.1 of typescript. We are pinning to 2.3.0 till those things can be + triaged and fixed + + * WIP: remove tslint.json + + Temporarily removing this file as we don't pass the checks + + * refactor(style): refaactor to prefer single quotes over double quotes + + * style(*): run prettier on codebase + +commit d9e0ce9e7648d7b2fa88b2b1235bb7b0a891b1b6 +Author: Sebastian Schmidt +Date: Tue Jul 25 09:41:47 2017 -0700 + + fix(database): Adding toJSON() method to TransactionResult (#104) + + * fix(database): Adding toJSON() method to TransactionResult + + * fix(database): Making return type of toJSON explicit + +commit 1c300d90f0b2d992e569784aca6072624ab9bacd (tag: v4.1.5) +Author: Josh Crowther +Date: Tue Jul 25 00:34:03 2017 -0600 + + chore(publish): 4.1.5 (#108) + +commit 8553caaa4bfe1a141cadb6d7b2e21ca9b96890ce +Author: Josh Crowther +Date: Tue Jul 25 00:23:15 2017 -0600 + + fix(database): fix issue with base64Decode (#107) + + ISSUES CLOSED: 106 + +commit c8dfea3edfeb03403e3c303adbc9ad866e8a49da +Author: Sebastian Schmidt +Date: Mon Jul 24 13:14:13 2017 -0700 + + fix(*): Fix compilation problems in my local environment (#98) + + * fix(*): Fix compilation problems in my local environment + + * fix(deps): update typescript, ts-loader, and karma-typescript versions + + * docs(tests): update README.md to include the necessary project.json instructions + + * fix(comment): Adding comment on TS compiler + +commit 2f989fb5800850f694e572b18de3fa38e44b9057 (tag: v4.1.4) +Author: Josh Crowther +Date: Mon Jul 24 11:09:28 2017 -0600 + + chore(publish): 4.1.4 (#96) + +commit bcd13ad7174dc45bc7976c8f687fe969ead77c22 +Author: Josep Sayol +Date: Thu Jul 13 02:54:44 2017 +0200 + + refactor(build): Refactor build process to generate smaller bundles + + * fix(build): generate smaller bundles + + * WIP: address review comments + +commit 00f9c37543b6250f601f524bb50408ccf1c56bd9 +Author: Josep Sayol +Date: Sat Jul 8 22:56:41 2017 +0200 + + refactor(database): Add types to several classes and utility methods (#66) + + * refactor(database): Several classes and utility methods + + * WIP: fix tests with recent type changes + + * refactor(database): Type casting format for TSX support + + * refactor(database): Add 'noImplicitAny' support + Adds support for the 'noImplicitAny' Typescript compiler option to the database implementation. + +commit 58fc4c9d21b07f9a0677e2296f7dc6d8ad40fca7 +Author: Josh Crowther +Date: Fri Jul 7 15:21:36 2017 -0700 + + fix(externs): fix window var provided extern (#93) + +commit 36f81f8a310f5a645446c1893d96ae3213bc427b +Author: Josh Crowther +Date: Fri Jul 7 14:03:16 2017 -0700 + + chore(*): add license headers (#92) + +commit e67c9bf5824d78fbac19836a491da223f2d5ca90 +Author: Josh Crowther +Date: Thu Jul 6 16:27:46 2017 -0700 + + Update CODEOWNERS + +commit 6b08de17bed7245a0d9c6431cc92e9658e2c13ad +Author: Josh Crowther +Date: Thu Jul 6 16:22:34 2017 -0700 + + Update CODEOWNERS + + Add @schmidt-sebastian to database codeowners + +commit a2c04b84afdb3099bfc3ca65d09b6447fdaf6e0c +Author: Josh Crowther +Date: Thu Jul 6 15:57:23 2017 -0700 + + feat(*): add CODEOWNERS file to .github (#91) + +commit a8919cdd16f3a4811efcc8736d2f167955f54047 +Author: Josh Crowther +Date: Thu Jul 6 15:14:08 2017 -0700 + + refactor(database): Implement database in Typescript (#72) + + * refactor(database): remove old database implementation [Part 1/3] (#61) + + * refactor(database): remove old database implementation + + This is part #1 of 4 PR's to migrate database + + * refactor(database): remove database build processes + + * refactor(database): Add typescript database implementation [Part 2/3] (#62) + + * refactor(database): add typescript implementation + + * refactor(database): update build process to include database.ts + + All integration tests pass at this point + + * refactor(*): refactor environment builds to be based on separate .ts files + + * WIP: patch database code in nodeJS + + * refactor(database): classes for typescript database implementation (#55) + + * refactor(database): classes for typescript database implementation + + * refactor(database): requested changes & other improvements + + * fix(database): Add missing "typeof" (#74) + + https://github.com/firebase/firebase-js-sdk/blob/fd0728138d88c454f8e38a78f35d831d6365070c/src/database/js-client/core/Repo.js#L86 + + * WIP: fixes from @schmidt-sebastian's review + + * WIP: fix: TS Build error + + * fix(database): fix issue with missing repo method + + * WIP: review adjustments #1 + + * WIP: review comments #2 + + * WIP: refactor(database): Add migrated test harness [Part 3/3] (#71) + + * refactor(database): add typescript implementation + + * refactor(database): update build process to include database.ts + + All integration tests pass at this point + + * refactor(*): refactor environment builds to be based on separate .ts files + + * WIP: patch database code in nodeJS + + * refactor(database): classes for typescript database implementation (#55) + + * refactor(database): classes for typescript database implementation + + * refactor(database): requested changes & other improvements + + * WIP: add the /tests/config dir to the .gitignore + + * WIP: add test harness + + * WIP: add query tests + + There are some tests that have weird timing issues, and because of the polling nature of the + original implementation, we never caught the issue. These should be resolved when able + + * WIP: add database.test.ts + + * WIP: add node.test.ts + + * WIP: add sortedmap.test.ts + + * WIP: add datasnapshot.test.ts + + * WIP: add sparsesnapshottree.test.ts + + * refactor(database): refactor query.test.ts to better preserve original test meaning + + * WIP: add crawler_support.test.ts + + * WIP: refactor EventAccumulator.ts for data.test.ts + + * WIP: fix issue with query.test.ts + + * WIP: add connection.test.ts + + * WIP: add info.test.ts + + * WIP: add order_by.test.ts + + I only migrated some of these tests as there was a dependency on the server for several tests + + * WIP: fix several code signature problems, add test files + + * WIP: add transaction.test.ts + + * WIP: working on the broken npm test command + + * WIP: working on fixes + + * WIP: remove logging + + * WIP: fix node tests + + * fix(*): fixing test files and CI integration + + * WIP: tEMP: Allow branch builds + + * WIP: escape string + + * refactor(CI): use ChromeHeadless launcher + + * WIP: fixes from review. + + * WIP: skip flakey test + + * WIP: remove unneeded debugger statement + + * WIP: fixing nits + + * Prevent using uninitialized array in EventEmitter (#85) + + * perf(*): fixing build size output issues + + * chore(*): remove unneeded build deps + +commit 6aaef702b56e66a60934594f14419328abbc3af3 +Author: Josep Sayol +Date: Wed Jul 5 22:42:02 2017 +0200 + + fix(core): improve typings with new Observer interface (#56) + +commit 9a6f0db974a88af4a83708376afd112436a75417 +Author: Josep Sayol +Date: Wed Jun 28 18:48:40 2017 +0200 + + fix(messaging): Add check for Fetch API support (#79) + +commit 657055d3c81101d55e86baac0a49d7cfd0a25863 +Author: Josh Crowther +Date: Wed Jun 21 16:06:57 2017 -0700 + + chore(publish): 4.1.3 (#68) + +commit 109cbb328022e59f0c5a52eee4be8587a0593814 +Author: Josep Sayol +Date: Tue Jun 20 18:53:12 2017 +0200 + + fix(app): Allow Object.prototype member names as app names (#70) + +commit 5f2ca5a4eaac1257abfc2a5c919706992afbdc8f +Author: Josh Crowther +Date: Mon Jun 19 10:54:00 2017 -0700 + + fix(auth): fix redirect invalid caching issue (#67) + +commit 13ff80a72f778b5716f6eeb5bfc06bc93991cef5 +Author: Josep Sayol +Date: Mon Jun 19 18:52:23 2017 +0200 + + chore(.gitignore): Add '.idea' folder for JetBrains IDEs (#64) + +commit 7d88c38a6af07cc5ba8f0e85af3ab801b599d379 +Author: I. Leow +Date: Sat Jun 17 00:25:25 2017 +0800 + + Add @override annotation to Promise methods that override Thenable's. (#57) + +commit 26d3e4fd4b954a7d658124ffe9dd945260105055 +Author: Jimi Ford +Date: Fri Jun 16 06:00:35 2017 -0400 + + Update README.md (#58) + + fix grammar + +commit bc94aaed90928eae760702ba0187eb18f0676243 +Author: Josep Sayol +Date: Wed Jun 14 20:01:36 2017 +0200 + + fix(auth): fix typings and externs for PhoneAuthProvider.credential (#50) + +commit ec19fc57e3087ce7e92470ff08f4522036240b8a +Author: Josep Sayol +Date: Thu Jun 8 02:27:23 2017 +0200 + + fix(storage): allow missing some methods in UploadTask observer (#41) + +commit 2801c344f20929e812f44b259c0bfa4d6d505087 +Author: Josh Crowther +Date: Wed Jun 7 10:18:50 2017 -0700 + + chore(package.json): 4.1.2 (#30) + +commit 45624b4542ac8a25779254267893f250fca50952 +Author: Josh Crowther +Date: Wed Jun 7 09:49:01 2017 -0700 + + fix(core): utilize "webpackJsonpFirebase" for Webpack JSONP output func (#43) + + ISSUES CLOSED: #42 + +commit cb46f758fa4e49ba8c08ec5dd7b294071afa5231 +Author: bojeil-google +Date: Tue Jun 6 23:32:05 2017 -0700 + + fix(app): fix issue with FirebaseApp extending INTERNAL (#38) + + * fix(app): fix issue with FirebaseApp extending INTERNAL + FirebaseAppImpl should not extend prototype.INTERNAL as this will apply to + all Firebase app instances. + To reproduce, do the following: + var app1 = firebase.initializeApp(config); + var app2 = firebase.initializeApp(config, 'app2'); + console.log(app1.INTERNAL === app2.internal); + The above incorrectly resolves to true. + This means that if I sign in with app1.auth() and then call app1.INTERNAL.getToken(), + it will resolve with null as it is getting app2.INTERNAL.getToken. + The last initialized instance will basically overwrite all existing ones. + + This is currently breaking all FirebaseUI-web single page applications + using Firebase real-time database with JS version >= 4.1.0: + https://github.com/firebase/firebaseui-web/issues/47#issuecomment-306648715 + This should also be breaking any application using Auth and Database with + multiple app instances. + + * fix(app): removed extra spaces and commented code + +commit 8a90518e5a0a9ace7948012ad9dc11c39a951085 +Author: Spencer Phippen +Date: Mon Jun 5 14:13:13 2017 -0600 + + docs(*): add per-feature supported environment info. (#33) + +commit 4a9618993531647a7941113b7f18ddadf0dd75d3 +Author: Josh Crowther +Date: Thu Jun 1 14:20:48 2017 -0700 + + fix(sourcemaps): fix sourcemap generation for browser code [triage-skip] (#29) + + * fix(sourcemaps): fix sourcemap generation for browser code + + * chore(*): add ts-loader dependencies + +commit f70c7f2c1c099e4e0363b43997bf35ee7db4e01e +Author: Josh Crowther +Date: Thu Jun 1 10:38:04 2017 -0700 + + fix(travis.yml): pin Node.js version to 6 (#28) + +commit 395d261e729e3cfc53250bdcd3b6b1a3233b2569 (tag: v4.1.1) +Author: Josh Crowther +Date: Wed May 31 12:31:32 2017 -0700 + + chore(package.json): 4.1.1 (#27) + +commit 01e953555e32825965d728e78770c55b42c72d08 +Author: Josh Crowther +Date: Wed May 31 12:05:24 2017 -0700 + + fix(app): fix issue with default instanceIdentifier (#26) + + FirebaseApp's contract with the components is that the instanceIdentifier will be undefined if + default (not the string '[DEFAULT]'). This was not tested by any existing tests and was broken in + the async refactor. This fixes that issue and adds a test. + +commit 0766643edac6ac7c1e50680e946e32fa330e5caf (tag: v4.1.0, tag: 4.1.0) +Author: Josh Crowther +Date: Wed May 31 11:35:40 2017 -0700 + + chore(publish): 4.1.0 (#25) + +commit 9d7443625191b68079ef3810857950476165f390 +Author: Josh Crowther +Date: Thu May 25 16:08:43 2017 -0600 + + Update ISSUE_TEMPLATE.md [triage-skip] (#13) + + * refactor(github-meta): leverage .github directory + + * docs(ISSUE_TEMPLATE): added JSBin template for repros + + To help encourage people to reproduce issues, I've made a small JSBin that will load Firebase and + give developers a REPL environment to demonstrate the issue. + + * docs(ISSUE_TEMPLATE): restructuring issue template to only display needed info + + * fix(docs): fix link to CONTRIBUTING.md + + * refactor(ISSUE_TEMPLATE): refactor based on feedback from @samtstern + + * fix(ISSUE_TEMPLATE): fix README.md link + +commit 85ec114c73e95cbf1dbff5e979aa2a03db4d6446 +Author: Josh Crowther +Date: Thu May 25 10:26:42 2017 -0600 + + fix(auth): fix Safari iFrame loop issue (#24) + + Import from Auth to fix infinite localStorage write loop + + ISSUES CLOSED: #21 + +commit bd24f71f31ddb6468f5c4fa9f73ff023bc84d3b4 +Author: Josh Crowther +Date: Thu May 25 10:12:40 2017 -0600 + + feat(app): Allow for lazy registration of app components (#15) + + * WIP: add lazy module instantiation + + * feat(app): allow for lazy loading of services + + * test(app): add integration test for webpack/browserify for lazy instantiation + + * fix(app): fix issue where auth listeners weren't being patched properly + + * docs(app): adding doc explaining Firebase Auth specific code in firebase_app.ts + + * fix(app): revert code refactor to _getService function + + * test(app): add tests and fix issue with multiple instances of a service + + There was an issue where we weren't properly limiting mulitple service instances. Added a test and + refactored the code to support that use case + + * refactor(app): remove unneeded ternary + + * fix(app): fix issue where instanceIdentifier wasn't being passed + + Fixed an issue where instance identifiers weren't being passed to their creation factories. Added + some tests to validate that we don't accidentally remove that in the future. + +commit 706bdbbef1094d088991ae4cb2ac8bef0f165db7 +Author: Ken Powers +Date: Thu May 18 16:27:45 2017 -0400 + + fix(docs): CONTRIBUTING link in README (#16) + +commit 3a4c3146ccfb3450988c1ef0a9b4d472e38f9304 +Author: Michael J. Ryan +Date: Wed May 17 16:44:00 2017 -0700 + + refactor(package.json): Fix external license reference (#12) + + Update package license for easier dist, no need for foreign reference with the license change to Apache-2.0 + +commit 241470c51b57f71e16986b7faf9f97f2b0f9d671 +Author: Josh Crowther +Date: Wed May 17 16:19:28 2017 -0700 + + feat(travis-ci): add .travis.yml [triage-skip] (#9) + + * feat(travis-ci): add .travis.yml [triage-skip] + + * docs(*): add travis badge to README files + + * fix(travis): include C++11 Standard Compiler + + Node.js v4.0 and greater requires a C++11 standard-compliant compiler + (See: https://docs.travis-ci.com/user/languages/javascript-with-nodejs#Node.js-v4-(or-io.js-v3)-compiler-requirements) + + * refactor(travis): turn on caching for .travis.yml to improve build times + + * refactor(travis): limit push builds to the master branch + + * refactor(deps): bump karma version + +commit 822a02c777396d4eff7506a4caeed9051d7cd815 +Author: ismail BASKIN +Date: Thu May 18 01:22:17 2017 +0300 + + docs(README): Fix listed CDN version (#10) + +commit c054dab68ce4d30af7fcb0bb850f1a064ba023c5 (tag: v4.0.0) +Author: Josh Crowther +Date: Tue May 16 22:25:20 2017 -0700 + + fix(auth): fix race condition in anonymous sign in [triage-skip] (#8) + +commit a9a678bf5e72580664dbfd95e8f75fe78fb458e5 +Author: Josh Crowther +Date: Tue May 16 11:52:48 2017 -0700 + + fix(gulp): fix path to unit tests for "gulp test" task [triage-skip] (#7) + +commit 9e7a5c0c1a4ef4c44ba0015ce5bae2726092fd5f +Author: Josh Crowther +Date: Tue May 16 11:10:01 2017 -0700 + + fix(gulp): fix the gulp task "test:unit:node" (#5) + + There was an issue where the task "test:unit:node" was running tests that dependend on the + build artifact. This change ignores those tests as they are run in a different suite. + +commit fd0728138d88c454f8e38a78f35d831d6365070c +Author: Josh Crowther +Date: Mon May 15 17:37:21 2017 -0700 + + feat(*): initial open source push (#2) + +commit 8f99963971c1f572c54f980d1ead0d53eae769bd +Author: Vikrum Nijjar +Date: Mon Apr 24 14:52:11 2017 -0700 + + Initial commit diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index a1a11651746..8e647b5779d 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -80,7 +80,7 @@ export class Query { public path: Path, private queryParams_: QueryParams, private orderByCalled_: boolean - ) { } + ) {} /** * Validates start/end values for queries. @@ -127,13 +127,13 @@ export class Query { ) { throw new Error( 'Query: When ordering by priority, the first argument passed to startAt(), ' + - 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' + 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).' ); } } else { assert( params.getIndex() instanceof PathIndex || - params.getIndex() === VALUE_INDEX, + params.getIndex() === VALUE_INDEX, 'unknown index type.' ); if ( @@ -142,7 +142,7 @@ export class Query { ) { throw new Error( 'Query: First argument passed to startAt(), endAt(), or equalTo() cannot be ' + - 'an object.' + 'an object.' ); } } @@ -305,7 +305,7 @@ export class Query { * @return {!firebase.Promise} */ get(): Promise { - return this.repo.get(this).catch(_ => this.once('value')); + return this.repo.get(this); } /** @@ -322,7 +322,6 @@ export class Query { failureCallbackOrContext?: ((a: Error) => void) | object | null, context?: object | null ): Promise { - console.log('Calling once!'); validateArgCount('Query.once', 1, 4, arguments.length); validateEventType('Query.once', 1, eventType, false); validateCallback('Query.once', 2, userCallback, true); @@ -341,7 +340,7 @@ export class Query { const deferred = new Deferred(); // A dummy error handler in case a user wasn't expecting promises - deferred.promise.catch(() => { }); + deferred.promise.catch(() => {}); const onceCallback = (snapshot: DataSnapshot) => { // NOTE: Even though we unsubscribe, we may get called multiple times if a single action (e.g. set() with JSON) @@ -353,7 +352,6 @@ export class Query { if (userCallback) { userCallback.bind(ret.context)(snapshot); } - console.log('once resolved!'); deferred.resolve(snapshot); } }; @@ -362,7 +360,6 @@ export class Query { eventType, onceCallback, /*cancel=*/ err => { - console.log('once rejected!'); this.off(eventType, onceCallback); if (ret.cancel) { @@ -393,7 +390,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToFirst: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -424,7 +421,7 @@ export class Query { if (this.queryParams_.hasLimit()) { throw new Error( 'Query.limitToLast: Limit was already set (by another call to limit, ' + - 'limitToFirst, or limitToLast).' + 'limitToFirst, or limitToLast).' ); } @@ -526,7 +523,7 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.startAt: Starting point was already set (by another call to startAt ' + - 'or equalTo).' + 'or equalTo).' ); } @@ -557,7 +554,7 @@ export class Query { if (this.queryParams_.hasEnd()) { throw new Error( 'Query.endAt: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } @@ -578,13 +575,13 @@ export class Query { if (this.queryParams_.hasStart()) { throw new Error( 'Query.equalTo: Starting point was already set (by another call to startAt or ' + - 'equalTo).' + 'equalTo).' ); } if (this.queryParams_.hasEnd()) { throw new Error( 'Query.equalTo: Ending point was already set (by another call to endAt or ' + - 'equalTo).' + 'equalTo).' ); } return this.startAt(value, name).endAt(value, name); @@ -678,7 +675,7 @@ export class Query { } else { throw new Error( errorPrefix(fnName, 3, true) + - ' must either be a cancel callback or a context object.' + ' must either be a cancel callback or a context object.' ); } } diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index af832da707e..842a4ec5733 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -307,7 +307,19 @@ export class Repo { query.getQueryParams().getIndex() ) ), - err => Promise.reject(new Error(err as string)) + err => { + const cached = this.serverSyncTree_.calcCompleteEventCache(query.path); + if (cached) { + return Promise.resolve( + new DataSnapshot( + cached, + query.getRef(), + query.getQueryParams().getIndex() + ) + ); + } + return Promise.reject(new Error(err as string)); + } ); } diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index 30bda4d4b86..c7e3ba3f034 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -16,7 +16,7 @@ */ import * as chai from 'chai'; -let expect = chai.expect; +const expect = chai.expect; import * as chaiAsPromised from 'chai-as-promised'; chai.use(chaiAsPromised); import { Reference } from '../src/api/Reference'; @@ -2225,23 +2225,11 @@ describe('Query Tests', () => { expect(val).to.be.null; }); - it('get while offline is rejected', async () => { + it('get while offline is null', async () => { const node = getRandomNode() as Reference; node.database.goOffline(); - let prom = new Promise((resolve, reject) => { - let done = false; - setTimeout(function () { - if (done) { - return; - } - done = true; - reject(); - }, 3000); - node.get().then(function (snap) { - resolve(); - }); - }); - expect(prom).to.eventually.be.rejected; + let snapshot = await node.get(); + expect(snapshot.val()).to.be.null; }); it('get caches results at path', async () => { @@ -2261,7 +2249,7 @@ describe('Query Tests', () => { const writer = getFreshRepo('db'); await writer.set({ foo: { bar: 'baz' } }); - let snapshot = await reader.get(); + const snapshot = await reader.get(); reader.database.goOffline(); reader.child('foo/bar').once('value', snap => { expect(snap.val()).to.equal(snapshot.val()); @@ -2272,19 +2260,19 @@ describe('Query Tests', () => { const reader = getFreshRepo('db'); const writer = getFreshRepo('db'); await writer.set({ foo: { bar: { data: '1' }, baz: { data: '2' } } }); - let snapshot = await reader.child('foo/bar').get(); + const snapshot = await reader.child('foo/bar').get(); expect(snapshot.val().data).to.equal('1'); reader.database.goOffline(); let prom = new Promise((resolve, reject) => { let done = false; - setTimeout(function () { + setTimeout(() => { if (done) { return; } done = true; reject(); }, 3000); - reader.child('foo/baz').once('value', function (snapshot) { + reader.child('foo/baz').once('value', snapshot => { if (done) { return; } From 5eae993c39723f23c2e80f3b65b7a02b9122324e Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 9 Oct 2020 13:43:28 -0700 Subject: [PATCH 16/37] remove extra diff --- how | 20556 ---------------- .../database/src/core/PersistentConnection.ts | 23 +- 2 files changed, 7 insertions(+), 20572 deletions(-) delete mode 100644 how diff --git a/how b/how deleted file mode 100644 index 990194ef30c..00000000000 --- a/how +++ /dev/null @@ -1,20556 +0,0 @@ -commit 578f9cab318bbb6d250f6cb66223145cc72f06b9 (HEAD -> jw/rtdb-query-get, origin/jw/rtdb-query-get) -Author: Jan Wyszynski -Date: Fri Oct 9 13:10:54 2020 -0700 - - x - -commit 2bae15b97a8b6869e31771211f0229ff8ea4c38c -Author: Jan Wyszynski -Date: Tue Oct 6 07:14:40 2020 -0700 - - fix checks - -commit 48c6d39e2b5f4ef5c68ea743dea29080be826f3d -Author: Jan Wyszynski -Date: Mon Oct 5 21:30:07 2020 -0700 - - test rename - -commit d9530eee4468495b0853ced2aada2b1d544d925c -Author: Jan Wyszynski -Date: Mon Oct 5 21:28:43 2020 -0700 - - Uncomment tests - -commit f20c90357aac6341b3f168b2d3dbd4997bd0ad4f -Author: Jan Wyszynski -Date: Mon Oct 5 21:25:24 2020 -0700 - - Use promises instead + caching test - -commit ab34805e2e0fab973d1362c20d31ba2cc40448e0 -Author: Jan Wyszynski -Date: Wed Sep 23 11:09:28 2020 -0700 - - get rid of todo - -commit 9b2cf00035742b9feb5b5d61269415c828f4b9e9 -Author: Jan Wyszynski -Date: Wed Sep 23 10:18:24 2020 -0700 - - remove callback arguments to get() - -commit 61665bf7c891057fc0c7b9b9c7c1671534cb8cd7 -Author: Jan Wyszynski -Date: Wed Sep 23 10:14:47 2020 -0700 - - Add basic tests for get - -commit 153dbcf36255455c49af764933f5da085629182b -Author: Jan Wyszynski -Date: Fri Sep 18 16:30:04 2020 -0700 - - cleanup - -commit 8b289f81b96c5c5bed3b638bc84a75977bd46b8c -Author: Jan Wyszynski -Date: Fri Sep 18 16:27:18 2020 -0700 - - Run yarn prettier - -commit 437b8a7e58acbfd7d88b958c28f14d09a61129ff -Author: Jan Wyszynski -Date: Fri Sep 18 16:25:56 2020 -0700 - - Call onDataUpdate_ to simulater server push - -commit 0abd55c6f24d2fd7c2f9d9a9c28321e711e5ce3e -Author: Jan Wyszynski -Date: Fri Sep 18 14:41:59 2020 -0700 - - Fix yarn test - -commit 86363d66ab1e1d5a263768389aa90f3f38d7853b -Author: Jan Wyszynski -Date: Fri Sep 18 14:35:49 2020 -0700 - - Query get() method for RTDB - -commit 80e42190022da79f851b60731d922f2a39d255dc -Author: Christina Holland -Date: Tue Sep 15 16:13:12 2020 -0700 - - Fix logic (#3788) - -commit 1309b93779f72df999af7b982bb60bcdd66bc8aa -Author: Christina Holland -Date: Tue Sep 15 15:47:03 2020 -0700 - - Allow ignoring unstaged changes (#3787) - -commit f9004177e76f00fc484d30c0c0e7b1bc2da033f9 -Author: Brian Chen -Date: Tue Sep 15 10:20:43 2020 -0500 - - Make != and NOT_IN publicly available (#3772) - -commit a865ae9eb688de931bae5f7899f0d85941a02a8d -Author: Sebastian Schmidt -Date: Mon Sep 14 10:30:48 2020 -0700 - - Don't use interface types (#3770) - -commit b1854ab302bcce1341cec4815299d1d9439e041b -Author: Brian Chen -Date: Fri Sep 11 18:11:04 2020 -0500 - - Fix NotInFilter matches (#3752) - -commit e81c429aec43cd4467089bfed68eafafba6e8ee2 -Author: Brian Chen -Date: Fri Sep 11 15:50:52 2020 -0500 - - Call toFirestore() only once (#3755) - -commit 35d1c0df6d156f76b445a9fd1f16638ed9a1cfc5 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Fri Sep 11 11:20:53 2020 -0700 - - Update dependency git-rev-sync to v3 (#3763) - - Co-authored-by: Renovate Bot - -commit 4b48167034c192603f5aede0935ce40172b80920 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Fri Sep 11 10:05:36 2020 -0700 - - Update dependency node-fetch to v2.6.1 [SECURITY] (#3759) - - Co-authored-by: Renovate Bot - -commit 0eb18ca80c53a0914e5525d4d90d324c73ee6ec5 -Merge: 595dfb0df 268096e0d -Author: Christina Holland -Date: Thu Sep 10 14:49:12 2020 -0700 - - Merge branch 'release' - Release 7.20.0 - -commit 268096e0d9bf2ec72c8746edf662bb41d7b247e7 (tag: firebase@7.20.0, tag: @firebase/util@0.3.2, tag: @firebase/storage@0.3.43, tag: @firebase/rules-unit-testing@1.0.2, tag: @firebase/remote-config@0.1.28, tag: @firebase/performance@0.4.1, tag: @firebase/messaging@0.7.1, tag: @firebase/installations@0.4.17, tag: @firebase/functions@0.4.51, tag: @firebase/firestore@1.16.7, tag: @firebase/database@0.6.12, tag: @firebase/component@0.1.19, tag: @firebase/app@0.6.11, tag: @firebase/analytics@0.5.0, tag: @firebase/analytics-types@0.4.0) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Sep 10 12:43:29 2020 -0700 - - Version Packages (#3746) - - Co-authored-by: github-actions[bot] - -commit 595dfb0df44de1a669b530e403b426e201ce26db -Author: Sebastian Schmidt -Date: Thu Sep 10 12:25:47 2020 -0700 - - Add forceOwnership to firestore-exp (#3753) - -commit 95ab732eb9c6fc9391a90773a8cc5d742cd8a704 -Author: Sebastian Schmidt -Date: Wed Sep 9 16:02:52 2020 -0700 - - Tree-Shake RemoteStore Streams (#3568) - -commit 565004d8f59e2c67e6481ee93810d09722825c77 -Author: Sebastian Schmidt -Date: Wed Sep 9 15:17:45 2020 -0700 - - Schedule everything on the AsyncQueue (#3701) - -commit 0119d667701cf3e7642084075ba0ba0b7340819f -Author: Christina Holland -Date: Wed Sep 9 13:18:07 2020 -0700 - - Increase timeout for flaky test (#3750) - -commit a8ff3dbaacd06371e6652a6d639ef2d9bead612b -Author: Denver Coneybeare -Date: Wed Sep 9 13:20:09 2020 -0400 - - Change Error to FirestoreError (#3418) - -commit 3d9b5a595813b6c4f7f6ef4e3625ae8856a9fa23 -Author: Sam Stern -Date: Wed Sep 9 12:53:00 2020 -0400 - - Remove usage of the NODE_ADMIN global in RTDB (#3736) - -commit f47f9907cbd86a3dd95be73c040cbe5b077d4547 -Author: Christina Holland -Date: Tue Sep 8 16:52:39 2020 -0700 - - Exclude -compat from build:release (#3748) - -commit cb730cca0be1a8ade04a55386e80c0646806804b -Author: Christina Holland -Date: Tue Sep 8 15:31:57 2020 -0700 - - Update dynamic measurement ID change to ensure firebase minor bump (#3747) - -commit aa10af337895f60c1cfd67e5f400951fe30ed24b -Author: Christina Holland -Date: Tue Sep 8 14:56:57 2020 -0700 - - Add installations-exp packages to changeset ignore (#3745) - -commit d478772638ed4af8a1ad22eb91cb3cf986ae9985 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Sep 8 13:29:39 2020 -0700 - - Lock file maintenance (#3246) - - Co-authored-by: Renovate Bot - -commit 931ab7e1f2a83f4d2506d96b4de1f1ad3e02ac6d -Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> -Date: Tue Sep 8 10:57:11 2020 -0700 - - Bump bl from 4.0.2 to 4.0.3 (#3731) - - Bumps [bl](https://github.com/rvagg/bl) from 4.0.2 to 4.0.3. - - [Release notes](https://github.com/rvagg/bl/releases) - - [Commits](https://github.com/rvagg/bl/compare/v4.0.2...v4.0.3) - - Signed-off-by: dependabot[bot] - - Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - -commit fb3b095e4b7c8f57fdb3172bc039c84576abf290 -Author: Christina Holland -Date: Tue Sep 8 10:55:40 2020 -0700 - - Use Dynamic Measurement ID in Analytics (#2800) - -commit d347c6ca1bcb7cd48ab2e4f7954cabafe761aea7 -Author: Sebastian Schmidt -Date: Tue Sep 8 18:28:08 2020 +0200 - - Infer database URL from Project ID (#3650) - -commit cc16b4ae481edb64c788ac2826a9dc1700585875 -Author: Sebastian Schmidt -Date: Tue Sep 8 17:06:05 2020 +0200 - - Tree-Shake RemoteStore (#3705) - -commit f506e18facf8f47eff61cf83a98af4b1f2e94319 -Author: ChaoqunCHEN -Date: Thu Sep 3 13:40:32 2020 -0700 - - Fis modularization (#3638) - - * copied orginal FIS sdk into packages-expp and made unit tests passed - - * migrated test app and fixed a test app bug to make it worked - - * made installations-exp depend on app-exp - - * Relocated public methods files into folder - - * Making installations mudularization step1, build success - - * Making installations mudularization step2, unit tests pass - - * update dependency version, merge master - - * Apply suggestions from code review - - Co-authored-by: Feiyang - - * update dependencies' version - - * add getInstallation(app) - - * correct deleteInstallations funciton name - - * Place the call to registerVerion and registerInstallations at the same place - - * remove dead code - - * add api extractor config - - * rewrite the internal interface - - * fix build error - - * Seperate internal interface from public interface. - - * Change public methods to accept public interface - - * Fixes and api extractor integration for @firebase/installations-exp (#3733) - - * integrate api-extractor into installations-exp - - * add release tag to APIs - - * add _ prefix to the internal interface - - * update api report - - Co-authored-by: Feiyang - -commit 1a20aefe328d70c867fd0b0e40ccde6d1516e657 -Author: Feiyang -Date: Thu Sep 3 13:27:48 2020 -0700 - - run size reports in parallel in CI (#3735) - - * run size reports in parallel - - * fix unresolved promise bug - - * set global env that can be used by all jobs - -commit 1418474db8baca472aac4ac55d7f7283e6ebdadd -Author: Richie Foreman -Date: Thu Sep 3 14:43:19 2020 -0400 - - Fix a simple spelling error 'occured' -> 'occurred' (#3737) - - * Firestore Externs: @type -> @typedef - - * Fix spelling - -commit d90ddd7075c61d93d06e3ec2cb57b9854a9bc7d6 -Author: Richie Foreman -Date: Wed Sep 2 17:22:41 2020 -0400 - - Remove extraneous tab char in Firestore SDK (#3728) - - * Firestore Externs: @type -> @typedef - - * Add @override to Recaptcha Verify method in Auth Externs - - * Add proper closure `@license` annotation to generated internal rollup boilerplate - - * Google LLC + SPDX License ID - - * Fix tab char in Firestore SDK - -commit ba010ef4e313b0b3bbeb6addd86281746a6fb03e -Author: Christina Holland -Date: Wed Sep 2 13:59:47 2020 -0700 - - Fix externals for packages/firebase builds (#3729) - -commit 1bf0a3cbc36c1cfbe951d19ed94ac7dd344deec4 -Author: Feiyang -Date: Wed Sep 2 10:08:38 2020 -0700 - - Give different name to different workflow (#3721) - -commit 6c0b89471a03326455a5640ea61f1a664cc9424f -Author: Richie Foreman -Date: Wed Sep 2 10:18:13 2020 -0400 - - Adjust internal build rollup to add proper @license annotation and SPDX License ID (#3723) - - * Firestore Externs: @type -> @typedef - - * Add @override to Recaptcha Verify method in Auth Externs - - * Add proper closure `@license` annotation to generated internal rollup boilerplate - - * Google LLC + SPDX License ID - -commit 1df547b21473ef2bfe10ec0943ff6ff1155ba8bf -Author: Richie Foreman -Date: Tue Sep 1 14:06:57 2020 -0400 - - Add '@override' annotation to RecaptchaVerifier.Verify method in AuthClient externs. (#3714) - -commit 1922ce74bd3c9547fb8d8e9fb6da807c5a240b24 -Author: Richie Foreman -Date: Tue Sep 1 14:05:23 2020 -0400 - - Firestore Externs: @type -> @typedef (#3713) - -commit dc989256566b8379f475c722370ccbd8f47527c3 -Author: Kai Wu -Date: Tue Sep 1 09:33:09 2020 -0700 - - Stop redirecting to non-origin sites (#3710) - - * Stop directing to non-origin sites - - * Create tall-mugs-shop.md - -commit caed9c0680bcabbefe78bd40792e477fb2744ee9 -Author: Christina Holland -Date: Fri Aug 28 12:58:12 2020 -0700 - - Disable machine translation. (#3703) - -commit a589a56bc1e7ebff84cd68cfe50a0be6715534ad -Author: Feiyang1 -Date: Fri Aug 28 12:42:27 2020 -0700 - - Publish firebase@exp 0.800.7 - -commit aca9933ee197cae2c1a2cac699ceb845a1421710 -Author: Feiyang -Date: Fri Aug 28 12:34:43 2020 -0700 - - change prepare to run release build (#3704) - -commit 7e708101171ddde99c4520bac5ca423e4a9efe4a -Author: Feiyang -Date: Fri Aug 28 12:07:42 2020 -0700 - - update firestore exp reference doc (#3698) - - * update firestore exp reference doc - - * remove firestore api reports - -commit 4c9cfa0ccd1033d3ea80f95e1500db2e684603bc -Author: Feiyang1 -Date: Fri Aug 28 11:44:59 2020 -0700 - - Publish firebase@exp 0.800.6 - -commit bdae2c9660a756692ba13bb9190ccb598a67320a -Author: Feiyang -Date: Fri Aug 28 11:25:24 2020 -0700 - - Fix release build for firebase-exp/compat (#3702) - - * fix compat packages - - * test - - * compat release build - - * Revert "test" - - This reverts commit 4716a30213a18a966d33cd5dc0bf891d5edc0aea. - -commit 8d236129988fe823a8b8a76d68cee5feca10f6e6 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Fri Aug 28 10:43:31 2020 -0700 - - Update all non-major dependencies (#3692) - - Co-authored-by: Renovate Bot - -commit 249d40cb692366f686a50c06c44ec81e4cae23d7 -Author: Sebastian Schmidt -Date: Fri Aug 28 18:53:49 2020 +0200 - - Don't switch network status to UNKNOWN during user change (#3700) - -commit 0dfd51620c8c91c73704dff082226aa61ab040e2 (origin/fei-exp-release) -Author: Feiyang1 -Date: Thu Aug 27 17:49:43 2020 -0700 - - Publish firebase@exp 0.800.5 - -commit f7a1a974dc18e0001bee4e2e2f424c8cd88f5e35 -Author: Feiyang -Date: Thu Aug 27 17:36:44 2020 -0700 - - Publish compat packages as part of the exp release (#3690) - - * test - - * release compat packages experimentally - - * correct command - - * build compat - - * do not abort on error - - * fix - - * Revert "test" - - This reverts commit 40bd2421bed3c0346b3a06da9b4e295bbc6c7f41. - -commit c4f8541f52545c26a2a712de29001bf6b0ce86c5 -Merge: b0a75acb0 e92fb0151 -Author: Feiyang1 -Date: Thu Aug 27 16:56:43 2020 -0700 - - Merge branch 'release' - 7.19.1 release - -commit e92fb0151c918d83656154c086c050156414d26f (tag: firebase@7.19.1, tag: @firebase/rules-unit-testing@1.0.1, tag: @firebase/firestore@1.16.6, tag: @firebase/firestore-types@1.12.1) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Aug 27 16:09:47 2020 -0700 - - Version Packages (#3691) - - * Version Packages - - * update firebase version manually in rxfire - - Co-authored-by: github-actions[bot] - Co-authored-by: Feiyang1 - -commit b0a75acb0ca78526fe3ff3bdc02814fafa063a97 -Author: Sebastian Schmidt -Date: Thu Aug 27 21:37:03 2020 +0200 - - Tree-Shake EventManager (#3640) - -commit fee4e8bb7e576daeff80bde515bda1288546791e -Author: Sebastian Schmidt -Date: Thu Aug 27 20:47:28 2020 +0200 - - Tree-Shake all of Query (#3678) - -commit 70537a61e83422afff474fb7e018dcbfef97e88a -Author: Sebastian Schmidt -Date: Thu Aug 27 19:53:30 2020 +0200 - - Move parent/doc/collection back (#3679) - -commit 29bac5e88e31b59cded353bac990f0cf73595be4 -Author: Sebastian Schmidt -Date: Thu Aug 27 18:56:22 2020 +0200 - - Make View processing logic optional (#3561) - -commit 1a82549a7f0cbf13a49e3d81642cbccb55fdebdf -Author: Feiyang -Date: Thu Aug 27 09:44:23 2020 -0700 - - Create @firebase/app-compat and firebase/compat (#3622) - - * init package - - * app-compat impl - - * get tests pass - - * update some metadata - - * add firebase compat - - * release test - - * build compat packages - - * fix npm scripts - - * Revert "release test" - - This reverts commit 97585c1812fae4fc7fb8632905f963d97fde1ac6. - - * remove npmignore and outdated license headers - - * add onLog and setLogLevel to app-compat - - * rename test file - - * update deps - - * update - - * revert - - * add test:ci script - -commit e22a2957ece50b039b3fb6182125243a9d769e1c -Author: Sebastian Schmidt -Date: Thu Aug 27 11:46:42 2020 +0200 - - Rename Blob to Bytes (#3677) - -commit da1c7df7982b08bbef82fcc8d93255f3e2d23cca -Author: Feiyang -Date: Wed Aug 26 11:47:13 2020 -0700 - - delete services that implement the new FirebaseService interface (#3601) - - * delete services that implement the next FirebaseService interface in @firebase/component correctly - - * Create small-grapes-teach.md - - * debug CI issue - - * fix the delete loop - - * add eslint suppress - - * test - - * comment out imports - - * Revert "test" - - This reverts commit f1b0b4422394810cf7c4290eb91392b211700cf1. - - * Revert "comment out imports" - - This reverts commit 57caf9184b08ff955194cdb6adbd208fbd5c3eb8. - - * Update small-grapes-teach.md - - * rename delete to _delete - - * revert prettier - - * change delete to _delete - - * fix test - -commit 44c91e5b811ee9d7717c1e38623868e860874bd6 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 16:49:00 2020 -0700 - - Update dependency rollup-plugin-terser to v7 (#3636) - - Co-authored-by: Renovate Bot - -commit 0d0686392608e11622bec49b52ecf9940f99b4af -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 15:56:30 2020 -0700 - - Update dependency terser to v5 (#3582) - - * Update dependency terser to v5 - - * fix typescript issue - - * Update dependency terser to v5 - - * update script because terser.minify becomes async - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang1 - -commit 57739ae2bf3aa833ff6e3c3346b274e7f93ef233 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 14:14:55 2020 -0700 - - Update dependency typescript to v4 (#3669) - - * Update dependency typescript to v4 - - * fix typescript errors - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang1 - -commit 05b56061ca43d823b592cc7f64cf579642e97973 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 13:53:13 2020 -0700 - - Update dependency simple-git to v2 (#3432) - - Co-authored-by: Renovate Bot - -commit b9562dd71861b5ca3e8786aec5b205d316bbc00e -Author: Feiyang -Date: Tue Aug 25 13:29:57 2020 -0700 - - update ignored packages (#3683) - -commit c0f2be022944c18c94f951d9426497aafcc05b42 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 12:01:12 2020 -0700 - - Update all non-major dependencies (#3581) - - Co-authored-by: Renovate Bot - -commit 978faa60ae6d463cd3c9ff5914dfd1d87a366b0d -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 11:34:12 2020 -0700 - - Update dependency ts-loader to v8 (#3521) - - Co-authored-by: Renovate Bot - -commit ccb171663c32536e35de9da0595ff000bf1e3add -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 11:30:12 2020 -0700 - - Update dependency @types/clone to v2 (#3633) - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang - -commit 4623bbd17b8e3a5cd150978460ecf3f47b4d0be0 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 11:28:24 2020 -0700 - - Update dependency ora to v5 (#3634) - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang - -commit 9611fd739b9ab4b9293c16a3944b68ff997d6b08 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Aug 25 11:24:14 2020 -0700 - - Update typescript-eslint monorepo to v3 (major) (#3524) - - * Update typescript-eslint monorepo to v3 - - * Update typescript-eslint monorepo to v3 - - * fix lint - - * fix more lint - - * remove reference to the removed file - - * revert file deletion - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang1 - -commit e749ab8fcf8c371cd64fb7cfcaa8029bbacff849 -Author: moga <10220231+mogaming217@users.noreply.github.com> -Date: Wed Aug 26 02:04:43 2020 +0900 - - Fix assertFails() logic of @firebase/rules-unit-testing (#3676) - - * Fix assertFails logic - - * Create fuzzy-seas-compare.md - - Co-authored-by: Yuchen Shi - -commit c224553ed4e7ce90f48183fcb9867bb0448ddf1c -Author: Sebastian Schmidt -Date: Tue Aug 25 18:52:55 2020 +0200 - - Fix typo (#3680) - -commit 96076f0d3e4046c326c2015714ef9b7f2059f596 -Author: Feiyang -Date: Mon Aug 24 17:23:43 2020 -0700 - - Optimize CI tests (#3664) - - * remove unnecessary integration tests - - * exclude firestore tests from run_changed - - * fix bug - - * reduce the scope that triggers global tests - - * firestore only test changed - - * Put firestore tests into a separate workflow - - * rewrote run_changed scripts - - * fix things - - * create a separate workflow for FCM integration tests - - * Build only packages needed for testing (#3668) - - * build only packages needed for testing - - * ignore firebase and firebase-exp - - * revert yarn.lock - - * test app - - * make a separate workflow for firebase namespace test - - * early return if no test tasks - - * test fcm - - * Revert "test fcm" - - This reverts commit a0599e8b45451d0ec423ab8131d944a315de372a. - - * Revert "test app" - - This reverts commit 73f817c3d2f7e8028abdfae3dc2ead81256de293. - - * put auxiliary libs into a separate workflow - - * test firebase - - * small change - - * update yarn.lock - - * fix obvious errors - - * fix script issues - - * run auth tests in a separate workflow - - * rename test name to make more sense on Github - - * try separating firestore and firestore integration into different workflows - - * run the correct script - - * refactor test changed - - * update words - - * remove unnecessary xvfb-run - - * add firebase to auth's dependency because auth test depends on it - - * build correctly - - * abort if build failed - - * build appExp - - * build all for auth - -commit 39bc71bd732778a195873a8724f20bad031be711 -Merge: fa5104fb2 62051061c -Author: Christina Holland -Date: Mon Aug 24 15:35:49 2020 -0700 - - Merge branch 'release' - Release 7.19.0 - -commit fa5104fb2e13f457a04661fd5431ae76b6d1ef3e -Author: Yifan Yang -Date: Mon Aug 24 11:25:03 2020 -0700 - - Remove duplicate dependency. (#3673) - -commit d3cd75b1fb62ecea2a888878ca162edd56e249af -Author: Christina Holland -Date: Fri Aug 21 14:37:29 2020 -0700 - - Fix changeset checker regex (#3670) - -commit 1508a0e4c9ae2d6e685b512a82ef57b3735122c1 -Author: Xuechun Hou -Date: Fri Aug 21 16:52:24 2020 +0000 - - size analysis project - phase 2 (#3610) - - * size analysis project phase 2 - - * point to prod version - - * addressed PR comments - - * addressed PR comments - - * removed try catch block - - * consolidate common methods - - * addressed PR comments - - * changed method signature - - * fixed lint errors - - * fixed lint errors - -commit 62051061cf86ee729992a3d0e62a1e9fd2f60f0d (tag: firebase@7.19.0, tag: @firebase/rules-unit-testing@1.0.0, tag: @firebase/performance@0.4.0, tag: @firebase/firestore@1.16.5) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Aug 20 14:00:19 2020 -0700 - - Version Packages (#3656) - - Co-authored-by: github-actions[bot] - -commit 8d3aca79d3bafb23ebd20be952a9110b18973012 -Author: Feiyang -Date: Thu Aug 20 10:49:24 2020 -0700 - - take @firebase/app as devDependencies (#3666) - -commit ccbcadce148694b3e0d4c0fe3c8bf43b80871086 -Author: Christina Holland -Date: Thu Aug 20 10:36:20 2020 -0700 - - Show CI logs if run is longer than 1 hour (#3665) - -commit 3b26db4271f22989ffa3154b37c70f2f48112f6f -Author: Sebastian Schmidt -Date: Thu Aug 20 15:40:13 2020 +0200 - - Remove all namespace imports (#3660) - -commit 05f800282cffc73e7e90dd2ebb062e47ae408e13 -Author: Feiyang -Date: Wed Aug 19 16:36:01 2020 -0700 - - Separate workflow for lint and test (#3662) - - * fix lint issue - - * add lint workflow - - * remove type check scripts - - * exclude lint from ci:test - - * update test:ci for integration tests - - * set default script - - * remove stream to show time taken for each package - - * test all pacakges - - * add stream back for local test - - * add stream back - -commit d03c5ad6f61e69baf07671555a8e1a6b240d7f94 -Author: Christina Holland -Date: Wed Aug 19 13:50:33 2020 -0700 - - Fix canary release flow (#3663) - -commit 8c5d52251739a7ea7d456d2e9fa072522b1def31 -Author: Christina Holland -Date: Wed Aug 19 10:43:08 2020 -0700 - - Try to fix flaky analytics test (#3612) - -commit 61b4cd31b961c90354be38b18af5fbea9da8d5a3 -Author: Brian Chen -Date: Tue Aug 18 21:47:37 2020 -0500 - - add option to merge settings (#3464) - -commit 8097b97baec0a2d30977777106c98ae51f70eb42 -Author: Feiyang -Date: Tue Aug 18 18:08:06 2020 -0700 - - Include typing files and package.json when publishing firestore exp (#3649) - - * include typing files and package.json in firestore exp release - - * test - - * Revert "test" - - This reverts commit c1a449cb52595b9ed2e6981324de7c31d405b478. - -commit 9f58f6d3c2a19414d226a861fd2289c7babd5c50 -Author: Feiyang -Date: Tue Aug 18 16:31:05 2020 -0700 - - downgrade firebase-tools in rules-unit-testing to be consistent with the rest of the repo (#3646) - -commit f8f37388a573d3d78ce4d754bcca5cd9cb523f7d -Author: Christina Holland -Date: Tue Aug 18 15:32:33 2020 -0700 - - Fix firestore build:release (#3658) - -commit 67501b9806c7014738080bc0be945b2c0748c17e -Author: Xuechun Hou -Date: Tue Aug 18 20:04:11 2020 +0000 - - Issue 2393 - Add environment check to Performance Module (#3424) - - * issue #2393, first fix on performance module and remote-config module - - * added error handler to remote-config and performance modules on indexedDB not supported in some browser situations - - * issue #2393 fix for analytics module - - * updateDoc()/deleteDoc() signature fix (#3147) - - * Transaction/WriteBatch signature fix (#3151) - - * Take WriteStream offline when IndexedDB is unavailable (#2995) - - * Do not build firestore lite in build because it breaks regular release build (#3156) - - * Do not build firestore lite in build because it breaks release build - - * add release build script - - * add pre script for build:release (#3161) - - * Add setLogLevel() (#3154) - - * Add DocumentReference (#3123) - - * issue #2393 fix for analytics module - - * added isSupported method to performance module - - * added method signature to firebase/index.d.ts - - * reverted unrelated files in remote-config - - * Create little-cycles-fold.md - - * removed isSupported method from performance - - * wrote tests for requiredApisAvailable - - * updated isRequiredApiAvailable tests, updated logTrace function to reflect changes of isRequiredApiAvailable - - * added Promise existence check before every test of requiredApisAvailable - - * took validateIndexedDBOpenable outside of isRequiredApisAvailable - - * updated performance constructor test - - Co-authored-by: Sebastian Schmidt - Co-authored-by: Feiyang - -commit 00ac9d2d545c187febf21e12dc60077e28d7fbd7 -Author: Sebastian Schmidt -Date: Tue Aug 18 19:54:55 2020 +0200 - - Replace usage of Set with Set (#3652) - -commit 80726241a9ee70380abba9857eeb288976c6174c -Author: Sebastian Schmidt -Date: Tue Aug 18 08:59:37 2020 +0200 - - Remove firestore/exp dependency on firebase/app (#3641) - -commit 2df98927eef7e10ae8edd227103500091d21ac82 -Author: Sebastian Schmidt -Date: Tue Aug 18 08:59:15 2020 +0200 - - Rewrite proto root for exp build (#3642) - - * Rewrite proto root for exp build - - * --amend - - * Add dist/*.js - -commit c1d98b0cca1b4902df699638b7bc470dcbc7931b -Author: egilmorez -Date: Mon Aug 17 16:34:18 2020 -0700 - - Fixing some links and link text. (#3647) - -commit d02177b90e24430cf3154821f4cadf8989c84e84 -Author: Christina Holland -Date: Mon Aug 17 13:41:54 2020 -0700 - - Add new messaging API pages to toc.yaml (#3644) - -commit b97c7e758b1e2a370cb72a7aac14c17a54531a36 -Author: Richard Musiol -Date: Mon Aug 17 19:20:35 2020 +0200 - - Add check if crypto.getRandomValues is available (#3487) - -commit e8b950fda1be50dbf714a3f16c9db5d37fbdc5b4 -Author: Sebastian Schmidt -Date: Sat Aug 15 16:07:47 2020 +0200 - - Tree-shake LocalStore's implementation (#3531) - - * Tree-shake all of LocalStore - - * Comments - - * Fix compile - -commit c5f3b2746d64028fe2082ab7923ddb291b57776d -Author: Sebastian Schmidt -Date: Fri Aug 14 11:36:27 2020 +0200 - - Parallelized builds (#3629) - -commit 6a95ae14c27423c758249b4d4a3a8e282b445275 -Author: Feiyang -Date: Thu Aug 13 18:01:10 2020 -0700 - - update outdated deps (#3635) - -commit 87402dfda3de508ee2de47aa9c657ac1b48835ab -Merge: 32c7a7a5c 5b697187c -Author: Feiyang1 -Date: Thu Aug 13 15:47:13 2020 -0700 - - Merge branch 'release' - 7.18.0 release - -commit 32c7a7a5cec1586d6df311655ead5821b669887e -Author: Konstantin Varlamov -Date: Thu Aug 13 18:10:18 2020 -0400 - - Add `toJSON` methods to `GeoPoint` and `Timestamp` (#3615) - - `GeoPoint` and `Timestamp` are the only classes in the public API that have a well-defined JSON representation. - - Fixes #3605 - -commit 5b697187c876387b6abeab1764075ff501baa71c (tag: firebase@7.18.0, tag: @firebase/util@0.3.1, tag: @firebase/testing@0.20.11, tag: @firebase/storage@0.3.42, tag: @firebase/remote-config@0.1.27, tag: @firebase/performance@0.3.11, tag: @firebase/messaging@0.7.0, tag: @firebase/messaging-types@0.5.0, tag: @firebase/installations@0.4.16, tag: @firebase/functions@0.4.50, tag: @firebase/firestore@1.16.4, tag: @firebase/database@0.6.11, tag: @firebase/component@0.1.18, tag: @firebase/app@0.6.10, tag: @firebase/analytics@0.4.2) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Aug 13 13:35:25 2020 -0700 - - Version Packages (#3614) - - Co-authored-by: github-actions[bot] - -commit 4e09c70cc4c235c65473037412f95ff5dd00b5db -Author: Sebastian Schmidt -Date: Thu Aug 13 21:22:49 2020 +0200 - - Silence nyc (#3626) - -commit 5670a2361b0121a143787290f69741afc60fa6c1 -Author: Christina Holland -Date: Thu Aug 13 12:08:23 2020 -0700 - - Changeset checker (#3554) - -commit c6abcd83477e7880bccb1d846901395ad5ffb7f7 -Author: Sebastian Schmidt -Date: Thu Aug 13 19:18:26 2020 +0200 - - Abort tests when test runnner script is aborted (#3627) - -commit c8495f52a190365d83e0bb5700f9c29e9146f0c9 -Author: Feiyang -Date: Thu Aug 13 09:59:34 2020 -0700 - - change script to ts (#3577) - -commit 960093d5b3ada866709c1a51b4ca175c3a01f1f3 -Author: Sebastian Schmidt -Date: Thu Aug 13 16:51:11 2020 +0200 - - Make shutdown idempotent (#3575) - -commit 980c7d53964cd28d6c6ad2ab4b859580997a476c -Author: Sam Stern -Date: Thu Aug 13 05:57:40 2020 -0400 - - Migrate testing to rules-unit-testing (#3378) - -commit 5d4d18234cccb7c15f487b3e3085c63a05035c9b -Author: ChaoqunCHEN -Date: Wed Aug 12 17:36:54 2020 -0700 - - add ChaoqunCHEN to FIS SDK owner list (#3624) - -commit 2245ad737ac60149dea0f24b682a9dac498759be -Author: Christina Holland -Date: Wed Aug 12 12:32:53 2020 -0700 - - Update READMEs (#3551) - -commit d4721c53a4cf89cb6a00e5078b15fb3c0963e51c -Author: Feiyang -Date: Wed Aug 12 12:24:32 2020 -0700 - - clean up emulator after test (#3618) - -commit 5b87b5911b29a0af5962fda05d9bbadb0d47a789 -Author: Feiyang -Date: Tue Aug 11 17:04:42 2020 -0700 - - Add techwriters as code owners for documentation related files (#3608) - - * add techwriters to code owner - - * Update CODEOWNERS - -commit 4ea2b6bca32eff720c46b991ac33ef1841a87307 -Author: Feiyang -Date: Tue Aug 11 15:07:21 2020 -0700 - - fix changeset issues (#3613) - - * fix changeset issues - - * Update spicy-masks-sort.md - -commit e8b0098a910794e29f45bb7e361320f02cfc1a7f -Author: Sebastian Schmidt -Date: Tue Aug 11 23:29:12 2020 +0200 - - Address 'calling shutdown of undefined' warning (#3607) - -commit bbc6d7e6165df17affa91aef6684a406ae8532df -Author: Sebastian Schmidt -Date: Tue Aug 11 23:28:36 2020 +0200 - - Add lite/package.json to 'files' (#3596) - -commit 29327b2198391a9f1e545bcd1172a4b3e12a522c -Author: Kai Wu -Date: Tue Aug 11 13:31:56 2020 -0700 - - FCM Pre Modularization (#3234) - - * FCM Pre Modualization - - * Refactor FCM typing - - * Polish javascript doc - - * Update index.d.ts - - * Add Changeset - - * Fix changeset from major to minor - - * Add to changeset - - * Polished index.d.ts based on Arthur's feedback - - * Polish PR based on feedbacks - - * Update Changeset - - * Fix wording - - * Polishing - -commit 46fd70bec3a2593e81b0ea1f91965b7fe2dec3c5 -Author: Sebastian Schmidt -Date: Tue Aug 11 20:50:34 2020 +0200 - - Update to latest version of Firestore Emulator (#3604) - -commit e96559f535dc8e69b57b4af2eab368e9a90623aa -Author: Xuechun Hou -Date: Tue Aug 11 18:37:55 2020 +0000 - - Size Analysis Tool - Phase 1 (#3588) - - * size analysis tool phase 1 - - * Create shy-bears-heal.md - - * Delete shy-bears-heal.md - - * enable toplevel mangling (#3591) - - * enforce -o command line flag - - * ignore size-analysis package in changeset - - * profile the tests - - * use smaller timeout - - * update package.json - - Co-authored-by: Feiyang - Co-authored-by: Feiyang1 - -commit e1d37efedcb88995d8623c8a92757f99e6c6ffab -Author: Brian Chen -Date: Tue Aug 11 11:19:36 2020 -0500 - - Add test for != document ID (#3597) - -commit d4ca3da0a59fcea1261ba69d7eb663bba38d3089 -Author: Xuechun Hou -Date: Mon Aug 10 23:32:11 2020 +0000 - - Extended Usage of `isIndexedDBAvailable` to Service Worker (#3585) - - * extended usage of isIndexedDBAvailable to service worker - - * Create silly-moles-rush.md - - * Update silly-moles-rush.md - -commit d3f25079b4e920ef4ccbcbbe1679d3fe3bee70b9 -Author: Sebastian Schmidt -Date: Mon Aug 10 14:01:58 2020 -0700 - - Make newConnection() synchronous (#3569) - -commit 90203ebd71819f645e4167ed0384afffb200d6b1 -Author: Sebastian Schmidt -Date: Mon Aug 10 12:14:04 2020 -0700 - - Run test:exp and test:lite while emulator is running (#3587) - -commit 68995c2422a479d42b9c972bab3da4d544b9f002 -Author: Sebastian Schmidt -Date: Mon Aug 10 05:12:55 2020 -0700 - - Fix bug in AsyncQueue visibility handler (#3586) - -commit 2c37560f60a0a358acbac5fa53d19d2886b302e3 -Author: Christina Holland -Date: Fri Aug 7 18:31:16 2020 -0700 - - Wrong package name in changeset file (#3590) - -commit 815ae53f2dc14e73b601e90b54dac2e9a993a528 -Merge: 3e653c7fd e1b3d9dd7 -Author: Christina Holland -Date: Fri Aug 7 17:47:13 2020 -0700 - - Merge branch 'release' - Release 7.17.2 - -commit 3e653c7fddda67618e16730ea6f86cd3b2670470 -Author: Christina Holland -Date: Fri Aug 7 15:26:59 2020 -0700 - - Use lerna to run test-changed tests (#3589) - -commit 30553df0696211e0f642f5e86ef30b25e63ebda6 -Author: Feiyang1 -Date: Fri Aug 7 15:21:37 2020 -0700 - - Publish firebase@exp 0.800.4 - -commit f1299756c6a9aaa936b08a274b00b3bcb720a833 -Author: Feiyang -Date: Fri Aug 7 12:43:49 2020 -0700 - - remove side effect imports (#3534) - - * remove side effect imports - - * registerFirestore before test - -commit 41ed6f28d4712f04debe7dedc7c58f7d89b4b5bb -Author: Christina Holland -Date: Thu Aug 6 21:33:29 2020 -0700 - - Update test-changed workflow checkout step (#3580) - -commit e1b3d9dd7fbe963b38cc1c248051cf4af80f99d9 (tag: firebase@7.17.2, tag: @firebase/webchannel-wrapper@0.3.0, tag: @firebase/testing@0.20.10, tag: @firebase/firestore@1.16.3, tag: @firebase/database@0.6.10, tag: @firebase/database-types@0.5.2) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Aug 6 13:21:18 2020 -0700 - - Version Packages (#3501) - - Co-authored-by: github-actions[bot] - -commit 36be62a85c3cc47c15c9a59f20cdfcd7d0a72ad9 (origin/ida-size-analysis-base) -Author: Sebastian Schmidt -Date: Wed Aug 5 15:15:21 2020 -0700 - - Re-open IndexedDB if closed (#3535) - -commit cf3401d1662dc4b23d8496d71f8216f0b72f996d -Author: Brian Chen -Date: Wed Aug 5 16:52:53 2020 -0500 - - Add NOT_IN and != queries (not public) (#3557) - -commit 2a0d254fa58e607842fc0380c8cfa7bbbb69df75 -Author: Xuechun Hou -Date: Wed Aug 5 16:06:15 2020 +0000 - - Browser Extension Check for Analytics Module (#3555) - - * added browser extension check to analytics module; prevent initialization if under browser extension context - - * removed unnecessary imports - - * Create spicy-masks-sort.md - - * changed error message - - * updated changeset - - * updated changeset - -commit 7f9b3d96b26d78e95b857694a3e41e15ef0b3f04 -Author: Sebastian Schmidt -Date: Tue Aug 4 14:17:32 2020 -0700 - - Stop using WebChannelConnection in Lite SDK (#3482) - -commit 2fa0353dda82c291dc4d1e97a9dd471b28af9995 (origin/storage-exp) -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Aug 3 12:29:07 2020 -0700 - - Update all non-major dependencies (#3520) - - Co-authored-by: Renovate Bot - -commit cf9dd92523f146f7c4b5bea4eae1d5bc9d35ac5e -Author: Brian Chen -Date: Mon Aug 3 13:52:19 2020 -0500 - - add IS_NOT_NULL and IS_NOT_NAN (#3533) - -commit 9c1310433ffc566feccd32858b6ab1f5255acba7 -Author: Sebastian Schmidt -Date: Mon Aug 3 11:27:48 2020 -0700 - - Remove TransactionRunner when not used (#3539) - -commit 096641646c711ed6f6117fb18230d843351d7221 -Author: Sebastian Schmidt -Date: Mon Aug 3 09:20:17 2020 -0700 - - Remove FieldFitler instantiations (#3540) - -commit 434c110e6d874f6be8ef2f024353e19df98bb0dc -Author: Sebastian Schmidt -Date: Fri Jul 31 17:03:27 2020 -0700 - - Fix bug in terminate() (#3532) - -commit 2bc2621106a651a529ed2b7910df4dab5da92d86 -Author: Brian Chen -Date: Fri Jul 31 13:33:18 2020 -0500 - - add not equal proto (#3528) - -commit 458f8b738f9c610a0a67cb8e8bb69b0f22924398 -Author: Sebastian Schmidt -Date: Thu Jul 30 17:53:58 2020 -0700 - - Undo prettier for generated source (#3518) - -commit 8a8e60ada7f012b198c2c26089daff85c8270ee2 -Author: Sebastian Schmidt -Date: Thu Jul 30 13:28:04 2020 -0700 - - LocalStore-only queries (#3508) - -commit ef348fed291338351706a697cbb9fb17a9d06ff4 -Author: Feiyang -Date: Thu Jul 30 11:47:38 2020 -0700 - - Add an interface Database (#3511) - - * Add an interface Database - - * Create thirty-flies-flow.md - - * Update .changeset/thirty-flies-flow.md - - Co-authored-by: Sebastian Schmidt - - * Update thirty-flies-flow.md - - Co-authored-by: Sebastian Schmidt - -commit 94986e6c19196838b058fcd38ce3925c3b8ff437 -Author: Sebastian Schmidt -Date: Wed Jul 29 21:41:35 2020 -0700 - - Refactor some FirestoreClient methods (#3507) - -commit 6f283d58133645f18c2f4b2aeae57c53f779181c -Author: Sebastian Schmidt -Date: Wed Jul 29 14:31:04 2020 -0700 - - Tree-shakeable FirestoreClient (#3492) - -commit fc71940999dfc12e147c1d1e375c9c9108f7a968 -Author: Visu -Date: Wed Jul 29 13:43:28 2020 -0700 - - Make sure the value that is set for a metric is an integer. (#3480) - -commit 14d3bedb8aedad31ab37f2d3b4f38eb80795060c -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Wed Jul 29 12:58:50 2020 -0700 - - Update dependency firebase-admin to v9 (#3430) - - Co-authored-by: Renovate Bot - -commit f39a18811d8b2cf062fc904a326f35202cd53629 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Wed Jul 29 12:58:32 2020 -0700 - - Update dependency typescript to v3.9.7 (#3428) - - Co-authored-by: Renovate Bot - -commit 51ed48f580f3b588117d55b3f3dc9dca9a7b20ad -Author: Feiyang -Date: Wed Jul 29 12:57:00 2020 -0700 - - make renovate only pin devDependencies (#3490) - -commit b1090a2f535aa12f2d4c3f4962f5213e82846150 -Author: Feiyang -Date: Wed Jul 29 08:59:33 2020 -0700 - - return FirebaseData from initStandalone (#3497) - -commit 217dca9a411912abcee12f58571269fe0d33e9b2 -Author: Sebastian Schmidt -Date: Tue Jul 28 15:13:26 2020 -0700 - - Simplify Listen API (#3491) - -commit acfedd2fd9a4f031a1a24108a3573164c30a8bc0 -Author: Feiyang -Date: Tue Jul 28 15:01:02 2020 -0700 - - upgrade firestore in firebase-exp (#3502) - -commit 1971dde173fe46df344246f716b4bb2d70519beb -Author: Sebastian Schmidt -Date: Tue Jul 28 11:20:00 2020 -0700 - - Tree-shake UMD builds (#3493) - -commit 3a9eaac93e8a158a18d53415482e53a077a113a2 -Author: Feiyang -Date: Mon Jul 27 20:47:58 2020 -0700 - - Clean up old changelogs (#3458) - - * clean up changelogs - - * qualify version with package name - -commit 7f0860a4ced76da8492ae44d2267a2f1cc58eccb -Author: Rafi Khan -Date: Mon Jul 27 18:13:38 2020 -0700 - - Upgrade to latest version of closure (#3372) - - Upgrade to latest version of closure - -commit 18162afe0958989879cdd89b941f382783ccb38e -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jul 27 16:46:34 2020 -0700 - - Update dependency @types/inquirer to v7 (#3466) - - Co-authored-by: Renovate Bot - -commit 900f2e85e7a4eda55a7072634895a1167ea80719 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jul 27 16:44:28 2020 -0700 - - Update dependency source-map-loader to v1 (#3470) - - Co-authored-by: Renovate Bot - -commit 99cc8202257fd0a494f7c790e6dbb5de33a3a05d -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jul 27 16:43:46 2020 -0700 - - Update dependency ts-essentials to v7 (#3471) - - Co-authored-by: Renovate Bot - -commit 19c9590e45c3004464ecbf2b405549e3b16d9068 -Author: Feiyang -Date: Mon Jul 27 16:42:39 2020 -0700 - - create Firestore exp & lite reference docs (#3474) - - * create Firestore exp & lite reference docs - - * update doc - - * upgrade api-documenter and regenerate - -commit cc235a5195516e5c0dbc595f69299bb63005ca06 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jul 27 15:43:29 2020 -0700 - - Update dependency rollup-plugin-terser to v6 (#3431) - - Co-authored-by: Renovate Bot - -commit e93e008fac94fe2d4b995236ef1cb325033b6e28 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jul 27 15:37:47 2020 -0700 - - Update dependency chromedriver to v84 (#3429) - - Co-authored-by: Renovate Bot - -commit a8f76b5dcfe1ce3fd5527389f301374a19a562db -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jul 27 15:34:45 2020 -0700 - - Update all non-major dependencies (#3427) - - Co-authored-by: Renovate Bot - -commit 1fb82be91bc7ff14dfbcb046eb5800faa0b56d66 -Author: Sebastian Schmidt -Date: Sat Jul 25 08:18:27 2020 -0700 - - Extract Offline-only component provider (#3460) - -commit 2dd560ba04867f940029d6bbfdf946848412e750 -Author: Sebastian Schmidt -Date: Fri Jul 24 20:23:29 2020 -0700 - - Add test runner script (#3419) - -commit 9723dcf662875b2efa986bf2b143eaf6d741090d -Author: Feiyang -Date: Fri Jul 24 17:29:39 2020 -0700 - - Firestore exp release script (#3444) - - * Add ReactNative and Browser builds - - * prepare script for firestore exp release - - * add firestore to the exp release script - - * add exp release rollup config - - * misc changes - - * fix typo - - * add module field - - * handle peerDeps - - * fix typo - - * replace app-types-exp with app-types - - * fix typo - - * fix typo - - * remove unused fields - - * testing only. remove before making PR - - * fix merge - - * fix issue - - * Revert "testing only. remove before making PR" - - This reverts commit 5837dab7bead1d1b1c7827f9678942fc83d47294. - - * revert dev changes - - * remove unnecessary rollup config - - * update script - - * for test - - * add firestore to firebase-exp - - * use existing package as placeholder - - * add firestore to firebase-exp - - * build firestore first - - * update release config - - * use script name - - * get script name correctly - - * use componentName - - * show output of build - - * fix bug - - * make it better - - * add missing script - - * fix - - * add missing script - - * fix build issue - - * change order - - * revert dev change - - * use umd build for main - - * update comment - - * add comments - - * address comments - - Co-authored-by: Sebastian Schmidt - -commit c1cc428139fa0a934ead91aa955903792d605e23 -Author: Christina Holland -Date: Fri Jul 24 15:02:00 2020 -0700 - - Fix up build scripts (#3481) - -commit 1a630ba67f3dff8ef3bf646b35f003e36c4549c7 -Author: Sebastian Schmidt -Date: Fri Jul 24 14:16:36 2020 -0700 - - Optional Datastore/FirestoreClient (#3382) - -commit 26c5bebe2eaa34c5b546deda54678257f2e02b30 -Author: Sebastian Schmidt -Date: Fri Jul 24 13:48:09 2020 -0700 - - Re-gen lockfile (#3463) - -commit 8a631e2e87073bfc99b90c974ba6ee0a6fcdde32 -Merge: 59bf57bdd aba18044b -Author: Christina Holland -Date: Fri Jul 24 11:21:04 2020 -0700 - - Merge branch 'release' into master - Release 7.17.1 - -commit 59bf57bdda407dc51595a45121ec87a1bf393dee -Author: Sebastian Schmidt -Date: Fri Jul 24 10:23:57 2020 -0700 - - s/getQuery/getDocs (#3461) - -commit aba18044b5121cd4dbde450b05b11f62fe49433d (tag: firebase@7.17.1, tag: @firebase/util@0.3.0, tag: @firebase/testing@0.20.9, tag: @firebase/storage@0.3.41, tag: @firebase/remote-config@0.1.26, tag: @firebase/performance@0.3.10, tag: @firebase/messaging@0.6.21, tag: @firebase/installations@0.4.15, tag: @firebase/functions@0.4.49, tag: @firebase/firestore@1.16.2, tag: @firebase/database@0.6.9, tag: @firebase/component@0.1.17, tag: @firebase/app@0.6.9, tag: @firebase/analytics@0.4.1) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Jul 23 22:07:19 2020 -0700 - - Version Packages (#3473) - - Co-authored-by: github-actions[bot] - -commit 1d7ee969cf8a202a77147f26defebfdbc252a108 -Author: Christina Holland -Date: Thu Jul 23 21:54:36 2020 -0700 - - Update yarn.lock (#3475) - -commit a87676b84b78ccc2f057a22eb947a5d13402949c -Author: Christina Holland -Date: Thu Jul 23 20:32:09 2020 -0700 - - Util version bump (#3472) - -commit 18e5dea762d8507238015a9a7837ef6bbcaf6ce6 -Author: Sebastian Schmidt -Date: Thu Jul 23 15:44:20 2020 -0700 - - Add Browser tests for Lite and Exp (#3448) - -commit e50be1ce4c69c922213b19c3dff999cfde1628b9 -Merge: e1173544b 3f579a40f -Author: Christina Holland -Date: Thu Jul 23 14:50:15 2020 -0700 - - Merge branch 'release' into master - Release 7.17.0 - -commit 3f579a40f941a08bd6ec239d4e05aa37495d841a (tag: firebase@7.17.0, tag: @firebase/testing@0.20.8, tag: @firebase/storage@0.3.40, tag: @firebase/analytics@0.4.0) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Jul 23 13:19:58 2020 -0700 - - Version Packages (#3449) - - Co-authored-by: github-actions[bot] - -commit e1173544b2f63691e887622b827bcc819e743293 -Author: Sebastian Schmidt -Date: Thu Jul 23 11:45:40 2020 -0700 - - Remove duplicate test run (#3459) - -commit 7913ae902cf5b367c8592630074e78d2337b5552 -Author: Sebastian Schmidt -Date: Thu Jul 23 10:42:56 2020 -0700 - - Update Lite tests with Query API v2 (#3446) - -commit 9788c43e648d0630c950f134cb2a36a43985952a -Author: Sebastian Schmidt -Date: Wed Jul 22 16:41:42 2020 -0700 - - Add new build rule for gendeps script (#3440) - -commit 2ea7c638b1008df4b6d624c0cf9ba47406f52d17 -Author: Feiyang -Date: Wed Jul 22 15:53:10 2020 -0700 - - build app-exp for release, so firestore test works (#3456) - -commit 75b6b31501eda24a37a8786aa10c2eb34b98973e -Author: Sebastian Schmidt -Date: Wed Jul 22 13:19:52 2020 -0700 - - Don't log Cancelled warning when strem is closed (#3450) - -commit beed830df25d25d490a3c40b04995ad5fa942f3b -Author: Feiyang -Date: Wed Jul 22 11:35:54 2020 -0700 - - Downgrade karma-coverage-istanbul-reporter to fix 0% coverage issue (#3435) - - * downgrade karma-coverage-istanbul-reporter - - * fix broken test script - -commit 6af4c27743372ba531e8ce3d046ae2f81e8f5be1 -Author: Sebastian Schmidt -Date: Tue Jul 21 18:03:16 2020 -0700 - - Fix imports for Console builds (#3437) - -commit c2829cde371db0058ba43b4fdb97d5ea3be40f4e -Author: Sebastian Schmidt -Date: Tue Jul 21 14:36:40 2020 -0700 - - Use the SDK version from Firebase package.json (#3443) - -commit eb44f4a9a0318744054c451c2ba1ffc84f3da4b6 -Author: Sebastian Schmidt -Date: Mon Jul 20 20:33:00 2020 -0700 - - New Query API (#3390) - - * New Query API - - * Review - - * Update Validation tests - - * One more test fix - - * Fix - - * Lint - - * Imports - -commit cf8696e2b063e1f3f3076df0967c283d030e1784 -Author: Sebastian Schmidt -Date: Mon Jul 20 18:44:50 2020 -0700 - - Remove MultiTabSyncEngine (#3442) - -commit 8396405777813c8960615919f3d90a15b9f385b3 -Author: Christina Holland -Date: Mon Jul 20 16:47:28 2020 -0700 - - Remove Storage AuthWrapper layer (#3399) - -commit 7d5678be0156f01cb58170860d4a8e0edd6cad5a -Author: Christina Holland -Date: Mon Jul 20 14:37:06 2020 -0700 - - Update exp docgen script and add functions-exp docs (#3412) - -commit 4aa169b667bff22a04c419f609104a5bf6cc402f -Author: Sebastian Schmidt -Date: Mon Jul 20 11:52:00 2020 -0700 - - Remove debugAsserts from Node builds (#3405) - -commit f0de245323a10737348e25ee506b37568bf46cd8 -Author: Sebastian Schmidt -Date: Mon Jul 20 11:51:45 2020 -0700 - - Remove MultiTabLocalStore (#3436) - -commit 82e793fbdca3993b330afe344e8bb1828c57cb36 -Author: Sebastian Schmidt -Date: Mon Jul 20 09:26:12 2020 -0700 - - deleteApp() (#3439) - -commit d43411860cee8da8ccd7727c413db4b80fac3856 -Author: Sebastian Schmidt -Date: Fri Jul 17 18:49:37 2020 -0700 - - Add ReactNative and Browser builds (Lite/Exp) (#3400) - -commit ee33ebf726b1dc31ab4817e7a1923f7b2757e17c -Author: Sebastian Schmidt -Date: Fri Jul 17 13:31:51 2020 -0700 - - Add Storage Integration tests (#3414) - -commit ea699fac1220f6d1de3f719c00d96f5039e388ed -Author: Sebastian Schmidt -Date: Thu Jul 16 23:27:37 2020 -0700 - - Share Integration Tests between firestore-exp and the main SDK (#3374) - -commit a875bbe0e248f4794dd972658d4e1649fc78d7a2 -Author: Sebastian Schmidt -Date: Thu Jul 16 18:39:40 2020 -0700 - - Move Datastore to ComponentProvider (#3417) - -commit 6d11f7f58046b567fb2a0c9887d0586cb320fe0b -Author: Feiyang -Date: Thu Jul 16 17:53:00 2020 -0700 - - Use custom changelog generator (#3415) - - * init firebase-changelog - - * use local script for changelog generation - - * change to typescript - - * do not render user in changelog - - * generate issue link automatically if not already present - - * use package - - * update path - - * output to dist - - * find the matching group the right way - - * script update - - * remove console log - - * upate text - - * Make authenticated requests - - * remove debug code - - * clean up - - * correct verbiage - - * update text - -commit 65568139d966f7f315170bd7a8f12b9077e83972 -Merge: 5b7d812a4 5097ba5de -Author: Feiyang1 -Date: Thu Jul 16 15:45:01 2020 -0700 - - Merge branch 'release' into master - 7.16.1 release - -commit 5b7d812a4ea9c4778d3ade299ab36724e99ea08b -Author: Sebastian Schmidt -Date: Thu Jul 16 15:12:27 2020 -0700 - - Add support for collection(coll) and doc(doc) (#3403) - -commit 5097ba5de533d501ad89883edeb30c17a80875f6 (tag: firebase@7.16.1, tag: @firebase/testing@0.20.7, tag: @firebase/storage@0.3.39, tag: @firebase/storage-types@0.3.13, tag: @firebase/firestore@1.16.1, tag: @firebase/database@0.6.8, tag: @firebase/auth@0.14.9) -Author: Google Open Source Bot <26440463+google-oss-bot@users.noreply.github.com> -Date: Thu Jul 16 14:43:24 2020 -0700 - - Version Packages (#3421) - - Co-authored-by: github-actions[bot] - -commit e7ca5594d0c56f2a998b81b8824ef4e232724c83 -Author: Christina Holland -Date: Thu Jul 16 14:27:53 2020 -0700 - - Re-remove firebase devDependency from rxfire (#3423) - - * Re-remove firebase devDependency from rxfire - - * Fix rollup version - -commit 38a12bb98d0b27c5ae06876a20399ce9c0bfd711 -Author: Christina Holland -Date: Thu Jul 16 14:27:53 2020 -0700 - - Re-remove firebase devDependency from rxfire (#3423) - - * Re-remove firebase devDependency from rxfire - - * Fix rollup version - -commit 3860c0a5b20f02a5232b7d8c84fd57dff6a5d7ce -Author: Evan Lovely -Date: Thu Jul 16 14:23:09 2020 -0700 - - docs: updating initializeApp() TypeScript @example (#3119) - -commit 02419ce8470141f012d9ce425a6a4a4aa912e480 -Author: Xuechun Hou -Date: Thu Jul 16 20:43:00 2020 +0000 - - Issue 2393 - Add environment check to Analytics Module (#3165) - - * updateDoc()/deleteDoc() signature fix (#3147) - - * Transaction/WriteBatch signature fix (#3151) - - * Take WriteStream offline when IndexedDB is unavailable (#2995) - - * Do not build firestore lite in build because it breaks regular release build (#3156) - - * Do not build firestore lite in build because it breaks release build - - * add release build script - - * add pre script for build:release (#3161) - - * Add setLogLevel() (#3154) - - * Add DocumentReference (#3123) - - * issue #2393 fix for analytics module - - * removed unnecessary sw check within isSupported method for analytics - - * using raw indexDB api to open a dummy database - - * added console log for reading code - - * fix for issue-2393 - - * removed unused import - - * fixed so that correct type of variable of errorInfo required errorFactory is passed - - * fixed isSupported export - - * addressed feedback - - * removed unnecessary console log - - * removed console logs - - * addressed feedback - - * revert unrelated files - - * Create clean-numbers-flow.md - - * bring functions to util - - * convert validateIndexedDBOpenable to async - - * trying to fix async error throwing - - * brought indexedDB check to factory method - - * fixed grammar error - - * break down functions - - * take indexedDB check funcitons out to factory method - - * changed error names - - * removed eslint comment - - * revert license change - - Co-authored-by: Sebastian Schmidt - Co-authored-by: Feiyang - -commit 139ecf1dade3973dddc3699b2adde5a27dc3c4ef -Author: Christina Holland -Date: Thu Jul 16 13:42:26 2020 -0700 - - Temporarily remove firebase devDependency from rxfire (#3381) - -commit 6d5b4cc3fc19b01a244c5e83b31ae354bf3f7fc7 -Author: Sebastian Schmidt -Date: Thu Jul 16 10:05:47 2020 -0700 - - Add type to DocumentReference/CollectionReference/Query (#3402) - -commit b6145466835e22495b94d2bcfc45813e81496085 -Author: Feiyang -Date: Wed Jul 15 11:05:15 2020 -0700 - - add browser field to auth (#3401) - - * add browser field to auth - - * Create fresh-onions-cry.md - -commit 28438f6090c623a5b85b1873b3cf84f51e0adfe1 -Author: Sebastian Schmidt -Date: Wed Jul 15 09:38:53 2020 -0700 - - Add query() test helper (#3408) - -commit c2b737b2187cb525af4d926ca477102db7835420 -Author: Sebastian Schmidt -Date: Tue Jul 14 13:53:45 2020 -0700 - - Use Admin AuthTokenProvider when targeting Emulator (#3228) - -commit 29afa3330c59cce0c26afb1a0dfd2376c01b9b57 -Author: Feiyang -Date: Tue Jul 14 12:28:38 2020 -0700 - - parse tags correctly in release script (#3385) - - * parse tags correctly - - * remove debug code - -commit b07f822bdb4cf628d53d337dc0df3db7f865a5aa -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Fri Jul 10 10:24:14 2020 -0700 - - Update dependency rollup to v2 (#3388) - - Co-authored-by: Renovate Bot - -commit 55f09a2642043d9fe9415c069e1dc82e1bcb612c -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Fri Jul 10 10:23:43 2020 -0700 - - Update dependency prettier to v2 (#3386) - - * Update dependency prettier to v2 - - * update configuration - - * add parenthese - - * run prettier - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang1 - -commit 340d715e64e2a94fb75284070b3e53785a3019c5 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Thu Jul 9 20:36:23 2020 -0700 - - Update dependency karma-coverage-istanbul-reporter to v3 (#3350) - - Co-authored-by: Renovate Bot - -commit f46bc2476bedaef9ac54db5c5309d6e9be94f65c -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Thu Jul 9 20:35:21 2020 -0700 - - Update dependency rollup-plugin-license to v2 (#3389) - - Co-authored-by: Renovate Bot - -commit 31cb0f1d71ba855327dbd6af9d971a3987799ff0 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Thu Jul 9 20:00:28 2020 -0700 - - Update dependency gulp-filter to v6 (#3348) - - Co-authored-by: Renovate Bot - -commit ee5ec1eb349a33e882f32f6d0dda9d3f5dc2dd4b -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Thu Jul 9 19:59:20 2020 -0700 - - Update all non-major dependencies (#3296) - - Co-authored-by: Renovate Bot - -commit d7735c985a02dd02c976e000ce2dc0acd8e8edff -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Thu Jul 9 18:35:53 2020 -0700 - - Update dependency karma to v5 (#3349) - - Co-authored-by: Renovate Bot - -commit 7d5ccb20ceca71b356174d1b328de6bb0ce6c5da -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Thu Jul 9 18:34:36 2020 -0700 - - Update dependency typescript to v3.9.6 (#3347) - - Co-authored-by: Renovate Bot - -commit 023d729aff27bec6a35acabe422296c0d7432ad6 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Thu Jul 9 18:32:46 2020 -0700 - - Update dependency karma-mocha to v2 (#3351) - - Co-authored-by: Renovate Bot - -commit 3c21efe4635b31b2a0845b818b01c6484d4b1860 -Author: Christina Holland -Date: Thu Jul 9 15:29:57 2020 -0700 - - Run integration/firestore tests in Saucelabs (#3319) - -commit 23891b2024af46ab69e0d5fe9f3b15a8c3670660 -Merge: 9c409ea74 2afbd7423 -Author: Christina Holland -Date: Thu Jul 9 14:41:16 2020 -0700 - - Merge branch 'release' into master - Release 7.16.0 - -commit 2afbd7423b361147c67b497d42112a7a74194dc8 (tag: firebase@7.16.0, tag: @firebase/testing@0.20.6, tag: @firebase/storage@0.3.38, tag: @firebase/remote-config@0.1.25, tag: @firebase/performance@0.3.9, tag: @firebase/messaging@0.6.20, tag: @firebase/logger@0.2.6, tag: @firebase/installations@0.4.14, tag: @firebase/functions@0.4.48, tag: @firebase/firestore@1.16.0, tag: @firebase/firestore-types@1.12.0, tag: @firebase/database@0.6.7, tag: @firebase/component@0.1.16, tag: @firebase/auth@0.14.8, tag: @firebase/app@0.6.8, tag: @firebase/analytics@0.3.9) -Author: Christina Holland -Date: Thu Jul 9 13:32:35 2020 -0700 - - Update package.json - - Manually update rxfire's firebase dependency version. - -commit 369dc2660a8ca49741896ae1df17e13a28c2840f -Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> -Date: Thu Jul 9 13:14:57 2020 -0700 - - Version Packages (#3357) - - Co-authored-by: github-actions[bot] - -commit 9c409ea74efd00fe17058c5c8b74450fae67e9ee -Author: Sebastian Schmidt -Date: Thu Jul 9 12:01:10 2020 -0700 - - Allow undefined callbacks in Storage Observer (#3224) - -commit 308f020d19996cd44b7df013132b3a4e0ba0363d -Author: Feiyang -Date: Thu Jul 9 11:52:37 2020 -0700 - - use mocha report to show diff (#3365) - -commit 1c6ca04f5525a7ff4cc601cc08c0918868bf5329 -Author: Feiyang -Date: Thu Jul 9 11:52:03 2020 -0700 - - Remove changeset check for PRs (#3371) - -commit ce168bd961f87ee0c5d85fd932c4d6a9e9a92350 -Author: Feiyang -Date: Thu Jul 9 11:51:37 2020 -0700 - - use oss-bot to make PRs (#3370) - -commit d1a86e6d03dfbebe1efa82e313bb2b723e897a16 -Author: Feiyang -Date: Thu Jul 9 11:51:16 2020 -0700 - - use caret range for tslib in functions-exp (#3328) - - * use caret range for tslib in functions-exp - - * Create rotten-owls-drive.md - -commit 0b14a8cdeced1fe863c8b01f8aad322d25fc86f9 -Author: Sebastian Schmidt -Date: Thu Jul 9 10:43:25 2020 -0700 - - Make clearIndexedDbPersistence() work without enableIndexedDbPersistence() (#3373) - -commit 4fc68ef91a50827c74b90177063973ab24feaefa -Author: Sebastian Schmidt -Date: Wed Jul 8 22:59:14 2020 -0700 - - Add test-only API shim (Lite SDK) (#3364) - -commit 9b53ec8927511ebd149be67ee3d80509c235eadf -Author: Sebastian Schmidt -Date: Wed Jul 8 22:08:07 2020 -0700 - - Add test-only API shim (firestore-exp) (#3361) - -commit 5a3553609da893d45f7fe1897387f72eaedf2fe0 -Author: Sebastian Schmidt -Date: Wed Jul 8 20:57:09 2020 -0700 - - Handle IndexedDB errors in unsubscribe callback (#3162) - -commit 13dfc2f3380bdd67c6cc6f67ef5b40697e85e126 -Author: Sebastian Schmidt -Date: Wed Jul 8 20:13:39 2020 -0700 - - Remove Multi-Tab overhead for non-multi-tab persistence (#3362) - -commit 6f266bf130315a689d41cbd7befb73ca9357f044 -Author: Kelvin Jin -Date: Wed Jul 8 18:18:32 2020 -0700 - - Remove usages of goog.isFunction (#3205) - - * Update args.js - - * Update auth.js - -commit 417dd7ca3c72e01197547a423088cc240b56e093 -Author: Sebastian Schmidt -Date: Wed Jul 8 09:55:19 2020 -0700 - - Return correct DocumentSnapshot type in exp SDK (#3360) - -commit 9a9a81fe4f001f23e9fe1db054c2e7159fca3ae3 -Author: Sebastian Schmidt -Date: Tue Jul 7 20:28:12 2020 -0700 - - Reset backoff when connectivity status changes (#3279) - -commit 989cb7561d00ba989a88883cb1e6bd1296d35c53 -Author: Feiyang -Date: Tue Jul 7 15:05:44 2020 -0700 - - publish packages publicly (#3368) - - * publish packages publicly - - * Create perfect-terms-press.md - -commit f8d1b3d7d56f5f3fe9b3ec44b615c801275d7c2a -Author: Sebastian Schmidt -Date: Tue Jul 7 13:03:41 2020 -0700 - - Misc fixes for tree-shakeable API (#3358) - -commit bb7408361519aa9a58c8256ae01914cf2830e118 -Author: Feiyang -Date: Tue Jul 7 12:35:54 2020 -0700 - - clear failAfter timeout after request resolves (#3330) - - * clear failAfter timeout after request resolves - - * Create nasty-pigs-invite.md - - * add a test - - * fix test setup issues - -commit 26767cd9e4e24c4465ee37c387b6287ac9702336 -Author: Sebastian Schmidt -Date: Tue Jul 7 11:25:42 2020 -0700 - - Misc fixes for firestore-exp API definition (#3359) - -commit 064cf2e5fefaba325203e92de5bc184ebde3de7d -Author: Sebastian Schmidt -Date: Mon Jul 6 15:52:44 2020 -0700 - - Make UserDataReader tree-shakeable (#3333) - -commit c7aa053d2544c3432ee41a041ce8f4cb208b6c83 -Author: Sebastian Schmidt -Date: Mon Jul 6 15:02:40 2020 -0700 - - Tree-Shakeable Mutations (#3329) - -commit 469c8bdf18c4a22e99d595a9896af2f934df20fd -Author: Kai Wu -Date: Mon Jul 6 14:45:14 2020 -0700 - - Fix FCM rxjs Incompatibility (#3221) - - * Enable the FCM integration test (IT) for Chrome. - - Context: the tests were switched off a couple of years ago due to flakiness. It has not been maintained since then. During the time, Some Selenium API methods used were deprecated and removed; the Firebase projects used are no longer managed or owned by the FCM team. Consequently, the test became unfunctional. In the effort of providing safety for the upcoming FCM releases, this PR is created to fix, deflake, refactor and improve the old tests. - - This PR did the following: - - Enabled comprehensive IT for chrome (ver.80). Now we are covering send&foreground recevie for FCM messages (messages with {notification} payload, {data} payload and {notification, data} payload), delete/update token, use default/customized ServiceWorker. - - - Defalaked test. The IT is now reasonably stable without retry. Previously we are retrying 1 or 3 times. - - - Optimized test. Previously we create a webDriver for each test, which is slow and annoying. Because a window is created and brought to focus and killed frequently, it makes working on other tasks and testing nearly impossible (Probably using a headless browser would work but I haven't found a satisfying solution to have the app in the state of foreground and background which is a requirement for FCM functions). With the way the tests are organized, the IT only spin up a new web driver when necessary. Some data on performance: (old) 'test-send' take 74 seconds (only measured 'test-send' because the other test suites were not functional at the time); (now) 'test-send', 'test-deleteToken', 'test-updateToken', 'test-useDefaultServiceWorker', 'test-useValidManifest' takes in total 33s (10 run average). - - - General refactoring. Including refactors on expect blocks, createWebDriver, use const for constants usage, etc. The code should be much easier to understand and maintain. - - Future work: - - Enable test on firefox once I get the notification permission working. - - Run the IC against some milestone chrome/firefox version (if it makes sense) to ensure backward compatibility. We should try to avoid https://github.com/firebase/firebase-js-sdk/issues/2712 . :) - - * [AUTOMATED]: License Headers - - * Enable integration test (IT) for FCM. - - Context: FCM IT were turned off a couple years ago due to flakiness. It became mostly unfunctional as repo structure change overtime. The goal is to fix and enable IT for more confident developement flow and safer releases. - - This CL does the following: - - Fix the IT to be functional again. The IT is derteminated from my experiements (no longer flaky). Therefore, The CL removed the retry mechasim (previously retry 3 times) which makes running IT cheaper and more enjoyable. - - - Include IT for test:change for FCM package: the entire IT test suites is resoanblly fast (from my exeperience 1-3 miutes to complete. As it grows larger, maybe it makes run tests in parallel in Saucelab) - - Futhure work: - - Enable testing for firefox - - * Correct int syntax - - js doesn't allow underscore for int - - * This file wasn't auto-saved - - * Trigger FCM IT - - why dot.env(FCM_SECRETS) are not included in env? - - * Test Secrets can be accessed w/o dotenv - - * Add fcm sercret to workflow - - * Update test-changed.yml - - * test send (background only) - - Because headless chrome doesn't have the concept of foreground and background - - * remove dotenv - - * feed secrest into test:all workflow - - * Update test-all.yml - - * background messaging checking - - * [AUTOMATED]: License Headers - - * rerun - - * added waiting - - * wait - - * Update test-send.js - - * Update test-send.js - - * Examine wrong sercret - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * update fcm project - - * Update package.json - - * Update test-send.js - - * open new tab for backgournd receive - - * removed test-send - - somehow not workingin github workflow? - - * Adding Reties - - * Change timeout limit - - * retry 3 times - - * adjust mocha setting - - * update - - * Enable foreground tesing - - * Fix FCM rxjs incompatibility - - * Use one listener to handle next and observer for onMessage - - * Add changeset to the PR - - * Update tough-rings-bake.md - - Co-authored-by: Kai Wu - -commit ee1892d69f1803178084b98ec9fa7318b36e6b5b -Author: Kai Wu -Date: Mon Jul 6 11:00:33 2020 -0700 - - Add Foreground Message Send/Receive Integration Tests (#3216) - - * Enable the FCM integration test (IT) for Chrome. - - Context: the tests were switched off a couple of years ago due to flakiness. It has not been maintained since then. During the time, Some Selenium API methods used were deprecated and removed; the Firebase projects used are no longer managed or owned by the FCM team. Consequently, the test became unfunctional. In the effort of providing safety for the upcoming FCM releases, this PR is created to fix, deflake, refactor and improve the old tests. - - This PR did the following: - - Enabled comprehensive IT for chrome (ver.80). Now we are covering send&foreground recevie for FCM messages (messages with {notification} payload, {data} payload and {notification, data} payload), delete/update token, use default/customized ServiceWorker. - - - Defalaked test. The IT is now reasonably stable without retry. Previously we are retrying 1 or 3 times. - - - Optimized test. Previously we create a webDriver for each test, which is slow and annoying. Because a window is created and brought to focus and killed frequently, it makes working on other tasks and testing nearly impossible (Probably using a headless browser would work but I haven't found a satisfying solution to have the app in the state of foreground and background which is a requirement for FCM functions). With the way the tests are organized, the IT only spin up a new web driver when necessary. Some data on performance: (old) 'test-send' take 74 seconds (only measured 'test-send' because the other test suites were not functional at the time); (now) 'test-send', 'test-deleteToken', 'test-updateToken', 'test-useDefaultServiceWorker', 'test-useValidManifest' takes in total 33s (10 run average). - - - General refactoring. Including refactors on expect blocks, createWebDriver, use const for constants usage, etc. The code should be much easier to understand and maintain. - - Future work: - - Enable test on firefox once I get the notification permission working. - - Run the IC against some milestone chrome/firefox version (if it makes sense) to ensure backward compatibility. We should try to avoid https://github.com/firebase/firebase-js-sdk/issues/2712 . :) - - * [AUTOMATED]: License Headers - - * Enable integration test (IT) for FCM. - - Context: FCM IT were turned off a couple years ago due to flakiness. It became mostly unfunctional as repo structure change overtime. The goal is to fix and enable IT for more confident developement flow and safer releases. - - This CL does the following: - - Fix the IT to be functional again. The IT is derteminated from my experiements (no longer flaky). Therefore, The CL removed the retry mechasim (previously retry 3 times) which makes running IT cheaper and more enjoyable. - - - Include IT for test:change for FCM package: the entire IT test suites is resoanblly fast (from my exeperience 1-3 miutes to complete. As it grows larger, maybe it makes run tests in parallel in Saucelab) - - Futhure work: - - Enable testing for firefox - - * Correct int syntax - - js doesn't allow underscore for int - - * This file wasn't auto-saved - - * Trigger FCM IT - - why dot.env(FCM_SECRETS) are not included in env? - - * Test Secrets can be accessed w/o dotenv - - * Add fcm sercret to workflow - - * Update test-changed.yml - - * test send (background only) - - Because headless chrome doesn't have the concept of foreground and background - - * remove dotenv - - * feed secrest into test:all workflow - - * Update test-all.yml - - * background messaging checking - - * [AUTOMATED]: License Headers - - * rerun - - * added waiting - - * wait - - * Update test-send.js - - * Update test-send.js - - * Examine wrong sercret - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * update fcm project - - * Update package.json - - * Update test-send.js - - * open new tab for backgournd receive - - * removed test-send - - somehow not workingin github workflow? - - * Adding Reties - - * Change timeout limit - - * retry 3 times - - * adjust mocha setting - - * update - - * Enable foreground tesing - - * Add emtpy changeset - - Not a SDK Change - - Co-authored-by: Kai Wu - -commit 992432e07ca3b7594b860c0d50da23596311ea56 -Author: Feiyang -Date: Mon Jul 6 10:05:42 2020 -0700 - - use secret group for .changeset so people don't get spammed by notification (#3326) - - * use secret group so people don't get spammed by notification - - * Create odd-roses-smile.md - -commit fc17a3cf69cd0642f5b4bc3f9279a5ee019d3908 -Author: Sebastian Schmidt -Date: Thu Jul 2 11:00:56 2020 -0700 - - Tree-shakeable Query implementation (#3220) - -commit 0c8b011b5e25faac7899d11f432987e327080925 -Author: Sebastian Schmidt -Date: Wed Jul 1 09:29:00 2020 -0700 - - Don't use UserDataReader for Increment transform (#3332) - -commit a754645ec2be1b8c205f25f510196eee298b0d6e -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Tue Jun 30 15:14:53 2020 -0700 - - Update dependency typescript to v3.9.5 (#3297) - - * Update dependency typescript to v3.9.5 - - * Create brave-lies-crash.md - - * Update brave-lies-crash.md - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang - -commit 877c060c47bb29a8efbd2b96d35d3334fd9d9a98 -Author: Sebastian Schmidt -Date: Tue Jun 30 15:13:32 2020 -0700 - - Add ReactNative build back, fix base64 serialization (#3251) - -commit dd1e63cee4d3a5a7b7c0a2851255788a8249b51d -Author: Sebastian Schmidt -Date: Tue Jun 30 15:12:32 2020 -0700 - - Add remaining firestore-exp functionality (#3321) - -commit 982acf91ee1031a9210d0aa8af4402fa5380b4cb -Author: Sebastian Schmidt -Date: Tue Jun 30 14:00:10 2020 -0700 - - Add onSnapshotsInSync to firestore-exp (#3320) - -commit c3cd471b0d10149f06f2acbc7d7e4044b604d922 -Author: Sebastian Schmidt -Date: Tue Jun 30 10:59:26 2020 -0700 - - Tree-shakeable FieldFilter (#3252) - -commit 2ab5a175fe502b9c1de4d10baa19e52bc7b42fc0 -Author: Feiyang1 -Date: Tue Jun 30 09:55:12 2020 -0700 - - Publish firebase@exp 0.800.3 - -commit fe85035e190189e6086ed2ff6e1169b725667e42 -Author: Feiyang -Date: Tue Jun 30 09:51:39 2020 -0700 - - 1. Remove messaging from @firebase/functions's dependencies 2. add functions to firebase-exp (#3323) - - * add functions to firebase-exp package - - * Remove messaging from function-exp's dependency - - * Create tall-glasses-move.md - -commit f54abc2543410293ff6be153fb5e36a12c1564c8 -Author: Sebastian Schmidt -Date: Mon Jun 29 21:05:41 2020 -0700 - - Add Snapshot Listeners to firestore-exp (#3317) - -commit fe2bd0f1f2e63210b7ecfc3e4f8b0b5690612036 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jun 29 17:51:34 2020 -0700 - - Update dependency eslint to v7 (#3299) - - * Update dependency eslint to v7 - - * Create two-weeks-thank.md - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang - -commit d0bc885bc04112c3bad34ff505332ac7e984d6b0 -Author: Feiyang1 -Date: Mon Jun 29 16:59:20 2020 -0700 - - Publish firebase@exp 0.800.2 - -commit 9e4aaea420b39c14999eafa7de848ae168162f59 -Author: Feiyang -Date: Mon Jun 29 16:52:36 2020 -0700 - - Point functions-exp to the right typing file (#3322) - - * point to the typing file in functions-exp - - * use app-exp as the service name in functions - - * Create chilled-beers-chew.md - -commit 31206aaddb0b03049650010087f653aee0b66016 -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Mon Jun 29 16:42:50 2020 -0700 - - Update dependency firebase-tools to v8 (#3300) - - * Update dependency firebase-tools to v8 - - * Create yellow-lamps-greet.md - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang - -commit b8c0ceb2011b0c85d7cba23780783af7656fbfa7 -Author: Feiyang -Date: Mon Jun 29 16:36:20 2020 -0700 - - Make onSnapshot work with rxjs observers (#3318) - - * Make onSnapshot work with rxjs observers - - * Create thin-ligers-fold.md - - * Update thin-ligers-fold.md - -commit bf485cd1eb56a09a4d3afee9ed946504c9521aae -Author: Feiyang -Date: Mon Jun 29 14:26:00 2020 -0700 - - Make exp release script work again (#3301) - - * change to ts - - * use the correct file name - - * remove -exp from types packages when releasing - - * werid hack to make exp release build - - * skip tests in exp release - - * do not run test - - * revert changes made for testing - - * remove extraneous build target - - * Create warm-suns-dream.md - -commit 4d1712db7abd4bd35bef88d3b02df122a6e6db2c -Author: Sebastian Schmidt -Date: Mon Jun 29 12:31:58 2020 -0700 - - Add terminate() and snapshotEqual() to firestore-exp (#3313) - -commit 32d91c0476fe89198012749e35eae0cbf450792e -Author: Sebastian Schmidt -Date: Mon Jun 29 10:57:18 2020 -0700 - - Add writeBatch(), WriteBatch (#3307) - -commit af0c4300a8c1939ccb74db9159b0337a8d93c32d -Author: Brian Chen -Date: Sat Jun 27 11:37:30 2020 -0700 - - Add set() overrides to lite sdk (#3291) - -commit 6e168ff99734a67d485aea996cf15517f47134b7 -Author: Kai Wu -Date: Sat Jun 27 08:41:24 2020 -0700 - - Clean up unused FCM secret (#3311) - - * Clean up unused FCM secret - - * Update breezy-queens-give.md - - Co-authored-by: Feiyang - -commit 5f51ab5c1a65d5b7ad2fb2e85f9d71a7f3b8cd17 -Author: Sebastian Schmidt -Date: Fri Jun 26 22:13:08 2020 -0700 - - Add setDoc, updateDoc, deleteDoc and addDoc (#3306) - -commit 5d6b749ba008be6cd0f270122bceb506b8d4e853 -Author: Sebastian Schmidt -Date: Fri Jun 26 20:13:47 2020 -0700 - - Add getQuery(), getQueryFromCache() and getQueryFromServer() (#3294) - -commit 17c628eb228c21ad1d4db83fdae08d1142a2b902 -Author: Feiyang -Date: Fri Jun 26 17:02:04 2020 -0700 - - Fix updateToken (#3312) - - * fix assignment order - - * Create cuddly-rivers-add.md - -commit 9e204e7757d76091be99d7427b02d2ed9a81625c -Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> -Date: Fri Jun 26 16:35:26 2020 -0700 - - Update dependency chalk to v4 (#3298) - - * Update dependency chalk to v4 - - * Create many-gifts-invent.md - - Co-authored-by: Renovate Bot - Co-authored-by: Feiyang - -commit 7d4e095baa5917b618b6a7cec5c8b9524f546f7f -Author: Sebastian Schmidt -Date: Fri Jun 26 16:32:43 2020 -0700 - - Reduce size impact of Target/TargetImpl pattern (#3272) - -commit e90304c8ac4341d8b23b55da784eb21348b04025 -Author: Sebastian Schmidt -Date: Fri Jun 26 15:51:08 2020 -0700 - - Remove makeConstructorPrivate (#3309) - -commit c38fc717bf75444203cc5f044d678ae18f6eeb03 -Author: Sebastian Schmidt -Date: Fri Jun 26 15:22:13 2020 -0700 - - Add getDocFromCache() & getDocFromServer() (#3285) - -commit a4ff036c668975078c7e01b1ee1293cd134fda15 -Author: Feiyang -Date: Fri Jun 26 14:58:27 2020 -0700 - - update codeowner to allow approving changeset changes (#3308) - - * update codeowner to allow approving changeset changes - - * Create kind-melons-obey.md - - * Update CODEOWNERS - -commit 3d43b009018c31def7df25dc3843016c6a1f7e91 -Author: Sebastian Schmidt -Date: Fri Jun 26 14:24:21 2020 -0700 - - Add getDoc() to firestore-exp (#3274) - -commit ddbe2180eb22aa30238d5bfc6afa8c61183aff8d -Author: Kai Wu -Date: Fri Jun 26 13:00:24 2020 -0700 - - Disable Cross Browser FCM Integration Test (#3287) - - * Disbale Cross Browser FCM Integration Test - - * Update run_saucelabs.js - - * Move Integration tests out of workflows - - * Create firebsae-messaging.md - - * update changeset description - -commit 39ca8ecf940472159d0bc58212f34a70146da60c -Author: Brian Chen -Date: Fri Jun 26 12:39:34 2020 -0700 - - add support for set() with SetOptions when using FirestoreDataConverter (#3254) - -commit 8e0c0360b3e04a3c780ec6e4913cd546064140a8 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Fri Jun 26 12:25:48 2020 -0400 - - Make SyncEngine an interface. (#3283) - - * Make SyncEngine an interface such that SyncEngineImpl can be contained in the module. - - * Leave private methods out. - - * Address comments - - * Create yellow-lemons-provide.md - - * Revert "Create yellow-lemons-provide.md" - - This reverts commit de8ed28fae08ddbfd7520ededda1927636529cef. - - * Create perfect-carpets-chew.md - -commit 64d9ab6b025cbef2681183fa1f53ced25540fb4a -Author: Feiyang -Date: Thu Jun 25 17:39:41 2020 -0700 - - Update contributing.md with changeset instruction (#3293) - - * update contributing.md with changeset instruction - - * Create twelve-pets-joke.md - -commit a391c3b24237f043faff3d476a5f9b6f8e0e1c1b -Merge: fd163b045 601cd404d -Author: Christina Holland -Date: Thu Jun 25 16:43:05 2020 -0700 - - Merge branch 'release' - 7.15.5 release - -commit 601cd404ddfeb246590359faf929fa318f250ccf (tag: rxfire@3.13.5, tag: firebase@7.15.5, tag: @firebase/util@0.2.50, tag: @firebase/testing@0.20.5, tag: @firebase/storage@0.3.37, tag: @firebase/remote-config@0.1.24, tag: @firebase/performance@0.3.8, tag: @firebase/messaging@0.6.19, tag: @firebase/installations@0.4.13, tag: @firebase/functions@0.4.47, tag: @firebase/firestore@1.15.5, tag: @firebase/database@0.6.6, tag: @firebase/component@0.1.15, tag: @firebase/app@0.6.7, tag: @firebase/analytics@0.3.8) -Author: Christina Holland -Date: Thu Jun 25 16:08:02 2020 -0700 - - Publish firebase@7.15.5 - -commit fd163b0454e36084a4560e6c15c11e3eedc720b1 -Author: Feiyang -Date: Thu Jun 25 15:51:07 2020 -0700 - - compare to origin/master (#3290) - - * compare to origin/master - - * Create poor-eggs-bow.md - - * update changeset - - * fix again - - * fix again - -commit 4edfe22674508499c0ac71f04723b96357d51077 -Author: Feiyang -Date: Thu Jun 25 13:31:39 2020 -0700 - - Fetch all history and all branches in CI, so we can compare with the master branch (#3286) - - * fetch all history and all branches in CI - - * Create hot-pumas-allow.md - -commit 590c9a44e73df50baef86f9939e53d3d2d611642 -Author: Sebastian Schmidt -Date: Thu Jun 25 10:41:01 2020 -0700 - - Update Lite tests (#3278) - -commit fa70d0a3c04ec951d2a76492d48e54b572bb7818 -Author: Feiyang -Date: Thu Jun 25 09:59:10 2020 -0700 - - Enable changesets (#3268) - - * enable changeset - - * Create release pull request - - * change env variable name - - * use the correct secret in GHA - - * make firebase a devDependency in integration test projects - - * initial changeset release rewrite - - * clean up imports in cli.ts - - * save progress - - * implement canary release - - * update changesets to the latest - - * ignore integration test projects - - * save updates - - * update ignore list - - * stream changeset output - - * validate version for staging releases - - * fix bug - - * add option - - * skip private packages - - * remove unused things - - * update release script - - * fix type errors - - * remove commented code - - * fix types - - * add Changeset check - - * compare to master - -commit 04874c976a9b9f4a675dcecd0ffac3f992e613a9 -Author: Sebastian Schmidt -Date: Wed Jun 24 16:54:04 2020 -0700 - - Integrate with app-exp (#3276) - -commit 8846f617268ee29b0dd3baffe28671dd0f4e00ae -Author: Sebastian Schmidt -Date: Wed Jun 24 15:11:52 2020 -0700 - - Don't delay retryable operations (#3270) - -commit c436bcc6477c964861d0014cd0c74c6493f24cf2 (origin/mrschmidt/todos) -Author: Sebastian Schmidt -Date: Wed Jun 24 13:08:46 2020 -0700 - - Export some unchanged members in the firestore/exp SDK (#3256) - -commit a1081c61b401a1daf39065c3d42a082564cbd76d -Author: Gil -Date: Wed Jun 24 12:33:28 2020 -0700 - - Provide document path context for input validation errors. (#3189) - -commit 9bac5bccd8f9bb25ff9c7fe8b88e975b9337978f -Author: Sebastian Schmidt -Date: Wed Jun 24 11:41:56 2020 -0700 - - Tree-shakeable OrderBy (#3253) - -commit b27974af27ff10e5859c2bfab5349536e00b49e9 -Author: Sebastian Schmidt -Date: Wed Jun 24 11:41:34 2020 -0700 - - Don't serialize/deserialize stream token (#3255) - -commit 1791a9be2b2518553250b10802148d203de9a309 -Author: Sebastian Schmidt -Date: Wed Jun 24 09:44:00 2020 -0700 - - Remove remaining static references (#3264) - -commit 9cf49f74f48833ccbdba0106970fa08ecd68ff89 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Wed Jun 24 12:25:20 2020 -0400 - - Make LocalStore an interface. (#3269) - - * Make local store an interface. - - * Address comments - -commit 5de3ec669e7e854885c43d150664d92c0022df20 -Author: Christina Holland -Date: Tue Jun 23 16:10:05 2020 -0700 - - Add yarn script that runs tests on non-exp packages only (#3267) - -commit acd89ee40434383121066d8c857a714f073ea142 -Author: Christina Holland -Date: Tue Jun 23 13:38:24 2020 -0700 - - Set functions-types-exp package to private (#3262) - -commit 50494ecdf41aee7f990147ba57b964a2e74f8f57 -Author: Sebastian Schmidt -Date: Tue Jun 23 12:57:53 2020 -0700 - - Expose static members of public types in ESM2017 build (#3259) - - * Expose static members of public types in ESM2017 build - - * Update api.ts - - * Update api.ts - -commit 868a7869e95093bb7f970477773dab4957df1ac7 -Author: Feiyang -Date: Tue Jun 23 12:56:13 2020 -0700 - - remove -exp deps from firestore (#3261) - -commit 2c8c17c3f7b5d3ba6e3d6c071508121761c3bfa5 -Author: Sebastian Schmidt -Date: Tue Jun 23 09:51:10 2020 -0700 - - Tree-Shakeable LocalSerializer (#3241) - -commit 58e1b6f6740a270fb9f7ea7a66cc15037160674f -Author: Sebastian Schmidt -Date: Mon Jun 22 14:54:19 2020 -0700 - - Take RemoteStore offline during user change (#3193) - -commit 71f94f147a549f6f8ba4a04d4c1a246f7ebd2844 -Merge: 992e6389d 141ae7224 -Author: Feiyang1 -Date: Mon Jun 22 12:28:48 2020 -0700 - - Merge branch 'release' - -commit 992e6389d5ca7a7bc3e5973a21d10048e067afac -Author: Sebastian Schmidt -Date: Mon Jun 22 12:06:33 2020 -0700 - - Tree-shakeable Bound (#3250) - -commit 23e8971188d0d304a1017ecd6dfe18194c505b87 -Author: Sebastian Schmidt -Date: Mon Jun 22 11:29:56 2020 -0700 - - Tree-shakeable Target (#3248) - -commit 141ae72240d1e519ba120c3e0f7611d60c21df92 (tag: rxfire@3.13.4, tag: firebase@7.15.4, tag: @firebase/testing@0.20.4, tag: @firebase/firestore@1.15.4) -Author: Feiyang1 -Date: Mon Jun 22 11:10:32 2020 -0700 - - Publish firebase@7.15.4 - -commit 65945abe2ccb619dd0997f2029e5965d6d8687c7 -Author: Sebastian Schmidt -Date: Sat Jun 20 15:09:46 2020 -0700 - - Disable React Native build (#3244) - - * Disable React Native build - - * Also remove from Firebase build - - * Rollup cleanup - -commit e7332282781ecb07973bab3eb8f15508f6685c45 -Author: Sebastian Schmidt -Date: Sat Jun 20 15:09:46 2020 -0700 - - Disable React Native build (#3244) - - * Disable React Native build - - * Also remove from Firebase build - - * Rollup cleanup - -commit d470f49de7ba58a98cac471978ade6ebeea37cd5 -Author: Christina Holland -Date: Fri Jun 19 18:08:13 2020 -0700 - - WIP: Modularize functions (#3051) - -commit 0b9ef3a56d8de6215ca25756f937df77959fb85a -Author: Sebastian Schmidt -Date: Fri Jun 19 16:30:56 2020 -0700 - - Replace Platform injection with source preprocessor (#3206) - -commit e4babeee154982bf93fdd44b3915075664440a9b -Merge: 338dbfad0 311d4b58d -Author: Feiyang1 -Date: Fri Jun 19 14:36:53 2020 -0700 - - Merge branch 'release' - 7.15.3 release - -commit 311d4b58d79ecf2e6a4e259dad3a121b12a0998a (tag: rxfire@3.13.3, tag: firebase@7.15.3, tag: @firebase/testing@0.20.3, tag: @firebase/firestore@1.15.3) -Author: Feiyang1 -Date: Fri Jun 19 14:21:55 2020 -0700 - - Publish firebase@7.15.3 - -commit 338dbfad08de7980d04e3f1aadcf9a97d50066f1 -Author: Sebastian Schmidt -Date: Fri Jun 19 13:39:54 2020 -0700 - - Tree-Shakeable Serialization (#3231) - -commit d525b69dd1d04a6d0c1f3918dea91fef1a059427 -Author: Sam Stern -Date: Fri Jun 19 14:23:28 2020 -0400 - - Remove gRPC and protos from @firebase/testing (#3236) - -commit 246ed9d6b9f3a40d1a7267866389573ca91a8b02 -Author: Sebastian Schmidt -Date: Fri Jun 19 09:19:25 2020 -0700 - - Add base64 externs for ReactNative build (#3240) - - * Add base64 externs for ReactNative build - - * Sort - -commit 35bc0a2eea98d9796023f15cd5783700d45ccc4d -Author: Christina Holland -Date: Thu Jun 18 18:12:14 2020 -0700 - - Add a timeout to git fetch in precommit hook (#3237) - -commit 0924fa70d3aceb46af7ead6f7a55e402be8826d7 (tag: rxfire@3.13.2, tag: firebase@7.15.2, tag: @firebase/util@0.2.49, tag: @firebase/testing@0.20.2, tag: @firebase/storage@0.3.36, tag: @firebase/remote-config@0.1.23, tag: @firebase/performance@0.3.7, tag: @firebase/messaging@0.6.18, tag: @firebase/installations@0.4.12, tag: @firebase/functions@0.4.46, tag: @firebase/firestore@1.15.2, tag: @firebase/database@0.6.5, tag: @firebase/component@0.1.14, tag: @firebase/auth@0.14.7, tag: @firebase/app@0.6.6, tag: @firebase/analytics@0.3.7) -Author: Feiyang1 -Date: Thu Jun 18 14:49:00 2020 -0700 - - Publish firebase@7.15.2 - -commit ee421d240108106981b6c614295276da41e6cfd6 -Author: WhiteSource Renovate -Date: Wed Jun 17 21:00:00 2020 +0200 - - Lock file maintenance (#3185) - -commit 799507101171bce76879d93ee135b12fb922ffcf -Author: Sebastian Schmidt -Date: Wed Jun 17 10:48:41 2020 -0700 - - Update CHANGELOG.md (#3227) - -commit c4b7595935f1c0faa7e83d9ab9b831bcbc434631 -Author: Feiyang -Date: Tue Jun 16 13:30:49 2020 -0700 - - add _removeServiceInstance() to app-exp (#3173) - -commit 95269556cc03087297297f6f8170dccbe174d8b9 -Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> -Date: Tue Jun 16 11:23:59 2020 -0700 - - Bump websocket-extensions in /packages/auth/demo/functions (#3180) - - Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4. - - [Release notes](https://github.com/faye/websocket-extensions-node/releases) - - [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md) - - [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4) - - Signed-off-by: dependabot[bot] - - Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - -commit b677e08bd909c039fd14a5825d3ef8b854d2d8a2 -Author: Sebastian Schmidt -Date: Tue Jun 16 09:27:53 2020 -0700 - - Add Dependency Test (#3204) (#3219) - -commit 05e0c80824f884e204041262e59701877b79d06b -Author: Sebastian Schmidt -Date: Mon Jun 15 19:48:04 2020 -0700 - - Add Converter tests to Lite client (#3199) - -commit 1bc2ccc1fdc4ac5e09521c4da2e7e4b2eee66531 -Author: Sebastian Schmidt -Date: Mon Jun 15 19:14:08 2020 -0700 - - Add equals methods (#3176) - -commit cc198cab95a3c97d10404f2d004343ddd42bc213 -Author: Sebastian Schmidt -Date: Mon Jun 15 17:45:19 2020 -0700 - - Add Query/getQuery (#3175) - -commit 712dfde546a89af6778ab2f6c787bfd47abbd3b4 -Author: Kai Wu -Date: Fri Jun 12 13:14:46 2020 -0700 - - Enable FCM Integration Test (#3145) - - * Enable the FCM integration test (IT) for Chrome. - - Context: the tests were switched off a couple of years ago due to flakiness. It has not been maintained since then. During the time, Some Selenium API methods used were deprecated and removed; the Firebase projects used are no longer managed or owned by the FCM team. Consequently, the test became unfunctional. In the effort of providing safety for the upcoming FCM releases, this PR is created to fix, deflake, refactor and improve the old tests. - - This PR did the following: - - Enabled comprehensive IT for chrome (ver.80). Now we are covering send&foreground recevie for FCM messages (messages with {notification} payload, {data} payload and {notification, data} payload), delete/update token, use default/customized ServiceWorker. - - - Defalaked test. The IT is now reasonably stable without retry. Previously we are retrying 1 or 3 times. - - - Optimized test. Previously we create a webDriver for each test, which is slow and annoying. Because a window is created and brought to focus and killed frequently, it makes working on other tasks and testing nearly impossible (Probably using a headless browser would work but I haven't found a satisfying solution to have the app in the state of foreground and background which is a requirement for FCM functions). With the way the tests are organized, the IT only spin up a new web driver when necessary. Some data on performance: (old) 'test-send' take 74 seconds (only measured 'test-send' because the other test suites were not functional at the time); (now) 'test-send', 'test-deleteToken', 'test-updateToken', 'test-useDefaultServiceWorker', 'test-useValidManifest' takes in total 33s (10 run average). - - - General refactoring. Including refactors on expect blocks, createWebDriver, use const for constants usage, etc. The code should be much easier to understand and maintain. - - Future work: - - Enable test on firefox once I get the notification permission working. - - Run the IC against some milestone chrome/firefox version (if it makes sense) to ensure backward compatibility. We should try to avoid https://github.com/firebase/firebase-js-sdk/issues/2712 . :) - - * [AUTOMATED]: License Headers - - * Enable integration test (IT) for FCM. - - Context: FCM IT were turned off a couple years ago due to flakiness. It became mostly unfunctional as repo structure change overtime. The goal is to fix and enable IT for more confident developement flow and safer releases. - - This CL does the following: - - Fix the IT to be functional again. The IT is derteminated from my experiements (no longer flaky). Therefore, The CL removed the retry mechasim (previously retry 3 times) which makes running IT cheaper and more enjoyable. - - - Include IT for test:change for FCM package: the entire IT test suites is resoanblly fast (from my exeperience 1-3 miutes to complete. As it grows larger, maybe it makes run tests in parallel in Saucelab) - - Futhure work: - - Enable testing for firefox - - * Correct int syntax - - js doesn't allow underscore for int - - * This file wasn't auto-saved - - * Trigger FCM IT - - why dot.env(FCM_SECRETS) are not included in env? - - * Test Secrets can be accessed w/o dotenv - - * Add fcm sercret to workflow - - * Update test-changed.yml - - * test send (background only) - - Because headless chrome doesn't have the concept of foreground and background - - * remove dotenv - - * feed secrest into test:all workflow - - * Update test-all.yml - - * background messaging checking - - * [AUTOMATED]: License Headers - - * rerun - - * added waiting - - * wait - - * Update test-send.js - - * Update test-send.js - - * Examine wrong sercret - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * Update sendMessage.js - - * update fcm project - - * Update package.json - - * Update test-send.js - - * open new tab for backgournd receive - - * removed test-send - - somehow not workingin github workflow? - - * Adding Reties - - * Change timeout limit - - * retry 3 times - - * adjust mocha setting - - * update - - Co-authored-by: Kai Wu - -commit e1df44f42683a70172ee9a9e3c84ba4c7141b946 (origin/web_rxjs) -Merge: 731a69527 3049183cd -Author: Feiyang1 -Date: Thu Jun 11 19:41:27 2020 -0700 - - Merge branch 'release' - 7.15.1 release - -commit 3049183cd3f4a23f30eade23c238751f762c062a (tag: rxfire@3.13.1, tag: firebase@7.15.1, tag: @firebase/testing@0.20.1, tag: @firebase/firestore@1.15.1) -Author: Feiyang1 -Date: Thu Jun 11 14:01:32 2020 -0700 - - Publish firebase@7.15.1 - -commit 731a69527be9145fa5d2dbeee59deb2a76c47b48 -Author: Sebastian Schmidt -Date: Thu Jun 11 13:05:00 2020 -0700 - - Add Firestore ReactNative build (#3198) - -commit 53c04765a631f414e417d0b00e11f7ab2914e50c -Author: Feiyang -Date: Wed Jun 10 16:34:21 2020 -0700 - - upgrade grpc-js to ^1.0.0 (#3202) - -commit 65c05e2c698ab138a98533deab8fe7ad4732a303 -Author: Sebastian Schmidt -Date: Wed Jun 10 14:39:26 2020 -0700 - - Add GPMID header to Firebase Database (#3190) - -commit 02da0f0a38328f527ee1f59d9e343236eefcfcf5 -Author: Christina Holland -Date: Wed Jun 10 13:39:15 2020 -0700 - - Remove empty commit check (#3155) - -commit b9796f5400c308a0d91a1e5268ff6b916a2dff84 -Author: Feiyang -Date: Wed Jun 10 11:57:54 2020 -0700 - - use caret range for tslib to reduce dep fragmentation in user project (#3203) - -commit 1e3721c5045ce7baa8359e06b1009a3a051a3cb8 -Author: Sebastian Schmidt -Date: Mon Jun 8 14:30:51 2020 -0700 - - Add missing changelog for #3184 (#3187) - -commit 59d45d6e4eb1ea00a6984c8c47f06c9b55598706 -Author: Pascal Luther -Date: Mon Jun 8 21:02:57 2020 +0200 - - [fix] Fixed wrong "main" link for firestore/memory (#3182) - -commit 68768d62bf6915e37783e08587ff9b933a8bf1a1 -Author: Sebastian Schmidt -Date: Mon Jun 8 10:33:51 2020 -0700 - - Refetch token if attempt was invalidated (#3184) - -commit b011da84f9a4906093e8b3b4be5eaacc6dde0ead -Author: Sebastian Schmidt -Date: Mon Jun 8 09:43:40 2020 -0700 - - Throw proper error for FieldValue transforms in arrays (#3183) - -commit 6651efd3eed21d39c6079c6b6f31aeccf68bc2ed -Author: Sebastian Schmidt -Date: Mon Jun 8 09:43:11 2020 -0700 - - Make Converter passing explicit (#3171) - -commit 937c59d74f6b795d400493619c59448e6dcdd203 -Author: Sebastian Schmidt -Date: Mon Jun 8 09:27:21 2020 -0700 - - Add (or fix) FieldValue tests for lite client (#3174) - -commit df36a245704ac49c64cb1f3424340cb047007487 -Author: Brian Chen -Date: Sun Jun 7 15:26:47 2020 -0700 - - Check for converter in Query.isEqual() (#3181) - -commit 0fac7bdc9259fe32c6773637354188053cb008b0 -Author: Sebastian Schmidt -Date: Fri Jun 5 10:39:01 2020 -0700 - - Add Transaction (#3153) - -commit 0abf211d6a1098bd3641cf65bc474a5bdbc37d09 -Author: Sebastian Schmidt -Date: Fri Jun 5 09:50:02 2020 -0700 - - Ignore lease refresh failures for single-tab clients (#3163) - -commit 6cd5ed1d1f849a68bcf939f46e1da433d1157290 -Author: Sebastian Schmidt -Date: Fri Jun 5 09:37:08 2020 -0700 - - Add WriteBatch (#3152) - -commit 5cf39ab8cacd5f055d609acf79a859beda1032d3 -Author: Sebastian Schmidt -Date: Thu Jun 4 22:20:35 2020 -0700 - - Add terminate() to Lite SDK (#3157) - -commit e5936013999511483cf129c3029941fb3bd8dc9c -Author: Sebastian Schmidt -Date: Thu Jun 4 21:13:44 2020 -0700 - - Add updateDoc() (#3148) - -commit 27d428673acb88641d593462e90ee1c3247810c5 -Author: Sebastian Schmidt -Date: Thu Jun 4 20:14:36 2020 -0700 - - Add addDoc() (#3141) - -commit 2c66c4e298a6339d2fe71984e318c52775495e09 -Author: Sebastian Schmidt -Date: Thu Jun 4 18:14:16 2020 -0700 - - Add setDoc() (#3139) - -commit 3af49b4b54b4e80d4513f0bbc7dcf809e2b9ebb0 -Author: Sebastian Schmidt -Date: Thu Jun 4 17:39:49 2020 -0700 - - Add deleteDoc() (#3138) - -commit 239bea372c0c5382fdc50feafa9045b4000ac003 -Merge: 94f3c34f7 b96988b0f -Author: Feiyang1 -Date: Thu Jun 4 16:53:47 2020 -0700 - - Merge branch 'release' - Release 7.15.0 - -commit 94f3c34f724144f09ee0a523ec431646e0e45de8 -Author: Sebastian Schmidt -Date: Thu Jun 4 16:46:57 2020 -0700 - - Add getDoc() (#3133) - -commit b96988b0fa1b9786f68f215974ddd1ecd1746ccb (tag: rxfire@3.13.0, tag: firebase@7.15.0, tag: @firebase/util@0.2.48, tag: @firebase/testing@0.20.0, tag: @firebase/storage@0.3.35, tag: @firebase/remote-config@0.1.22, tag: @firebase/performance@0.3.6, tag: @firebase/messaging@0.6.17, tag: @firebase/logger@0.2.5, tag: @firebase/installations@0.4.11, tag: @firebase/functions@0.4.45, tag: @firebase/firestore@1.15.0, tag: @firebase/firestore-types@1.11.0, tag: @firebase/database@0.6.4, tag: @firebase/component@0.1.13, tag: @firebase/app@0.6.5, tag: @firebase/analytics@0.3.6) -Author: Feiyang1 -Date: Thu Jun 4 16:26:44 2020 -0700 - - Publish firebase@7.15.0 - -commit 1b0230ec7b79bcf6e8ea0be74fcb7501251ce364 -Author: Sebastian Schmidt -Date: Thu Jun 4 16:22:27 2020 -0700 - - Add DocumentSnapshot (#3130) - -commit 3c61f243345219d6bbeb173b8e962d854719b6c0 -Author: Sebastian Schmidt -Date: Thu Jun 4 15:33:41 2020 -0700 - - Add CollectionReference (#3125) - -commit 0395a1d2d0a953eaf6824306113cd7fd60117bb2 -Author: Sebastian Schmidt -Date: Wed Jun 3 12:57:16 2020 -0700 - - Add DocumentReference (#3123) - -commit 0e813916418823ecec23d8a5cb74e7f31664bec6 -Author: Sebastian Schmidt -Date: Wed Jun 3 12:56:54 2020 -0700 - - Add setLogLevel() (#3154) - -commit c049186f2665d83c037d21df3496f7c0dcda9192 -Author: Feiyang -Date: Wed Jun 3 12:43:52 2020 -0700 - - add pre script for build:release (#3161) - -commit b0c36b33048cb5d05768c2adeb197c0827c12df4 -Author: Feiyang -Date: Wed Jun 3 11:20:56 2020 -0700 - - Do not build firestore lite in build because it breaks regular release build (#3156) - - * Do not build firestore lite in build because it breaks release build - - * add release build script - -commit 5c41eab666fed6582cd51c77a0f06047be17b459 -Author: Sebastian Schmidt -Date: Tue Jun 2 14:59:05 2020 -0700 - - Take WriteStream offline when IndexedDB is unavailable (#2995) - -commit 2a99addab8e9988c379b58f00cd28b8454b07b40 -Author: Sebastian Schmidt -Date: Tue Jun 2 14:49:09 2020 -0700 - - Transaction/WriteBatch signature fix (#3151) - -commit 5f81ca4a9d52eae541549cd1cf43c673f1052ceb -Author: Sebastian Schmidt -Date: Tue Jun 2 12:37:46 2020 -0700 - - updateDoc()/deleteDoc() signature fix (#3147) - -commit 7453b0e9b4362b3f3f57381b857a983f91534ae2 -Author: Sebastian Schmidt -Date: Mon Jun 1 20:38:34 2020 -0700 - - Add FieldValue methods to the Lite SDK (#3135) - -commit 554786165bf9289db122c5136de446882f4880b9 -Author: Brian Chen -Date: Mon Jun 1 16:52:04 2020 -0700 - - Add `experimentalForceOwningTab` for Web Worker support (#2197) - -commit 31f7afc7eb45f0653e03e6d39e072be145479481 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Mon Jun 1 19:27:07 2020 -0400 - - Warn when stream is closing due to error, not debug. (#3064) - - * Warn when stream is closing due to error, not debug. - - * Add setLogLevel - - * Improvements. - - * Add all levels. - - * Add missing string values for log level - -commit 9b322708c8cccff2887002996a72e20eb690853f -Author: Sebastian Schmidt -Date: Mon Jun 1 09:34:41 2020 -0700 - - Fix addDoc type (#3140) - -commit 1d37aa40618fc8e03fc4724a0be68cf278c3aba8 -Author: Feiyang -Date: Sun May 31 10:50:24 2020 -0700 - - Define _FirebaseService interface (#3112) - -commit d1b81399be8b885fd4b68b0e60e2aa74f8b807e7 -Merge: fa8d5285b 241c84fd8 -Author: Feiyang1 -Date: Fri May 29 17:43:56 2020 -0700 - - Merge branch 'release' - -commit fa8d5285bf891f357afce2ccc4a970ca6586701e -Author: Sebastian Schmidt -Date: Fri May 29 14:37:44 2020 -0700 - - Remove support for lastStreamToken (#3132) - -commit f2dd5c0dab05471cfa865e012fa52f7cb00f282a -Author: Christina Holland -Date: Fri May 29 13:16:05 2020 -0700 - - Fix Saucelabs tests for Firestore unit tests except IE (#3095) - -commit b57d68aa964649ced4e4f732653f2b011cd3db07 -Author: Kai Wu -Date: Fri May 29 13:11:19 2020 -0700 - - Add the FCM secret to applicable CI paths. (#3117) - -commit 241c84fd8a2e61e3900c5e25472d0ab652b016f3 (tag: rxfire@3.12.6, tag: firebase@7.14.6, tag: @firebase/testing@0.19.6, tag: @firebase/performance@0.3.5, tag: @firebase/firestore@1.14.6, tag: @firebase/firestore-types@1.10.3) -Author: Feiyang1 -Date: Fri May 29 10:33:32 2020 -0700 - - Publish firebase@7.14.6 - -commit 6e6dbe21d105ecbf789bde885b68c81faa5273d4 -Author: Sebastian Schmidt -Date: Fri May 29 08:23:20 2020 -0700 - - Add Firestore, initializeFirestore, getFirestore to Firestore lite (#3108) - -commit 0d6f14eb8b80ff4f7f4410fc108db39b3bc2b638 -Author: Sebastian Schmidt -Date: Thu May 28 12:31:11 2020 -0700 - - Run integration/firestore tests for Firestore code changes (#3127) - -commit 7de1a7c11bf282b54160a3a98482790d14f8b24f -Author: Sebastian Schmidt -Date: Thu May 28 11:43:39 2020 -0700 - - Raise an error for enablePersistence() in memory-only build (#3128) - -commit ec1471cf903bedafb56c2f3b4b8cad997966bd3b -Author: Sebastian Schmidt -Date: Thu May 28 10:05:58 2020 -0700 - - Allow shared usage of UserDataReader and UserDataWriter (#3109) - -commit 963fd1fabdaf77bcd0c65b9f00f89314c96bf408 -Author: Sebastian Schmidt -Date: Thu May 28 10:03:06 2020 -0700 - - Add Firestore Tree-Shakeable API (#3118) - -commit b41d0ae101e74a95b864f36994010d34f31fb813 -Author: Sebastian Schmidt -Date: Thu May 28 10:02:47 2020 -0700 - - Remove redundant input validation (#3124) - - Non-empty string is validated right above. - -commit 67adfb2cdae49bc7d8af3014ffa406ef3a499cc6 -Author: Christina Holland -Date: Wed May 27 14:27:39 2020 -0700 - - Make instance logLevel setter able to process string input (#3076) - -commit 24c1ee90f0e49cace434a783625519e9716e8e48 -Author: Sebastian Schmidt -Date: Wed May 27 13:45:16 2020 -0700 - - Allow shared usage of Transaction (#3114) - -commit ef5fb1b9556c2cfab5761427564d55f9a3dcb391 -Author: Sebastian Schmidt -Date: Wed May 27 12:20:20 2020 -0700 - - Address potential IndexedDB failure in synchronizeQueryViewsAndRaiseSnapshots (#3113) - -commit 230cd489a4f903fb36d475adf1da408ccd1c7bff -Merge: ea2fcf555 f562b6358 -Author: Christina Holland -Date: Tue May 26 14:16:40 2020 -0700 - - Merge branch 'release' - Release 7.14.5 - -commit ea2fcf5553c93d8e847dd30589fb94111c41e9a7 -Author: Sebastian Schmidt -Date: Tue May 26 14:05:10 2020 -0700 - - Only run the provided delayed operation early (#3101) - -commit 5ffa43b5ac33a349d11e6537f48eee59832d01e8 -Author: Sebastian Schmidt -Date: Tue May 26 09:56:59 2020 -0700 - - Add Firestore Lite API (#3100) - -commit 4e86d019ba292fe82059697624d69ec90569b816 -Author: Sebastian Schmidt -Date: Thu May 21 16:54:56 2020 -0700 - - Add more Recovery spec tests (#3084) - - * Clean up recovery spec tests - - * Spec tests for updateClientMetadataAndTryBecomePrimary and 'Lookup mutation documents' recovery - - * Feedback - -commit f562b6358ed0ec609940a5a15c1d3565d46dd691 (tag: rxfire@3.12.5, tag: firebase@7.14.5, tag: @firebase/webchannel-wrapper@0.2.41, tag: @firebase/util@0.2.47, tag: @firebase/testing@0.19.5, tag: @firebase/storage@0.3.34, tag: @firebase/storage-types@0.3.12, tag: @firebase/remote-config@0.1.21, tag: @firebase/remote-config-types@0.1.9, tag: @firebase/polyfill@0.3.36, tag: @firebase/performance@0.3.4, tag: @firebase/performance-types@0.0.13, tag: @firebase/messaging@0.6.16, tag: @firebase/messaging-types@0.4.5, tag: @firebase/logger@0.2.4, tag: @firebase/installations@0.4.10, tag: @firebase/installations-types@0.3.4, tag: @firebase/functions@0.4.44, tag: @firebase/functions-types@0.3.17, tag: @firebase/firestore@1.14.5, tag: @firebase/firestore-types@1.10.2, tag: @firebase/database@0.6.3, tag: @firebase/database-types@0.5.1, tag: @firebase/component@0.1.12, tag: @firebase/auth@0.14.6, tag: @firebase/auth-types@0.10.1, tag: @firebase/auth-interop-types@0.1.5, tag: @firebase/app@0.6.4, tag: @firebase/app-types@0.6.1, tag: @firebase/analytics@0.3.5, tag: @firebase/analytics-types@0.3.1, tag: @firebase/analytics-interop-types@0.1.5) -Author: Christina Holland -Date: Thu May 21 14:18:23 2020 -0700 - - Publish firebase@7.14.5 - -commit babdcfdd1854596d954a5848a10f35a93478d14c -Author: Sebastian Schmidt -Date: Thu May 21 10:11:39 2020 -0700 - - Add test for getHighestListenSequenceNumber() recovery (#3083) - -commit 9d87d7020e07f362c7098c00d7197b0d584a1e4e -Author: Sebastian Schmidt -Date: Thu May 21 09:29:50 2020 -0700 - - Clean up recovery spec tests (#3085) - -commit 4a70e17f009ea6ab4949178b64c9bbeb68c88af5 -Author: Sebastian Schmidt -Date: Wed May 20 12:55:17 2020 -0700 - - Add ignoreUndefinedProperties (#3077) - -commit 76726387bd88fac22a85781fe6f9b88ad9459c18 -Author: Visu -Date: Tue May 19 22:38:20 2020 -0700 - - Remove the capability of sending events to clearcut from the Performance SDK. (#3086) - - * Remove the capability of sending events to clearcut from the Performance SDK. This removes the need for fetching the RC configs to decide on the dispatch destination - so that is removed in the settings service and remote config service. - -commit 1dc534a9457f0f87e93e23a1d67091ffdd615106 -Author: Sebastian Schmidt -Date: Tue May 19 16:57:11 2020 -0700 - - IndexedDB recovery for handleUserChange (#3087) - -commit 75ff9b29695e65c0ecf3de64f0498b8e19f9285e -Author: Feiyang -Date: Tue May 19 16:09:25 2020 -0700 - - exclude firebase-exp from the release build (#3091) - -commit 597c0a08557cc8828619845543b1a9c48b5c8cc4 -Author: Brian Chen -Date: Tue May 19 14:28:56 2020 -0700 - - Make removeSanpshotsInSyncListener run on AQ (#3090) - -commit 8bccfa57fa497080213e67d128c4aa0daf0a9866 -Author: Denver Coneybeare -Date: Tue May 19 15:20:14 2020 -0400 - - Enable tests for query rejection (#3088) - -commit 1325b584368ae237f615e419d13dd47955688cac -Author: Christina Holland -Date: Mon May 18 16:39:03 2020 -0700 - - Public typings only swapped on build:exp:release (#3082) - -commit d656e03de05d08939ffde79b5a368870aed94a6d -Merge: 3de5763b7 ef05cf62c -Author: Christina Holland -Date: Mon May 18 12:55:12 2020 -0700 - - Merge branch 'release' - Release 7.14.4 - -commit 3de5763b76d19314db1355072b9e0d9ccea70ccc (origin/bc/test-ci) -Author: Sebastian Schmidt -Date: Mon May 18 11:31:16 2020 -0700 - - IndexedDB recovery for getDocumentFromLocalCache/getDocumentsFromLocalCache (#3041) - - * IndexedDB recovery for waitForPendingWrites() - - * Lint - - * IndexedDB recovert for getDocumentFromLocalCache/getDocumentsFromLocalCache - - * IndexedDB recovery for getDocumentFromLocalCache/getDocumentsFromLocalCache - - * Update after merge - -commit fb9005955420ab854bc585275216ff410a2bdbd7 -Author: Sebastian Schmidt -Date: Mon May 18 10:21:16 2020 -0700 - - IndexedDB recovery for waitForPendingWrites() (#3038) - -commit ac215cf8962a60afde5684b793701ea27a3257b6 -Author: Christina Holland -Date: Fri May 15 14:39:07 2020 -0700 - - Ensure run_changed errors on packages without test script (#3068) - -commit ef05cf62c0aa016554999bdf64d2d9dce542d8cd (tag: rxfire@3.12.4, tag: firebase@7.14.4, tag: @firebase/testing@0.19.4, tag: @firebase/firestore@1.14.4) -Author: Christina Holland -Date: Thu May 14 15:51:22 2020 -0700 - - Publish firebase@7.14.4 - -commit 94ee69a84dde2d8be61dda0c480e50020cec9589 -Author: Sebastian Schmidt -Date: Thu May 14 14:18:16 2020 -0700 - - Add tooling to verify dependency chain (#3033) - -commit ab2e73d6b2611bf76b3b2c52d0074714ef35b157 -Author: Sebastian Schmidt -Date: Thu May 14 12:26:52 2020 -0700 - - Fix CI (#3066) - -commit 0131e1fcade96853997fc04ba1fee0e8d40ed445 -Author: Sebastian Schmidt -Date: Thu May 14 11:44:40 2020 -0700 - - Mass replace Google Inc with Google LLC (#3054) - -commit 2a28a805fd535254f96504ee7d7807f7a4071f89 -Author: Sebastian Schmidt -Date: Thu May 14 10:23:34 2020 -0700 - - Ignore IndexedDB failure during lease refresh (#3020) - -commit 759b8775747537574ae534102d8ff2c91fd23afc -Author: Sebastian Schmidt -Date: Thu May 14 10:22:01 2020 -0700 - - Ignore failures for notifyLocalViewChanges (#3062) - -commit f3f1b173fac2420ec9eaafd2e20bace0f3c80a2d -Author: Sebastian Schmidt -Date: Wed May 13 19:02:40 2020 -0700 - - Use gcEnabled instead of durable persistence (#3061) - -commit 080421788f209390421ed64e1c6da551809c5431 -Author: Feiyang -Date: Wed May 13 16:13:46 2020 -0700 - - add test:ci to polyfill package (#3057) - -commit 20a094f51459e653dfa057394c9ee4c8d0b94fce -Author: Sebastian Schmidt -Date: Wed May 13 15:47:03 2020 -0700 - - Clean up isPrimary (#3058) - -commit 2261bcd0e56a38e14760818c34bf0291a04de320 -Author: Sebastian Schmidt -Date: Wed May 13 15:46:43 2020 -0700 - - Remove erroneous exclusive tag in test (#3059) - -commit 3960fda22add9bde907f83958437a3fceb72ebda -Author: Sebastian Schmidt -Date: Wed May 13 15:11:28 2020 -0700 - - Transition to primary only if IndexedDB ops succeed (#3049) - -commit 8e2fd913626d868c750090dd5db2d07b8cde7a98 -Author: Sebastian Schmidt -Date: Wed May 13 15:07:31 2020 -0700 - - IndexedDB Recovery for Limbo documents (#3039) - -commit 54c7872d3e7860146b1205ea836640a8992ce7e5 -Author: Feiyang -Date: Wed May 13 12:57:22 2020 -0700 - - add test:ci script to all packages (#3056) - -commit 425dfb1c958cfde4473e260c95a4b3ee0b6f758a -Author: Sebastian Schmidt -Date: Wed May 13 11:35:52 2020 -0700 - - Allow failing of individual transactions (#3052) - -commit 7513890dce856c5a0571737c06937c50b688fbad -Author: Fred Zhang -Date: Tue May 12 18:34:15 2020 -0700 - - RTDB accepts multi region URL (#3050) - -commit 094074cceab5c5119487e082e142e0a6e377d033 -Author: Sebastian Schmidt -Date: Tue May 12 18:02:55 2020 -0700 - - Fix regression for merge with increment (#3048) - -commit 74621b7ec32976df4b2ce552c35c386b29441b2e -Author: Sebastian Schmidt -Date: Mon May 11 22:49:23 2020 -0700 - - Make notifyLocalViewChanges idempotent (#3044) - -commit a57dac5a5f0858abaaed66ccc3808b33184a2c6e -Merge: 141a6161e 165a898bd -Author: Feiyang1 -Date: Thu May 7 18:05:12 2020 -0700 - - Merge branch 'release' - 7.14.3 release - -commit 141a6161e4d6abf3b9a47f94ac159a09344689b6 -Author: Sebastian Schmidt -Date: Thu May 7 17:54:16 2020 -0700 - - Run prettier (#3036) - -commit 165a898bd81a11631cdfde49b8f6824ab38588a3 (tag: rxfire@3.12.3, tag: firebase@7.14.3, tag: @firebase/webchannel-wrapper@0.2.40, tag: @firebase/util@0.2.46, tag: @firebase/testing@0.19.3, tag: @firebase/storage@0.3.33, tag: @firebase/remote-config@0.1.20, tag: @firebase/polyfill@0.3.35, tag: @firebase/performance@0.3.3, tag: @firebase/messaging@0.6.15, tag: @firebase/logger@0.2.3, tag: @firebase/installations@0.4.9, tag: @firebase/functions@0.4.43, tag: @firebase/firestore@1.14.3, tag: @firebase/database@0.6.2, tag: @firebase/component@0.1.11, tag: @firebase/auth@0.14.5, tag: @firebase/app@0.6.3, tag: @firebase/analytics@0.3.4) -Author: Feiyang1 -Date: Thu May 7 16:59:40 2020 -0700 - - Publish firebase@7.14.3 - -commit 1753148d2de7eb1025c4324b27c3d738361ca65f -Author: Christina Holland -Date: Thu May 7 15:36:27 2020 -0700 - - Move prepush scripts to precommit (#3026) - -commit f30de15f86d39cac40845222d15abc3db06326dc -Author: Sebastian Schmidt -Date: Thu May 7 15:09:12 2020 -0700 - - Remove unused remoteDocumentKeys() (#3035) - -commit f9c6ddec0c272a618d2e8f5bf98c5189c6a52233 -Author: Sebastian Schmidt -Date: Thu May 7 14:19:28 2020 -0700 - - Take WatchStream offline when IndexedDB is unavailable (#3010) - -commit 631a0ec5982b36382a96c15be9916bf29f98a01f -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Thu May 7 13:43:57 2020 -0400 - - Reland "Use crypo RNG for auto ID generation to reduce conflicts (#2764)" (#3012) - -commit 8143c836f01c08d77fb602f1c00f9642231fcef3 -Author: Feiyang -Date: Wed May 6 16:15:56 2020 -0700 - - Point to the internal typing file in app-exp's package.json (#3030) - - * point to the internal typing file - - * Remove api report from prepush - - * remove stale code - -commit 575b3fe82d75697824232be870754c776f3e1107 -Author: Sebastian Schmidt -Date: Wed May 6 09:15:12 2020 -0700 - - Remove dependency on valueCompare from Document (#3024) - -commit e67affba53a53d28492587b2f60521a00166db60 -Author: Sebastian Schmidt -Date: Wed May 6 09:14:01 2020 -0700 - - Remove static references to API types (#3023) - - The pattern in api/database.ts breaks tree-shaking since it instatiates static references to all public API types. I moved this code to platform/config.ts which is used to register the non Tree-Shakeable API - -commit 88778032d9f173f69c759be9daa5db6bef8bcbbb -Author: Sebastian Schmidt -Date: Tue May 5 22:07:06 2020 -0700 - - Add invokeRunQueryRpc() (#3025) - -commit fd12d771934596fc8cf07a78813ce44290aab980 -Author: Konstantin Varlamov -Date: Tue May 5 19:12:01 2020 -0400 - - Fix `GeoPoint` field values with a zero coordinate failing input validation (#3018) - - Fix the regression introduced in #2784: a `GeoPoint` where at least one of the coordinates is zero doesn't marshal properly. This is because zeroes happen to be serialized as `undefined` (presumably because protos normally treat zero values and the absence of a value interchangeably) which then fails the strict input validation in `GeoPoint`. - - Fixes #3006. - -commit 76ba2ea360b1e225708a7f88f7a2a9db7521c822 -Author: Sebastian Schmidt -Date: Tue May 5 13:23:13 2020 -0700 - - Ignore IndexedDB failures during garbage collection (#3015) - -commit 3ccd70a694be561ebb2ec0bdb7b4f21fc4c40e34 -Author: Sebastian Schmidt -Date: Tue May 5 11:51:45 2020 -0700 - - Remove ObjectValue.EMPTY (#3022) - - Remove a dangling static reference. - -commit da3582bb1fb2c3b4c95c86433387d4ad254f08ce -Author: Sebastian Schmidt -Date: Mon May 4 16:15:31 2020 -0700 - - Update SourceMaps during transform (#3011) - -commit 39013c9e70d43f7d540b61ebf97e7bad4ebe262e -Author: WhiteSource Renovate -Date: Tue May 5 01:08:28 2020 +0200 - - Update all non-major dependencies (#2768) - -commit df44d12e34eaa3719834c15e30f8ee5ee9dcf8bb -Author: Denver Coneybeare -Date: Mon May 4 12:48:35 2020 -0400 - - Add an integration test for calling clearPersistence() on a new Firestore instance (#3005) - -commit 9f7b7df7d4b668d311c6685fb3c9cdb4376d6050 -Author: Denver Coneybeare -Date: Fri May 1 20:05:24 2020 -0400 - - Update command to run the Firestore emulator (#2998) - -commit 96cd91dd7825f845ce860ffb98703dc48716b81b -Author: Sebastian Schmidt -Date: Fri May 1 15:58:21 2020 -0700 - - Untangle FieldValues (#3001) - -commit ba5a37ce1290215a5fc6cff248d8e1057aec181d -Author: Christina Holland -Date: Fri May 1 15:20:54 2020 -0700 - - Migrate webchannel-wrapper to gulp + google-closure-compiler (#2891) - -commit ff533874dd7d36b46ae6a818ae974a77feb737e5 -Author: Shelley Cincotta <48364688+shelcindra@users.noreply.github.com> -Date: Fri May 1 16:02:38 2020 -0400 - - Clean up rxfire API documentation (#2584) - - * Fixed markdown so parameters are visible in displayed tables for each function. - - * Updated function descriptions. - - * Updated examples. - -commit 174521a5bc5e038378fdfb628dfc3c76f7f0e9e5 -Author: Sebastian Schmidt -Date: Fri May 1 12:52:53 2020 -0700 - - Don't crash if Target cannot be persisted (#2944) - -commit e03614c791efbe2d414c77639d24db51a7a66b9b -Author: Sebastian Schmidt -Date: Thu Apr 30 18:24:32 2020 -0700 - - Drop SortedSet from FieldMask (#2999) - -commit a6e9d5b470fc52eec29a36ab37073d334e1f2dd5 -Author: Feiyang1 -Date: Wed Apr 29 14:23:52 2020 -0700 - - Revert "Publish" - - This reverts commit 7e7d9a4dd6c5b60a4a2d358c3902c3129edc30aa. - -commit 7e7d9a4dd6c5b60a4a2d358c3902c3129edc30aa -Author: Feiyang1 -Date: Wed Apr 29 14:21:43 2020 -0700 - - Publish - - - firebase-browserify-test@0.2.2 - - firebase-package-typings-test@0.2.2 - - firebase-firestore-integration-test@1.0.2 - - firebase-messaging-selenium-test@0.2.2 - - firebase-typescript-test@0.2.2 - - firebase-webpack-test@0.2.2 - - @firebase/app-exp@0.0.801 - - @firebase/app-types-exp@0.0.801 - - firebase-exp@0.800.2 - - @firebase/analytics-interop-types@0.1.5 - - @firebase/analytics-types@0.3.1 - - @firebase/analytics@0.3.4 - - @firebase/app-types@0.6.1 - - @firebase/app@0.6.3 - - @firebase/auth-interop-types@0.1.5 - - @firebase/auth-types@0.10.1 - - @firebase/auth@0.14.5 - - @firebase/component@0.1.11 - - @firebase/database-types@0.5.1 - - @firebase/database@0.6.2 - - firebase@7.14.3 - - @firebase/firestore-types@1.10.2 - - @firebase/firestore@1.14.3 - - @firebase/functions-types@0.3.17 - - @firebase/functions@0.4.43 - - @firebase/installations-types@0.3.4 - - @firebase/installations@0.4.9 - - @firebase/logger@0.2.3 - - @firebase/messaging-types@0.4.5 - - @firebase/messaging@0.6.15 - - @firebase/performance-types@0.0.13 - - @firebase/performance@0.3.3 - - @firebase/polyfill@0.3.35 - - @firebase/remote-config-types@0.1.9 - - @firebase/remote-config@0.1.20 - - rxfire@3.12.3 - - @firebase/storage-types@0.3.12 - - @firebase/storage@0.3.33 - - @firebase/template-types@0.1.1 - - @firebase/template@0.1.1 - - @firebase/testing@0.19.3 - - @firebase/util@0.2.46 - - @firebase/webchannel-wrapper@0.2.40 - -commit 04d4f9720686653fa68a07370df90e5ccbff79b1 -Author: Feiyang -Date: Mon Apr 27 12:17:14 2020 -0700 - - Hide messages from build tools and test runners for passed packages (#2988) - - * Hide messages from build tools and test runners for passed packages - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * [AUTOMATED]: API Reports - - * revert - - * rename variable - -commit ccb9bf9da01844fb2bcf77c23f9851e721fd79d1 -Author: Sebastian Schmidt -Date: Mon Apr 27 10:16:47 2020 -0700 - - Check for addEventListener() before calling (#2994) - -commit be5bb4b2feada916bfa22c041faf03d033eac207 -Author: Sebastian Schmidt -Date: Mon Apr 27 09:34:36 2020 -0700 - - Rename field_value.ts to object_value.ts (#2987) - -commit 8c369580e0dc90ddb4206ae8a04f4d97d59b40bc -Author: Sebastian Schmidt -Date: Fri Apr 24 15:44:18 2020 -0700 - - Untangle Datastore (#2971) - -commit d92d67b2f07f7370f17594e932c9c82788201fb7 -Author: Feiyang -Date: Fri Apr 24 11:18:10 2020 -0700 - - Hide passed tests in CI (#2980) - - * 1. Update mocha config file format 2. hide passed tests in CI - - * prettier - - * update mocha node config file name - - * test - - * use stricter regex, otherwise it matches mocha.browser.opts - - * [AUTOMATED]: License Headers - -commit 74870c7a3832ec0c1e6f93e4d45e9d0a3180dfb3 -Author: Feiyang -Date: Thu Apr 23 17:01:29 2020 -0700 - - Revert "[AUTOMATED]: API Reports" (#2978) - - This reverts commit 5d25a623037576888ad9d2586ece4440e9bba65a. - -commit 5d25a623037576888ad9d2586ece4440e9bba65a -Author: Feiyang1 -Date: Thu Apr 23 16:33:44 2020 -0700 - - [AUTOMATED]: API Reports - -commit ed945750f96acb1f8605da9abd114c16f75d0c05 -Merge: fe4971f15 80a31c4e0 -Author: Feiyang1 -Date: Thu Apr 23 16:33:23 2020 -0700 - - Merge branch 'release' - 7.14.2 release - -commit 80a31c4e0d3568ee6ddae2a92082dd51a926f53b (tag: rxfire@3.12.2, tag: firebase@7.14.2, tag: @firebase/testing@0.19.2, tag: @firebase/performance@0.3.2, tag: @firebase/messaging@0.6.14, tag: @firebase/functions@0.4.42, tag: @firebase/firestore@1.14.2, tag: @firebase/auth@0.14.4) -Author: Feiyang1 -Date: Thu Apr 23 16:12:34 2020 -0700 - - Publish firebase@7.14.2 - -commit fe4971f159260f1dec824b590f77d045e74d0187 -Author: Christina Holland -Date: Thu Apr 23 15:02:11 2020 -0700 - - Remove objectHashIgnoreUnknownHack (#2977) - -commit 1ae13d1f57306e479d5db5ceda9309856fd32c5d -Author: Sebastian Schmidt -Date: Thu Apr 23 10:54:21 2020 -0700 - - Untangle ObjectValue and ObjectValueBuilder (#2970) - -commit 4ad573326dc676bf934b5b21461e17fb5a89068e -Author: Sebastian Schmidt -Date: Thu Apr 23 10:28:16 2020 -0700 - - Remove "cyclic" references (#2969) - -commit ce070106449edf43311bb5b190a4ac077dbcc6b7 -Author: Sebastian Schmidt -Date: Thu Apr 23 10:11:11 2020 -0700 - - Move code to spec_test_components (#2974) - -commit 16938c0e1becebcff8bcfa30ba5322dd2a23a62f -Author: Feiyang -Date: Wed Apr 22 12:17:43 2020 -0700 - - Add docs for exp packages (#2964) - -commit a98a76648f0683e86d6b1f0ee89b3d5548c30677 -Author: Jon Preece <63354526+jonpreececm@users.noreply.github.com> -Date: Wed Apr 22 17:34:03 2020 +0100 - - Fix Apple popup window window (#2966) - -commit f23120e52ae148a5ca74f980d9eb06c9eadde2f9 -Author: Feiyang1 -Date: Tue Apr 21 16:51:31 2020 -0700 - - Publish firebase@exp 0.800.1 - -commit 9acd35f6f983f576cd02e0ddd4093052d8041b83 -Merge: 31fc269c6 c3a425043 -Author: Christina Holland -Date: Tue Apr 21 14:47:26 2020 -0700 - - Merge branch 'release' - Release 7.14.1 - -commit 31fc269c6988150005d8e63d5502d70733d3f98b -Author: Feiyang -Date: Tue Apr 21 12:01:03 2020 -0700 - - do not generate api reports for the release build (#2958) - -commit 18fb16b74ed0e6b4e3a2b379a11fb07d6ab654e0 -Author: Nicolas Delperdange -Date: Tue Apr 21 19:34:17 2020 +0200 - - feat(sw-controller): compare host instead of href for getWindowClient (#2772) - -commit 5a60243bf264967819fc5c3897892084c5eb4d43 -Author: Sebastian Schmidt -Date: Mon Apr 20 19:42:50 2020 -0700 - - Factor out Multi-Tab code (#2882) - -commit a36b51b4897ffa68df0921ef4ac5e7164cb97eda -Author: Sebastian Schmidt -Date: Mon Apr 20 18:28:04 2020 -0700 - - Don't crash if write cannot be persisted (#2938) - -commit 0601283c9948681798eecb759f4990e549d2e157 -Author: Christina Holland -Date: Mon Apr 20 17:22:07 2020 -0700 - - Restore accidentally removed return statement. (#2950) - -commit 6cfb268e1bddcc2866a176945ec1d8e1ff9f9831 -Author: Sebastian Schmidt -Date: Mon Apr 20 16:57:00 2020 -0700 - - Make 'handleClientStateEvent()/handleQueryTargetEvent()' idempotent (#2916) - -commit ed9a7be7d5f65aa37c0c478021b15bd18166a515 -Author: Feiyang -Date: Mon Apr 20 16:01:16 2020 -0700 - - Use hash versions to publish exp packages (#2933) - - * use sha version instead of semver - - * make firebase-exp private - - * Publish firebase@exp 0.800.1 - - * bump umbrella package version only - - * Publish firebase@exp 0.800.2 - - * restore package json - - * change prepare to use build:release - - * bump version correctly. - - * fix function name - - * [AUTOMATED]: Prettier Code Styling - - * update dep versions - - * correct typo - - * revert changes for debugging - -commit d7c9ed4044acc962c098701d094d722e17d6360f -Author: Sebastian Schmidt -Date: Mon Apr 20 15:08:38 2020 -0700 - - Only retry DOMException/DOMError (#2919) - -commit fc3d53963748aa0e0193336e3faefe16da885729 -Author: Sebastian Schmidt -Date: Mon Apr 20 14:42:01 2020 -0700 - - Strip messages for fail() and hardAssert() (#2931) - -commit 98c252343506b431bce8c8dd8f2c3abec1e3fab1 -Author: Feiyang -Date: Mon Apr 20 13:58:45 2020 -0700 - - Make @firebase/app-next have single entry point (#2937) - - * change to single entry point - - * point to the public d.ts file in release build - - * prefix _ for internal APIs - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - -commit 7396d48d16d064bf4f99ba1e56a2e4eda8a4bd23 -Author: Sebastian Schmidt -Date: Mon Apr 20 12:40:09 2020 -0700 - - Don't include GRPC in browser build (#2935) - -commit 1562bb71258d3da1663a9d92b54e0f927887b746 -Author: Sebastian Schmidt -Date: Mon Apr 20 12:39:51 2020 -0700 - - Remove Platform.useProto3Json flag (#2866) - -commit b107e0405a8406eee9c414877453d9a94d140931 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Mon Apr 20 13:58:06 2020 -0400 - - Remove an assert and replace it with call to updateTrackedLimbos (#2893) - -commit 507da7ab3267333f9ef99254946f8ec1e294e6d4 -Author: Sebastian Schmidt -Date: Mon Apr 20 10:57:56 2020 -0700 - - Discourage use of 'window' and 'document' (#2874) - -commit 537350ee6a9db28c34e9c601270211a70b59a609 -Author: Feiyang -Date: Fri Apr 17 14:45:54 2020 -0700 - - Add the umbrella firebase package for modular packages (#2927) - - * add firebase-exp - - * add rollup config for generating CDN scripts - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * [AUTOMATED]: API Reports - - * remove old files - - * make release rollup config for firebase package - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: API Reports - - * add a CDN entry point, so we can collect its usage - - * [AUTOMATED]: License Headers - - * fix the transformer - - * [AUTOMATED]: Prettier Code Styling - -commit c3a4250437395924883eac478a2d385585a2c7d8 (tag: rxfire@3.12.1, tag: firebase@7.14.1, tag: @firebase/webchannel-wrapper@0.2.39, tag: @firebase/util@0.2.45, tag: @firebase/testing@0.19.1, tag: @firebase/storage@0.3.32, tag: @firebase/remote-config@0.1.19, tag: @firebase/polyfill@0.3.34, tag: @firebase/performance@0.3.1, tag: @firebase/messaging@0.6.13, tag: @firebase/logger@0.2.2, tag: @firebase/installations@0.4.8, tag: @firebase/functions@0.4.41, tag: @firebase/firestore@1.14.1, tag: @firebase/database@0.6.1, tag: @firebase/component@0.1.10, tag: @firebase/auth@0.14.3, tag: @firebase/app@0.6.2, tag: @firebase/analytics@0.3.3) -Author: Christina Holland -Date: Thu Apr 16 13:46:17 2020 -0700 - - Publish firebase@7.14.1 - -commit c3f34dce10f8270c8df831fe532109b4275185ed -Author: Christina Holland -Date: Thu Apr 16 12:06:34 2020 -0700 - - Add more messages to prettier prepush to help diagnose intermittent problems (#2909) - -commit 294bed4821204fbcc716ea32720f57665f866d4e -Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> -Date: Thu Apr 16 10:31:13 2020 -0700 - - Bump https-proxy-agent in /packages/auth/demo/functions (#2921) - - Bumps [https-proxy-agent](https://github.com/TooTallNate/node-https-proxy-agent) from 2.2.2 to 2.2.4. - - [Release notes](https://github.com/TooTallNate/node-https-proxy-agent/releases) - - [Commits](https://github.com/TooTallNate/node-https-proxy-agent/compare/2.2.2...2.2.4) - - Signed-off-by: dependabot[bot] - - Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - -commit 77cb183802c683cd8b01cb27e5bf4bdd41e10f36 -Author: James Liu <37026441+zijianjoy@users.noreply.github.com> -Date: Wed Apr 15 14:57:02 2020 -0700 - - Update changelog for Performance Monitoring v0.3.0 release (#2900) - -commit a82af58bc2dc0bef7acb35845f161c3189b4b4ee -Author: Sebastian Schmidt -Date: Wed Apr 15 14:45:13 2020 -0700 - - Retry WebStorage operations (#2879) - -commit daf63c2cbee8971fbd583e5344f254ceed36a87a -Author: Christina Holland -Date: Wed Apr 15 12:10:07 2020 -0700 - - Update minor dependencies (#2914) - -commit afa7bf93f925d3affa5ec2747e2b85a3c9ade928 -Author: Feiyang -Date: Wed Apr 15 12:06:57 2020 -0700 - - Add Kai to messaging owners (#2913) - -commit 211931086537f6dc3b4c15de43df27e480a52b25 -Author: Sebastian Schmidt -Date: Wed Apr 15 10:34:21 2020 -0700 - - Prefix list results with correct bucket (#2905) - -commit 92aa3852a536dcc1333d189be0606d2571a2609c -Author: WhiteSource Renovate -Date: Wed Apr 15 03:27:37 2020 +0200 - - Update dependency @types/sinon to v9 (#2862) - -commit d61625f139405e532171ad77e54e03e334de64bb -Author: WhiteSource Renovate -Date: Wed Apr 15 03:22:57 2020 +0200 - - Update dependency indexeddbshim to v6 (#2443) - -commit bbb3433134bdf6b7962c246f19f5da2eb3fcc9cd -Author: WhiteSource Renovate -Date: Wed Apr 15 02:30:35 2020 +0200 - - Update dependency mkdirp to v1 (#2583) - - Co-authored-by: Christina Holland - -commit f0a0dc96e3247bc5ea623ec4e560e2f17dbccebe -Author: bojeil-google -Date: Tue Apr 14 15:04:04 2020 -0700 - - Worker persistence (#2907) - - * Fixes ability to set Auth LOCAL persistence explicitly in a worker environment. - -commit ce41a64233484e21c1f5130acf323d4bc5369c3e -Author: Feiyang -Date: Tue Apr 14 14:53:35 2020 -0700 - - Release scripts for exp packages (#2887) - - * update script name - - * produce build artifacts without -exp in package names - - * Script to release exp pkgs experimentally - - * save progress - - * reset workingtree - - * testing - - * update prepare scripts - - * save - - * save - - * update - - * await promise - - * make npm publishing nicer - - * await promise - - * correct variable name - - * implement commitandpush - - * add missing import - - * Publish firebase@exp - - * fix variable name - - * Publish firebase@exp - - * revert versions - - * add comments - - * add comment - - * more comments - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * fix typo - - * remove --dry-run flag - -commit 7f69b704292e6008c72c9c14c2bb0b84a12e9963 -Author: Feiyang -Date: Mon Apr 13 14:40:50 2020 -0700 - - Update @firebase/template to move tests next to source files (#2875) - - * update template to make tests next to source files - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - -commit 0cad04b7738e8c20a5ad612ddddaaf548a85e291 -Merge: bc39eb5b0 e920d0529 -Author: Feiyang1 -Date: Thu Apr 9 16:37:19 2020 -0700 - - Merge branch 'release' - 7.14.0 release - -commit e920d0529733c58b4afe1995ae0c14aaad3bfacb (tag: rxfire@3.12.0, tag: firebase@7.14.0, tag: @firebase/testing@0.19.0, tag: @firebase/performance@0.3.0, tag: @firebase/messaging@0.6.12, tag: @firebase/functions@0.4.40, tag: @firebase/firestore@1.14.0, tag: @firebase/database@0.6.0, tag: @firebase/database-types@0.5.0, tag: @firebase/analytics@0.3.2) -Author: Feiyang1 -Date: Thu Apr 9 15:58:13 2020 -0700 - - Publish firebase@7.14.0 - -commit bc39eb5b0022890cf8678438e071a224fe4bf5d4 -Author: Brian Chen -Date: Thu Apr 9 15:44:59 2020 -0700 - - Fix flaky transaction tests (#2888) - -commit ce3addba62dedf867844d7b2aca5f1db3313759a -Author: Sebastian Schmidt -Date: Thu Apr 9 14:29:16 2020 -0700 - - ComponentProvider v2 (#2889) - -commit 7e63eb521ec2e9aea05d0ff453cf2a6b158de87a -Author: Feiyang -Date: Thu Apr 9 10:55:09 2020 -0700 - - update yarn lock (#2885) - -commit 7fa3d037dc3ee424ee361e39ff47a6d765a1b61a -Author: Christina Holland -Date: Thu Apr 9 09:58:03 2020 -0700 - - Fix Messaging test that fails in Firefox (#2883) - -commit 541dae2cd5d6da70af8d747174006985e9a16db9 -Author: Denver Coneybeare -Date: Wed Apr 8 17:52:22 2020 -0400 - - Add CHANGELOG.md entry for reverting the usage of 'crypto' (#2873) - -commit e90ba0bbf7f6057c40cf38726ca3e938ea3c34e1 -Author: Feiyang -Date: Wed Apr 8 12:58:54 2020 -0700 - - fix broken imports (#2884) - - * fix broken import - - * [AUTOMATED]: License Headers - -commit d689b75f532f1a54b418317d8306a5377ba35570 -Author: James Liu <37026441+zijianjoy@users.noreply.github.com> -Date: Wed Apr 8 10:54:05 2020 -0700 - - Ability to switch performance event traffic to FL transport endpoint (#2593) - - * Implement API call to FL transport endpoint for dispatching Performance Monitoring events. - * Fetch Remote Config to dynamically update transport endpoint Key. - * Fetch Remote Config to get rollout percentage to cc/fl transport endpoint. - -commit 9bc4167d5895099ff60fd75d462cbb0d9fd8429e -Author: Sebastian Schmidt -Date: Wed Apr 8 08:52:10 2020 -0700 - - Remove asserts (#2814) - -commit a789d74b895a858e8d3a66a9da1732efbadd6ced -Author: Sebastian Schmidt -Date: Tue Apr 7 17:28:43 2020 -0700 - - Differentiate between hardAsserts and debugAsserts (#2859) - -commit 6a4c00f8817d0b8161e81e36e9872987c7dbbbfd -Author: Sebastian Schmidt -Date: Tue Apr 7 16:20:26 2020 -0700 - - Add ComponentProvider (#2828) - -commit 705e9f9a70708107fe24e21203e11363bf76e401 -Author: Sebastian Schmidt -Date: Tue Apr 7 09:43:51 2020 -0700 - - Make ServerValue.increment() public (#2852) - -commit b8cf437d95364c46e51e2e5ba076a8bb31d5e03e -Author: Denver Coneybeare -Date: Tue Apr 7 11:41:05 2020 -0400 - - Remove 'no-android' tags from spec tests for limbo resolution throttling. (#2876) - -commit 027a783186832b865757e3340fae41243078db92 -Author: Sebastian Schmidt -Date: Mon Apr 6 14:11:49 2020 -0700 - - Actually fix resume token debugging in spec tests (#2877) - -commit 5a637389a14c2c6f5f6dd0594df8c73619db87ee -Author: Sebastian Schmidt -Date: Mon Apr 6 12:21:19 2020 -0700 - - Drop Node 6 / Replace grpc w/ @grpc/grpc-js (#2856) - -commit 7766278648eadbc38b04a558c567dd2cbfef1d2e -Author: Denver Coneybeare -Date: Mon Apr 6 14:35:23 2020 -0400 - - Revert: Use crypo RNG for auto ID generation to reduce conflicts (#2872) - -commit fd7fbd7518593e6615b9ed234eb98c720e56f507 -Author: Sebastian Schmidt -Date: Mon Apr 6 11:11:48 2020 -0700 - - Remove error messages for deprecated APIs (#2857) - -commit 5b90965ee9f39cb38cdf3cb4f28955720dfe1352 -Author: Denver Coneybeare -Date: Mon Apr 6 09:18:33 2020 -0400 - - Update CHANGELOG.md to mention limbo resolution throttling (#2864) - -commit ec5ca2e1af97a7140c82c2f9114ef554683f943c -Author: Feiyang -Date: Fri Apr 3 18:37:39 2020 -0700 - - set up docgen and api review for packages-exp (#2868) - - * set up doc gen tools - - * save progress - - * fix tsdocs - - * create docs without -exp in package name - - * enable api-report in app-types-exp - - * set up doc and api review pipeline - - * prepend underscore to internal only symbols - - * remove api review - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * fix prepush hook - - * add api report for app-types - - * manually change the report file for testing - - * [AUTOMATED]: API Reports - - * centralize api review location - - * rename docgen script - - * enable json with comment in github - -commit 60c8b89c096aec816ecd9c3bee8b597e581577bb -Author: Sebastian Schmidt -Date: Fri Apr 3 16:10:46 2020 -0700 - - Fix logDebug log level (#2867) - -commit 437c4041d9fd9f8c06347d6231aaee755ff5f96d -Author: Christina Holland -Date: Fri Apr 3 11:33:41 2020 -0700 - - Fix broken CI (#2865) - -commit 0f6146d8bc232d78161240827e98e53549808f28 -Author: Denver Coneybeare -Date: Thu Apr 2 22:37:42 2020 -0400 - - Generate stable JSON from generate_spec_json.js (#2843) - - * Generate stable JSON from generate_spec_json.js - - * [AUTOMATED]: License Headers - - * Address code review feedback, round 1. - - * Pin versions of json-stable-stringify in package.json to a specific version - -commit d69f79cd56aaa6e6cbdf938f66104ed19d677b50 -Author: Sebastian Schmidt -Date: Thu Apr 2 16:36:21 2020 -0700 - - Remove TargetIdGenerator (#2818) - -commit 7199846cecc383589e7ca6b2c80595116ef58982 -Merge: 7b17e03bd baa233dec -Author: Christina Holland -Date: Thu Apr 2 16:33:10 2020 -0700 - - Merge branch 'release' - 7.13.2 release - -commit baa233decdeb491a677263c6d6f094e716e990e9 (tag: rxfire@3.11.2, tag: firebase@7.13.2, tag: @firebase/util@0.2.44, tag: @firebase/testing@0.18.2, tag: @firebase/storage@0.3.31, tag: @firebase/remote-config@0.1.18, tag: @firebase/performance@0.2.37, tag: @firebase/messaging@0.6.11, tag: @firebase/logger@0.2.1, tag: @firebase/installations@0.4.7, tag: @firebase/functions@0.4.39, tag: @firebase/firestore@1.13.1, tag: @firebase/database@0.5.25, tag: @firebase/component@0.1.9, tag: @firebase/auth@0.14.2, tag: @firebase/app@0.6.1, tag: @firebase/analytics@0.3.1) -Author: Christina Holland -Date: Thu Apr 2 14:38:46 2020 -0700 - - Publish firebase@7.13.2 - -commit 7b17e03bd3fd8b0054802235bf3781f734b4e1c5 -Author: Christina Holland -Date: Thu Apr 2 10:54:12 2020 -0700 - - Fix Saucelabs tests in analytics and functions (#2845) - -commit e0629330c71f7468fdf7a0d31bc0fae7b1ab4524 -Author: Sebastian Schmidt -Date: Wed Apr 1 16:26:29 2020 -0700 - - Pre-process all ES5 builds (#2840) - -commit d9b599faa72fcd0c0e18b74abb8ad6979a340323 -Author: Andreas Rayo Kniep -Date: Wed Apr 1 09:49:26 2020 -0700 - - Added mandatory FirebaseOptions fo JavaDoc example. (#2778) - - * Added mandatory FirebaseOptions fo JavaDoc example. - - * added missing commas - - * Addressed comments - - Fixed platform of App ID example: "android" -> "web". - Added mandatory Firebase options to example of secondary FirebaseApp. - -commit ad406d2b9e2ce8381465ac0695c2b8f969870edd -Author: Brian Chen -Date: Wed Apr 1 09:05:59 2020 -0700 - - Only iterate across active targets in WatchChangeAggregator (#2847) - -commit 60116ca56b0e9c21ce2387c1ccb61565801ca724 -Author: Feiyang -Date: Tue Mar 31 16:00:24 2020 -0700 - - @firebase/app modularization exp (#2836) - - * init app-exp - - * add new packages - - * remove pkg - - * fix import paths - - * make tests pass again - - * move exp packages to packages-exp folder - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * drop node in file name - - * remove compat code - - * add documentation - - * add internal submodule - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * update run_changed script to account for packages-exp folder - - * fix test - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * fix lerna version - - * Implement client logging - - * [AUTOMATED]: Prettier Code Styling - - * fix small things - - * update readme - -commit e4b610d9cc30e41157db7f1f2d838c99e59d2585 -Author: Sebastian Schmidt -Date: Tue Mar 31 15:19:20 2020 -0700 - - Remove unused code (#2817) - -commit aab78f9dfbf2138cf4c1d8dd8bae102b7a5bd0b1 -Author: Kai Wu -Date: Tue Mar 31 14:36:41 2020 -0700 - - Create FCM's CHANGELOG.md with a release note. (#2837) - - * Create FCM's CHANGELOG.md with a release note. - - This RN is meant for the release scheduled on 2020-04-02. - The fix will addresses the issues in https://github.com/firebase/firebase-js-sdk/issues/2712 - - * Update CHANGELOG.md - - Improves wording on Eric's feedback. Thansk Eric - - * Update CHANGELOG.md - - Fix a type - - Co-authored-by: Kai Wu - -commit 8e70e4a0a593bb366da46f3d181cbbd0734b53ee -Author: Sebastian Schmidt -Date: Tue Mar 31 12:26:10 2020 -0700 - - Remove namespace import for objUtils (#2807) - -commit 50de3fb13ca9f3e0462c5770001195f30a20eae7 -Author: Sebastian Schmidt -Date: Mon Mar 30 16:01:22 2020 -0700 - - Use @firebase/firestore/memory for Memory-build (#2834) - -commit 5f58722451d70eaa99480f94599a5346a7eba3a6 -Author: Sebastian Schmidt -Date: Mon Mar 30 15:23:29 2020 -0700 - - Update rollup.config.js (#2830) - -commit 6cff2f4e344572578230fbc8117c4431ea1e2210 -Author: Sebastian Schmidt -Date: Mon Mar 30 13:40:58 2020 -0700 - - Move test code to test helpers (#2813) - -commit 1f16cdbca0368a54eb7932b58f3f752ab226e4fe -Author: Denver Coneybeare -Date: Mon Mar 30 16:24:17 2020 -0400 - - Call PlatformSupport.setPlatform() in generate_spec_json.js (#2833) - -commit 111a4d0f2aae2f3d7d7bf4d90c26a980aa40d20e -Author: Thomas Bouldin -Date: Mon Mar 30 13:06:27 2020 -0700 - - Realtime Database increment operator - - * Adds a prerelease copy of the increment operator (`_increment`) - * Updated local operations to handle increment as well as passing the server operation - * ServerValues now takes a copy of existing data, but uses JIT access to avoid performance regressions - * Lots of new tests - -commit 353f5caa0cd1dda23ff979af4459d023fd4f44ee -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Mon Mar 30 15:07:33 2020 -0400 - - Fix IE11 broken by Crypto change. (#2832) - - * Fix IE11 broken by Crypto change. - - * Suppress Lint. - - * Rearrangement. - -commit 74b06f51aa0ffb444ce0c0713b8a8146d1c2f5c6 -Author: Denver Coneybeare -Date: Mon Mar 30 14:44:17 2020 -0400 - - Implement limbo resolution throttling (#2790) - -commit 735f7c720f0af47878bff0e91117469b19197dcc -Author: Kai Wu -Date: Mon Mar 30 11:34:41 2020 -0700 - - Feed pushManger with Uint8Array VapidKey (#2809) - - * Feed pushManger with Uint8Array VapidKey - - Since Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key submitted to pushManager#subscribe must be of type Uint8Array. - -commit 049118af878bca51ea304e47c0f4c217e696c9c3 -Author: Yifan Yang -Date: Mon Mar 30 10:53:22 2020 -0700 - - Disable health-metrics test in pull requests from forked repo. (#2819) - -commit ef588456464efc210f4e17d4dfb6bee3c3e13dd7 -Author: Yifan Yang -Date: Mon Mar 30 10:37:05 2020 -0700 - - Include branch information in metrics uploading. (#2821) - -commit bd85150b032ee360cb9e5e7c39b5a47de9b2bba6 -Author: Samy Pessé -Date: Mon Mar 30 06:38:12 2020 +0200 - - Fix #2822: consistent write timing between refs and WriteBatch (#2823) - -commit 1d7f06ca10ebcdcf77e06ae1598ad510881560e6 -Merge: f1ddd7028 e13e909b1 -Author: Feiyang1 -Date: Fri Mar 27 17:03:43 2020 -0700 - - Merge branch 'release' - 7.13.1 release - -commit e13e909b1c5a7a3e39512dd41ae694ff630d2408 (tag: rxfire@3.11.1, tag: firebase@7.13.1, tag: @firebase/testing@0.18.1) -Author: Feiyang1 -Date: Fri Mar 27 16:04:00 2020 -0700 - - Publish firebase@7.13.1 - -commit f5b334d5343de80aff1022af443ef44723668b59 -Author: Bernardo Figuerêdo Domingues <45567521+bernardodomingues-hotmart@users.noreply.github.com> -Date: Fri Mar 27 18:03:44 2020 -0300 - - Fixing dangling comma on package.json (#2811) - - The original file was an invalid JSON, which could potentially break builds that would parse JSON files. - -commit f1ddd7028c309d2acb31aa35ce681302637aaefb -Author: Bernardo Figuerêdo Domingues <45567521+bernardodomingues-hotmart@users.noreply.github.com> -Date: Fri Mar 27 18:03:44 2020 -0300 - - Fixing dangling comma on package.json (#2811) - - The original file was an invalid JSON, which could potentially break builds that would parse JSON files. - -commit e9fed6d7a97db44776f1ddb6cd4e3b9fca5f0af5 -Author: Sebastian Schmidt -Date: Fri Mar 27 11:15:21 2020 -0700 - - Simplify logging (#2806) - -commit 228b0474ca9e50cfe92f6d0f6499869cbd453fdd -Merge: e7b230cf1 5cf8fbc5e -Author: Feiyang1 -Date: Fri Mar 27 09:33:29 2020 -0700 - - Merge branch 'release' - 7.13.0 release - -commit e7b230cf19520bb3c5dea0bd49a01d5186a4051e -Author: Sebastian Schmidt -Date: Thu Mar 26 17:18:08 2020 -0700 - - Support storage.googleapis.com in refFromUrl (#2758) - -commit 5cf8fbc5ef5745a4cc4f71a4e17f7bd79223d1ba (tag: rxfire@3.11.0, tag: firebase@7.13.0, tag: @firebase/testing@0.18.0, tag: @firebase/firestore@1.13.0, tag: @firebase/analytics@0.3.0, tag: @firebase/analytics-types@0.3.0) -Author: Feiyang1 -Date: Thu Mar 26 16:35:14 2020 -0700 - - Publish firebase@7.13.0 - -commit 17e3e61662ea30960e7c48f978fedb7f175d0d21 -Author: Feiyang -Date: Thu Mar 26 12:05:36 2020 -0700 - - include firestore memory builds and sub modules in the size report (#2798) - - * include firestore memory builds and sub modules in size report - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - -commit faa9fc62e68ef98ad0f8e1b74373fd4045e22006 -Author: Feiyang -Date: Thu Mar 26 12:05:18 2020 -0700 - - Add a script to build only the SDK and its dependencies (#2799) - - * add a command to build a package and its deps - - * just a test. please remove - - * always build @firebase/app - - * [AUTOMATED]: License Headers - -commit cae464533b436f5a121d6f2f6834b8d275e2e882 -Author: Sebastian Schmidt -Date: Wed Mar 25 14:08:15 2020 -0700 - - Field Value migration (#2784) - -commit 0d0bdc10841eea48c2ba39b1a82eadecc5bf7135 -Author: Sebastian Schmidt -Date: Tue Mar 24 17:34:57 2020 -0700 - - Prettier (#2795) - -commit f954d2f2436a3c3a525b6f9b3fb3fd79aa166088 -Author: Feiyang -Date: Tue Mar 24 17:09:58 2020 -0700 - - Type update for enhanced ecommerce params (#2794) - - * change type of index from string to number - - * [AUTOMATED]: License Headers - -commit 1eada4e98872dc234c425c80887d099cc5be261e -Author: Christina Holland -Date: Tue Mar 24 15:05:38 2020 -0700 - - Update analytics ecommerce event and param types (#2728) - -commit ef4457225a64b36b6b8238150df2376bc74f3f47 -Author: Sebastian Schmidt -Date: Tue Mar 24 11:30:46 2020 -0700 - - Fix `yarn:dev` (#2788) - -commit 1de36ed4a6a9a1542c3c7d84201a3da1eb7aa536 -Author: Christina Holland -Date: Tue Mar 24 10:46:14 2020 -0700 - - Fix `onLog` type in public API to be compatible with Typescript <3.x (#2789) - -commit 2c8c940350b94eca8bbc4d345340b48c6604d59d -Author: Yifan Yang -Date: Tue Mar 24 09:37:15 2020 -0700 - - Report binary size metrics on GitHub pull requests. (#2744) - - * size presubmit check - - * add missing semicolons - - * report github action url - - * Upload size report to the metrics service. - - * Cosmetic change. - - * get size without comments and whitespaces for NPM scripts (#2777) - - * get size without comments and whitespaces for NPM scripts - - * use single quotes - - * update lock file - - Co-authored-by: Feiyang1 - Co-authored-by: Feiyang - -commit afaf982529e52c0f44fffad2b4c599cc5a8cf940 -Author: Sebastian Schmidt -Date: Mon Mar 23 16:21:11 2020 -0700 - - Remove mangling from Node build (#2779) - -commit a85f81dbbb7fa9b501d927f5f46e5295d4550dd5 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Fri Mar 20 21:47:35 2020 -0400 - - Use crypo RNG for auto ID generation to reduce conflicts. (#2764) - - * Use crypo RNG for auto ID generation to reduce conflicts. - - * Address comments. - - * Fix mistake. - - * Declare magic numbers. - -commit 216eb639dd7d6054c0939f2bede26c037a3c9a8a -Author: Christina Holland -Date: Fri Mar 20 13:53:14 2020 -0700 - - Move husky hook to correct location (#2774) - -commit 90c89bea5e4ba82bc3631b6dd74be6c07af39166 -Author: Sebastian Schmidt -Date: Fri Mar 20 12:37:35 2020 -0700 - - Remove non-idempotent transactions (#2771) - -commit 9200feb94acc48c88b0d2a6defa547a134722a5a -Author: Sebastian Schmidt -Date: Fri Mar 20 09:11:02 2020 -0700 - - Make MemoryLru tree-shakeable (#2767) - -commit cbc191d014ad77d3b31f3a621b4a302d0a7a62d2 -Author: Christina Holland -Date: Thu Mar 19 14:32:10 2020 -0700 - - Update CI Triggers (#2763) - -commit a946a5617963471fa3784060172d99aa751141f0 -Merge: 0a109bd43 5a69bccb1 -Author: Christina Holland -Date: Thu Mar 19 14:26:48 2020 -0700 - - Merge branch 'release' - Release 7.12.0 - -commit 0a109bd438886104175da0e2894aabd97c2a65c4 -Author: Feiyang -Date: Thu Mar 19 14:12:57 2020 -0700 - - exclude typedoc from dep update (#2765) - - * exclude typedoc from dep update - - * revert typedoc version - - * remove firestore - -commit 5a69bccb1aecdce03ab4e00f35453f2d6976fcc2 (tag: rxfire@3.10.1, tag: firebase@7.12.0, tag: @firebase/webchannel-wrapper@0.2.38, tag: @firebase/util@0.2.43, tag: @firebase/testing@0.17.1, tag: @firebase/storage@0.3.30, tag: @firebase/remote-config@0.1.17, tag: @firebase/polyfill@0.3.33, tag: @firebase/performance@0.2.36, tag: @firebase/messaging@0.6.10, tag: @firebase/logger@0.2.0, tag: @firebase/installations@0.4.6, tag: @firebase/functions@0.4.38, tag: @firebase/firestore@1.12.2, tag: @firebase/database@0.5.24, tag: @firebase/database-types@0.4.14, tag: @firebase/component@0.1.8, tag: @firebase/auth@0.14.1, tag: @firebase/app@0.6.0, tag: @firebase/app-types@0.6.0, tag: @firebase/analytics@0.2.18) -Author: Christina Holland -Date: Thu Mar 19 13:40:23 2020 -0700 - - Publish firebase@7.12.0 - -commit 0d406b65bb51a24311a11a3e0dad6b65a683f21a -Author: Denver Coneybeare -Date: Thu Mar 19 09:31:48 2020 -0400 - - Log each file being generated by generate_spec_json.js. (#2761) - -commit 60e9f4afe981e030dcc2180aa4443593906bd06e -Author: Sebastian Schmidt -Date: Wed Mar 18 15:37:09 2020 -0700 - - Make Serializer tests work in browser, remove test duplication (#2757) - -commit a5d80d9fa4c2b7b2989a2dc7bdb40abfc4022bdd -Author: Sebastian Schmidt -Date: Wed Mar 18 13:35:19 2020 -0700 - - Memory-only Firestore build (#2608) - -commit c8bebeb562e07e8749359874eb4bd3056dd7d02a -Author: Denver Coneybeare -Date: Wed Mar 18 12:20:42 2020 -0400 - - Remove base64 encoding of resume tokens in spec tests. (#2760) - - Fixes: #2759 - -commit ff7be4b060b8153025381ac5f50b4346fc7ed7a2 -Author: WhiteSource Renovate -Date: Tue Mar 17 21:54:34 2020 +0100 - - Update all non-major dependencies (#2738) - -commit 420c6261920c2e6965808fb25f8a076e629182f5 -Author: Christina Holland -Date: Tue Mar 17 13:03:59 2020 -0700 - - Fix closure line to match internal conformance requirements (#2756) - -commit 4f1f303402180224dd0d4f843e8dc2faee39fdea -Author: Sebastian Schmidt -Date: Tue Mar 17 11:52:11 2020 -0700 - - Support -0.0 in Firestore (#2751) - -commit a90acfa4b78c458a9866e47c33096e375ef39d8e -Author: Sebastian Schmidt -Date: Tue Mar 17 11:17:47 2020 -0700 - - Remove custom implementations for Number methods (#2752) - -commit 148db347da5c5c1ee2464068e6c74d734376b9cf -Author: WhiteSource Renovate -Date: Mon Mar 16 22:49:17 2020 +0100 - - Update dependency karma-typescript to v5 (#2740) - -commit 20999dcdc890bdf1d3e6d017f6dbc9c507ed4e9a -Author: WhiteSource Renovate -Date: Mon Mar 16 22:48:28 2020 +0100 - - Update dependency rollup to v2 (#2741) - -commit 373773792fdfb02a92484f9dd876d54a0f382d4f -Author: WhiteSource Renovate -Date: Mon Mar 16 20:04:04 2020 +0100 - - Update dependency tslint to v6 (#2742) - -commit f1ac28f65f4ea6276b16222ac79f801203c2ed37 -Author: WhiteSource Renovate -Date: Mon Mar 16 20:03:29 2020 +0100 - - Update dependency google-closure-library to v20200224 (#2739) - -commit 4277e4c5fca2e95aabd80aef99b41c5fb06acb1e -Author: Christina Holland -Date: Fri Mar 13 11:45:51 2020 -0700 - - Client logging API: methods for users to access the SDK's log messages (#2434) - -commit 000316f66c07db44f504e5a4a75880b69a706662 -Author: Christina Holland -Date: Fri Mar 13 09:55:48 2020 -0700 - - Add full license to generated files in internal deploy only (#2743) - -commit 051462ff7e1379351ed77a4e95c493425a376380 -Merge: b1aa52b34 87aa25eb8 -Author: Feiyang1 -Date: Thu Mar 12 19:10:30 2020 -0700 - - Merge branch 'release' - -commit 87aa25eb88f3038b825700ae2aeeb1fc8aca02be (tag: rxfire@3.10.0, tag: firebase@7.11.0, tag: @firebase/webchannel-wrapper@0.2.37, tag: @firebase/util@0.2.42, tag: @firebase/testing@0.17.0, tag: @firebase/storage@0.3.29, tag: @firebase/storage-types@0.3.11, tag: @firebase/remote-config@0.1.16, tag: @firebase/remote-config-types@0.1.8, tag: @firebase/polyfill@0.3.32, tag: @firebase/performance@0.2.35, tag: @firebase/performance-types@0.0.12, tag: @firebase/messaging@0.6.9, tag: @firebase/messaging-types@0.4.4, tag: @firebase/logger@0.1.37, tag: @firebase/installations@0.4.5, tag: @firebase/installations-types@0.3.3, tag: @firebase/functions@0.4.37, tag: @firebase/functions-types@0.3.16, tag: @firebase/firestore@1.12.1, tag: @firebase/firestore-types@1.10.1, tag: @firebase/database@0.5.23, tag: @firebase/database-types@0.4.13, tag: @firebase/component@0.1.7, tag: @firebase/auth@0.14.0, tag: @firebase/auth-types@0.10.0, tag: @firebase/auth-interop-types@0.1.4, tag: @firebase/app@0.5.6, tag: @firebase/app-types@0.5.3, tag: @firebase/analytics@0.2.17, tag: @firebase/analytics-types@0.2.8, tag: @firebase/analytics-interop-types@0.1.4) -Author: Feiyang1 -Date: Thu Mar 12 19:00:27 2020 -0700 - - Publish firebase@7.11.0 - -commit 78cdb8b09eb1dceb2c247a5794137420fc55318f -Author: bojeil-google -Date: Thu Mar 12 17:29:28 2020 -0700 - - Removes obsoleted closure APIs: goog.isString, goog.isNull, goog.isNumber, goog.isBoolean, etc. (#2737) - -commit b1aa52b3411b03d19f3fd30356a622c9b508fbe4 -Author: bojeil-google -Date: Thu Mar 12 17:29:28 2020 -0700 - - Removes obsoleted closure APIs: goog.isString, goog.isNull, goog.isNumber, goog.isBoolean, etc. (#2737) - -commit 630568e8d535d8a55015bc50306638a7bca068b4 -Author: bojeil-google -Date: Thu Mar 12 14:15:59 2020 -0700 - - Updates Auth closure dependency to latest. (#2736) - - Fixes failing tests that were blocking the update. - -commit f86f95401e50f10ab5d8dc051794d1b3f45d4769 -Author: bojeil-google -Date: Thu Mar 12 14:15:59 2020 -0700 - - Updates Auth closure dependency to latest. (#2736) - - Fixes failing tests that were blocking the update. - -commit a5db5fe126ba86df17dd155c153450486719a61b -Author: Feiyang -Date: Thu Mar 12 12:39:35 2020 -0700 - - revert dep update since it broke auth (#2734) - -commit 9d975e97f42f567e2b475dc059621e5d510666fd -Author: Feiyang1 -Date: Thu Mar 12 11:40:51 2020 -0700 - - update google-closure-library - -commit aa04416d9428ebedb4b77f05491ac336de520411 -Author: Sebastian Schmidt -Date: Thu Mar 12 11:24:23 2020 -0700 - - Populate GMPID header - -commit 068ed5fd915d905e3f33ecace5daa1c536d1f510 -Author: Feiyang -Date: Tue Mar 10 16:30:24 2020 -0700 - - add new entries in reference docs toc (#2731) - -commit 90b5f044b136211a39f891c05788bc46de1d2927 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Mar 10 13:23:48 2020 -0700 - - feat(auth): Multi-factor Auth support with SMS for Google Cloud Identity Platform (#2725) - - Defines multi-factor auth client APIs for Google Cloud Identity Platform. - -commit 9d593bc72fcc6f695ed3666525d0638dfdf50b62 -Author: Christina Holland -Date: Mon Mar 9 15:07:32 2020 -0700 - - Update @typedef to @type in firestore-externs" (#2714) - -commit 27215036992a82216145f18cd69403ce554f4052 (origin/next) -Author: WhiteSource Renovate -Date: Mon Mar 9 19:57:34 2020 +0100 - - Update all non-major dependencies (#2441) - -commit b42744728b2bc9023862c385ffcfdb6cb849630b -Author: Brian Chen -Date: Mon Mar 9 09:30:04 2020 -0700 - - Fix racy promises in SpecTestRunner (#2693) - -commit 57c38ff653a6b94711e7b0ea338faf1144ee4a93 -Merge: 43c67ac37 42a18e074 -Author: Christina Holland -Date: Fri Mar 6 16:09:53 2020 -0800 - - Merge branch 'release' - Release 7.10.0 - -commit 43c67ac37ee0a9179f702a4540b7b6e5c203538b -Author: Christina Holland -Date: Fri Mar 6 14:26:06 2020 -0800 - - Set canary publish to use wombot (#2690) - -commit 48e627176f82862d024f563f3982e1ceb0f816f3 -Author: WhiteSource Renovate -Date: Fri Mar 6 16:57:39 2020 +0100 - - Update dependency typescript to v3.8.3 (#2716) - -commit eddd9a25a029d0611d4f879f7d426ad62963c4d3 -Author: Feiyang -Date: Fri Mar 6 07:57:09 2020 -0800 - - Avoid building the whole repo during tests (#2717) - -commit 42a18e0744927a797b44f9a524188931975af37b (tag: rxfire@3.9.16, tag: firebase@7.10.0, tag: @firebase/testing@0.16.14, tag: @firebase/firestore@1.12.0, tag: @firebase/firestore-types@1.10.0, tag: @firebase/analytics@0.2.16) -Author: Christina Holland -Date: Thu Mar 5 13:29:14 2020 -0800 - - Publish firebase@7.10.0 - -commit ac25570663329d041c417b7f84aa2013c48e8adc -Author: Sebastian Schmidt -Date: Tue Mar 3 16:11:22 2020 -0800 - - Remove enum overhead (#2697) - -commit 42824327ffd817e5f7b92c6f3a2c436ea8e93f44 -Merge: fcbd8a99e 45026f035 -Author: Feiyang1 -Date: Mon Mar 2 12:25:12 2020 -0800 - - Merge branch 'release' - Firebase 7.9.3 release - -commit fcbd8a99efdfba50838296b29d99cb55762b6411 -Author: Christina Holland -Date: Mon Mar 2 11:25:50 2020 -0800 - - Fix promises in Analytics tests (#2673) - -commit f24ddc450e75ce0270ee4c688b6f362fa620a997 -Author: Denver Coneybeare -Date: Mon Mar 2 13:53:39 2020 -0500 - - Implement Timestamp.valueOf() (#2662) - - This enables comparison of Timestamp objects using the arithmetic comparison operators, such as < and >. - - Fixes: https://github.com/firebase/firebase-js-sdk/issues/2632 - -commit 488e7f405b0a40307595869480307807ade349ba -Author: Christina Holland -Date: Mon Mar 2 10:41:10 2020 -0800 - - Add global approvers to doc changes in CODEOWNERS (#2705) - -commit 45026f035a8c3e08d7f4745ee8f14951871830d9 (tag: rxfire@3.9.15, tag: firebase@7.9.3, tag: @firebase/testing@0.16.13, tag: @firebase/storage@0.3.28, tag: @firebase/remote-config@0.1.15, tag: @firebase/performance@0.2.34, tag: @firebase/performance-types@0.0.11, tag: @firebase/messaging@0.6.8, tag: @firebase/installations@0.4.4, tag: @firebase/functions@0.4.36, tag: @firebase/analytics@0.2.15) -Author: Feiyang1 -Date: Fri Feb 28 15:42:30 2020 -0800 - - Publish firebase@7.9.3 - -commit 6fdc6e1c724e7c2c8e3d826c306d3f7f3d7bf34c -Author: Sebastian Schmidt -Date: Fri Feb 28 14:40:14 2020 -0800 - - Remove Closure build (#2646) - -commit 3679e87caed18f9db5d1c11fb35cd2d127d71a09 -Author: Sebastian Schmidt -Date: Fri Feb 28 13:46:19 2020 -0800 - - Revert "Populate GMPID header (#2670)" (#2696) - - This reverts commit 7d5a29fff3710c3bc0773518f434b5bc6b94feaa. - -commit e7beb86afd6b0792be5cb8950d00ebeaf0889989 -Author: Christina Holland -Date: Fri Feb 28 11:12:31 2020 -0800 - - Fix package.json repository fields in 3 packages (#2694) - -commit f1477a8d85efc2ed765dac68f54df827a33478e4 -Author: Brian Chen -Date: Fri Feb 28 10:02:54 2020 -0800 - - Fix VS Code launch.json to look for mocha/karma in the right location (#2642) - -commit ad8e0c7479e02cdc0f87656c449e26a2651aa6b3 -Author: Brian Chen -Date: Fri Feb 28 10:02:37 2020 -0800 - - upgrade to 1.10.4 (#2653) - -commit a632d5a2564c6a2eb8984ad70064a7f3cf4f13dd (tag: rxfire@3.9.14, tag: firebase@7.9.2, tag: @firebase/webchannel-wrapper@0.2.36, tag: @firebase/util@0.2.41, tag: @firebase/testing@0.16.12, tag: @firebase/storage@0.3.27, tag: @firebase/storage-types@0.3.10, tag: @firebase/remote-config@0.1.14, tag: @firebase/remote-config-types@0.1.7, tag: @firebase/performance@0.2.33, tag: @firebase/performance-types@0.0.10, tag: @firebase/messaging@0.6.7, tag: @firebase/messaging-types@0.4.3, tag: @firebase/logger@0.1.36, tag: @firebase/installations@0.4.3, tag: @firebase/installations-types@0.3.2, tag: @firebase/functions@0.4.35, tag: @firebase/functions-types@0.3.15, tag: @firebase/firestore@1.11.2, tag: @firebase/firestore-types@1.9.2, tag: @firebase/database@0.5.22, tag: @firebase/database-types@0.4.12, tag: @firebase/component@0.1.6, tag: @firebase/auth@0.13.6, tag: @firebase/auth-types@0.9.6, tag: @firebase/auth-interop-types@0.1.3, tag: @firebase/app@0.5.5, tag: @firebase/app-types@0.5.2, tag: @firebase/analytics@0.2.14, tag: @firebase/analytics-types@0.2.7, tag: @firebase/analytics-interop-types@0.1.3) -Author: Feiyang1 -Date: Thu Feb 27 16:24:15 2020 -0800 - - Publish firebase@7.9.2 - -commit cb01df4959aa65256d781b89380c8cf523964da6 -Author: Sebastian Schmidt -Date: Thu Feb 27 14:27:43 2020 -0800 - - Use explicit String constants for OnlineState (#2688) - -commit c251f433c05b12c86af423bd1ddd1a347d18f843 -Author: WhiteSource Renovate -Date: Thu Feb 27 21:05:08 2020 +0100 - - Update dependency sinon to v9 (#2657) - - * Update dependency sinon to v9 - - * remove sinon from integration/messaging - - Co-authored-by: Feiyang - -commit 6aa9a83ec748b45e069bdc3d85f70cabfd7f9b66 -Author: WhiteSource Renovate -Date: Thu Feb 27 19:10:37 2020 +0100 - - Update dependency typescript to v3.8.2 (#2656) - - * Update dependency typescript to v3.8.2 - - * make typescript happy - - * make typescript happy again - - Co-authored-by: Feiyang - -commit 872ffe1edbafda0286fa4857518f222f6241e96d -Author: Christina Holland -Date: Wed Feb 26 13:52:38 2020 -0800 - - Fix canary release (#2681) - -commit 7d5a29fff3710c3bc0773518f434b5bc6b94feaa -Author: Sebastian Schmidt -Date: Wed Feb 26 11:41:10 2020 -0800 - - Populate GMPID header (#2670) - -commit 22e5af2eec40fcf10d199228d4a34f51e9961fef -Author: Sebastian Schmidt -Date: Tue Feb 25 16:59:20 2020 -0800 - - Add mangled CJS build (#2679) - -commit b73976307fbbca560d3d2df40246e623b7e98793 -Author: Sebastian Schmidt -Date: Tue Feb 25 14:16:07 2020 -0800 - - Add an ObjectValue builder (#2671) - -commit bfbbff936768d8feaa8ade8dc1095c3f160e52e1 -Author: Denver Coneybeare -Date: Tue Feb 25 16:01:55 2020 -0500 - - Update test setup instructions in README.md (#2654) - -commit 9c222510dcbec59780e94dae561ebb203c2572c3 -Author: Gil -Date: Tue Feb 25 11:59:28 2020 -0800 - - Remove backgroundChannelTest and testUrl from WebChannelOptions (#2666) - - These will be deprecated in an upcoming google-closure-library release - - Note: backgroundChannelTest already defaults to true and we don't use - testUrl. - -commit 051e3c39e2f48b045d67aac7f07a534dbdbd4649 -Author: Gil -Date: Tue Feb 25 10:54:14 2020 -0800 - - Allow for copyrights to be assigned to Google LLC (#2665) - - * Allow for copyrights assigned to Google LLC - - Current guidance at go/copyright calls for copyright to be assigned to - Google LLC, like so: - - Copyright 2020 Google LLC - - This change makes this the default without changing existing files. - - * Add missing license header to license.js - - * Remove unused chalk import - - * Do license validation in a single pass - - * Rewrite old-form copyrights - - * Compute changed files once. - - * [AUTOMATED]: License Headers - -commit 94e2eadb7146e262ad5a09afe498c6f1ed9fbd3d -Author: Sebastian Schmidt -Date: Mon Feb 24 20:05:00 2020 -0800 - - Make ordering for BooleanValues explicit (#2675) - -commit dad9a4a6e72a8eeb59332efd811b736b25cb2943 -Author: Sebastian Schmidt -Date: Mon Feb 24 15:50:17 2020 -0800 - - Run prettier (#2672) - -commit 8e0e5f07590cf30593c31adec2ef2516c41b9117 -Author: Brian Chen -Date: Mon Feb 24 14:36:09 2020 -0800 - - Rename protobytestring to bytestring (#2674) - -commit 636677666a35b7a111a37d240c4c66f591ddb29b -Author: Christina Holland -Date: Fri Feb 21 14:16:42 2020 -0800 - - Upgrade to actions/checkout@v2 (#2661) - -commit 363b08a3786c134aba0c47b437a49f36f5466706 (tag: rxfire@3.9.13, tag: firebase@7.9.1, tag: @firebase/testing@0.16.11, tag: @firebase/messaging@0.6.6, tag: @firebase/functions@0.4.34, tag: @firebase/firestore@1.11.1) -Author: Christina Holland -Date: Fri Feb 21 13:24:43 2020 -0800 - - Publish firebase@7.9.1 - -commit fe06e91f5b1721db2e1fa8e0f001a988dbb0484f -Author: Sebastian Schmidt -Date: Fri Feb 21 10:33:33 2020 -0800 - - De-mangle Node and CJS build (#2658) - -commit da9c2a2da0d562a1ebc353c71bdd17f4adf8237c -Author: WhiteSource Renovate -Date: Fri Feb 21 19:11:26 2020 +0100 - - Update dependency chromedriver to v80 (#2603) - -commit d92ba4757821626ab5c220ac1925cc96850adea1 -Author: WhiteSource Renovate -Date: Fri Feb 21 19:11:03 2020 +0100 - - Update dependency ts-essentials to v6 (#2604) - -commit 4ed6f50299c13e61672850962186a7803c48dd59 -Merge: 2919c0abf 25449e5b0 -Author: Christina Holland -Date: Thu Feb 20 15:49:04 2020 -0800 - - Merge branch 'release' - Release 7.9.0 - -commit 25449e5b095ffacfdfd18b43a7869831513a9e46 (tag: rxfire@3.9.12, tag: firebase@7.9.0, tag: @firebase/testing@0.16.10, tag: @firebase/messaging@0.6.5, tag: @firebase/functions@0.4.33, tag: @firebase/firestore@1.11.0) -Author: Christina Holland -Date: Thu Feb 20 14:00:16 2020 -0800 - - Publish firebase@7.9.0 - -commit 2919c0abf32d284e8c6001635cc6bfae98f9001d -Author: Brian Chen -Date: Thu Feb 20 09:53:10 2020 -0800 - - Change `ProtoByteString` to use its own class rather than `String | Uint8Array` (#2639) - -commit 4c2f8d1a4960edbde3aae2eb2736452df7b499d4 -Author: Sebastian Schmidt -Date: Wed Feb 19 21:27:44 2020 -0800 - - Cleanup: Use Object.assign() to create shallow copies (#2647) - -commit 1a7ef7232c0961f08ad4b51fb2e1ea902fd0a87b -Author: Sebastian Schmidt -Date: Wed Feb 19 20:25:05 2020 -0800 - - Cleanup codeowners (#2649) - -commit 5502615329778218fba120ded664d9d5bf146d47 -Author: Sebastian Schmidt -Date: Wed Feb 19 16:58:41 2020 -0800 - - De-dup module registration (#2650) - - This simplifies adding a new Memory-only Firestore build - -commit d2b37c11b5ba8add59c0df3c242022a0ecc55276 -Author: Brian Chen -Date: Wed Feb 19 16:13:14 2020 -0800 - - more efficient Uint8Array conversion (#2645) - -commit 20ab129c4adf4122bb396867c991170489fe60a7 -Author: Sebastian Schmidt -Date: Wed Feb 19 15:31:27 2020 -0800 - - Remove unused `isRunningAgainstEmulator()` (#2648) - -commit 261bbd54c760e2221f2ecc9206df28781aa8be49 -Author: Sebastian Schmidt -Date: Tue Feb 18 19:03:48 2020 -0800 - - Make Firestore-mangled build the only Firestore build (#2640) - -commit 5512725f18831f4eba48f36fe035597b52414bad -Merge: eb4fe34a2 2a78a2dd1 -Author: Christina Holland -Date: Tue Feb 18 15:34:07 2020 -0800 - - Merge branch 'release' - Release 7.8.2 - -commit eb4fe34a2b534ed123f083fb4532144d99602b33 -Author: Christina Holland -Date: Tue Feb 18 15:03:12 2020 -0800 - - Fix prettier precommit script to not error if there are only deleted files (#2641) - -commit b40d71e3c9788f0a56fc41e677c73d7ad974b0c6 -Author: Feiyang -Date: Tue Feb 18 14:57:47 2020 -0800 - - reliably update service worker (#2638) - -commit fde231499eb93a1553bd0e95878910fd7fe3bbda -Author: Brian Chen -Date: Thu Feb 13 15:04:42 2020 -0800 - - Disable use of $httpHeaders in Cordova (#2626) - -commit 2a78a2dd1595ccea7ee721251ae222dc3e34313d (tag: rxfire@3.9.11, tag: firebase@7.8.2, tag: @firebase/testing@0.16.9, tag: @firebase/firestore@1.10.2) -Author: Feiyang1 -Date: Thu Feb 13 14:13:32 2020 -0800 - - Publish firebase@7.8.2 - -commit 2af214afa680f883e6466e2cee4c2e8c1f8489d9 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Thu Feb 13 09:47:05 2020 -0500 - - Add optimization to SortedSet.unionWith (#2624) - - * Add optimization to SortedSet.unionWith - - * Add changelog. - - * Update changelog - -commit 41132fa772a3710eb5219d0d4329c9ca9bb788da -Author: Christina Holland -Date: Wed Feb 12 13:55:43 2020 -0800 - - Improve logic for detecting what PR tests to run (#2615) - -commit eb614f0e7bcfee5b4bc1d390f894bea3d8f3867b -Author: Brian Chen -Date: Mon Feb 10 14:42:53 2020 -0800 - - Allow Collection.add() to use custom objects (#2607) - -commit 50134d6baf49690a1718c36aac27076781895f60 -Author: Brian Chen -Date: Mon Feb 10 13:50:04 2020 -0800 - - Rollback: Upgrade Firestore emulator 1.10.4 (#2614) - -commit 112e0d78173ded665c5ac2b03c8da564880da6b6 -Author: Feiyang -Date: Mon Feb 10 13:03:38 2020 -0800 - - Install Chrome stable in GHA before running tests (#2613) - - * install stable chrome - - * run aptget update - - * revert triggers - - * apply chrome installation to other workflows - -commit c48114cd8c323a4d96631e7bd960624f16715f51 -Author: Gil -Date: Thu Feb 6 16:20:52 2020 -0800 - - Upgrade Firestore emulator to 1.10.4 (#2602) - - The emulator now sends resume tokens, which exercises more of the - system. In particular, this means that resuming queries now uses the - index-free query engine. - -commit a4b89daae0e6aefc502c00b0676413de0a625f5e -Merge: 43fb3ee3a 9c27de764 -Author: Christina Holland -Date: Thu Feb 6 15:27:23 2020 -0800 - - Merge branch 'release' - Release 7.8.1 - -commit 9c27de7644b176bea804b740edb4a91dfdea329f (tag: rxfire@3.9.10, tag: firebase@7.8.1, tag: @firebase/util@0.2.40, tag: @firebase/testing@0.16.8, tag: @firebase/storage@0.3.26, tag: @firebase/storage-types@0.3.9, tag: @firebase/remote-config@0.1.13, tag: @firebase/remote-config-types@0.1.6, tag: @firebase/performance@0.2.32, tag: @firebase/performance-types@0.0.9, tag: @firebase/messaging@0.6.4, tag: @firebase/messaging-types@0.4.2, tag: @firebase/logger@0.1.35, tag: @firebase/installations@0.4.2, tag: @firebase/installations-types@0.3.1, tag: @firebase/functions@0.4.32, tag: @firebase/functions-types@0.3.14, tag: @firebase/firestore@1.10.1, tag: @firebase/firestore-types@1.9.1, tag: @firebase/database@0.5.21, tag: @firebase/database-types@0.4.11, tag: @firebase/component@0.1.5, tag: @firebase/auth@0.13.5, tag: @firebase/auth-types@0.9.5, tag: @firebase/auth-interop-types@0.1.2, tag: @firebase/app@0.5.4, tag: @firebase/app-types@0.5.1, tag: @firebase/analytics@0.2.13, tag: @firebase/analytics-types@0.2.6, tag: @firebase/analytics-interop-types@0.1.2) -Author: Christina Holland -Date: Thu Feb 6 15:10:58 2020 -0800 - - Publish firebase@7.8.1 - -commit 43fb3ee3a44c026ce1dfd441b1fc7d162227673d -Author: Mertcan Mermerkaya -Date: Wed Feb 5 19:29:33 2020 +0000 - - Remove @mmermerkaya and @dwoffinden from OWNERS (#2596) - -commit 8d83425adf1c0094fe54af3c02505ab06d3c0875 -Merge: 689711a13 a57bd9459 -Author: Christina Holland -Date: Tue Feb 4 14:07:25 2020 -0800 - - Merge branch 'release' - Release 7.8.0 - -commit 689711a134327c6011751339bd38f963979a371b -Author: Sebastian Schmidt -Date: Tue Feb 4 13:38:34 2020 -0800 - - Add explicit ts-node dependency (#2595) - - This fixes https://github.com/firebase/firebase-js-sdk/blob/master/packages/firestore/test/unit/generate_spec_json.sh - -commit e6cb0c268435e0891bb3055eb29f3b5ff5ad80cf -Author: Sebastian Schmidt -Date: Tue Feb 4 12:03:57 2020 -0800 - - Fix Firestore Performance spec test (#2594) - - These tests are only run on demand. One of the tests broke when we stopped accepting zero version documents in the RemoteDocumentCache - -commit 6898eb8996bfd42ca8220cb91acebf4569d64ddf -Author: WhiteSource Renovate -Date: Mon Feb 3 21:21:20 2020 +0100 - - Update dependency google-closure-compiler to v20200112 (#2549) - -commit 5f9e57ba8cdba8f2d3ba71cd1c6f7d3a3538b5a9 -Author: WhiteSource Renovate -Date: Mon Feb 3 21:20:16 2020 +0100 - - Update dependency husky to v4 (#2520) - -commit 046673c2e8c17ac75d0ccba38bc31ac27a990666 -Author: WhiteSource Renovate -Date: Mon Feb 3 21:16:33 2020 +0100 - - Update dependency typescript to v3.7.5 (#2471) - -commit c5b79b6a93404bf2c392e305a1819c79fcffaa0a -Author: Sebastian Schmidt -Date: Fri Jan 31 13:47:36 2020 -0800 - - Ignore primary lease loss in maybeGarbageCollectMultiClientState (#2585) - -commit a57bd945931561fe5b6f0e679d566ac3bbfbbec0 (tag: rxfire@3.9.9, tag: firebase@7.8.0, tag: @firebase/util@0.2.39, tag: @firebase/testing@0.16.7, tag: @firebase/storage@0.3.25, tag: @firebase/remote-config@0.1.12, tag: @firebase/performance@0.2.31, tag: @firebase/messaging@0.6.3, tag: @firebase/installations@0.4.1, tag: @firebase/functions@0.4.31, tag: @firebase/firestore@1.10.0, tag: @firebase/database@0.5.20, tag: @firebase/component@0.1.4, tag: @firebase/app@0.5.3, tag: @firebase/analytics@0.2.12) -Author: Christina Holland -Date: Thu Jan 30 12:54:01 2020 -0800 - - Publish firebase@7.8.0 - -commit 277f3558801ff17b449ebe3efb2c46539ddb844c -Author: WhiteSource Renovate -Date: Thu Jan 30 00:47:47 2020 +0100 - - Update dependency mocha to v7 (#2521) - -commit cf1851937fcc4ef45eef6ac5c1bc2665d84a4013 -Author: Christina Holland -Date: Wed Jan 29 13:34:40 2020 -0800 - - CI test workflow improvements (#2576) - -commit 295a545d5dac1c490d1c0c4bd732505993689507 -Author: Sebastian Schmidt -Date: Tue Jan 28 12:30:06 2020 -0800 - - Lint fix (#2578) - - * Lint fix - - * Update local_store.ts - -commit 878c50164d43e8ed9984e611d5ddbbe2e9660987 -Author: Sebastian Schmidt -Date: Mon Jan 27 16:30:22 2020 -0800 - - Simplify getLastDocumentChange (#2566) - -commit 7d27807ff98956d8284237ffffe3912d46fb6e40 -Author: Sebastian Schmidt -Date: Mon Jan 27 11:53:38 2020 -0800 - - Adding scripts/.js to gitignore (#2575) - -commit da5197cdf7fabfdcc5348bfd51058f75cbac7405 -Author: Shelley Cincotta <48364688+shelcindra@users.noreply.github.com> -Date: Mon Jan 27 14:13:52 2020 -0500 - - Added docData function to documentation. (#2571) - -commit d4ddeaf3a108873b9988837c735d209f36533f31 -Author: Christina Holland -Date: Fri Jan 24 15:03:26 2020 -0800 - - Add tech writer as codeowner for files causing doc changes. (#2573) - -commit 12f9b9b34a2e52aea9c34d7df1a190ab8727c759 -Author: Christina Holland -Date: Fri Jan 24 10:47:54 2020 -0800 - - [testing] Fix bug in check for modified files (#2568) - -commit df0f9c322e24e25bb78055df3023fd33c61bdcfd -Author: Christina Holland -Date: Thu Jan 23 12:46:11 2020 -0800 - - Add TS compile check before tests for core-owned packages (#2515) - -commit ee57d26c10f60fc2b1264dabf96efc4e374eaebf -Author: Christina Holland -Date: Thu Jan 23 09:34:02 2020 -0800 - - Run tests only on changed packages on PR/push (#2565) - -commit d9bf41c5fc58a4feb4bf244550bd9b23bfd2f4a0 -Author: Sebastian Schmidt -Date: Thu Jan 23 09:02:26 2020 -0800 - - Run Firestore Integration tests against mangled sources (#2533) - -commit 5fb352a99bb7f7ccf822325793f42260d5b86957 -Author: Sebastian Schmidt -Date: Wed Jan 22 14:07:14 2020 -0800 - - Use approximate FieldValue size for MemoryLRU (#2548) - -commit 5042f724d72190e075a1c6a87f9be417b1212eff -Author: Sebastian Schmidt -Date: Wed Jan 22 10:05:45 2020 -0800 - - Move ignoreIfPrimaryLeaseLoss to local_store.ts (#2544) - -commit 38876ff950ccabccb58a7b02e5209193ff05dbf9 -Author: Brian Chen -Date: Wed Jan 22 09:37:30 2020 -0800 - - Add changelog for verify (#2562) - -commit 83fed17e1345bb7139f8bcea570aaa3f1587d356 -Author: Mertcan Mermerkaya -Date: Wed Jan 22 17:19:05 2020 +0000 - - Deflake getInstallationEntry tests (#2563) - -commit 01da30b0cea916f58caf47d8b48e7b4bbcd7188e -Author: Jeff -Date: Tue Jan 21 15:14:15 2020 -0800 - - fix fromCache description (#2558) - -commit 0602d9172786d361c86fb502360d708421c190ef -Merge: cfa8a5f0f 329e50c11 -Author: Christina Holland -Date: Tue Jan 21 14:22:30 2020 -0800 - - Merge branch 'release' - Release 7.7.0 - -commit cfa8a5f0f2a08570af73cc75867296acdf162dd6 -Author: Christina Holland -Date: Tue Jan 21 12:53:12 2020 -0800 - - Switch back to user NPM token (#2559) - -commit 9b83ae6c836ffb53a39db0c7de21175eb59c84fa -Author: Sebastian Schmidt -Date: Tue Jan 21 10:56:04 2020 -0800 - - Fix typo (#2542) - -commit 6e45e6a1cbcfa0fae29769fa4b81fc0350186981 -Author: Christina Holland -Date: Fri Jan 17 11:43:47 2020 -0800 - - Switch CI to Github Actions (#2546) - - Switch from Travis CI workflow to Github Actions - -commit 329e50c113f11a0bf2685bceccc08820d0db2603 (tag: rxfire@3.9.8, tag: firebase@7.7.0, tag: @firebase/webchannel-wrapper@0.2.35, tag: @firebase/util@0.2.38, tag: @firebase/testing@0.16.6, tag: @firebase/storage@0.3.24, tag: @firebase/remote-config@0.1.11, tag: @firebase/polyfill@0.3.31, tag: @firebase/performance@0.2.30, tag: @firebase/messaging@0.6.2, tag: @firebase/messaging-types@0.4.1, tag: @firebase/logger@0.1.34, tag: @firebase/installations@0.4.0, tag: @firebase/installations-types@0.3.0, tag: @firebase/functions@0.4.30, tag: @firebase/firestore@1.9.3, tag: @firebase/database@0.5.19, tag: @firebase/component@0.1.3, tag: @firebase/auth@0.13.4, tag: @firebase/auth-types@0.9.4, tag: @firebase/app@0.5.2, tag: @firebase/analytics@0.2.11) -Author: Christina Holland -Date: Thu Jan 16 14:33:42 2020 -0800 - - Publish firebase@7.7.0 - -commit dac17571450aa878b3b62e63be341e9d95d13aac -Author: Michael Lehenbauer -Date: Tue Jan 14 11:12:44 2020 -0800 - - Fix for #1491: Disable use of $httpHeaders in browser extensions too. (#2534) - -commit 00e77c1ff936907040cedeb7d845b02352ebb3b7 -Author: Sebastian Schmidt -Date: Mon Jan 13 14:57:06 2020 -0800 - - Add minified ("mangled") Firestore build (#2495) - -commit 903abce11aa835ee03af2fce9a1e4b5fb5d81aee -Author: James Liu <37026441+zijianjoy@users.noreply.github.com> -Date: Fri Jan 10 16:28:35 2020 -0800 - - Performance Monitoring transport format upgrade from proto2 to proto3 (#2525) - - * Update the Fireperf's log fromat from proto2 to proto3. - - * Add CHANGELOG for Fireperf transport update from proto2 to proto3 (#2492) - - * Add unit tests with the new proto format change. (#2516) - -commit 6ef51fe61284c53c2fe4e3366519ab2e47475802 -Author: Sebastian Schmidt -Date: Thu Jan 9 15:21:14 2020 -0800 - - Add QueryDocumentSnapshot to the internal FirebaseNamespace (#2514) - -commit 7058a53fcc57018abab92d1e585c1b3ce526eec9 -Merge: 18a93e234 e50a4e906 -Author: Christina Holland -Date: Thu Jan 9 14:26:09 2020 -0800 - - Merge branch 'release' - Release 7.6.2 - -commit e50a4e906a135e12e582a53574abb4ab66c44521 (tag: rxfire@3.9.7, tag: firebase@7.6.2, tag: @firebase/util@0.2.37, tag: @firebase/testing@0.16.5, tag: @firebase/storage@0.3.23, tag: @firebase/remote-config@0.1.10, tag: @firebase/performance@0.2.29, tag: @firebase/messaging@0.6.1, tag: @firebase/installations@0.3.9, tag: @firebase/functions@0.4.29, tag: @firebase/firestore@1.9.2, tag: @firebase/database@0.5.18, tag: @firebase/component@0.1.2, tag: @firebase/app@0.5.1, tag: @firebase/analytics@0.2.10) -Author: Christina Holland -Date: Thu Jan 9 14:02:07 2020 -0800 - - Publish firebase@7.6.2 - -commit 18a93e2348343d4cb204d24f3dbfae202e6e57f6 -Author: bojeil-google -Date: Thu Jan 9 13:03:54 2020 -0800 - - Adds missing SAMLAuthProvider constructor. (#2513) - - Fixes https://github.com/firebase/firebaseui-web/issues/663 - -commit e9bf41c8cf3afba397b16e41f800ce5b0369e639 -Author: Michael Lehenbauer -Date: Thu Jan 9 12:57:43 2020 -0800 - - Get closure-library from google-closure-library. (#2509) - - Get closure-library from google-closure-library npm package instead of via closure-builder so we can control the version directly. - -commit f7bf249d5b5182a579bf6424eed98710cfe6239e -Author: Mertcan Mermerkaya -Date: Thu Jan 9 14:03:17 2020 +0200 - - Messaging rewrite (#2484) - -commit 2092cce47751fbc49c18a7de2653d626b07e0898 -Author: Mertcan Mermerkaya -Date: Thu Jan 9 11:48:45 2020 +0200 - - Add onIdChange function to Installations (#2486) - -commit 9c28e7bdfc0486896a42e772e56dd073c80b353a -Author: James Liu <37026441+zijianjoy@users.noreply.github.com> -Date: Wed Jan 8 17:34:55 2020 -0800 - - Initialize transport service in Performance Monitoring when performance() is called. (#2506) - - * Initialize transport service after performance() is called. - - * Run transport service setup only once. - - * Add @ts-ignore and update naming of transportHandler. - - * Remove done() and start transport timer right after component API instance is ready. - -commit 689f0359ebe2bcd7f6916da082658841b08add48 -Author: Christina Holland -Date: Wed Jan 8 16:16:15 2020 -0800 - - Update all non-major dependencies (#2493) - - * Update all non-major dependencies - Co-authored-by: Renovate Bot - -commit ed39dfac536c50d4d3a3ea5feddeec12edf952ca -Author: Sebastian Schmidt -Date: Wed Jan 8 16:12:01 2020 -0800 - - Update integration tests to use firestore.js (#2508) - - This change will allow us to swap out firestore.js for a minified version without having to provide a minified firebase.js - -commit 885e0b3757b752a97e806dfc0e5aafa6efd15872 -Author: Brian Chen -Date: Wed Jan 8 06:16:51 2020 -0800 - - Add verify support (#2436) - -commit 8504da916dcca8be7dce172288cd871a324e9133 -Author: Sebastian Schmidt -Date: Tue Jan 7 15:15:49 2020 -0800 - - Revert: Add Database.Servervalue.increment(x) (#2500) - -commit 0adebf4ac8648315baeb186edcfdc484ada5ab77 -Author: Alex Volkovitsky -Date: Tue Jan 7 13:42:00 2020 -0800 - - Update code owners for emulators (#2494) - -commit 24d74bdd6467346634c9e09cdf0fb1985e602473 -Author: Mertcan Mermerkaya -Date: Tue Jan 7 12:45:56 2020 +0000 - - Make sure notification permissions are granted before calling g… (#2489) - -commit f8d2cc5cf22f9fb308fac97e6b9a46f11b13deb9 -Author: Renovate Bot -Date: Mon Jan 6 23:07:59 2020 +0200 - - Update dependency chromedriver to v79 (#2442) - -commit 4ca6befcf35a8cc5c27dd97eb196188c5e610509 -Author: Renovate Bot -Date: Mon Jan 6 23:02:25 2020 +0200 - - Update dependency nyc to v15 (#2472) - -commit 72a4f3aa50898531c9f378efc91fe48751e1c071 -Author: Renovate Bot -Date: Mon Jan 6 22:59:52 2020 +0200 - - Update dependency sinon to v8 (#2474) - -commit 265fa504e03a93253225c94da464f0f1b9adc380 -Author: Ross Dakin -Date: Mon Jan 6 14:46:38 2020 -0500 - - Remove obsolete reference to ENVIRONMENTS.md (#2479) - - Closing the loop on #1772 - -commit 6104c68c11d5a84c7511572518d7fcb84513a02e -Author: Mertcan Mermerkaya -Date: Mon Jan 6 17:36:34 2020 +0000 - - Fix flaky Installations test (#2490) - -commit af162f975eb160b0d1ab1b64d4cee8e7313e0b68 -Author: Mertcan Mermerkaya -Date: Fri Jan 3 17:03:17 2020 +0000 - - Add test for failed createInstallation in separate request (#2485) - -commit 7250d25145f27ee099dc717a0130c2f8dc9841d2 -Author: Sebastian Schmidt -Date: Fri Dec 27 16:55:46 2019 +0800 - - Add minified integration tests to Firestore (#2448) - -commit 94cf316c46d044dba3cdae29428fda68367e6745 -Author: Sebastian Schmidt -Date: Fri Dec 27 16:07:33 2019 +0800 - - Fix Integration tests against 'minified' sources (#2445) - -commit e4d0455b76bd2181a00acd08d39f83e1092b0618 -Author: Christina Holland -Date: Mon Dec 23 11:45:19 2019 -0800 - - Remove Logger from performance backend log use case (#2460) - -commit 88734fd061df80bc1667aee22132a36cc709ac76 -Author: Michael Lehenbauer -Date: Fri Dec 20 12:19:18 2019 -0800 - - Fix flaky RTDB tests due to increment operations. (#2466) - - The introduction of tests that try to send increment operations to the backend has resulted in test flakiness. Basically the emulator rejects these as invalid operations and closes the connection. The client automatically reconnects, so _usually_ this doesn't matter. But the SDK intentionally doesn't tolerate disconnects in the middle of a transaction, so if the disconnect happens to happen during a transaction test, then the test will fail. - - I'm avoiding the problem by isolating the increment tests better (use an isolated instance of RTDB and ensures it remains offline so it doesn't even try to send the requests to the emulator). - - I've opened b/146657568 to track cleaning this up once the emulator supports increment operations. - -commit 984c1e436f8b98296d5acdcd31a70e40e7912f22 -Author: Michael Lehenbauer -Date: Fri Dec 20 09:57:57 2019 -0800 - - Avoid using $httpHeaders in environments that don't send an Origin header. (#2464) - - There is a backend bug (b/145624756) causing $httpHeaders to be ignored if the HTTP request doesn't have an Origin header. Via https://github.com/firebase/firebase-js-sdk/issues/1491 we've found that several environments are running into this issue so until the backend issue is fixed we are excluding them from using $httpHeaders. This may incur an extra CORS preflight round-trip in some cases, but this is much better than having our Authorization header get ignored. - -commit 82c54981eca4e0297fd3e6190b8116cc35f5fcf5 -Author: Renovate Bot -Date: Fri Dec 20 04:01:05 2019 +0200 - - Update dependency git-rev-sync to v2 (#2462) - -commit 9d28b4aa789734333814ae34481bea0cb48bdf1a -Author: Renovate Bot -Date: Fri Dec 20 03:58:41 2019 +0200 - - Update dependency semver to v7 (#2463) - -commit 37b98e9271c494a0fb58ca1960f8fcfaec49ade9 -Author: Feiyang -Date: Thu Dec 19 17:33:44 2019 -0800 - - Turn on eslint in @firebase/database (#2429) - - * auto fix some database lint issues with eslint - - * fix more lint errors - - * [AUTOMATED]: Prettier Code Styling - - * run lint before test - - * remove unnecessary eslint rules - - * address comments - - * fix some explicit any - - * fix lint errors - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * [AUTOMATED]: Prettier Code Styling - - * move comment location changed by prettier - - * address comments - -commit c0d6c159a50d39a3bf54ee25751dc0e0f8a929a9 (tag: rxfire@3.9.6, tag: firebase@7.6.1, tag: @firebase/testing@0.16.4, tag: @firebase/firestore@1.9.1, tag: @firebase/database@0.5.17) -Author: Feiyang1 -Date: Wed Dec 18 15:12:38 2019 -0800 - - Publish firebase@7.6.1 - -commit 7bb33dcb15354471f63d71c48a0c58996fd25f36 -Author: Feiyang -Date: Tue Dec 17 16:10:40 2019 -0800 - - update lock file (#2451) - -commit 180a8c8395e424b15a065c267a75912a05e6e337 -Merge: 31b0e52e8 b62358385 -Author: Feiyang1 -Date: Tue Dec 17 14:31:29 2019 -0800 - - Merge branch 'release' - -commit 31b0e52e8ff54fab8a9403ad3b5a1a0ebbf10c03 -Author: Feiyang -Date: Tue Dec 17 14:05:20 2019 -0800 - - Fix the compiling errors for firebase-admin (#2447) - - * Fix the compiling errors for firebase-admin - - * update yarn lock - -commit bb1f4dee32dc4ee41066e176378e1b63aa1e1d14 -Author: Sebastian Schmidt -Date: Thu Dec 12 20:06:42 2019 -0800 - - Extract WebStorage schema (#2444) - -commit 19c34c6595c38388ff918e8b97d82d6fd430c0e4 -Author: Christina Holland -Date: Thu Dec 12 15:13:08 2019 -0800 - - Add FirestoreDataConverter to toc files (#2439) - -commit b62358385f815e697075577e5e6be2c071e85526 (tag: rxfire@3.9.5, tag: firebase@7.6.0, tag: @firebase/webchannel-wrapper@0.2.34, tag: @firebase/util@0.2.36, tag: @firebase/testing@0.16.3, tag: @firebase/storage@0.3.22, tag: @firebase/storage-types@0.3.8, tag: @firebase/remote-config@0.1.9, tag: @firebase/remote-config-types@0.1.5, tag: @firebase/polyfill@0.3.30, tag: @firebase/performance@0.2.28, tag: @firebase/performance-types@0.0.8, tag: @firebase/messaging@0.6.0, tag: @firebase/messaging-types@0.4.0, tag: @firebase/logger@0.1.33, tag: @firebase/installations@0.3.8, tag: @firebase/installations-types@0.2.4, tag: @firebase/functions@0.4.28, tag: @firebase/functions-types@0.3.13, tag: @firebase/firestore@1.9.0, tag: @firebase/firestore-types@1.9.0, tag: @firebase/database@0.5.16, tag: @firebase/database-types@0.4.10, tag: @firebase/component@0.1.1, tag: @firebase/auth@0.13.3, tag: @firebase/auth-types@0.9.3, tag: @firebase/auth-interop-types@0.1.1, tag: @firebase/app@0.5.0, tag: @firebase/app-types@0.5.0, tag: @firebase/analytics@0.2.9, tag: @firebase/analytics-types@0.2.5, tag: @firebase/analytics-interop-types@0.1.1) -Author: Christina Holland -Date: Thu Dec 12 13:36:16 2019 -0800 - - Publish firebase@7.6.0 - -commit e0cd8289f3f9ca97b36b6dbfbbe41a76c7bab3aa -Author: Mertcan Mermerkaya -Date: Thu Dec 12 19:37:09 2019 +0000 - - Update Messaging documentation (#2432) - -commit 4905036be90be559cd66cc64ebcd67a280e036cd -Author: Michael Lehenbauer -Date: Thu Dec 12 10:55:48 2019 -0800 - - Fix VS Code launch.json to look for mocha/karma in right location. (#2435) - - Due to aeeaa14361d76d3c06fead95a2fd2359b28ad62e we need to look for mocha / karma in the root node_modules folder instead of relative to packages/firestore. - -commit 627bce6715f402cbd9ce85f9ab19c986bf924136 -Author: Christina Holland -Date: Thu Dec 12 10:16:07 2019 -0800 - - add installations to version logging constants (#2433) - -commit 2ceec159feadda90736aa5c081606cd8d988c76e -Author: Renovate Bot -Date: Tue Dec 10 23:07:13 2019 +0200 - - Update all non-major dependencies (#2374) - -commit 33388aebf7ebd902684b58e42426954e12b26d1d -Author: Christina Holland -Date: Tue Dec 10 11:53:57 2019 -0800 - - Add version reporting for all packages (#2405) - - Add version reporting for all packages plus bundle variant suffix - -commit 85c9f48352e701f634ebf702b3a4ddb5d9892857 -Author: Richie Foreman -Date: Tue Dec 10 14:04:15 2019 -0500 - - Tighten the typing in the Firebase Performance package (#2402) - - * Tighten the typings on Firebase Performance SDK - - * run yarn run v1.21.0 - $ prettier --config .prettierrc --write '**/*.{ts,js}' - config/.eslintrc.js 70ms - config/functions/index.js 47ms - config/karma.base.js 29ms - config/karma.saucelabs.js 42ms - config/webpack.test.js 18ms - integration/browserify/karma.conf.js 10ms - integration/browserify/src/namespace.test.js 7ms - integration/firebase-typings/index.submodules.ts 217ms - integration/firebase-typings/index.ts 9ms - integration/firestore/gulpfile.js 19ms - integration/firestore/karma.conf.js 11ms - integration/messaging/download-browsers.js 9ms - integration/messaging/manual-test-server.js 6ms - integration/messaging/test/static/app.js 23ms - integration/messaging/test/static/firebase-messaging-sw.js 9ms - integration/messaging/test/static/sw-shared.js 5ms - integration/messaging/test/static/valid-no-vapid-key/firebaseConfig.js 8ms - integration/messaging/test/static/valid-no-vapid-key/sw.js 7ms - integration/messaging/test/static/valid-vapid-key/firebaseConfig.js 7ms - integration/messaging/test/static/valid-vapid-key/sw.js 6ms - integration/messaging/test/test-default-sw.js 15ms - integration/messaging/test/test-deleteToken.js 19ms - integration/messaging/test/test-send.js 40ms - integration/messaging/test/test-updateToken.js 14ms - integration/messaging/test/test-valid-manifest.js 10ms - integration/messaging/test/utils/deleteFCMToken.js 7ms - integration/messaging/test/utils/getDemoSetup.js 6ms - integration/messaging/test/utils/getErrors.js 6ms - integration/messaging/test/utils/getFCMToken.js 6ms - integration/messaging/test/utils/getReceivedMessages.js 8ms - integration/messaging/test/utils/makeFCMAPICall.js 8ms - integration/messaging/test/utils/retrieveFCMToken.js 6ms - integration/messaging/test/utils/setupNotificationPermission.js 9ms - integration/messaging/test/utils/test-server.js 11ms - integration/messaging/test/utils/timeForward.js 6ms - integration/shared/validator.js 14ms - integration/typescript/karma.conf.js 7ms - integration/typescript/test/namespace.test.ts 10ms - integration/typescript/test/typings.d.ts 9ms - integration/webpack/karma.conf.js 7ms - integration/webpack/src/namespace.test.js 6ms - integration/webpack/webpack.config.js 5ms - packages/analytics-interop-types/index.d.ts 11ms - packages/analytics-types/index.d.ts 26ms - packages/analytics/.eslintrc.js 5ms - packages/analytics/index.test.ts 40ms - packages/analytics/index.ts 19ms - packages/analytics/karma.conf.js 6ms - packages/analytics/rollup.config.js 10ms - packages/analytics/src/constants.ts 8ms - packages/analytics/src/errors.ts 8ms - packages/analytics/src/factory.ts 21ms - packages/analytics/src/functions.test.ts 30ms - packages/analytics/src/functions.ts 18ms - packages/analytics/src/helpers.test.ts 95ms - packages/analytics/src/helpers.ts 30ms - packages/analytics/testing/get-fake-firebase-services.ts 10ms - packages/analytics/testing/gtag-script-util.ts 6ms - packages/analytics/testing/setup.ts 5ms - packages/app-types/index.d.ts 10ms - packages/app-types/private.d.ts 16ms - packages/app/.eslintrc.js 5ms - packages/app/index.lite.ts 5ms - packages/app/index.node.ts 6ms - packages/app/index.rn.ts 6ms - packages/app/index.ts 9ms - packages/app/karma.conf.js 6ms - packages/app/rollup.config.js 14ms - packages/app/src/constants.ts 11ms - packages/app/src/errors.ts 10ms - packages/app/src/firebaseApp.ts 22ms - packages/app/src/firebaseNamespace.ts 8ms - packages/app/src/firebaseNamespaceCore.ts 32ms - packages/app/src/lite/firebaseAppLite.ts 22ms - packages/app/src/lite/firebaseNamespaceLite.ts 9ms - packages/app/src/logger.ts 6ms - packages/app/src/platformLoggerService.ts 8ms - packages/app/src/registerCoreComponents.ts 6ms - packages/app/test/firebaseApp.test.ts 72ms - packages/app/test/platformLogger.test.ts 24ms - packages/app/test/setup.ts 10ms - packages/auth-interop-types/index.d.ts 7ms - packages/auth-types/index.d.ts 54ms - packages/component/.eslintrc.js 5ms - packages/component/index.ts 5ms - packages/component/karma.conf.js 6ms - packages/component/rollup.config.js 8ms - packages/component/src/component_container.test.ts 17ms - packages/component/src/component_container.ts 11ms - packages/component/src/component.ts 8ms - packages/component/src/constants.ts 4ms - packages/component/src/provider.test.ts 60ms - packages/component/src/provider.ts 23ms - packages/component/src/types.ts 7ms - packages/component/test/setup.ts 5ms - packages/component/test/util.ts 8ms - packages/database-types/index.d.ts 18ms - packages/database/index.node.ts 12ms - packages/database/index.ts 10ms - packages/database/karma.conf.js 6ms - packages/database/rollup.config.js 9ms - packages/database/src/api/Database.ts 17ms - packages/database/src/api/DataSnapshot.ts 16ms - packages/database/src/api/internal.ts 8ms - packages/database/src/api/onDisconnect.ts 16ms - packages/database/src/api/Query.ts 64ms - packages/database/src/api/Reference.ts 44ms - packages/database/src/api/test_access.ts 9ms - packages/database/src/api/TransactionResult.ts 6ms - packages/database/src/core/AuthTokenProvider.ts 13ms - packages/database/src/core/CompoundWrite.ts 18ms - packages/database/src/core/operation/AckUserWrite.ts 11ms - packages/database/src/core/operation/ListenComplete.ts 6ms - packages/database/src/core/operation/Merge.ts 10ms - packages/database/src/core/operation/Operation.ts 9ms - packages/database/src/core/operation/Overwrite.ts 7ms - packages/database/src/core/PersistentConnection.ts 141ms - packages/database/src/core/ReadonlyRestClient.ts 40ms - packages/database/src/core/Repo_transaction.ts 66ms - packages/database/src/core/Repo.ts 67ms - packages/database/src/core/RepoInfo.ts 14ms - packages/database/src/core/RepoManager.ts 14ms - packages/database/src/core/ServerActions.ts 12ms - packages/database/src/core/snap/ChildrenNode.ts 55ms - packages/database/src/core/snap/childSet.ts 24ms - packages/database/src/core/snap/comparators.ts 5ms - packages/database/src/core/snap/indexes/Index.ts 8ms - packages/database/src/core/snap/indexes/KeyIndex.ts 9ms - packages/database/src/core/snap/indexes/PathIndex.ts 10ms - packages/database/src/core/snap/indexes/PriorityIndex.ts 10ms - packages/database/src/core/snap/indexes/ValueIndex.ts 8ms - packages/database/src/core/snap/IndexMap.ts 22ms - packages/database/src/core/snap/LeafNode.ts 19ms - packages/database/src/core/snap/Node.ts 10ms - packages/database/src/core/snap/nodeFromJSON.ts 16ms - packages/database/src/core/snap/snap.ts 8ms - packages/database/src/core/SnapshotHolder.ts 5ms - packages/database/src/core/SparseSnapshotTree.ts 14ms - packages/database/src/core/stats/StatsCollection.ts 5ms - packages/database/src/core/stats/StatsListener.ts 6ms - packages/database/src/core/stats/StatsManager.ts 6ms - packages/database/src/core/stats/StatsReporter.ts 8ms - packages/database/src/core/storage/DOMStorageWrapper.ts 9ms - packages/database/src/core/storage/MemoryStorage.ts 5ms - packages/database/src/core/storage/storage.ts 7ms - packages/database/src/core/SyncPoint.ts 19ms - packages/database/src/core/SyncTree.ts 76ms - packages/database/src/core/util/EventEmitter.ts 16ms - packages/database/src/core/util/ImmutableTree.ts 42ms - packages/database/src/core/util/libs/parser.ts 21ms - packages/database/src/core/util/NextPushId.ts 14ms - packages/database/src/core/util/OnlineMonitor.ts 13ms - packages/database/src/core/util/Path.ts 33ms - packages/database/src/core/util/ServerValues.ts 19ms - packages/database/src/core/util/SortedMap.ts 82ms - packages/database/src/core/util/Tree.ts 25ms - packages/database/src/core/util/util.ts 53ms - packages/database/src/core/util/validation.ts 37ms - packages/database/src/core/util/VisibilityMonitor.ts 10ms - packages/database/src/core/version.ts 5ms - packages/database/src/core/view/CacheNode.ts 7ms - packages/database/src/core/view/Change.ts 11ms - packages/database/src/core/view/ChildChangeAccumulator.ts 13ms - packages/database/src/core/view/CompleteChildSource.ts 10ms - packages/database/src/core/view/Event.ts 11ms - packages/database/src/core/view/EventGenerator.ts 13ms - packages/database/src/core/view/EventQueue.ts 20ms - packages/database/src/core/view/EventRegistration.ts 23ms - packages/database/src/core/view/filter/IndexedFilter.ts 27ms - packages/database/src/core/view/filter/LimitedFilter.ts 42ms - packages/database/src/core/view/filter/NodeFilter.ts 9ms - packages/database/src/core/view/filter/RangedFilter.ts 20ms - packages/database/src/core/view/QueryParams.ts 62ms - packages/database/src/core/view/View.ts 27ms - packages/database/src/core/view/ViewCache.ts 10ms - packages/database/src/core/view/ViewProcessor.ts 57ms - packages/database/src/core/WriteTree.ts 44ms - packages/database/src/realtime/BrowserPollConnection.ts 48ms - packages/database/src/realtime/Connection.ts 44ms - packages/database/src/realtime/Constants.ts 6ms - packages/database/src/realtime/polling/PacketReceiver.ts 9ms - packages/database/src/realtime/Transport.ts 9ms - packages/database/src/realtime/TransportManager.ts 8ms - packages/database/src/realtime/WebSocketConnection.ts 29ms - packages/database/test/browser/crawler_support.test.ts 27ms - packages/database/test/compound_write.test.ts 54ms - packages/database/test/connection.test.ts 8ms - packages/database/test/database.test.ts 23ms - packages/database/test/datasnapshot.test.ts 50ms - packages/database/test/helpers/EventAccumulator.ts 8ms - packages/database/test/helpers/events.ts 21ms - packages/database/test/helpers/util.ts 22ms - packages/database/test/info.test.ts 21ms - packages/database/test/node.test.ts 43ms - packages/database/test/order_by.test.ts 40ms - packages/database/test/order.test.ts 57ms - packages/database/test/path.test.ts 14ms - packages/database/test/promise.test.ts 31ms - packages/database/test/query.test.ts 443ms - packages/database/test/repoinfo.test.ts 38ms - packages/database/test/servervalues.test.ts 15ms - packages/database/test/sortedmap.test.ts 57ms - packages/database/test/sparsesnapshottree.test.ts 30ms - packages/database/test/transaction.test.ts 155ms - packages/firebase/analytics/index.ts 5ms - packages/firebase/app/index.ts 5ms - packages/firebase/auth/index.ts 5ms - packages/firebase/database/index.ts 5ms - packages/firebase/empty-import.d.ts 5ms - packages/firebase/externs/firebase-app-externs.js 12ms - packages/firebase/externs/firebase-app-internal-externs.js 10ms - packages/firebase/externs/firebase-auth-externs.js 47ms - packages/firebase/externs/firebase-client-auth-externs.js 10ms - packages/firebase/externs/firebase-database-externs.js 20ms - packages/firebase/externs/firebase-database-internal-externs.js 6ms - packages/firebase/externs/firebase-error-externs.js 5ms - packages/firebase/externs/firebase-externs.js 6ms - packages/firebase/externs/firebase-firestore-externs.js 30ms - packages/firebase/externs/firebase-messaging-externs.js 6ms - packages/firebase/externs/firebase-storage-externs.js 17ms - packages/firebase/firestore/index.ts 5ms - packages/firebase/functions/index.ts 5ms - packages/firebase/index.d.ts 229ms - packages/firebase/installations/index.ts 5ms - packages/firebase/messaging/index.ts 4ms - packages/firebase/performance/index.ts 4ms - packages/firebase/remote-config/index.ts 4ms - packages/firebase/rollup-internal.config.js 11ms - packages/firebase/rollup.config.js 20ms - packages/firebase/src/index.cdn.ts 7ms - packages/firebase/src/index.node.ts 5ms - packages/firebase/src/index.perf.ts 5ms - packages/firebase/src/index.rn.ts 5ms - packages/firebase/src/index.ts 6ms - packages/firebase/storage/index.ts 4ms - packages/firestore-types/index.d.ts 29ms - packages/firestore/.eslintrc.js 5ms - packages/firestore/index.console.ts 4ms - packages/firestore/index.node.ts 7ms - packages/firestore/index.ts 9ms - packages/firestore/karma.conf.js 8ms - packages/firestore/rollup.config.js 11ms - packages/firestore/src/api/blob.ts 13ms - packages/firestore/src/api/credentials.ts 31ms - packages/firestore/src/api/database.ts 207ms - packages/firestore/src/api/field_path.ts 15ms - packages/firestore/src/api/field_value.ts 9ms - packages/firestore/src/api/geo_point.ts 8ms - packages/firestore/src/api/observer.ts 8ms - packages/firestore/src/api/timestamp.ts 9ms - packages/firestore/src/api/user_data_converter.ts 59ms - packages/firestore/src/auth/user.ts 8ms - packages/firestore/src/core/database_info.ts 9ms - packages/firestore/src/core/event_manager.ts 22ms - packages/firestore/src/core/firestore_client.ts 39ms - packages/firestore/src/core/listen_sequence.ts 7ms - packages/firestore/src/core/query.ts 64ms - packages/firestore/src/core/snapshot_version.ts 9ms - packages/firestore/src/core/sync_engine.ts 85ms - packages/firestore/src/core/target_id_generator.ts 12ms - packages/firestore/src/core/target.ts 14ms - packages/firestore/src/core/transaction_runner.ts 14ms - packages/firestore/src/core/transaction.ts 15ms - packages/firestore/src/core/types.ts 6ms - packages/firestore/src/core/version.ts 8ms - packages/firestore/src/core/view_snapshot.ts 17ms - packages/firestore/src/core/view.ts 32ms - packages/firestore/src/local/encoded_resource_path.ts 13ms - packages/firestore/src/local/index_free_query_engine.ts 13ms - packages/firestore/src/local/index_manager.ts 7ms - packages/firestore/src/local/indexeddb_index_manager.ts 10ms - packages/firestore/src/local/indexeddb_mutation_queue.ts 61ms - packages/firestore/src/local/indexeddb_persistence.ts 98ms - packages/firestore/src/local/indexeddb_remote_document_cache.ts 43ms - packages/firestore/src/local/indexeddb_schema.ts 53ms - packages/firestore/src/local/indexeddb_target_cache.ts 36ms - packages/firestore/src/local/local_documents_view.ts 21ms - packages/firestore/src/local/local_serializer.ts 21ms - packages/firestore/src/local/local_store.ts 82ms - packages/firestore/src/local/local_view_changes.ts 11ms - packages/firestore/src/local/lru_garbage_collector.ts 41ms - packages/firestore/src/local/memory_index_manager.ts 11ms - packages/firestore/src/local/memory_mutation_queue.ts 38ms - packages/firestore/src/local/memory_persistence.ts 38ms - packages/firestore/src/local/memory_remote_document_cache.ts 18ms - packages/firestore/src/local/memory_target_cache.ts 18ms - packages/firestore/src/local/mutation_queue.ts 9ms - packages/firestore/src/local/persistence_promise.ts 27ms - packages/firestore/src/local/persistence.ts 12ms - packages/firestore/src/local/query_engine.ts 5ms - packages/firestore/src/local/reference_set.ts 17ms - packages/firestore/src/local/remote_document_cache.ts 7ms - packages/firestore/src/local/remote_document_change_buffer.ts 11ms - packages/firestore/src/local/shared_client_state_syncer.ts 6ms - packages/firestore/src/local/shared_client_state.ts 70ms - packages/firestore/src/local/simple_db.ts 55ms - packages/firestore/src/local/simple_query_engine.ts 7ms - packages/firestore/src/local/target_cache.ts 12ms - packages/firestore/src/local/target_data.ts 9ms - packages/firestore/src/model/collections.ts 9ms - packages/firestore/src/model/document_comparator.ts 4ms - packages/firestore/src/model/document_key.ts 8ms - packages/firestore/src/model/document_set.ts 13ms - packages/firestore/src/model/document.ts 20ms - packages/firestore/src/model/field_value.ts 48ms - packages/firestore/src/model/mutation_batch.ts 14ms - packages/firestore/src/model/mutation.ts 39ms - packages/firestore/src/model/path.ts 24ms - packages/firestore/src/model/transform_operation.ts 17ms - packages/firestore/src/platform_browser/browser_connectivity_monitor.ts 8ms - packages/firestore/src/platform_browser/browser_init.ts 5ms - packages/firestore/src/platform_browser/browser_platform.ts 7ms - packages/firestore/src/platform_browser/webchannel_connection.ts 29ms - packages/firestore/src/platform_node/grpc_connection.ts 21ms - packages/firestore/src/platform_node/load_protos.ts 8ms - packages/firestore/src/platform_node/node_init.ts 4ms - packages/firestore/src/platform_node/node_platform.ts 11ms - packages/firestore/src/platform/config.ts 8ms - packages/firestore/src/platform/config/goog_module_config.ts 6ms - packages/firestore/src/platform/platform.ts 8ms - packages/firestore/src/protos/firestore_proto_api.d.ts 80ms - packages/firestore/src/remote/backoff.ts 11ms - packages/firestore/src/remote/connection.ts 7ms - packages/firestore/src/remote/connectivity_monitor_noop.ts 5ms - packages/firestore/src/remote/connectivity_monitor.ts 6ms - packages/firestore/src/remote/datastore.ts 13ms - packages/firestore/src/remote/existence_filter.ts 5ms - packages/firestore/src/remote/online_state_tracker.ts 12ms - packages/firestore/src/remote/persistent_stream.ts 38ms - packages/firestore/src/remote/remote_event.ts 8ms - packages/firestore/src/remote/remote_store.ts 41ms - packages/firestore/src/remote/remote_syncer.ts 12ms - packages/firestore/src/remote/rpc_error.ts 16ms - packages/firestore/src/remote/serializer.ts 126ms - packages/firestore/src/remote/stream_bridge.ts 9ms - packages/firestore/src/remote/watch_change.ts 43ms - packages/firestore/src/util/api.ts 6ms - packages/firestore/src/util/array.ts 6ms - packages/firestore/src/util/assert.ts 5ms - packages/firestore/src/util/async_observer.ts 6ms - packages/firestore/src/util/async_queue.ts 26ms - packages/firestore/src/util/error.ts 9ms - packages/firestore/src/util/input_validation.ts 26ms - packages/firestore/src/util/log.ts 8ms - packages/firestore/src/util/misc.ts 14ms - packages/firestore/src/util/node_api.ts 6ms - packages/firestore/src/util/obj_map.ts 11ms - packages/firestore/src/util/obj.ts 12ms - packages/firestore/src/util/promise.ts 7ms - packages/firestore/src/util/sorted_map.ts 50ms - packages/firestore/src/util/sorted_set.ts 18ms - packages/firestore/src/util/types.ts 8ms - packages/firestore/test/integration/api_internal/idle_timeout.test.ts 8ms - packages/firestore/test/integration/api/array_transforms.test.ts 26ms - packages/firestore/test/integration/api/batch_writes.test.ts 32ms - packages/firestore/test/integration/api/cursor.test.ts 83ms - packages/firestore/test/integration/api/database.test.ts 149ms - packages/firestore/test/integration/api/fields.test.ts 40ms - packages/firestore/test/integration/api/get_options.test.ts 62ms - packages/firestore/test/integration/api/numeric_transforms.test.ts 24ms - packages/firestore/test/integration/api/query.test.ts 85ms - packages/firestore/test/integration/api/server_timestamp.test.ts 29ms - packages/firestore/test/integration/api/smoke.test.ts 17ms - packages/firestore/test/integration/api/transactions.test.ts 66ms - packages/firestore/test/integration/api/type.test.ts 14ms - packages/firestore/test/integration/api/validation.test.ts 130ms - packages/firestore/test/integration/bootstrap.ts 6ms - packages/firestore/test/integration/browser/indexeddb.test.ts 8ms - packages/firestore/test/integration/browser/webchannel.test.ts 10ms - packages/firestore/test/integration/prime_backend.test.ts 12ms - packages/firestore/test/integration/remote/remote.test.ts 34ms - packages/firestore/test/integration/remote/stream.test.ts 53ms - packages/firestore/test/integration/util/events_accumulator.ts 22ms - packages/firestore/test/integration/util/firebase_export.ts 4ms - packages/firestore/test/integration/util/helpers.ts 42ms - packages/firestore/test/integration/util/internal_helpers.ts 11ms - packages/firestore/test/unit/api/blob.test.ts 13ms - packages/firestore/test/unit/api/database.test.ts 19ms - packages/firestore/test/unit/api/document_change.test.ts 19ms - packages/firestore/test/unit/api/field_path.test.ts 5ms - packages/firestore/test/unit/api/field_value.test.ts 5ms - packages/firestore/test/unit/api/geo_point.test.ts 11ms - packages/firestore/test/unit/api/timestamp.test.ts 5ms - packages/firestore/test/unit/bootstrap.ts 8ms - packages/firestore/test/unit/core/event_manager.test.ts 53ms - packages/firestore/test/unit/core/listen_sequence.test.ts 7ms - packages/firestore/test/unit/core/query.test.ts 73ms - packages/firestore/test/unit/core/target_id_generator.test.ts 9ms - packages/firestore/test/unit/core/view.test.ts 61ms - packages/firestore/test/unit/generate_spec_json.js 11ms - packages/firestore/test/unit/local/counting_query_engine.ts 12ms - packages/firestore/test/unit/local/encoded_resource_path.test.ts 19ms - packages/firestore/test/unit/local/index_free_query_engine.test.ts 40ms - packages/firestore/test/unit/local/index_manager.test.ts 9ms - packages/firestore/test/unit/local/indexeddb_persistence.test.ts 93ms - packages/firestore/test/unit/local/local_store.test.ts 193ms - packages/firestore/test/unit/local/lru_garbage_collector.test.ts 78ms - packages/firestore/test/unit/local/mutation_queue.test.ts 30ms - packages/firestore/test/unit/local/persistence_promise.test.ts 23ms - packages/firestore/test/unit/local/persistence_test_helpers.ts 15ms - packages/firestore/test/unit/local/persistence_transaction.test.ts 14ms - packages/firestore/test/unit/local/reference_set.test.ts 10ms - packages/firestore/test/unit/local/remote_document_cache.test.ts 37ms - packages/firestore/test/unit/local/remote_document_change_buffer.test.ts 13ms - packages/firestore/test/unit/local/simple_db.test.ts 54ms - packages/firestore/test/unit/local/target_cache.test.ts 30ms - packages/firestore/test/unit/local/test_index_manager.ts 6ms - packages/firestore/test/unit/local/test_mutation_queue.ts 14ms - packages/firestore/test/unit/local/test_remote_document_cache.ts 13ms - packages/firestore/test/unit/local/test_remote_document_change_buffer.ts 7ms - packages/firestore/test/unit/local/test_target_cache.ts 12ms - packages/firestore/test/unit/local/web_storage_shared_client_state.test.ts 60ms - packages/firestore/test/unit/model/document_set.test.ts 13ms - packages/firestore/test/unit/model/document.test.ts 9ms - packages/firestore/test/unit/model/field_value.test.ts 72ms - packages/firestore/test/unit/model/mutation.test.ts 57ms - packages/firestore/test/unit/model/path.test.ts 21ms - packages/firestore/test/unit/platform/platform.test.ts 4ms - packages/firestore/test/unit/remote/node/serializer.test.ts 103ms - packages/firestore/test/unit/remote/remote_event.test.ts 71ms - packages/firestore/test/unit/specs/collection_spec.test.ts 9ms - packages/firestore/test/unit/specs/describe_spec.ts 22ms - packages/firestore/test/unit/specs/existence_filter_spec.test.ts 40ms - packages/firestore/test/unit/specs/limbo_spec.test.ts 66ms - packages/firestore/test/unit/specs/limit_spec.test.ts 49ms - packages/firestore/test/unit/specs/listen_spec.test.ts 133ms - packages/firestore/test/unit/specs/offline_spec.test.ts 18ms - packages/firestore/test/unit/specs/orderby_spec.test.ts 9ms - packages/firestore/test/unit/specs/perf_spec.test.ts 27ms - packages/firestore/test/unit/specs/persistence_spec.test.ts 22ms - packages/firestore/test/unit/specs/query_spec.test.ts 14ms - packages/firestore/test/unit/specs/remote_store_spec.test.ts 12ms - packages/firestore/test/unit/specs/resume_token_spec.test.ts 7ms - packages/firestore/test/unit/specs/spec_builder.ts 80ms - packages/firestore/test/unit/specs/spec_rpc_error.ts 13ms - packages/firestore/test/unit/specs/spec_test_runner.ts 103ms - packages/firestore/test/unit/specs/write_spec.test.ts 104ms - packages/firestore/test/unit/util/api.test.ts 8ms - packages/firestore/test/unit/util/async_queue.test.ts 23ms - packages/firestore/test/unit/util/misc.test.ts 5ms - packages/firestore/test/unit/util/node_api.test.ts 6ms - packages/firestore/test/unit/util/obj_map.test.ts 14ms - packages/firestore/test/unit/util/sorted_map.test.ts 40ms - packages/firestore/test/unit/util/sorted_set.test.ts 18ms - packages/firestore/test/util/api_helpers.ts 11ms - packages/firestore/test/util/equality_matcher.ts 11ms - packages/firestore/test/util/helpers.ts 72ms - packages/firestore/test/util/node_persistence.ts 6ms - packages/firestore/test/util/promise.ts 6ms - packages/firestore/test/util/test_platform.ts 21ms - packages/firestore/tools/console.build.js 9ms - packages/functions-types/index.d.ts 7ms - packages/functions/.eslintrc.js 4ms - packages/functions/index.node.ts 5ms - packages/functions/index.ts 5ms - packages/functions/karma.conf.js 5ms - packages/functions/rollup.config.js 9ms - packages/functions/src/api/error.ts 11ms - packages/functions/src/api/service.ts 16ms - packages/functions/src/config.ts 7ms - packages/functions/src/context.ts 9ms - packages/functions/src/serializer.ts 10ms - packages/functions/test/browser/callable.test.ts 7ms - packages/functions/test/callable.test.ts 16ms - packages/functions/test/serializer.test.ts 13ms - packages/functions/test/service.test.ts 6ms - packages/functions/test/utils.ts 6ms - packages/installations-types/index.d.ts 5ms - packages/installations/.eslintrc.js 5ms - packages/installations/karma.conf.js 5ms - packages/installations/rollup.config.js 8ms - packages/installations/src/api/common.test.ts 9ms - packages/installations/src/api/common.ts 12ms - packages/installations/src/api/create-installation.test.ts 12ms - packages/installations/src/api/create-installation.ts 6ms - packages/installations/src/api/delete-installation.test.ts 11ms - packages/installations/src/api/delete-installation.ts 6ms - packages/installations/src/api/generate-auth-token.test.ts 11ms - packages/installations/src/api/generate-auth-token.ts 7ms - packages/installations/src/functions/delete-installation.test.ts 12ms - packages/installations/src/functions/delete-installation.ts 6ms - packages/installations/src/functions/get-id.test.ts 9ms - packages/installations/src/functions/get-id.ts 6ms - packages/installations/src/functions/get-token.test.ts 29ms - packages/installations/src/functions/get-token.ts 6ms - packages/installations/src/functions/index.ts 5ms - packages/installations/src/helpers/buffer-to-base64-url-safe.test.ts 5ms - packages/installations/src/helpers/buffer-to-base64-url-safe.ts 4ms - packages/installations/src/helpers/extract-app-config.test.ts 7ms - packages/installations/src/helpers/extract-app-config.ts 6ms - packages/installations/src/helpers/generate-fid.test.ts 14ms - packages/installations/src/helpers/generate-fid.ts 7ms - packages/installations/src/helpers/get-installation-entry.test.ts 45ms - packages/installations/src/helpers/get-installation-entry.ts 15ms - packages/installations/src/helpers/idb-manager.test.ts 13ms - packages/installations/src/helpers/idb-manager.ts 11ms - packages/installations/src/helpers/refresh-auth-token.test.ts 20ms - packages/installations/src/helpers/refresh-auth-token.ts 15ms - packages/installations/src/index.ts 7ms - packages/installations/src/interfaces/api-response.ts 4ms - packages/installations/src/interfaces/app-config.ts 5ms - packages/installations/src/interfaces/installation-entry.ts 7ms - packages/installations/src/testing/compare-headers.test.ts 7ms - packages/installations/src/testing/compare-headers.ts 6ms - packages/installations/src/testing/get-fake-app.ts 5ms - packages/installations/src/testing/setup.ts 5ms - packages/installations/src/util/constants.ts 5ms - packages/installations/src/util/errors.ts 8ms - packages/installations/src/util/sleep.test.ts 6ms - packages/installations/src/util/sleep.ts 5ms - packages/installations/test-app/index.js 12ms - packages/installations/test-app/rollup.config.js 6ms - packages/logger/.eslintrc.js 4ms - packages/logger/index.ts 5ms - packages/logger/karma.conf.js 6ms - packages/logger/rollup.config.js 8ms - packages/logger/src/logger.ts 14ms - packages/logger/test/logger.test.ts 10ms - packages/messaging-types/index.d.ts 7ms - packages/messaging/.eslintrc.js 5ms - packages/messaging/index.ts 9ms - packages/messaging/karma.conf.js 5ms - packages/messaging/rollup.config.js 9ms - packages/messaging/src/controllers/base-controller.ts 25ms - packages/messaging/src/controllers/sw-controller.ts 25ms - packages/messaging/src/controllers/sw-types.ts 9ms - packages/messaging/src/controllers/window-controller.ts 19ms - packages/messaging/src/helpers/array-buffer-to-base64.ts 6ms - packages/messaging/src/helpers/base64-to-array-buffer.ts 6ms - packages/messaging/src/helpers/is-array-buffer-equal.ts 6ms - packages/messaging/src/interfaces/internal-services.ts 4ms - packages/messaging/src/interfaces/message-payload.ts 8ms - packages/messaging/src/interfaces/token-details.ts 5ms - packages/messaging/src/interfaces/vapid-details.ts 4ms - packages/messaging/src/models/clean-v1-undefined.ts 9ms - packages/messaging/src/models/db-interface.ts 13ms - packages/messaging/src/models/default-sw.ts 4ms - packages/messaging/src/models/errors.ts 10ms - packages/messaging/src/models/fcm-details.ts 7ms - packages/messaging/src/models/subscription-manager.ts 19ms - packages/messaging/src/models/token-details-model.ts 21ms - packages/messaging/src/models/vapid-details-model.ts 11ms - packages/messaging/src/models/worker-page-message.ts 12ms - packages/messaging/test/constructor.test.ts 10ms - packages/messaging/test/controller-delete-token.test.ts 30ms - packages/messaging/test/controller-get-token.test.ts 73ms - packages/messaging/test/controller-interface.test.ts 27ms - packages/messaging/test/db-interface.test.ts 12ms - packages/messaging/test/get-sw-reg.test.ts 15ms - packages/messaging/test/helpers.test.ts 14ms - packages/messaging/test/index.test.ts 11ms - packages/messaging/test/subscription-manager.test.ts 40ms - packages/messaging/test/sw-controller.test.ts 99ms - packages/messaging/test/testing-utils/db-helper.ts 10ms - packages/messaging/test/testing-utils/detail-comparator.ts 9ms - packages/messaging/test/testing-utils/make-fake-firebase-services.ts 9ms - packages/messaging/test/testing-utils/make-fake-subscription.ts 8ms - packages/messaging/test/testing-utils/make-fake-sw-reg.ts 8ms - packages/messaging/test/testing-utils/mock-fetch.ts 7ms - packages/messaging/test/token-details-model.test.ts 26ms - packages/messaging/test/vapid-details-model.test.ts 13ms - packages/messaging/test/window-controller.test.ts 27ms - packages/performance-types/index.d.ts 8ms - packages/performance/.eslintrc.js 5ms - packages/performance/index.ts 8ms - packages/performance/karma.conf.js 6ms - packages/performance/rollup.config.js 10ms - packages/performance/src/constants.ts 5ms - packages/performance/src/controllers/perf.test.ts 12ms - packages/performance/src/controllers/perf.ts 6ms - packages/performance/src/resources/network_request.test.ts 8ms - packages/performance/src/resources/network_request.ts 7ms - packages/performance/src/resources/trace.test.ts 26ms - packages/performance/src/resources/trace.ts 24ms - packages/performance/src/services/api_service.test.ts 10ms - packages/performance/src/services/api_service.ts 14ms - packages/performance/src/services/cc_service.test.ts 9ms - packages/performance/src/services/cc_service.ts 12ms - packages/performance/src/services/iid_service.test.ts 7ms - packages/performance/src/services/iid_service.ts 6ms - packages/performance/src/services/initialization_service.test.ts 7ms - packages/performance/src/services/initialization_service.ts 8ms - packages/performance/src/services/oob_resources_service.test.ts 14ms - packages/performance/src/services/oob_resources_service.ts 8ms - packages/performance/src/services/perf_logger.test.ts 15ms - packages/performance/src/services/perf_logger.ts 22ms - packages/performance/src/services/remote_config_service.test.ts 21ms - packages/performance/src/services/remote_config_service.ts 18ms - packages/performance/src/services/settings_service.ts 9ms - packages/performance/src/utils/attribute_utils.test.ts 14ms - packages/performance/src/utils/attributes_utils.ts 9ms - packages/performance/src/utils/console_logger.ts 5ms - packages/performance/src/utils/errors.ts 7ms - packages/performance/src/utils/metric_utils.test.ts 7ms - packages/performance/src/utils/metric_utils.ts 5ms - packages/performance/test/setup.ts 4ms - packages/polyfill/index.ts 4ms - packages/polyfill/rollup.config.js 6ms - packages/remote-config-types/index.d.ts 8ms - packages/remote-config/.eslintrc.js 4ms - packages/remote-config/index.ts 9ms - packages/remote-config/karma.conf.js 5ms - packages/remote-config/rollup.config.js 7ms - packages/remote-config/src/client/caching_client.ts 10ms - packages/remote-config/src/client/exponential_backoff.ts 6ms - packages/remote-config/src/client/remote_config_fetch_client.ts 7ms - packages/remote-config/src/client/rest_client.ts 13ms - packages/remote-config/src/client/retrying_client.ts 10ms - packages/remote-config/src/errors.ts 9ms - packages/remote-config/src/language.ts 5ms - packages/remote-config/src/remote_config.ts 17ms - packages/remote-config/src/storage/storage_cache.ts 8ms - packages/remote-config/src/storage/storage.ts 22ms - packages/remote-config/src/value.ts 8ms - packages/remote-config/test_app/index.js 27ms - packages/remote-config/test/client/caching_client.test.ts 18ms - packages/remote-config/test/client/exponential_backoff.test.ts 8ms - packages/remote-config/test/client/rest_client.test.ts 24ms - packages/remote-config/test/client/retrying_client.test.ts 18ms - packages/remote-config/test/errors.test.ts 25ms - packages/remote-config/test/language.test.ts 6ms - packages/remote-config/test/remote_config.test.ts 40ms - packages/remote-config/test/setup.ts 5ms - packages/remote-config/test/storage/storage_cache.test.ts 9ms - packages/remote-config/test/storage/storage.test.ts 10ms - packages/remote-config/test/value.test.ts 10ms - packages/rxfire/.eslintrc.js 5ms - packages/rxfire/auth/index.ts 7ms - packages/rxfire/database/fromRef.ts 6ms - packages/rxfire/database/index.ts 5ms - packages/rxfire/database/interfaces.ts 5ms - packages/rxfire/database/list/audit-trail.ts 11ms - packages/rxfire/database/list/index.ts 27ms - packages/rxfire/database/object/index.ts 15ms - packages/rxfire/database/utils.ts 5ms - packages/rxfire/firestore/collection/index.ts 18ms - packages/rxfire/firestore/document/index.ts 11ms - packages/rxfire/firestore/fromRef.ts 7ms - packages/rxfire/firestore/index.ts 5ms - packages/rxfire/functions/index.ts 6ms - packages/rxfire/karma.conf.js 6ms - packages/rxfire/rollup.config.js 9ms - packages/rxfire/rxfire-auth.js 8ms - packages/rxfire/rxfire-database.js 23ms - packages/rxfire/rxfire-firestore.js 23ms - packages/rxfire/rxfire-functions.js 5ms - packages/rxfire/rxfire-storage.js 8ms - packages/rxfire/storage/index.ts 9ms - packages/rxfire/test/database.test.ts 67ms - packages/rxfire/test/firestore.test.ts 31ms - packages/storage-types/index.d.ts 14ms - packages/storage/.eslintrc.js 5ms - packages/storage/index.ts 9ms - packages/storage/karma.conf.js 6ms - packages/storage/rollup.config.js 9ms - packages/storage/src/implementation/args.ts 17ms - packages/storage/src/implementation/async.ts 5ms - packages/storage/src/implementation/authwrapper.ts 13ms - packages/storage/src/implementation/backoff.ts 10ms - packages/storage/src/implementation/blob.ts 36ms - packages/storage/src/implementation/blobbuilder.d.ts 6ms - packages/storage/src/implementation/constants.ts 5ms - packages/storage/src/implementation/error.ts 19ms - packages/storage/src/implementation/failrequest.ts 6ms - packages/storage/src/implementation/fs.ts 8ms - packages/storage/src/implementation/json.ts 7ms - packages/storage/src/implementation/list.ts 11ms - packages/storage/src/implementation/location.ts 11ms - packages/storage/src/implementation/metadata.ts 20ms - packages/storage/src/implementation/observer.ts 9ms - packages/storage/src/implementation/path.ts 7ms - packages/storage/src/implementation/request.ts 24ms - packages/storage/src/implementation/requestinfo.ts 7ms - packages/storage/src/implementation/requestmaker.ts 5ms - packages/storage/src/implementation/requestmap.ts 7ms - packages/storage/src/implementation/requests.ts 38ms - packages/storage/src/implementation/string.ts 21ms - packages/storage/src/implementation/taskenums.ts 9ms - packages/storage/src/implementation/type.ts 8ms - packages/storage/src/implementation/url.ts 6ms - packages/storage/src/implementation/xhrio_network.ts 11ms - packages/storage/src/implementation/xhrio.ts 6ms - packages/storage/src/implementation/xhriopool.ts 5ms - packages/storage/src/list.ts 5ms - packages/storage/src/metadata.ts 6ms - packages/storage/src/reference.ts 35ms - packages/storage/src/service.ts 15ms - packages/storage/src/task.ts 59ms - packages/storage/src/tasksnapshot.ts 6ms - packages/storage/test/blob.test.ts 10ms - packages/storage/test/reference.test.ts 42ms - packages/storage/test/request.test.ts 16ms - packages/storage/test/requests.test.ts 59ms - packages/storage/test/service.test.ts 30ms - packages/storage/test/string.test.ts 17ms - packages/storage/test/task.test.ts 48ms - packages/storage/test/testshared.ts 13ms - packages/storage/test/xhrio.ts 12ms - packages/template-types/index.d.ts 4ms - packages/template/.eslintrc.js 6ms - packages/template/index.node.ts 5ms - packages/template/index.ts 4ms - packages/template/karma.conf.js 5ms - packages/template/rollup.config.js 8ms - packages/template/src/index.ts 5ms - packages/template/test/index.test.ts 5ms - packages/testing/index.ts 5ms - packages/testing/rollup.config.js 8ms - packages/testing/src/api/index.ts 20ms - packages/testing/test/database.test.ts 18ms - packages/util/.eslintrc.js 5ms - packages/util/index.node.ts 4ms - packages/util/index.ts 6ms - packages/util/karma.conf.js 6ms - packages/util/rollup.config.js 8ms - packages/util/src/assert.ts 5ms - packages/util/src/constants.ts 5ms - packages/util/src/crypt.ts 26ms - packages/util/src/deepCopy.ts 12ms - packages/util/src/deferred.ts 8ms - packages/util/src/environment.ts 9ms - packages/util/src/errors.ts 14ms - packages/util/src/json.ts 5ms - packages/util/src/jwt.ts 30ms - packages/util/src/obj.ts 14ms - packages/util/src/query.ts 10ms - packages/util/src/sha1.ts 32ms - packages/util/src/subscribe.ts 52ms - packages/util/src/utf8.ts 20ms - packages/util/src/validation.ts 16ms - packages/util/test/base64.test.ts 6ms - packages/util/test/deepCopy.test.ts 14ms - packages/util/test/errors.test.ts 13ms - packages/util/test/subscribe.test.ts 21ms - packages/webchannel-wrapper/externs/overrides.js 8ms - packages/webchannel-wrapper/src/index.d.ts 9ms - packages/webchannel-wrapper/src/index.js 13ms - packages/webchannel-wrapper/tools/build.js 10ms - scripts/docgen/generate-docs.js 41ms - scripts/docgen/typedoc.js 5ms - scripts/emulator-testing/database-test-runner.ts 7ms - scripts/emulator-testing/emulators/database-emulator.ts 6ms - scripts/emulator-testing/emulators/emulator.ts 19ms - scripts/emulator-testing/emulators/firestore-emulator.ts 5ms - scripts/emulator-testing/firestore-test-runner.ts 12ms - scripts/release/cli.js 17ms - scripts/release/utils/banner.js 6ms - scripts/release/utils/constants.js 4ms - scripts/release/utils/git.js 11ms - scripts/release/utils/inquirer.js 14ms - scripts/release/utils/lerna.js 6ms - scripts/release/utils/npm.js 10ms - scripts/release/utils/tests.js 6ms - scripts/release/utils/workspace.js 18ms - scripts/release/utils/yarn.js 6ms - scripts/run_saucelabs.js 20ms - tools/config.js 22ms - tools/gitHooks/license.js 13ms - tools/gitHooks/prepush.js 6ms - tools/gitHooks/prettier.js 11ms - tools/pretest.js 8ms - tools/repl.js 7ms - Done in 17.21s. - -commit f0fc426ec84e2949d49ac8b553c675202bdea34f -Author: Feiyang -Date: Tue Dec 10 10:26:16 2019 -0800 - - remove unused imports (#2425) - -commit ff8f85463102c4ed8469daa3fe2f0aac237c232a -Author: Mertcan Mermerkaya -Date: Tue Dec 10 16:52:59 2019 +0000 - - Suppress server errors in deleteToken request (#2428) - -commit 5a880c666377b14aa7d68fe5e8db42a1b5aaf218 -Author: Yuchen Shi -Date: Mon Dec 9 16:32:06 2019 -0800 - - Implement addAuthTokenListener in testing. Fix #2417. (#2423) - -commit d1f2693d06189cc424f545e891141b1bf027abdc -Author: Mertcan Mermerkaya -Date: Tue Dec 10 00:12:55 2019 +0000 - - Request notification permission in getToken if permission is "d… (#2421) - - Instead of returning null and expecting the user to request the notification permission, do it automatically. - -commit f9d26f7866d94990fc2be6c6a85cf27aa3bf624b -Author: Brian Chen -Date: Mon Dec 9 16:00:21 2019 -0800 - - Add support for Typescript Custom Mapping (#2240) - -commit 52c1703b3ef728d60913ca091229dc6a3618f59b -Merge: 0fa9d3a3f c06e290a8 -Author: Feiyang1 -Date: Mon Dec 9 15:43:50 2019 -0800 - - Merge branch 'release' - Release 7.5.2 - -commit c06e290a86858c4f387a083944d8137f8d53abdc (tag: rxfire@3.9.4, tag: firebase@7.5.2, tag: @firebase/testing@0.16.2, tag: @firebase/database@0.5.15) -Author: Feiyang1 -Date: Fri Dec 6 13:18:56 2019 -0800 - - Publish firebase@7.5.2 - -commit a20ce2321dd6bd447eda4bb65e105a550aebbccb -Author: Feiyang -Date: Fri Dec 6 12:13:47 2019 -0800 - - Add @firebase/component as a dependency to database (#2416) - -commit 0fa9d3a3f82b221af7ca15e9b6226bc0e3daa98b -Author: Mertcan Mermerkaya -Date: Fri Dec 6 14:10:54 2019 +0000 - - Add the platform logging header to generateAuthToken requests (#2400) - -commit 91e40c1b293647aa483da51224edf05eb0d9a509 -Author: Mertcan Mermerkaya -Date: Fri Dec 6 12:02:34 2019 +0000 - - Append "Request" to API function names (#2406) - - For better distinction between the API functions and the SDK functions, especially deleteInstallation. - -commit 4efa70e7e85c35f043bffa41e3ae2b39c7434541 -Author: Renovate Bot -Date: Fri Dec 6 02:40:36 2019 +0100 - - chore(deps): update dependency typescript to v3.7.3 (#2408) - -commit 7eaaa33985bf571a2149133cf83da334632f3487 -Author: Renovate Bot -Date: Fri Dec 6 02:35:12 2019 +0100 - - Update dependency yargs to v15 (#2375) - -commit 6fe6c061e543c681d7d199e0c8acce16dabb6a70 -Merge: 878f577fe 93651e6c3 -Author: Feiyang1 -Date: Thu Dec 5 17:10:14 2019 -0800 - - Merge branch 'release' - Release 7.5.1 - -commit 93651e6c3b94bbafa44734497fe320ebac8bd806 (tag: rxfire@3.9.3, tag: firebase@7.5.1, tag: @firebase/webchannel-wrapper@0.2.33, tag: @firebase/util@0.2.35, tag: @firebase/testing@0.16.1, tag: @firebase/storage@0.3.21, tag: @firebase/storage-types@0.3.7, tag: @firebase/remote-config@0.1.8, tag: @firebase/remote-config-types@0.1.4, tag: @firebase/performance@0.2.27, tag: @firebase/performance-types@0.0.7, tag: @firebase/messaging@0.5.8, tag: @firebase/messaging-types@0.3.6, tag: @firebase/logger@0.1.32, tag: @firebase/installations@0.3.7, tag: @firebase/installations-types@0.2.3, tag: @firebase/functions@0.4.27, tag: @firebase/functions-types@0.3.12, tag: @firebase/firestore@1.8.1, tag: @firebase/firestore-types@1.8.1, tag: @firebase/database@0.5.14, tag: @firebase/database-types@0.4.9, tag: @firebase/component@0.1.0, tag: @firebase/auth@0.13.2, tag: @firebase/auth-types@0.9.2, tag: @firebase/auth-interop-types@0.1.0, tag: @firebase/app@0.4.26, tag: @firebase/app-types@0.4.9, tag: @firebase/analytics@0.2.8, tag: @firebase/analytics-types@0.2.4, tag: @firebase/analytics-interop-types@0.1.0) -Author: Feiyang1 -Date: Thu Dec 5 16:46:23 2019 -0800 - - Publish firebase@7.5.1 - -commit 878f577fe40ae0909f7efa9d1537a0325543e7f0 -Author: Brian Chen -Date: Thu Dec 5 16:44:05 2019 -0800 - - Check for process.env in isMockPersistence (#2407) - -commit b1ca46d39df3d98891619645fd479b1a723e0634 -Author: CreativeBuilds -Date: Thu Dec 5 18:02:11 2019 -0500 - - docs(rxfire): fix the table layout on auth.md (#2396) - - The pipe character (`|`) in the return value of `idToken()` was breaking the table. The pipe is now escaped properly for Markdown. - -commit 6480d7fa47112cf7c42e4654439cdcc5fbd41629 -Author: Sebastian Schmidt -Date: Wed Dec 4 17:22:24 2019 -0800 - - Small assorted fixes for better property name mangling support (#2403) - -commit 81730ba59bc47de2c2d0cb341cc26e936250b932 -Author: Sebastian Schmidt -Date: Tue Dec 3 15:51:29 2019 -0800 - - Add typings for WebChannel (#2385) - -commit fe11de064b2e827c3a567f27571fea0f10772858 -Author: Christina Holland -Date: Tue Dec 3 14:03:57 2019 -0800 - - Add internal API to collect platform version info (#2368) - - Add platform version tracking and logging API. - -commit e4a987ef36511fb4f578bfa12b13fc3905d252a2 -Author: Feiyang -Date: Tue Dec 3 13:36:39 2019 -0800 - - make @firebase/component public (#2397) - -commit a547892d13b74f1467c92639522d9c43d5e20dc4 -Author: Sebastian Schmidt -Date: Mon Dec 2 12:56:26 2019 -0800 - - Compile time asserts (#2367) - -commit 9b8ef5997b6146c46c7638bc1d61c47452c34058 -Author: rsgowman -Date: Mon Dec 2 10:04:50 2019 -0500 - - Recognize and return TENANT_ID_MISMATCH error code (#2389) - - Error was already present, but wasn't wired in. - -commit 4313496180cde5dd29c3837b5246d10daaf4768a -Author: Cameron Manavian -Date: Wed Nov 27 15:53:35 2019 -0800 - - Firebase: Adjust undefined import causing IDE annoyances (#2379) - - * adjust undefined import - - * Update empty-import.d.ts - -commit d1cd07d9be1f90a18fcb8f3e2a8c649aff04086f -Author: Sebastian Schmidt -Date: Wed Nov 27 15:21:33 2019 -0800 - - Don't use long in Proto types (#2386) - -commit 57a0f2bd78afba64b292125522f1071b386a920d -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Tue Nov 26 14:35:53 2019 -0500 - - LimitToLast: back port some changes from android (#2382) - - * LimitToLast: back port some changes from android - - * [AUTOMATED]: Prettier Code Styling - - * Address comments - -commit ae319059e4a083a613a2999c1e61d44c9053a0d7 -Author: Feiyang -Date: Tue Nov 26 10:44:56 2019 -0800 - - Component Framework (#2378) - - * Component framework implementation (#2316) - - * Component implementation - - * update dep version - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * rename variables - - * address comments - - * [AUTOMATED]: Prettier Code Styling - - * remove unused comment - - * update code - - * [AUTOMATED]: Prettier Code Styling - - * rename to clearInstance to have naming consistency - - * make FirebaseApp tests work again - - * fix node tests - - * [AUTOMATED]: Prettier Code Styling - - * add comments for ComponentType - - * [AUTOMATED]: Prettier Code Styling - - * pass Component directly into Providers - - * [AUTOMATED]: Prettier Code Styling - - * correct spellings - - * update readme - - * fix lint issue - - * remove unused import - - * fix API change - - * move types around - - * [AUTOMATED]: Prettier Code Styling - - * improve provider typing - - * [AUTOMATED]: Prettier Code Styling - - * Migrate analytics to component platform (#220) - - * migrate analytics - - * minor analytics refactoring - - * interface merge - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * allow overwriting a registered component - - * [AUTOMATED]: Prettier Code Styling - - * change ComponentType to string enum - - * address comments - - * [AUTOMATED]: Prettier Code Styling - - * remove return only generics - - * Move identifier to options object for getImmediate() - - * [AUTOMATED]: Prettier Code Styling - - * Make getProvider() type safe - - * [AUTOMATED]: Prettier Code Styling - - * define a new method to replace overwrite flag - - * [AUTOMATED]: Prettier Code Styling - - * Make component type safe - - * [AUTOMATED]: Prettier Code Styling - - * remove the generic type from component container - - * Update FirebaseApp and Analytics - - * [AUTOMATED]: Prettier Code Styling - - * remove unneccessary casting - - * [AUTOMATED]: Prettier Code Styling - - * fix typo - - * address comments - - * [AUTOMATED]: Prettier Code Styling - - * update some types - - * [AUTOMATED]: Prettier Code Styling - - * handle errors from instance factory - - * [AUTOMATED]: Prettier Code Styling - - * Migrate Performance to component framework (#2325) - - * Migrate Performance to component framework - - * [AUTOMATED]: Prettier Code Styling - - * removed unused import - - * Migrate RC to component framework (#2324) - - * Migrate RC to component framework - - * [AUTOMATED]: Prettier Code Styling - - * remove unused import - - * Migrate storage to component framework (#2326) - - * Migrate Database to component framework (#2327) - - * Migrate Database to component framework - - * revert auth formatting - - * Mirgrate functions to component framework (#2328) - - * Migrate installations to component framework (#2322) - - * Migrate installations to component framework - - * remove unused import - - * update calling code according to the latest component changes - - * added forceRefresh back - - * Migrate messaging to component framework (#2323) - - * Migrate messaging to component framework - - * remove unused import - - * bundle firebase services in a single object - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * address comment - - * Make tests work again - - * Migrate firestore to component framework (#2329) - - * Migrate Firestore to component framework - - * [AUTOMATED]: Prettier Code Styling - - * remove unused import - - * removed unnecessary type assertion - - * update getImmeidate call - - * Migrate testing to component framework - - * [AUTOMATED]: Prettier Code Styling - - * Update SDKs to use the new type system (#2358) - - * update database types - - * update Firestore types - - * update installations type - - * update messaging types - - * update functions types - - * update performance types - - * update remoteconfig types - - * update storage types - - * fix analytics issue - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: Prettier Code Styling - - * Use the new method - - * Migrate Auth to component framework (#2342) - - * Mirgrate Auth to component framework - - * update Auth types - - * [AUTOMATED]: Prettier Code Styling - - * address comments - - * update deps - - * [AUTOMATED]: Prettier Code Styling - - * Get installations service from the container (#2376) - - * Get installations from the container - - * [AUTOMATED]: Prettier Code Styling - - * revert dev changes - - * convert eslint from json to js. - - * [AUTOMATED]: Prettier Code Styling - - * fix broken scripts - - * address comments - - * [AUTOMATED]: Prettier Code Styling - - * fix typos - -commit ba2ff353f709df018af78d397dc5d00d70565d5c -Author: Feiyang -Date: Mon Nov 25 17:10:16 2019 -0800 - - Reject with indexeddb errors in RemoteConfig.fetch() (#2381) - - * pass the indexeddb errors to the caller. - - * [AUTOMATED]: Prettier Code Styling - -commit 638aba6bdb31aa848cf6f9407eaaff557dbdd960 -Author: Jeff -Date: Fri Nov 22 15:04:20 2019 -0800 - - rxfire: objectVal bugfix (#2352) - -commit ba1932f3288b5e39a5d1e762325d5358248c133a -Merge: aeeaa1436 0d144c999 -Author: Feiyang1 -Date: Thu Nov 21 15:28:23 2019 -0800 - - Merge branch 'release' - Release 7.5.0 - -commit 0d144c999f03f3d2bdf3bc750853257829f03a0a (tag: rxfire@3.9.2, tag: firebase@7.5.0, tag: @firebase/webchannel-wrapper@0.2.32, tag: @firebase/util@0.2.34, tag: @firebase/testing@0.16.0, tag: @firebase/storage@0.3.20, tag: @firebase/storage-types@0.3.6, tag: @firebase/remote-config@0.1.7, tag: @firebase/remote-config-types@0.1.3, tag: @firebase/polyfill@0.3.29, tag: @firebase/performance@0.2.26, tag: @firebase/performance-types@0.0.6, tag: @firebase/messaging@0.5.7, tag: @firebase/messaging-types@0.3.5, tag: @firebase/logger@0.1.31, tag: @firebase/installations@0.3.6, tag: @firebase/installations-types@0.2.2, tag: @firebase/functions@0.4.26, tag: @firebase/functions-types@0.3.11, tag: @firebase/firestore@1.8.0, tag: @firebase/firestore-types@1.8.0, tag: @firebase/database@0.5.13, tag: @firebase/database-types@0.4.8, tag: @firebase/auth@0.13.1, tag: @firebase/auth-types@0.9.1, tag: @firebase/app@0.4.25, tag: @firebase/app-types@0.4.8, tag: @firebase/analytics@0.2.7, tag: @firebase/analytics-types@0.2.3) -Author: Feiyang1 -Date: Thu Nov 21 15:12:14 2019 -0800 - - Publish firebase@7.5.0 - -commit aeeaa14361d76d3c06fead95a2fd2359b28ad62e -Author: Christina Holland -Date: Thu Nov 21 14:13:55 2019 -0800 - - Move most devDependencies to root package.json (#2370) - -commit 1a4afc1ddc756a58f8135fb278d2f5355a84ab08 -Author: Brian Chen -Date: Tue Nov 19 17:24:10 2019 -0800 - - Deleting comments from index.d.ts file in packages/firestore-types (#2371) - -commit 542240d093ad54f3c8e5739dcb8449e8b9cab131 -Author: Sebastian Schmidt -Date: Mon Nov 18 12:34:28 2019 -0800 - - Run prettier 1.9.1 (#2369) - -commit 6959d19ac7f3dcde11f337fc06d5ea3a27f9bb89 -Author: Feiyang -Date: Mon Nov 18 11:33:35 2019 -0800 - - correct package name for remote-config (#2195) - -commit 23cf05d5d8a8e961dff0363bdfcf2e9f78b4d222 -Author: Renovate Bot -Date: Mon Nov 18 19:57:31 2019 +0100 - - Update dependency chalk to v3 (#2360) - -commit 8da5ed0baaf2491a52f2f54e7e65a0adc646c23d -Author: Renovate Bot -Date: Mon Nov 18 18:56:40 2019 +0100 - - Update all non-major dependencies (#2359) - -commit 86971ea3c727084fa1a99322afe473d19068bac5 -Author: Thomas Bouldin -Date: Mon Nov 18 08:55:38 2019 -0800 - - Add Database.Servervalue.increment(x) (#2348) - - * Added ServerValue._increment() for not-yet-working operator (needs server-side rollout and API approval) - * Changed server value local resolution to include current offline caches - * Add new tests for ServerValues in general + offline increments - -commit 9ccc3dc204b2bf9c828efe97fcb58226fe701292 -Author: Thomas Bouldin -Date: Fri Nov 15 15:01:49 2019 -0800 - - Add RTDB Node debug target (#2365) - -commit 238914319854a94f135e9ed1be5f95c03f144314 -Author: jmmendivil -Date: Fri Nov 15 16:24:32 2019 -0600 - - add collectionData() to docs (#2290) - -commit 379e192ad6e5c79fb1c7dd9f63df3134b989f4ca -Author: Christina Holland -Date: Fri Nov 15 14:18:44 2019 -0800 - - Make sure functions documentation is generated for Node (#2363) - -commit 2a2b802e8c3631562606f9436995ef42544bb2b3 -Author: Renovate Bot -Date: Fri Nov 15 23:05:59 2019 +0100 - - Update dependency typescript to v3.7.2 (#2344) - - * Update dependency typescript to v3.7.2 - - * fix typing error - -commit d89e7b39df8eda9d7fc077d1c77e24395a51ac06 -Author: Feiyang -Date: Thu Nov 14 15:31:44 2019 -0800 - - remove prerender and unloaded from visibilityState (#2351) - - * remove rerender from visibilityState - - * remove unloaded - -commit 7a027a5adf7189bf29a035e36a12e06b17736edc -Merge: 957401395 732e6691c -Author: Christina Holland -Date: Thu Nov 14 15:30:16 2019 -0800 - - Merge branch 'release' - Release 7.4.0 - -commit 732e6691c512a9e95414658bcbb0efec3a5f23e0 (tag: rxfire@3.9.1, tag: firebase@7.4.0, tag: @firebase/webchannel-wrapper@0.2.31, tag: @firebase/util@0.2.33, tag: @firebase/testing@0.15.1, tag: @firebase/storage@0.3.19, tag: @firebase/remote-config@0.1.6, tag: @firebase/polyfill@0.3.28, tag: @firebase/performance@0.2.25, tag: @firebase/messaging@0.5.6, tag: @firebase/logger@0.1.30, tag: @firebase/installations@0.3.5, tag: @firebase/functions@0.4.25, tag: @firebase/firestore@1.7.1, tag: @firebase/database@0.5.12, tag: @firebase/auth@0.13.0, tag: @firebase/auth-types@0.9.0, tag: @firebase/app@0.4.24, tag: @firebase/analytics@0.2.6) -Author: Christina Holland -Date: Thu Nov 14 13:43:53 2019 -0800 - - Publish firebase@7.4.0 - -commit 9574013959e2944d5b8d1ffd23e9252ef1ccb410 -Author: Sebastian Schmidt -Date: Thu Nov 14 09:53:13 2019 -0800 - - Enable Index-Free Queries (#2357) - -commit cfaedf40e0dd0682810165c70df3c4b4796fe384 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Nov 13 14:53:36 2019 -0800 - - added toc for OAuthCredentialOptions (#2354) - -commit 8b1d680b16405fcaea5d2fef5c68ebb6dcd33579 -Merge: c34f9a555 42476d8f4 -Author: Feiyang1 -Date: Wed Nov 13 10:35:26 2019 -0800 - - Merge branch 'release' - Release 7.3.0 - -commit c34f9a555b5d54a455740193e2285ecaed8bf4b2 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Nov 12 13:34:15 2019 -0800 - - Expose nonce (#2260) - - - exposed nonce in OAuthCredential - - updated regex for backend error mapping and resize sign in popup window - - updated user_cancelled error message - -commit 988017f45bb0960c125224bbb17d9b09bd7e96e9 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Nov 11 10:49:56 2019 -0800 - - treat ionic scheme as cordova environment (#2347) - -commit 14b287856cc2de58e6fa6e6cd97ffa6e34a91200 -Author: Brian Chen -Date: Fri Nov 8 17:11:30 2019 -0800 - - Allow nested arrays for IN queries (#2346) - -commit ed4b1474fe44d9dd1fe0f70ce2bb351e51ecaa90 -Author: Christina Holland -Date: Fri Nov 8 12:47:55 2019 -0800 - - Directly check for existence of gtag script tag (#2339) - -commit efc0a78803990eb01888b7b2121c15377c4007b1 -Author: Renovate Bot -Date: Fri Nov 8 18:38:39 2019 +0100 - - Update dependency chromedriver to v78 (#2315) - -commit 4d23f9cbc607bfbd1116e0bf7c99c4e4e3e6ad8b -Author: Renovate Bot -Date: Fri Nov 8 18:38:08 2019 +0100 - - Update all non-major dependencies (#2343) - -commit 42476d8f41c992f9cf32b919119cec42f3815680 (tag: rxfire@3.9.0, tag: firebase@7.3.0, tag: @firebase/webchannel-wrapper@0.2.30, tag: @firebase/util@0.2.32, tag: @firebase/testing@0.15.0, tag: @firebase/storage@0.3.18, tag: @firebase/remote-config@0.1.5, tag: @firebase/polyfill@0.3.27, tag: @firebase/performance@0.2.24, tag: @firebase/messaging@0.5.5, tag: @firebase/logger@0.1.29, tag: @firebase/installations@0.3.4, tag: @firebase/functions@0.4.24, tag: @firebase/firestore@1.7.0, tag: @firebase/firestore-types@1.7.0, tag: @firebase/database@0.5.11, tag: @firebase/auth@0.12.4, tag: @firebase/app@0.4.23, tag: @firebase/analytics@0.2.5) -Author: Feiyang1 -Date: Thu Nov 7 15:05:22 2019 -0800 - - Publish firebase@7.3.0 - -commit 331f9d062e4c8ccc3545e5f8c15af3ccc8b5d8f3 -Author: Gil -Date: Tue Nov 5 09:13:36 2019 -0800 - - Disallow empty document fields (#2334) - - Port of firebase/firebase-android-sdk#643. - -commit ed87b76e95d5f2e35f423110ae83ed9e1311e649 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Mon Nov 4 19:35:09 2019 -0500 - - Rename QueryData and QueryCache to TargetData and TargetCache (#2333) - - * QueryCache -> TargetCache - - * Rename QueryData -> TargetData - - * Rename QueryPurpose -> TargetPurpose - -commit 332250d82735f068079eebe769fbcc0be1e0374a -Merge: ba4eebb2d 26456c776 -Author: Christina Holland -Date: Mon Nov 4 10:25:33 2019 -0800 - - Merge branch 'release' - Release 7.2.3 - -commit ba4eebb2db8756b9d26c691a3473712b5cf2a8f2 -Author: Omkar Yadav -Date: Mon Nov 4 22:03:26 2019 +0530 - - Use string concatenation instead of array join for making RPC URLs (#2301) - -commit 332346761a3e872592b44f06fbd89d15745a6186 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Fri Nov 1 21:52:56 2019 -0400 - - Release Query.limitToLast(n) (#2321) - - - * [1/3] Query/Target split -- create Target and make remote/ and local/ work with Target. (#2254) - - * [2/3] Query/Target split: make SyncEngine able to handle the mapping between Target and Query. (#2281) - - * [2.8/3] Add limitToLast implementation and tests. (#2296) - - * [3/3] Spec tests for limitToLast+multi-tab (#2300) - - * Add spec test for single client (#2313) - - * add change log for limitToLast - - * Address comments - -commit ad9dc8d76ddf87ff54ffcc8f68cc0289c83f91b8 -Author: Renovate Bot -Date: Sat Nov 2 03:47:08 2019 +0200 - - Update all non-major dependencies (#2314) - -commit ce867b055dadeb20f8794a709580fe6fc1d4faf5 -Author: Brian Chen -Date: Thu Oct 31 15:55:51 2019 -0700 - - Make IN queries publicly available (#2217) - -commit cf2be75aafbbed90f492e9fc55b4b98170617079 -Author: Feiyang -Date: Thu Oct 31 14:11:46 2019 -0700 - - Avoid auth trigger if we haven't yet received the initial user (#2310) - - * Added a flag to guard against using null user before getting the actual user - - * fix typo - - * shorten comment lines - - * [AUTOMATED]: Prettier Code Styling - -commit 26456c7761939895f424de2e6b022b6ba7d95cf3 (tag: rxfire@3.8.8, tag: firebase@7.2.3, tag: @firebase/testing@0.14.3, tag: @firebase/storage@0.3.17, tag: @firebase/remote-config@0.1.4, tag: @firebase/performance@0.2.23, tag: @firebase/messaging@0.5.4, tag: @firebase/installations@0.3.3, tag: @firebase/functions@0.4.23, tag: @firebase/firestore@1.6.4, tag: @firebase/database@0.5.10, tag: @firebase/database-types@0.4.7, tag: @firebase/app@0.4.22, tag: @firebase/app-types@0.4.7, tag: @firebase/analytics@0.2.4) -Author: Christina Holland -Date: Thu Oct 31 13:47:38 2019 -0700 - - Publish firebase@7.2.3 - -commit 34884f2f566ef722797c45f4b8080259ce4da74b -Author: Jan Wyszynski -Date: Wed Oct 30 16:43:31 2019 -0700 - - Revert "use fake "owner" credential when rtdb emulator env var is set… (#2308) - - * Revert "use fake "owner" credential when rtdb emulator env var is set (#2029)" - - This reverts commit 4ebedd071ddd4f4f7ab427a87fa6a725622225c3. - - * bump @firebase/database package version - - * undo database package version bump - -commit 68101ee9f654659d012aab0cf361575a2395671e -Author: Sebastian Schmidt -Date: Wed Oct 30 15:55:10 2019 -0700 - - Don't fail client if lease refresh fails (#2307) - -commit 94ffe751a332fdcd95fc9c31e56a44c641398281 -Author: Mertcan Mermerkaya -Date: Tue Oct 29 12:56:00 2019 +0000 - - Narrow some types (#2298) - -commit 344d063e11429bb368618f45988e5d39fad25d69 -Author: Mertcan Mermerkaya -Date: Mon Oct 28 14:21:04 2019 +0000 - - Try API requests again if they failed in a different function c… (#2297) - - There isn't any useful error information if a request that was started in a different function call fails. Instead of throwing a useless error, try it again in the current function call. - - Also makes the "missing app config values" error a little more helpful. - -commit b236a06810a2c1780c3bb84af31801c1a8722b76 -Merge: 3cf784218 98763b528 -Author: Feiyang1 -Date: Fri Oct 25 10:38:14 2019 -0700 - - Merge branch 'release' - Release 7.2.2 - -commit 3cf784218ddd9923ddfdde8df4c52e6b12fc5643 -Author: Christina Holland -Date: Thu Oct 24 19:40:50 2019 -0700 - - Add more error checking in doc gen script (#2218) - -commit bd3a03a49f5b773db01476dc60d87ee576cd6ffa -Author: cdoe -Date: Thu Oct 24 21:40:00 2019 -0500 - - Include add_payment_info and page_view events (#2276) - -commit 98763b528bc97443512e204b15f3d7ea79bd3b1d (tag: rxfire@3.8.7, tag: firebase@7.2.2, tag: @firebase/webchannel-wrapper@0.2.29, tag: @firebase/util@0.2.31, tag: @firebase/testing@0.14.2, tag: @firebase/storage@0.3.16, tag: @firebase/remote-config@0.1.3, tag: @firebase/polyfill@0.3.26, tag: @firebase/performance@0.2.22, tag: @firebase/messaging@0.5.3, tag: @firebase/logger@0.1.28, tag: @firebase/installations@0.3.2, tag: @firebase/functions@0.4.22, tag: @firebase/firestore@1.6.3, tag: @firebase/database@0.5.9, tag: @firebase/auth@0.12.3, tag: @firebase/app@0.4.21, tag: @firebase/analytics@0.2.3) -Author: Feiyang1 -Date: Thu Oct 24 16:34:37 2019 -0700 - - Publish firebase@7.2.2 - -commit d8735622f36209e164cb10db57e6eb680cbdb8da -Author: Renovate Bot -Date: Fri Oct 25 01:32:10 2019 +0300 - - Update dependency npm-run-path to v4 (#2279) - -commit d7e93f1b8b84987c9426c039959be3300a1c95bc -Author: Renovate Bot -Date: Fri Oct 25 01:29:09 2019 +0300 - - Update all non-major dependencies (#2278) - -commit 5a30f33804859038cb58b6f6630ca3132bdf6635 -Author: Feiyang -Date: Thu Oct 24 10:25:19 2019 -0700 - - fix renovate config (#2295) - -commit 320d613ec3ed3c897547b282571506223fff99bb -Author: Christina Holland -Date: Wed Oct 23 13:51:52 2019 -0700 - - Minor cleanup of package/template (#2294) - -commit 3ea6f38648a1d22260f338b582e7f6211ff83249 -Merge: d5eacb6b4 25b62bb77 -Author: Christina Holland -Date: Tue Oct 22 14:14:51 2019 -0700 - - Merge branch 'release' - Firebase 7.2.1 release - -commit d5eacb6b4b2278707c658861231d439878bdf003 -Author: Sebastian Schmidt -Date: Tue Oct 22 13:56:27 2019 -0700 - - Don't use process when not available (#2277) - -commit 3264492888e80b798a206a147a06f40be58972bb -Author: Sebastian Schmidt -Date: Mon Oct 21 17:20:24 2019 -0700 - - Retry all non-Firestore exceptions (#2288) - -commit 4ecd58ece02e08132b80ae5e50cfcd831efee762 -Author: James Daniels -Date: Fri Oct 18 00:38:12 2019 -0400 - - rxfire: Support collection groups & change detection fixess (#2223) - - * rxfire was comparing documents based off ids, this was fine before collection group queries. Here I've switched to `ref.isEqual` like I have done in AngularFire. - * When a document is modified, we were only replacing the single doc in the array; this would not always trip change detection in frameworks as `===` would still equal true on the top level. Splicing it creates a new array, which will fail `===` and trip change detection. - * Further, this was an issue with the other operations as we were using splice. I'm now slicing to clone the array before modifying. - * NIT: Visual Studio Code's settings, which are committed, were not setup to track the workspace's version of Typescript. This tripped me up a little at first. - -commit c35bc8f75769febbea090ed4808436abeca6c07e -Author: Sebastian Schmidt -Date: Thu Oct 17 15:56:23 2019 -0700 - - Make maybeGarbageCollectMultiClientState idempotent (#2275) - -commit 07cd70d4e694080c0114076fe2be821c951ed75b -Author: Sebastian Schmidt -Date: Thu Oct 17 13:43:04 2019 -0700 - - Fix typo in comment (#2274) - -commit 0cec349455c4b2126eca7bcc17552e671da4933e -Author: Sam Stern -Date: Thu Oct 17 10:36:54 2019 -0700 - - Add open source config and page for RxFire (#2273) - -commit 25b62bb772ff8b1636e5ba9a7bee6f49581473aa (tag: rxfire@3.8.6, tag: firebase@7.2.1, tag: @firebase/webchannel-wrapper@0.2.28, tag: @firebase/util@0.2.30, tag: @firebase/testing@0.14.1, tag: @firebase/storage@0.3.15, tag: @firebase/storage-types@0.3.5, tag: @firebase/remote-config@0.1.2, tag: @firebase/remote-config-types@0.1.2, tag: @firebase/polyfill@0.3.25, tag: @firebase/performance@0.2.21, tag: @firebase/performance-types@0.0.5, tag: @firebase/messaging@0.5.2, tag: @firebase/messaging-types@0.3.4, tag: @firebase/logger@0.1.27, tag: @firebase/installations@0.3.1, tag: @firebase/installations-types@0.2.1, tag: @firebase/functions@0.4.21, tag: @firebase/functions-types@0.3.10, tag: @firebase/firestore@1.6.2, tag: @firebase/firestore-types@1.6.2, tag: @firebase/database@0.5.8, tag: @firebase/database-types@0.4.6, tag: @firebase/auth@0.12.2, tag: @firebase/auth-types@0.8.2, tag: @firebase/app@0.4.20, tag: @firebase/app-types@0.4.6, tag: @firebase/analytics@0.2.2, tag: @firebase/analytics-types@0.2.2) -Author: Christina Holland -Date: Wed Oct 16 12:01:56 2019 -0700 - - Publish firebase@7.2.1 - -commit b21b946a34887056283a6064fb0b41d070f15545 -Author: Sebastian Schmidt -Date: Tue Oct 15 13:32:51 2019 -0700 - - Support iOS 13 with offline persistence (#2271) - - * Add transaction retries (#2250) - - * Marking SimpleDb calls as idempotent (#2251) - - * Mark mostly readonly calls as idempotent (#2252) - - * Fix test failure (#2256) - - * Make handleUserChange idempotent (#2257) - - * Temporarily disable CountingQueryEngine tests (#2258) - - * Improve test hack (#2259) - - * Improve test hack - - * Comment in test hack - - * Make getNewDocumentChanges() idempotent (#2255) - - * Add onCommitted listeners for transactions (#2265) - - * Fix build - - * Fix Lint - - * Make applyRemoteEvent idempotent (#2263) - - * Make notifyLocalViewChanges idempotent (#2268) - - * Make releaseQuery idempotent (#2266) - - * Mark acknowledgeBatch and rejectBatch idempotent (#2269) - - * idempotent `allocateQuery` and `notifyLocalViewChanges` (#2264) - - * Mark collectGarbage idempotent (#2267) - - * Idempotency: Address TODOs, add Changelog (#2270) - -commit 9da3892bc3a978ad9bffb20b7df49d803d61d44b -Author: Renovate Bot -Date: Tue Oct 15 21:08:21 2019 +0300 - - Update dependency typescript to v3.6.4 (#2262) - -commit e6926fd3c3ee07e1bdc364a2de67b900c9aaab63 -Author: Renovate Bot -Date: Tue Oct 15 01:52:26 2019 +0300 - - Lock file maintenance (#2077) - -commit 81d49bb919abce5aef18e1309d32536ce14bef48 -Merge: 0323453b6 18b228c80 -Author: Feiyang1 -Date: Mon Oct 14 14:07:09 2019 -0700 - - Merge with Release 7.2.0 - -commit 0323453b6fe957084f7ee0bbd8aa4ba24bffb08b -Author: Renovate Bot -Date: Mon Oct 14 23:13:21 2019 +0300 - - Update all non-major dependencies (#2261) - -commit 3eb29cbcf4b61009077f540039d2dd89fc330ff9 -Author: Yuchen Shi -Date: Thu Oct 10 13:48:39 2019 -0700 - - Serialize Timestamps as string (per proto3 JSON format). (#2249) - - * Serialize Timestamps as string (per proto3 JSON format). - - * [AUTOMATED]: Prettier Code Styling - - * Add an extra test for string format. - - * Update changelog. - -commit 18b228c80d1a5dfd39df17a5b356125f144183e8 (tag: rxfire@3.8.5, tag: firebase@7.2.0, tag: @firebase/webchannel-wrapper@0.2.27, tag: @firebase/util@0.2.29, tag: @firebase/testing@0.14.0, tag: @firebase/storage@0.3.14, tag: @firebase/storage-types@0.3.4, tag: @firebase/remote-config@0.1.1, tag: @firebase/remote-config-types@0.1.1, tag: @firebase/polyfill@0.3.24, tag: @firebase/performance@0.2.20, tag: @firebase/performance-types@0.0.4, tag: @firebase/messaging@0.5.1, tag: @firebase/messaging-types@0.3.3, tag: @firebase/logger@0.1.26, tag: @firebase/installations@0.3.0, tag: @firebase/installations-types@0.2.0, tag: @firebase/functions@0.4.20, tag: @firebase/functions-types@0.3.9, tag: @firebase/firestore@1.6.1, tag: @firebase/firestore-types@1.6.1, tag: @firebase/database@0.5.7, tag: @firebase/database-types@0.4.5, tag: @firebase/auth@0.12.1, tag: @firebase/auth-types@0.8.1, tag: @firebase/app@0.4.19, tag: @firebase/app-types@0.4.5, tag: @firebase/analytics@0.2.1, tag: @firebase/analytics-types@0.2.1) -Author: Feiyang1 -Date: Thu Oct 10 11:40:08 2019 -0700 - - Publish firebase@7.2.0 - -commit dbe408632bcf7300e1708907e75bf4ce5eae76bb -Author: Brian Chen -Date: Thu Oct 10 10:51:49 2019 -0700 - - Make vscode tests run against emulator (#2248) - -commit 8c2bbc391bfddebeb3e4abaf03c52918e79d99ea -Author: Mertcan Mermerkaya -Date: Wed Oct 9 17:56:30 2019 +0100 - - Make IdbManager only handle values of type InstallationEntry (#2245) - -commit 83aacd88dfce3c875c8e7b0330ca7cd256c16cc9 -Author: Mertcan Mermerkaya -Date: Wed Oct 9 17:55:48 2019 +0100 - - Update Installations types (#2246) - -commit dc14f5ce07a44bc5ef51ff288f16ee30424a7f96 -Author: Mertcan Mermerkaya -Date: Tue Oct 8 14:49:07 2019 +0100 - - Add the forceRefresh parameter to Installations' getToken method (#2239) - -commit 9fcd2216a36712f5c04d90b4a28668ccd0241418 -Merge: ed769e8f6 ee51a796c -Author: Christina Holland -Date: Fri Oct 4 17:11:42 2019 -0700 - - Merge branch 'release' - Firebase 7.1.0 release - -commit ed769e8f635fc2eeae639ea0ce42fe7b3bef9780 -Author: Renovate Bot -Date: Sat Oct 5 02:01:26 2019 +0300 - - Update dependency typescript to v3.6.3 (#2127) - - * Update dependency typescript to v3.6.3 - - * lock @type/node at 8.10.54 - - * [AUTOMATED]: Prettier Code Styling - -commit 02da77ca70ec9c0b99dc6900e1d7864270833cd3 -Author: Renovate Bot -Date: Fri Oct 4 21:25:26 2019 +0300 - - Update dependency selenium-assistant to v6 (#2048) - - * Update dependency selenium-assistant to v6 - - * update node version requirement - -commit 2c1dc8ed7fc8f82dae062cc97722b46d2b75f318 -Author: Renovate Bot -Date: Fri Oct 4 20:48:46 2019 +0300 - - Update all non-major dependencies (#2234) - -commit 75cee01d2d367dbb156e15bff89bf179777407f7 -Author: Renovate Bot -Date: Fri Oct 4 20:48:20 2019 +0300 - - Update dependency indexeddbshim to v5 (#2237) - -commit 983f88f34a6e13a164ef84bcdd044e604647bb97 -Author: Renovate Bot -Date: Fri Oct 4 02:07:41 2019 +0300 - - Update dependency inquirer to v7 (#2155) - -commit 29c0b3705e9e037963c7316445fec0634dd4ef34 -Author: Sebastian Schmidt -Date: Thu Oct 3 14:52:25 2019 -0700 - - Update SequenceNumber in LocalStore.applyRemoteEvent (#2233) - -commit ee51a796cb472fb19d1700e601c376d33d7a564f (tag: rxfire@3.8.4, tag: firebase@7.1.0, tag: @firebase/testing@0.13.4, tag: @firebase/storage@0.3.13, tag: @firebase/firestore@1.6.0, tag: @firebase/firestore-types@1.6.0, tag: @firebase/database@0.5.6, tag: @firebase/analytics@0.2.0, tag: @firebase/analytics-types@0.2.0) -Author: Christina Holland -Date: Thu Oct 3 13:44:33 2019 -0700 - - Publish firebase@7.1.0 - -commit bd5ce34db9c11ab16296b29c5d410b78876a0115 -Author: Renovate Bot -Date: Thu Oct 3 02:04:00 2019 +0300 - - Update dependency eslint to v6 (#1965) - - * Update dependency eslint to v6 - - * fix lint issues - - * [AUTOMATED]: Prettier Code Styling - -commit fe530be990ff538cb410176b2c7f2b529955cdb7 -Author: Renovate Bot -Date: Wed Oct 2 21:03:26 2019 +0300 - - Update dependency ora to v4 (#2199) - -commit c2894ce5a879b564845be024a796e555a571668a -Author: Renovate Bot -Date: Wed Oct 2 20:36:40 2019 +0300 - - Update dependency chromedriver to v77 (#2183) - -commit 2d157c85fe24c34b464121ddf9a88d04de82df97 -Author: Renovate Bot -Date: Wed Oct 2 20:25:20 2019 +0300 - - Update all non-major dependencies (#2154) - - * Update all non-major dependencies - - * fix lint issues - - * [AUTOMATED]: Prettier Code Styling - -commit 5beb23cd47312ffc415d3ce2ae309cc3a3fde39f -Author: Sebastian Schmidt -Date: Wed Oct 2 10:19:31 2019 -0700 - - Index-Free Queries (feature, code still disabled) (#2180) - -commit a308f0f2414b2c9ffec5e72f5c5e8d9714b34ec5 -Author: James Daniels -Date: Wed Oct 2 19:17:42 2019 +0200 - - Fixing the RemoteConfig main entry (#2229) - - Was referencing a non-existent `dist/index.node.cjs.js`, fixed. - -commit fdd73cacab950ab87cd54871607fa76c6339fb3d -Author: Brian Chen -Date: Wed Oct 2 10:08:05 2019 -0700 - - Send raw values when using WebChannel (#2228) - -commit fa0e63d80e010610f14b710cb972cf68e4be60f6 -Author: Feiyang -Date: Tue Oct 1 15:45:30 2019 -0700 - - use named import for uglify in console build script (#2225) - - * use named import for uglify in console build script - - * update to work with new rollup api - - * use destructuring pattern - - * [AUTOMATED]: Prettier Code Styling - -commit 3a6995becf16d60091af2aed396a1cf014b72314 -Author: Christina Holland -Date: Tue Oct 1 14:16:34 2019 -0700 - - Make event params optional in logEvent (#2226) - -commit 9be828503cebd178f1bd0a2c60b8b44ac9a0f534 -Author: Sebastian Schmidt -Date: Tue Oct 1 12:25:03 2019 -0700 - - Treat empty maps correctly in Document.get() (#2206) - -commit 6e377fe24431a1fa41d35d08e880166a7e91bcaf -Author: Christina Holland -Date: Tue Oct 1 11:39:33 2019 -0700 - - Update docs to link to CDN guide (#2219) - -commit 78adfdb750649846319e3896f4c64cb416a333a9 -Author: Yuchen Shi -Date: Tue Oct 1 10:34:51 2019 -0700 - - rxfire: Update peerDependencies of firebase (#2208) - -commit c36aa82cdedeeada360b1806fee81a04a84aaa20 -Author: Feiyang -Date: Tue Oct 1 10:12:05 2019 -0700 - - add @firebase/analytics to firebase deps (#2220) - - * add @firebase/analytics to firebase deps - - * add remote config and analytics to index.ts files - -commit 458db5f82f1bb644192c7eb4e645cf5ea761e873 -Author: Sebastian Schmidt -Date: Tue Oct 1 08:45:23 2019 -0700 - - Fix Firestore Browser tests (#2216) - -commit d63371fd05f6b7dce04347d6488bd42b97f93582 -Author: Gabriel Chow -Date: Mon Sep 30 21:43:01 2019 -0400 - - Sort classes properly in doc. (#2182) - - The ordering currently doesn't make sense: - https://firebase.google.com/docs/reference/js/firebase.auth - https://firebase.google.com/docs/reference/js/firebase.storage - - This fixes b/141303832. - -commit 37d150b8e783387c68caad8c8816d5496f010851 -Author: Feiyang -Date: Mon Sep 30 16:33:02 2019 -0700 - - add code owners for analytics and rc (#2196) - -commit 84c1583c1cc52fbbc32da76d157205f64c7c960f -Author: Sebastian Schmidt -Date: Mon Sep 30 23:58:51 2019 +0100 - - Allow leading zeros in tryParseInt (#2212) - -commit 934712c8abd3821ac3025d4ff6e50d0f985aa7a2 -Author: Samuel Elgozi -Date: Mon Sep 30 23:04:51 2019 +0300 - - Fix default timeout for uploads (#2202) - -commit e8a392090256d9bd68934834e0e343bf81d52453 -Author: Yuchen Shi -Date: Mon Sep 30 11:31:23 2019 -0700 - - Remove database field from REST API request body. (#2188) - - * Remove database field from REST API request body. - - * [AUTOMATED]: Prettier Code Styling - - * Fix type and add comments about the emulator. - - * [AUTOMATED]: Prettier Code Styling - -commit c9dbf1953639dda8b5bde24da4b6eefbf1e221f3 -Author: Brian Chen -Date: Fri Sep 27 21:56:43 2019 -0700 - - Make onSnapshotsInSync() public (#2198) - -commit 012e3a5c1ec5f93aabd050e28e9efd226ee0fd44 -Author: Sebastian Schmidt -Date: Fri Sep 27 20:32:00 2019 -0700 - - Add test for NoDocument assert (#2205) - -commit b4ee745b4ed7a4f4a95acd08c9e384868ae4dbae -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Sep 25 15:41:32 2019 -0700 - - Fix externs (#2194) - - * fixed externs by adding ActionCodeInfo.Operation definition - -commit 3583ba4369ab68f5d337d6865b305c12f94553b3 (tag: rxfire@3.8.3, tag: firebase@7.0.0, tag: @firebase/testing@0.13.3, tag: @firebase/remote-config@0.1.0, tag: @firebase/remote-config-types@0.1.0, tag: @firebase/polyfill@0.3.23, tag: @firebase/messaging@0.5.0, tag: @firebase/functions@0.4.19, tag: @firebase/firestore@1.5.4, tag: @firebase/database@0.5.5, tag: @firebase/database-types@0.4.4, tag: @firebase/app@0.4.18, tag: @firebase/app-types@0.4.4, tag: @firebase/analytics@0.1.0, tag: @firebase/analytics-types@0.1.0) -Author: Feiyang1 -Date: Wed Sep 25 14:03:08 2019 -0700 - - Publish firebase@7.0.0 - -commit 2b412d7c5c81ae2e99e922cf1d06f7838d470a8d -Author: Feiyang -Date: Wed Sep 25 12:12:16 2019 -0700 - - Add Remote Config SDK (#2193) - -commit fd35262906c715655fb21d6d2dac043779474aa1 -Author: Feiyang -Date: Wed Sep 25 11:34:09 2019 -0700 - - Add Firebase Analytics package and integrate with FCM (#2192) - -commit 806aabbd8465b1d3ef9df7d03ef88b7ee15ed071 -Author: Brian Chen -Date: Fri Sep 20 16:29:41 2019 -0400 - - Backport spec test function renaming (#2184) - -commit 75f51a2813f31ae551d591c499ffc42eb58a739e (tag: rxfire@3.8.2, tag: firebase@6.6.2, tag: @firebase/util@0.2.28, tag: @firebase/testing@0.13.2, tag: @firebase/storage@0.3.12, tag: @firebase/polyfill@0.3.22, tag: @firebase/performance@0.2.19, tag: @firebase/messaging@0.4.11, tag: @firebase/logger@0.1.25, tag: @firebase/installations@0.2.7, tag: @firebase/functions@0.4.18, tag: @firebase/firestore@1.5.3, tag: @firebase/database@0.5.4, tag: @firebase/app@0.4.17) -Author: Feiyang1 -Date: Thu Sep 19 14:07:38 2019 -0700 - - Publish firebase@6.6.2 - -commit 4f1f3787468dca676e1fc6c65adb3a7cb9d1c1de -Author: Feiyang -Date: Wed Sep 18 17:56:24 2019 -0700 - - changed to use firebase tools projects.list() (#2181) - -commit 353fc529f0686eb5bf7761c6fda129da4bcd4ae6 -Author: Mertcan Mermerkaya -Date: Wed Sep 18 20:06:50 2019 +0100 - - Fix SauceLabs tests (#1920) - - * Fix SauceLabs tests for Installations and Performance - - * add resolveJsonModule - - * stub storage differently so tests work in Firefox and IE (#1940) - - * stub storage differently so tests work in Firefox and IE - - * [AUTOMATED]: Prettier Code Styling - - * rewrite test setup - - * [AUTOMATED]: Prettier Code Styling - - * change compilation target to es5 - - * fix IE11 errors - - * fix storage IE11 tests - - * fix util IE11 test - - * fix performance IE11 tests - - * make installations run in IE - - * fix integration/typescript tests in saucelabs - - * [AUTOMATED]: Prettier Code Styling - - * revert change that doesn't work - - * fix lint - - * add babel loader - -commit e24b1f4eb9756c4dbbd6bb0461aebd77a0d73354 -Author: Sebastian Schmidt -Date: Mon Sep 16 17:25:20 2019 -0700 - - Change the order of checks in applyRemoteEvent() (#2176) - -commit 372c0c57f9d613b39f27b37ef87b2b3a9d6e2535 -Author: Brian Chen -Date: Mon Sep 16 15:59:29 2019 -0700 - - Rename spec tests (#2178) - -commit 2195e9a8b9c4219099d489a6b71d4eaa5281079d -Merge: 4016987a7 91da49d25 -Author: Christina Holland -Date: Mon Sep 16 10:51:09 2019 -0700 - - Merge branch 'release' - Firebase 6.6.1 release - -commit 4016987a72fa87eea5171dd718d20f9e5dde8123 -Author: Feiyang -Date: Thu Sep 12 17:04:55 2019 -0700 - - replace some tslint rules with eslint rules (#2161) - - * use eslint no-floating-promise - - * replace tslint ban with eslint rules - - * [AUTOMATED]: Prettier Code Styling - - * eslint disable - - * fix lint - - * revert previous changes - - * fix lint for firestore - - * [AUTOMATED]: Prettier Code Styling - -commit 91da49d258f17b1e87d570fc6faff1175e7e2afd (tag: rxfire@3.8.1, tag: firebase@6.6.1, tag: @firebase/testing@0.13.1, tag: @firebase/firestore@1.5.2, tag: @firebase/database@0.5.3) -Author: Christina Holland -Date: Thu Sep 12 13:48:40 2019 -0700 - - Publish firebase@6.6.1 - -commit 20e8a07d5b9a6de7314bc4051d711f55d8dfd363 -Author: Sebastian Schmidt -Date: Thu Sep 12 10:30:44 2019 -0700 - - Fixing Document.toString() (#2168) - - This broke when data became data() in https://github.com/firebase/firebase-js-sdk/pull/2115 - -commit d0bb1b152cc0c7508d4f2a8f511a63c1017ddfc2 -Author: Feiyang -Date: Wed Sep 11 12:22:05 2019 -0700 - - use Ubuntu 16.04 (Xenial) image (#2170) - -commit 64b1924eb87c9a3503e26200865d7a3da4d2a13e -Author: Brian Chen -Date: Mon Sep 9 10:31:15 2019 -1000 - - Adding onSnapshotsInSync (not public) (#2100) - -commit 0462045f63c60b52b537f3ba9cb86f7184f29399 -Author: Sebastian Schmidt -Date: Mon Sep 9 12:07:04 2019 -0700 - - Clean up IndexedDb initialization (#2163) - -commit 1ca8b668a92822ddcd4b2fea0b30fa8e6f00a41a -Merge: 9ae44f6ba 38dcb6635 -Author: Feiyang1 -Date: Thu Sep 5 17:33:45 2019 -0700 - - Merge branch 'release' - Firebase 6.6.0 release - -commit 38dcb66352a8bb19be5ca4aff223821e121c7a03 (tag: rxfire@3.8.0, tag: firebase@6.6.0, tag: @firebase/webchannel-wrapper@0.2.26, tag: @firebase/util@0.2.27, tag: @firebase/testing@0.13.0, tag: @firebase/storage@0.3.11, tag: @firebase/polyfill@0.3.21, tag: @firebase/performance@0.2.18, tag: @firebase/messaging@0.4.10, tag: @firebase/logger@0.1.24, tag: @firebase/installations@0.2.6, tag: @firebase/functions@0.4.17, tag: @firebase/firestore@1.5.1, tag: @firebase/database@0.5.2, tag: @firebase/auth@0.12.0, tag: @firebase/auth-types@0.8.0, tag: @firebase/app@0.4.16) -Author: Feiyang1 -Date: Thu Sep 5 16:16:42 2019 -0700 - - Publish firebase@6.6.0 - -commit 9ae44f6baacb6b2404c75a5ab3d8711b28a10776 -Author: Sebastian Schmidt -Date: Thu Sep 5 15:44:07 2019 -0700 - - Make IntellJ test runners connect to Emulator (#2138) - -commit 3ad31c8eb8c4feb13eb347daae2136dfff8d708f -Author: Sebastian Schmidt -Date: Thu Sep 5 10:19:52 2019 -0700 - - Rewrap comment (#2148) - -commit 4ccd09ef6d74a0b6f81737600e5b1231a24afbb5 -Author: Michael Lehenbauer -Date: Thu Sep 5 10:04:19 2019 -0700 - - Remove nodePatches.ts hackery. (#2144) - - This had some very stale code to: - 1. Make it possible to use long-polling instead of WebSockets from the Node.JS SDK. This existed purely for testing purposes, wasn't reliable, and hasn't been used in ages. - 2. Work around a bad Node.JS bug that was fixed 6 years ago (https://github.com/joyent/node/issues/6506). - -commit 5037a7f59192629eefe9c9a3b2dbe7a98db2bd3a -Author: Feiyang -Date: Wed Sep 4 19:05:36 2019 -0700 - - fix the path to node reference docs (#2146) - -commit f8e9f34142b2745626bba069b02ea4cbcc1af239 -Author: Feiyang -Date: Wed Sep 4 16:08:24 2019 -0700 - - use non strict mode when generating doc (#2143) - -commit 0bc90694ccc4f9ee6e0554a74e8ff43bc6e3d7ef -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Sep 4 14:59:29 2019 -0700 - - added path for new auth docs (#2141) - -commit e3d740854b73336fac4871da5cf403a64b0ed890 -Author: rsgowman -Date: Tue Sep 3 19:48:21 2019 -0400 - - Avoid auth triggers if we haven't yet received the initial user. (#2137) - - * Avoid auth triggers if we haven't yet received the initial user. - - https://github.com/firebase/firebase-js-sdk/pull/2078/ altered the - initial state of currentUser from undefined to not undefined, which - caused the if statement to unconditionally evaluate to true. This - results in a race condition that could cause some initial writes to the - database to be dropped. - - Fixes https://github.com/firebase/firebase-js-sdk/issues/2135 - - * CHANGELOG update. - - * Fix to be more like android - -commit fa3fc0fa8760cf159e47b7860e00861205dbf55a -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Sep 3 11:11:20 2019 -0700 - - Multi tenant beta (#1921) - - Added multi-tenant support - -commit 611cc9d5b9b085acd9f09779498908c07d4be298 -Author: Renovate Bot -Date: Sat Aug 31 01:13:29 2019 +0300 - - chore(deps): update all non-major dependencies (#2126) - -commit 16253f641e6e945e72209f3e6b39c77c2dd0e8b5 -Author: Sebastian Schmidt -Date: Fri Aug 30 11:53:29 2019 -0700 - - Upgrade Firestore Emulator to 1.8.2 (#2133) - - This should fix the CI failure in https://github.com/firebase/firebase-js-sdk/pull/2128 - -commit 793dcb657124a5e158f1c41c8061ec731bb1cd1f -Merge: 58c835205 cf2c37315 -Author: Christina Holland -Date: Fri Aug 30 11:49:10 2019 -0700 - - Merge branch 'release' - Release 6.5.0 - -commit cf2c37315710b77ef3a1b7c99fae61ca21fca014 (tag: rxfire@3.7.1, tag: firebase@6.5.0, tag: @firebase/testing@0.12.3, tag: @firebase/firestore@1.5.0, tag: @firebase/firestore-types@1.5.0) -Author: Christina Holland -Date: Thu Aug 29 14:53:45 2019 -0700 - - Publish firebase@6.5.0 - -commit 58c83520536b3a50a178f221ec1cdea27dcda0d5 -Author: Renovate Bot -Date: Thu Aug 29 23:24:31 2019 +0300 - - chore(deps): update typescript-eslint monorepo to v2 (major) (#2087) - - * Update typescript-eslint monorepo to v2 - - * fix breaking changes - -commit f03eb7ca69440838df7e6d2dfff38401c4b6b302 -Author: Renovate Bot -Date: Thu Aug 29 20:08:52 2019 +0300 - - chore(deps): update dependency yargs to v14 (#2107) - -commit c7e501259eff8db6a576df36da9c2396a6d28fa1 -Author: Sebastian Schmidt -Date: Wed Aug 28 21:01:36 2019 -0700 - - Don't deserialize full Document proto for Query execution (#2115) - -commit c851936c33b1f83864ccde7978c8360e9e28ae82 -Author: Renovate Bot -Date: Thu Aug 29 02:25:44 2019 +0300 - - Update all non-major dependencies (#2104) - -commit 7f2e9610e62df964b37b030f0b320b7d4c93ff24 -Author: Christina Holland -Date: Wed Aug 28 15:50:54 2019 -0700 - - docs: Remove wbr tags inserted by Typedoc (#2117) - -commit e010f29eeeb9923224faccd9c8ecc547e93ebf68 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Tue Aug 27 14:54:16 2019 -0400 - - rename shutdown to terminate and publish it (#2116) - - * make waitForPendingWrites public - - * update tests as well. - - * Fix CHANGELOG.md - - * fixing nits. - - * fix version in changelog - - * rename shutdown to terminate and publish it - - * [AUTOMATED]: Prettier Code Styling - - * addressing document nits - -commit 4bccd8f5d5836f911c9a758d4a6c1a993b64a4f2 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Tue Aug 27 14:13:32 2019 -0400 - - make waitForPendingWrites public (#2109) - - * make waitForPendingWrites public - - * update tests as well. - - * Fix CHANGELOG.md - - * fixing nits. - - * fix version in changelog - - * addressing document nits. - -commit c99ad64f27ffb9404f4f753e0f5ee6b11f4921cc -Author: Christina Holland -Date: Mon Aug 26 15:24:46 2019 -0700 - - Update doc gen script (#2114) - -commit aa31411ab0255d1d9f427e90239341fd7a19d2bf (tag: rxfire@3.7.0, tag: firebase@6.4.2, tag: @firebase/testing@0.12.2, tag: @firebase/performance@0.2.17, tag: @firebase/firestore@1.4.12) -Author: Feiyang1 -Date: Fri Aug 23 15:56:56 2019 -0700 - - Publish firebase@6.4.2 - -commit 57c189560a2e002039e74195199d40f745b58a1f -Merge: 89f90c9a9 f03262386 -Author: Feiyang1 -Date: Fri Aug 23 14:44:58 2019 -0700 - - Merge branch 'release' - Release 6.4.1 - -commit 89f90c9a958ec92f994f246de5af4ca514a34b31 -Author: alikn -Date: Fri Aug 23 14:42:33 2019 -0700 - - Fix an issue when an error is thrown for performance oob metrics (#2110) - - fix an error in the performance sdk which throws an error for oob metrics - -commit f03262386a4c075c48add395ba01f97c92e1ace7 (tag: rxfire@3.6.12, tag: firebase@6.4.1, tag: @firebase/webchannel-wrapper@0.2.25, tag: @firebase/util@0.2.26, tag: @firebase/testing@0.12.1, tag: @firebase/storage@0.3.10, tag: @firebase/polyfill@0.3.20, tag: @firebase/performance@0.2.16, tag: @firebase/messaging@0.4.9, tag: @firebase/logger@0.1.23, tag: @firebase/installations@0.2.5, tag: @firebase/functions@0.4.16, tag: @firebase/firestore@1.4.11, tag: @firebase/database@0.5.1, tag: @firebase/database-types@0.4.3, tag: @firebase/app@0.4.15) -Author: Feiyang1 -Date: Thu Aug 22 15:23:43 2019 -0700 - - Publish firebase@6.4.1 - -commit 919bcbd94d14d0dab6371e36b3832445bab2861a -Author: Sebastian Schmidt -Date: Thu Aug 22 10:28:22 2019 -0700 - - Don't persist documents that we already have (#2099) - -commit 1dbf3bce7d8a37730f406671c979893f96dd2f6e -Author: Sebastian Schmidt -Date: Wed Aug 21 14:41:24 2019 -0700 - - Move isShutdown to state expectations (#2102) - -commit 716bf5b2060a022f1547936ac4d4a3b381126077 -Author: Yuchen Shi -Date: Wed Aug 21 14:07:11 2019 -0700 - - Support SnapshotListenOptions for fromRef. (#2056) - -commit 27083071e4a8678c5e109687daf1b9e972196c87 -Author: Sebastian Schmidt -Date: Tue Aug 20 10:34:29 2019 -0700 - - Fix spec test versions (#2098) - -commit 4d0d246ffbad14f50d05d28aba4135897943ccf1 -Author: kim-f <51006219+kim-f@users.noreply.github.com> -Date: Tue Aug 20 13:25:07 2019 -0400 - - Validate performance metrics and attributes before storing them (#1917) - - * Add validation for custom metrics and custom attributes, and throw a Firebase Performance error when a specified metric, attribute name, or attribute value fails validation. - - * [AUTOMATED]: Prettier Code Styling - - * Respond to comments: include check that values are not blank, and adjust test format. - - * [AUTOMATED]: Prettier Code Styling - - * Use single quotes in trace.test.ts. - - * [AUTOMATED]: Prettier Code Styling - - * Correct cases of == and != to === and !==. - - * Change "doesn't" to "doesnt" in test strings in order to use single quotes. Code formatter automatically converts strings containing \' to use double quotes. - - * Add import for Array.some to packages/polyfill/index.ts. - -commit 394ea1ba2c1386b3a90a35be6cd7900a971608d9 -Author: Brian Chen -Date: Mon Aug 19 16:59:29 2019 -0700 - - Fix lint against master (#2095) - -commit c8abbaa355b41dbe61d8256182e15db21f4cb931 -Merge: 06bad3eed 309d5cf8d -Author: Feiyang1 -Date: Mon Aug 19 10:35:36 2019 -0700 - - Merge branch 'release' - Release 6.4.0 - -commit 06bad3eeddda62e0e8bed1e9cb81622d2574d8af -Author: Christina Holland -Date: Fri Aug 16 11:48:43 2019 -0700 - - Do not throw error on duplicate service registration. (#2085) - -commit 5b5afa2567fc05b7887faf5d3c9069224c709803 -Author: Feiyang -Date: Fri Aug 16 10:15:16 2019 -0700 - - remove @firebase/app and @firebase/app-types from peerDependencies (#2082) - - * remove firebase/app and firebase/app-types from peerDependencies - - * make app-types a regular dependency to make admin sdk happy - - * demote @firebase/app and app-types to devDeps - -commit 7ab25c67fadd0b8aa76529c8d31e63478e156759 -Author: Mertcan Mermerkaya -Date: Fri Aug 16 15:21:14 2019 +0100 - - Add variety to valid FIDs for testing (#2089) - -commit ceee0d7b96655d6abfea07529f0b151c0ad9d73c -Author: Mertcan Mermerkaya -Date: Fri Aug 16 15:17:26 2019 +0100 - - Remove gcm_sender_id / manifest.json related code (#2088) - - It was deprecated three years ago. - - developers.google.com/web/updates/2016/07/web-push-interop-wins - -commit 2907439fd81637b4da8f1eaa3ef2842fec05f17b -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Thu Aug 15 22:09:51 2019 -0400 - - Allow user to unlisten to queries after shutdown. (#2083) - - * Can unlisten - - * explicitly check for shut down - - * [AUTOMATED]: Prettier Code Styling - - * better comment. - - * [AUTOMATED]: Prettier Code Styling - -commit 309d5cf8db4a438b67fe86e55e9ab4256a749181 (tag: rxfire@3.6.11, tag: firebase@6.4.0, tag: @firebase/testing@0.12.0, tag: @firebase/firestore@1.4.10, tag: @firebase/database@0.5.0) -Author: Christina Holland -Date: Thu Aug 15 14:29:25 2019 -0700 - - Publish firebase@6.4.0 - -commit cacb48ec8ac1d73959d88202b92053fe1691c77f -Author: Sebastian Schmidt -Date: Thu Aug 15 11:19:33 2019 -0700 - - Don't persist manufactured documents (#2079) - -commit 132eef67ae3ef2eb4fc0a5c7178b49a4be59cc5f -Author: Brian Chen -Date: Thu Aug 15 10:54:48 2019 -0700 - - Set delay to 0 for skipping TimerId delays (#2084) - -commit f18b0fb7845358839c96a5f07bdf87e862f07c62 -Author: wu-hui <53845758+wu-hui@users.noreply.github.com> -Date: Thu Aug 15 12:37:26 2019 -0400 - - Port waitForPendingWrites from android (#2081) - - * waitForPendingWrites + allow-unlisten-after-shutdown. - - * addressing comments - - * addressing comments #2 - -commit 0eeb71f465d6a177901b29e093e60ed4cf7dfa4d -Author: Renovate Bot -Date: Wed Aug 14 03:29:26 2019 +0300 - - Update all non-major dependencies (#2069) - - * Update all non-major dependencies - - * fix typing issue - -commit c822e78b00dd3420dcc749beb2f09a947aa4a344 -Author: Brian Chen -Date: Tue Aug 13 16:41:46 2019 -0700 - - Retrying transactions with backoff (#2063) - -commit 1674abfb1e85698f8c2fdbfd792ab08f76099c65 -Author: Brian Chen -Date: Tue Aug 13 12:11:39 2019 -0700 - - Ran lint on master (#2080) - -commit 56cbbfdf84174eebec60b07c37b50cba230b0095 -Author: Michael Lehenbauer -Date: Mon Aug 12 14:50:59 2019 -0700 - - Enable strictPropertyInitialization for Firestore (#2078) - - * Enable strictPropertyInitialization: Refactor Path to BasePath similar to Android. - - This avoids having uninitialized properties due to the init() method doing the construction. - - * Remove dummy FirebaseConfig class. - - This class doesn't exist on other platforms and was responsible for a bunch of - strict-property-initialization violations. - - * Initialize _dataConverter in constructor. - - Fixes a strict-property-initialization violation. - - * Fix or suppress uninitialized properties in IndexedDbPersistence. - - * Fix StreamBridge property types to correctly indicate they can be undefined. - - * Make sure abstract class members are marked abstract so they don't need to be initialized. - - * FieldValue.typeOrder - * Mutation.type / key / precondition - * PersistenceTransaction.currentSequenceNumber - - * Fix uninitialized LLRBEmptyNode properties. - - Throw errors instead of potentially returning undefined. - - I ran the SortedMap perf tests before/after this change and there was no discernible difference. - - * Fix uninitialized properties in MemoryPersistence. - - * Fix misc. uninitialized properties. - - * Suppress some intentionally uninitialized properties. - - These would be obnoxious to define as `| undefined` but we also can't initialize them in the constructor. - - * Fix some misc. uninitialized properties in tests. - - * Suppress some intentionally uninitialized properties in tests. - - * Enable strictPropertyInitialization. - - * Minor CR feedback. - -commit a20dbea402fa4ce173f2d419cb7290d65f4e1523 -Author: Michael Lehenbauer -Date: Mon Aug 12 13:53:27 2019 -0700 - - Enable strict mode for scripts/emulator-testing/. (#2066) - -commit e4eea3fc40aa55bb4ab1827fff9ea6b2c9034b17 -Author: Jan Wyszynski -Date: Fri Aug 9 18:01:55 2019 -0700 - - treat the `ns=` query param as the namespace name if it is present (#2060) - - * treat `ns=` query param as the namespace name if it is present - - * [AUTOMATED]: Prettier Code Styling - - * record ns queryparam override in RepoInfo class - - * [AUTOMATED]: Prettier Code Styling - - * update database test suite - - * more descriptive RepoInfo member name - - * Add to changelog - -commit 4ebedd071ddd4f4f7ab427a87fa6a725622225c3 -Author: Jan Wyszynski -Date: Fri Aug 9 16:14:10 2019 -0700 - - use fake "owner" credential when rtdb emulator env var is set (#2029) - - * omit access token exchange if talking to an emulator - - * [AUTOMATED]: Prettier Code Styling - - * create TokenProvider interface and add EmulatorAuthTokenProvider - - * [AUTOMATED]: Prettier Code Styling - - * Update packages/database/src/core/EmulatorAuthTokenProvider.ts - - Co-Authored-By: Yuchen Shi - - * break circular dependency by extracting env var constant - - * [AUTOMATED]: Prettier Code Styling - - * rename AuthTokenProvider -> FirebaseAuthTokenProvider etc. - - * [AUTOMATED]: Prettier Code Styling - - * fix ReadOnlyRestClient constructor comment - - * poke travis CI - - * remove unnecessary js docs - -commit 3f9e8e8f15d387e57b4e61762c1a33a830f83133 -Author: Michael Lehenbauer -Date: Fri Aug 9 13:10:15 2019 -0700 - - Enable strictBindCallApply for Firestore. (#2074) - -commit 140d352d9176549114f33fe234710d2e87818dbe -Author: Sebastian Schmidt -Date: Fri Aug 9 11:26:44 2019 -0700 - - Make initial view test actually use index-free queries (#2051) - -commit 10b62335ad2e7efd72487dd0c2df7899e0d6b61d -Author: Jan Wyszynski -Date: Fri Aug 9 11:15:15 2019 -0700 - - database sdk not correctly inferring emulator namespace name (#2064) - - * database sdk not correctly inferring emulator namespace name - - * add environment variable test - - * [AUTOMATED]: Prettier Code Styling - -commit 903dad89e1c36b5579affd6516a617e16da89729 -Author: Michael Lehenbauer -Date: Fri Aug 9 10:48:10 2019 -0700 - - Firestore: Enable noImplicitThis in tsconfig. (#2068) - -commit 8a33cae59460c9b7b77e7f7a396c9ff8a26f1fea -Author: Michael Lehenbauer -Date: Fri Aug 9 10:14:57 2019 -0700 - - Remove unnecessary tsconfig.json flags. (#2067) - - tsconfig.base.json enables "strict" now which implicitly enables "strictFunctionTypes", "strictNullChecks", and "noImplicitAny" so we don't need to do so explicitly. - - Disabling "alwaysStrict" was unnecessary since we have no violations. - -commit fb6d4aa9e034b1ba4aa06efd026754c6aa864064 -Author: Mertcan Mermerkaya -Date: Fri Aug 9 14:37:31 2019 +0100 - - Remove Pinar from Messaging owners (#2059) - -commit 89ead882d110cd1521148288c5fe275a5a965941 -Merge: 180798431 3a99edac5 -Author: Feiyang1 -Date: Thu Aug 8 17:02:40 2019 -0700 - - Merge remote-tracking branch 'origin/release' - Release 6.3.5 - -commit 3a99edac5af7cb978cd01a5b6a29b5138349768e (tag: rxfire@3.6.10, tag: firebase@6.3.5, tag: @firebase/webchannel-wrapper@0.2.24, tag: @firebase/util@0.2.25, tag: @firebase/testing@0.11.10, tag: @firebase/storage@0.3.9, tag: @firebase/polyfill@0.3.19, tag: @firebase/performance@0.2.15, tag: @firebase/messaging@0.4.8, tag: @firebase/logger@0.1.22, tag: @firebase/installations@0.2.4, tag: @firebase/functions@0.4.15, tag: @firebase/firestore@1.4.9, tag: @firebase/database@0.4.12, tag: @firebase/auth@0.11.8, tag: @firebase/app@0.4.14) -Author: Feiyang1 -Date: Thu Aug 8 16:23:35 2019 -0700 - - Publish firebase@6.3.5 - -commit 18079843109f5fc501ae21bd95d82339c1c471da -Author: Brian Chen -Date: Thu Aug 8 14:58:58 2019 -0700 - - Updating flaky test to use less writes (#2065) - -commit 862f41ac003174c1a2619a98c41937ebdcbceec1 -Author: Feiyang -Date: Wed Aug 7 13:46:45 2019 -0700 - - make renovate update transitive deps in the lock file (#2057) - -commit b1758c4089cd9a13f40e8311334f6ae66c42552b -Author: Sebastian Schmidt -Date: Wed Aug 7 13:45:28 2019 -0700 - - Unbreak .info/serverTimestampOffset (#2061) - -commit 80d0846598d5a155390701c3b9a93ac160ee12b0 -Author: Hui-Wu <50340818+Hui-Wu@users.noreply.github.com> -Date: Wed Aug 7 11:19:10 2019 -0400 - - port public shutdown to web sdk. (#2045) - - * pending firebaseApp change - - * [AUTOMATED]: Prettier Code Styling - - * Looks to be working. - - * browser passes/node fails - - * [AUTOMATED]: Prettier Code Styling - - * add settings for new instance - - * final self review. - - * addressing comments #1 - - * [AUTOMATED]: Prettier Code Styling - - * address comments #2 - -commit 7a2403ad4c794d0848a1dd5167a5a4c0b055d454 -Author: Renovate Bot -Date: Tue Aug 6 21:59:07 2019 +0300 - - Update all non-major dependencies (#2046) - -commit 4eabca0adcc356ac7076dc310ce0ad1aaef9e919 -Author: Renovate Bot -Date: Tue Aug 6 21:00:44 2019 +0300 - - Update dependency chromedriver to v76 (#2047) - -commit fc1f1bcef8131117795b2d5d83cc8208a493822c -Author: Sebastian Schmidt -Date: Mon Aug 5 15:52:34 2019 -0700 - - Make spec tests easier to debug (#2055) - - With this simple change, tests missing the "exclusive" tag will not be translated into JSON. Hence, we can set breakpoints in the spec builder functions. - -commit 3c3ddb46e9b628a1a8aad7ee16a2813558654a9e -Author: Sebastian Schmidt -Date: Fri Aug 2 15:00:38 2019 -0700 - - Add spec test for limit query initialization (#2050) - -commit 16bbe6c25c62bca4d572eb84b07cb59dde097920 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Fri Aug 2 12:37:36 2019 -0700 - - clear redirect result after signOut or getRedirectResult being called (#2049) - -commit 386fd24a13e7d7ca78e61b1d5d4f21b886247699 (tag: rxfire@3.6.9, tag: firebase@6.3.4, tag: @firebase/util@0.2.24, tag: @firebase/testing@0.11.9, tag: @firebase/storage@0.3.8, tag: @firebase/polyfill@0.3.18, tag: @firebase/performance@0.2.14, tag: @firebase/messaging@0.4.7, tag: @firebase/logger@0.1.21, tag: @firebase/installations@0.2.3, tag: @firebase/functions@0.4.14, tag: @firebase/firestore@1.4.8, tag: @firebase/database@0.4.11, tag: @firebase/auth@0.11.7, tag: @firebase/app@0.4.13, tag: @firebase/app-types@0.4.3) -Author: Feiyang1 -Date: Thu Aug 1 13:23:48 2019 -0700 - - Publish firebase@6.3.4 - -commit 2b6266776c37ddd31187b3ec6dc8e36b79e69e72 -Author: Feiyang -Date: Thu Aug 1 11:41:50 2019 -0700 - - fix an obnoxious uglify issue (#2039) - - * fix an obnoxious uglify issue - - * Add a changelog entry for RTDB - - * update changelog entry - - * just use issue # - -commit 41a27176301fb1f1f76f7220d4fa2e04811f48eb -Author: Sebastian Schmidt -Date: Wed Jul 31 14:38:05 2019 -0700 - - Add spec tests for limit queries with limbo documents (#2033) - -commit 576b00fc6aa4e2d7be0bf49c6c0846852c3f9f32 -Author: Feiyang -Date: Wed Jul 31 14:06:28 2019 -0700 - - Update a transitive dependency in lock file to support Chrome 76 for protractor tests (#2037) - -commit 80ae4d129eb502cf1719821cf6e855f11996bb6a -Author: Feiyang -Date: Mon Jul 29 10:46:18 2019 -0700 - - Added an internal API to allow removing a service instance (#2020) - - * Add an internal API to allow removing a service instance - - * [AUTOMATED]: Prettier Code Styling - - * add a test case for service that supports multiple instances - - * [AUTOMATED]: Prettier Code Styling - -commit d21965d55db27e20c918918d411119403d7767b3 -Author: Feiyang -Date: Mon Jul 29 10:45:57 2019 -0700 - - update node version requirement for the repo (#2021) - -commit 8271edfb49a17082c379bae160a0ebcbfbe215cb -Author: Renovate Bot -Date: Fri Jul 26 21:57:54 2019 +0300 - - Update all non-major dependencies (#2024) - - * Update all non-major dependencies - - * fix type integration tests - -commit 5ea26ed2178150024475aae671206129480b38e8 (tag: rxfire@3.6.8, tag: firebase@6.3.3, tag: @firebase/testing@0.11.8, tag: @firebase/firestore@1.4.7, tag: @firebase/database@0.4.10) -Author: Feiyang1 -Date: Fri Jul 26 11:25:18 2019 -0700 - - Publish firebase@6.3.3 - -commit 12c908ff2479724850109a2bfd8c891d0c49e5e3 -Author: Michael Lehenbauer -Date: Fri Jul 26 10:12:24 2019 -0700 - - Add undefined check for `process` to fix browser support (#2025). (#2028) - -commit 28c33a11072d3b74b1b6d16498eb8deb60c9c865 -Author: Brian Chen -Date: Thu Jul 25 15:17:35 2019 -0700 - - Only retry transactions on non-permanent errors (#2018) - -commit 568f923d7ebe35e5426f4f78cdff2930b6b70332 -Author: Jan Wyszynski -Date: Thu Jul 25 14:48:05 2019 -0700 - - infer namespace from subdomain in database emulator environment variable (#2016) - - * set database emulator namespace to databaseURL subdomain - - * [AUTOMATED]: Prettier Code Styling - - * use let binding for `dbUrl` - - * [AUTOMATED]: Prettier Code Styling - - * fix typos - - * remove unnecessary parser diff - - * nit - - * use RepoInfo namespace member for ns query parameter - - * type spec for `dbUrl` variable - -commit 4d23d589f7daeb64e7979b38922859f05b43c2e8 -Merge: bccc8a54d 6dc1400e6 -Author: Christina Holland -Date: Thu Jul 25 14:25:52 2019 -0700 - - Merge branch 'release' - 6.3.2 release - -commit 6dc1400e63ce4c5c3267d6663f99f7bf6e563459 (tag: rxfire@3.6.7, tag: firebase@6.3.2, tag: @firebase/webchannel-wrapper@0.2.23, tag: @firebase/util@0.2.23, tag: @firebase/testing@0.11.7, tag: @firebase/storage@0.3.7, tag: @firebase/storage-types@0.3.3, tag: @firebase/polyfill@0.3.17, tag: @firebase/performance@0.2.13, tag: @firebase/messaging@0.4.6, tag: @firebase/messaging-types@0.3.2, tag: @firebase/logger@0.1.20, tag: @firebase/installations@0.2.2, tag: @firebase/functions@0.4.13, tag: @firebase/functions-types@0.3.8, tag: @firebase/firestore@1.4.6, tag: @firebase/firestore-types@1.4.4, tag: @firebase/database@0.4.9, tag: @firebase/database-types@0.4.2, tag: @firebase/auth@0.11.6, tag: @firebase/auth-types@0.7.2, tag: @firebase/app@0.4.12, tag: @firebase/app-types@0.4.2) -Author: Christina Holland -Date: Thu Jul 25 14:04:08 2019 -0700 - - Publish firebase@6.3.2 - -commit bccc8a54d0e548b042b6c16ab16fa89a3fdb390a -Author: Brian Chen -Date: Wed Jul 24 12:06:34 2019 -0700 - - Surface transaction errors in browser (#2017) - -commit 13cdd14b838ee0de65451107040cb4780491a314 -Author: Brian Chen -Date: Wed Jul 24 10:57:49 2019 -0700 - - todo vanished (#2019) - -commit 5e506a636f191e1ce01e9e7fd1118c183bc5f39c -Author: Jan Wyszynski -Date: Mon Jul 22 14:55:56 2019 -0700 - - support FIREBASE_DATABASE_EMULATOR_HOST env var (#2005) - - * support FIREBASE_DATABASE_EMULATOR_HOST environment variable - - * [AUTOMATED]: Prettier Code Styling - - * use one env var definition, remove extra logic - - * [AUTOMATED]: Prettier Code Styling - - * nit: remove blank line - - * minor version bump and environment variable guard - - * [AUTOMATED]: Prettier Code Styling - - * fix unbound variable reference - - * don't export new env variable - - * [AUTOMATED]: Prettier Code Styling - - * revert minor version bump change - - * add cross-referencing comment, prefer env var over app options - -commit 05fd7fc69222ce458073c49acfee9f53719241be -Author: Renovate Bot -Date: Mon Jul 22 20:32:13 2019 +0300 - - Update dependency google-closure-compiler to v20190709 (#2008) - -commit 855c0ede8237a443dd2169cd766b73eafa0507bc -Author: Renovate Bot -Date: Mon Jul 22 19:24:00 2019 +0300 - - Update dependency google-closure-library to v20190709 (#2009) - -commit 5c919b22e77e4e63af4ae35e5acb47a9f79dddd8 -Author: Feiyang -Date: Fri Jul 19 17:09:56 2019 -0700 - - add coverage badge (#2013) - -commit 22fcb8a57cd7fbec3400177a83b63f1986810c6d -Author: Gil -Date: Fri Jul 19 15:11:00 2019 -0700 - - Upgrade to Firestore Emulator 1.6.2 (#2002) - - This just brings us up-to-date without any functional changes as far as - the SDK is concerned. - -commit e988015af937ce4fbbe693f65e6552a5d2a850ca -Author: Renovate Bot -Date: Sat Jul 20 00:48:51 2019 +0300 - - Update all non-major dependencies (#2007) - -commit e5a6d3185c753f12ae8489efa61d1fb99b84fe11 -Author: Brian Chen -Date: Fri Jul 19 11:07:07 2019 -0700 - - add changelog (#2011) - -commit ab9f2645c44032a278716819b21ab667f7461a46 -Merge: f2d96d82c ecb6f38ee -Author: Feiyang1 -Date: Thu Jul 18 17:31:23 2019 -0700 - - Merge branch 'release' - Merge with Firebase 6.3.1 release - -commit ecb6f38ee4b60a129accd0eead1b8a584b0408fa (tag: rxfire@3.6.6, tag: firebase@6.3.1, tag: @firebase/webchannel-wrapper@0.2.22, tag: @firebase/util@0.2.22, tag: @firebase/testing@0.11.6, tag: @firebase/storage@0.3.6, tag: @firebase/storage-types@0.3.2, tag: @firebase/polyfill@0.3.16, tag: @firebase/performance@0.2.12, tag: @firebase/performance-types@0.0.3, tag: @firebase/messaging@0.4.5, tag: @firebase/messaging-types@0.3.1, tag: @firebase/logger@0.1.19, tag: @firebase/installations@0.2.1, tag: @firebase/installations-types@0.1.2, tag: @firebase/functions@0.4.12, tag: @firebase/functions-types@0.3.7, tag: @firebase/firestore@1.4.5, tag: @firebase/firestore-types@1.4.3, tag: @firebase/database@0.4.8, tag: @firebase/database-types@0.4.1, tag: @firebase/auth@0.11.5, tag: @firebase/auth-types@0.7.1, tag: @firebase/app@0.4.11, tag: @firebase/app-types@0.4.1) -Author: Feiyang1 -Date: Thu Jul 18 17:19:57 2019 -0700 - - Publish firebase@6.3.1 - -commit f2d96d82c3beaf284e82682362230378961bd7f7 -Author: Feiyang -Date: Thu Jul 18 17:10:13 2019 -0700 - - Fix a regression that leads to larger bundle size (#2006) - - * Fix a regression that leads to larger bundle size - - * [AUTOMATED]: Prettier Code Styling - - * remove type annotations - -commit 9173c904d48f5bb71a796a0f4f7ded127cea0f7c -Author: Brian Chen -Date: Thu Jul 18 11:03:01 2019 -0700 - - Refactor Transaction and SyncEngine to use async/await (#1983) - -commit 663f3e937db45e9d74a439dbdc31097a7559ab77 -Author: alikn -Date: Thu Jul 18 09:41:20 2019 -0700 - - [Performance] do not access window before initialization (#2003) - - * [Performance] do not access window before initialization - -commit 59d5bcafb6977e728e76d3f4045368a496c53c5b -Author: Feiyang -Date: Wed Jul 17 11:46:45 2019 -0700 - - disable depbot (#2001) - -commit 22caf9f1ec31b7acb1df48cf84935bce225c5ebe -Author: Sebastian Schmidt -Date: Wed Jul 17 07:36:52 2019 +0700 - - Fix Spec tests 'Limbo documents stay consistent' (#1994) - -commit 6196a50f903c0fdaacfa1c1cb3d191804080e8e3 -Author: Feiyang -Date: Tue Jul 16 17:25:48 2019 -0700 - - add engines field to functions (#1997) - -commit 62b468021327daf89c1bf99b68a9b08e29706194 -Author: Brian Chen -Date: Tue Jul 16 17:02:33 2019 -0700 - - Run persistence and node tests in travis, update tests to not timeout (#1991) - -commit c9a881eb5fdd3408399c84a98eb71bfc7751f4ec -Author: Brian Chen -Date: Tue Jul 16 14:05:34 2019 -0700 - - Make running against the emulator the default for Firestore integration tests (#1995) - -commit c8bbad8c4537783fb009127ceb9e00052a1bd6fc -Author: Renovate Bot -Date: Tue Jul 16 20:01:25 2019 +0300 - - Update all non-major dependencies (#1985) - -commit 8032d55cbd224fdaa07f6260be38eae33434c61d -Author: Sebastian Schmidt -Date: Tue Jul 16 23:41:38 2019 +0700 - - Running prettier (#1993) - - * Running prettier for Firestore - - * Fix everything - -commit 5d676e136e5f88bbe3f0e64e69cfcb2ce9f43cc8 -Author: Gil -Date: Tue Jul 16 08:38:20 2019 -0700 - - Port null/NaN validation text from iOS (#1987) - - From https://github.com/firebase/firebase-ios-sdk/pull/2670 - -commit 3c8f85d0185e3305f0ba7790d46eebb8e9e78e62 -Author: Brian Chen -Date: Mon Jul 15 15:36:06 2019 -0700 - - add ts-ignore line (#1990) - -commit 444c3ae4b56518ddee794b2db4fad5d437566290 -Author: Christina Holland -Date: Mon Jul 15 10:33:13 2019 -0700 - - Enable strict mode on all packages except firestore and database (#1948) - -commit a899e7d41aee801a8f25dba3ddfd35f5c428eb95 -Author: Renovate Bot -Date: Mon Jul 15 20:31:04 2019 +0300 - - Update dependency karma-chrome-launcher to v3 (#1984) - -commit 01ff95fdafdc1c6344937b6b23bab2abcde3239e -Author: Feiyang -Date: Mon Jul 15 10:29:39 2019 -0700 - - update renovate rules (#1986) - -commit ce9f7545a5d06995ed234a68ca5b057efa049e1c -Author: Renovate Bot -Date: Mon Jul 15 19:56:46 2019 +0300 - - Pin dependency rxjs to 6.5.2 (#1961) - -commit 7533694226b99f764c78f3991416118bf3d97e56 -Author: Hui-Wu <50340818+Hui-Wu@users.noreply.github.com> -Date: Mon Jul 15 12:27:56 2019 -0400 - - change getMissingBaseDocuments (#1989) - - * change getMissingBaseDocuments - - * add empty line - -commit 271476b3c14712940f50ecaac8917581437712bc -Author: Renovate Bot -Date: Sat Jul 13 03:12:16 2019 +0300 - - Update dependency firebase-functions to v3 (#1967) - -commit 4e3ebcacadb40f101a39643152d9da8b2636b653 -Author: Brian Chen -Date: Fri Jul 12 17:08:41 2019 -0700 - - Fix preconditions in transactions (#1980) - -commit f6354576ec99350aa3e6b2c344c72bd7c8c68128 -Author: Renovate Bot -Date: Sat Jul 13 02:07:44 2019 +0300 - - Update dependency firebase-tools to v7 (#1968) - -commit d9cf2a5ba522b4d647c3fdf7efd92017184bf244 -Author: Renovate Bot -Date: Sat Jul 13 02:04:12 2019 +0300 - - Update dependency rollup-plugin-node-resolve to v5 (#1975) - -commit e294ecb96aa8c78c824143922c914bef6629b866 -Author: Renovate Bot -Date: Sat Jul 13 01:58:40 2019 +0300 - - Update dependency ts-loader to v6 (#1977) - -commit b8535ea780cfc2a176b9899071e511350e3e4bfa -Author: Renovate Bot -Date: Sat Jul 13 01:52:14 2019 +0300 - - Update dependency chromedriver to v75 (#1963) - -commit 7ab551f5a20c1cb71bddc55723f5b0a69715b626 -Author: Renovate Bot -Date: Sat Jul 13 01:40:07 2019 +0300 - - Update dependency firebase-admin to v8 (#1966) - -commit e5074484d66ab3c4be83abe5de3ac14a2e7f9635 -Author: Renovate Bot -Date: Sat Jul 13 01:31:47 2019 +0300 - - Update dependency husky to v3 (#1972) - -commit 79e1700ad6d85bd5d411c9cfc337c5022359706b -Author: Renovate Bot -Date: Sat Jul 13 01:29:34 2019 +0300 - - Update dependency karma-webpack to v4 (#1973) - -commit 2f42cadf036eef51bc6a22e96fb595f9f6f06316 -Author: Renovate Bot -Date: Sat Jul 13 01:26:13 2019 +0300 - - Update dependency rollup-plugin-commonjs to v10 (#1974) - -commit 40313d20edfaa784f5c9ed810dce48012933a769 -Author: Renovate Bot -Date: Sat Jul 13 01:23:20 2019 +0300 - - Update dependency rollup-plugin-terser to v5 (#1976) - -commit 37c13b3266c9003b3719f49dcdbf30dc74477ac0 -Author: Renovate Bot -Date: Sat Jul 13 01:09:54 2019 +0300 - - Update dependency del to v5 (#1964) - - * Update dependency del to v5 - - * update lock file - -commit 0bc236f34d2dc4f6f925a5d73589d479180266fd -Author: Sebastian Schmidt -Date: Sat Jul 13 04:36:29 2019 +0700 - - Adding Limit/Limbo spec tests for go/index-free (#1960) - -commit 493fe52d74b43200bc4e5afcc8f1f13495d66a0b -Author: Renovate Bot -Date: Fri Jul 12 23:32:25 2019 +0300 - - Update all non-major dependencies (#1962) - - * Update all non-major dependencies - - * fix type errors - - * [AUTOMATED]: Prettier Code Styling - - * fix types - - * [AUTOMATED]: Prettier Code Styling - - * fix more types - - * [AUTOMATED]: Prettier Code Styling - -commit 5ff1c6d8b9df7b8e4de92d4aa59451574ee77992 -Author: Christina Holland -Date: Fri Jul 12 11:16:03 2019 -0700 - - Update rollup warning message in Node. (#1949) - -commit 0d2e108323f36e5025723fba2a8181efc2013b36 -Author: Hui-Wu <50340818+Hui-Wu@users.noreply.github.com> -Date: Fri Jul 12 08:15:30 2019 -0400 - - Fix missing query results when it is a match after a local patch mutation. (#1957) - - When a local patch mutation is not acked by server yet, but the mutation makes a document matching a query, the document might not show up in the compensated query results. This PR fixes the bug. - - See firebase/firebase-android-sdk#155 - -commit fb5c762b83535ba5a66907307e8db44a1541c9d4 -Merge: ed17a5896 14605f9d1 -Author: Christina Holland -Date: Thu Jul 11 16:12:34 2019 -0700 - - Merge branch 'release' - 6.3.0 release - -commit 14605f9d1dede72528b4cc8a99b404f7e7606791 (tag: rxfire@3.6.5, tag: firebase@6.3.0, tag: @firebase/util@0.2.21, tag: @firebase/testing@0.11.5, tag: @firebase/storage@0.3.5, tag: @firebase/polyfill@0.3.15, tag: @firebase/performance@0.2.11, tag: @firebase/messaging@0.4.4, tag: @firebase/logger@0.1.18, tag: @firebase/installations@0.2.0, tag: @firebase/functions@0.4.11, tag: @firebase/firestore@1.4.4, tag: @firebase/firestore-types@1.4.2, tag: @firebase/database@0.4.7, tag: @firebase/auth@0.11.4, tag: @firebase/app@0.4.10) -Author: Christina Holland -Date: Thu Jul 11 14:27:26 2019 -0700 - - Publish firebase@6.3.0 - -commit ed17a58966afc0bf69cb58263273f58d02ccd125 -Author: Yuchen Shi -Date: Wed Jul 10 16:56:49 2019 -0700 - - RxFire: Bump peerDependency of firebase to 6.x.x. (#1944) - - * RxFire: Bump peerDependency of firebase to 6.x.x. - - * Support both firebase 5 and 6. - -commit a83f55726627703ab8a589c94023173c9419386b -Author: Feiyang -Date: Tue Jul 9 17:24:08 2019 -0700 - - remove whitespace (#1954) - -commit 7773700dd40f2c788acfd3e060ad97ca12c2abf6 -Author: Feiyang -Date: Tue Jul 9 16:47:12 2019 -0700 - - add renovate configuration (#1952) - -commit b3376e2c5705d9247fae54445175469400ca9003 -Author: Christina Holland -Date: Tue Jul 9 15:15:49 2019 -0700 - - Revert manual version bumps (#1950) - -commit 6a15cd7f64c2fd04e93146c22b899e1ff868a2e7 -Author: Brian Chen -Date: Mon Jul 8 17:22:13 2019 -0700 - - Standardize Firestore transaction errors (#1937) - -commit ca8d82958872e4da05f2ef70b8df8da282dacac1 -Author: Christina Holland -Date: Mon Jul 8 10:16:54 2019 -0700 - - Enable Typescript strict flag for Storage (#1935) - - Enable Typescript strict flag for Storage - -commit fc5a87c835d266c4e9a4123e936ea2efd792f823 -Author: Feiyang -Date: Wed Jul 3 09:41:05 2019 -0700 - - enable eslint for rxfire (#1873) - - * enable eslint in rxfire - - * fix rxfire lint issues - - * [AUTOMATED]: Prettier Code Styling - - * rebase on master - - * [AUTOMATED]: Prettier Code Styling - - * remove dev only file - - * update deps - - * fix type error - - * [AUTOMATED]: Prettier Code Styling - - * modify the build process - - * [AUTOMATED]: Prettier Code Styling - -commit f2f6eefeaa091edd9b17b13d4b8b8241d1069ebd -Author: Sebastian Schmidt -Date: Wed Jul 3 08:45:40 2019 -0700 - - Store the coerced base value in the BaseMutation (#1928) - -commit e8900fee2899168656e067bc886c1f1cad78af5b -Author: Mertcan Mermerkaya -Date: Tue Jul 2 13:30:57 2019 +0100 - - Handle case where the server does not return an FID (#1936) - -commit 634f84daa9478419a3a5940f85411c2a2ba6598e -Author: Christina Holland -Date: Mon Jul 1 16:56:45 2019 -0700 - - Set typescript strict option to true for functions and testing (#1915) - - Enable typescript script option - -commit 1b1827cf89b308d864f004f9a4787f68c4e2fa92 -Merge: c24ecf374 ad090577c -Author: Feiyang1 -Date: Mon Jul 1 11:40:23 2019 -0700 - - Merge branch 'release' - 6.2.4 release - -commit c24ecf374e87f8a166795740a1519f917cb4c0fd -Author: Feiyang -Date: Mon Jul 1 10:35:17 2019 -0700 - - Address version conflict when used together with firebase-admin (#1916) - - * abstract SDK_VERSION - - * some comment - - * remove the unnecessary build target - - * require default - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * remove experimental changes - - * remove unused var - - * only ignore MODULE_NOT_FOUND error - - * [AUTOMATED]: Prettier Code Styling - - * revert module export change - -commit 2348a259ca0e63e451f677909e71388fdb802e70 -Author: Mertcan Mermerkaya -Date: Mon Jul 1 18:25:04 2019 +0100 - - Use the FID from the server if client FID generation fails (#1925) - - Starting from SDK v0.2.0, the server will start returning a valid FID instead of returning an error if the client tries to register an invalid FID, and the SDK will save that FID to the DB, replacing the invalid one. In case of a failure with client side FID generation, getId will wait for a valid FID from the server before resolving instead of throwing or returning an invalid FID. - -commit be8940f3cdea69d09dffd73d152e185b157e7a0f -Author: Sebastian Schmidt -Date: Fri Jun 28 14:48:27 2019 -0700 - - Make Document.field() nullable (#1927) - -commit ad090577c0d3f02ad63c35c1064673a7f9448983 (tag: rxfire@3.6.4, tag: firebase@6.2.4, tag: @firebase/testing@0.11.4, tag: @firebase/performance@0.2.10, tag: @firebase/firestore@1.4.3, tag: @firebase/app@0.4.9) -Author: Feiyang1 -Date: Thu Jun 27 16:47:41 2019 -0700 - - Publish firebase@6.2.4 - -commit 43f003659b2a219959907239145ed7f3831233be -Author: Brian Chen -Date: Thu Jun 27 16:40:53 2019 -0700 - - Port android error messages over (#1924) - -commit 857b0fe3b761e46a016fcaf27b84d5b8fbb0241f -Author: Mertcan Mermerkaya -Date: Thu Jun 27 20:16:06 2019 +0100 - - Refactor and remove object utility functions (#1811) - -commit 19c3842671d57218841c8275106213eeba89d583 -Author: Mertcan Mermerkaya -Date: Thu Jun 27 18:52:25 2019 +0100 - - Delay opening a database connection until a request is made (#1919) - - Prevents errors during page load on browsers that don't support IndexedDB. - -commit 99ba9952d84d1da2e87f7c7ce0fe802bf0de836e -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Jun 26 20:47:04 2019 -0700 - - removed usage of deprecated methods (#1923) - -commit 1d9662228c827e3a3966b77111630a3b7f73d03e -Author: Feiyang -Date: Wed Jun 26 16:03:04 2019 -0700 - - Fix FirebaseApp overwriting FirebaseError name field (#1911) - - * use appName to avoid naming conflict with FirebaseError - - * remove warning msg when creating a FirebaseError - - * [AUTOMATED]: Prettier Code Styling - - * revert - -commit 7043422243ff0aa8f298a04cbc8f0450856c0908 -Author: Feiyang -Date: Wed Jun 26 11:28:50 2019 -0700 - - migrate Firestore to eslint (#1859) - - * migrate Firestore to eslint - - * [AUTOMATED]: Prettier Code Styling - - * replace tslint suppresion with eslint ones - - * disable no used var for params in firestore - - * [AUTOMATED]: Prettier Code Styling - - * enable no-console for test files - - * disable no-floating-promises for test files - - * 1. enable no-duplicate-imports 2. update deps - - * address mike's comments - - * [AUTOMATED]: Prettier Code Styling - - * move comments to the same line as the suppression - - * [AUTOMATED]: Prettier Code Styling - - * remove unneeded comment - - * revert local changes - - * enable no-explicit-any in test files - - * fix lint issues after rebasing with master - - * [AUTOMATED]: Prettier Code Styling - - * move protobufjs to devdeps - - * [AUTOMATED]: Prettier Code Styling - - * remove leftover suppression - -commit 0551030be679109f127a023f359729de584588e1 -Author: Brian Chen -Date: Tue Jun 25 17:17:43 2019 -0700 - - Backport updates from Android (multiple changes) (#1912) - -commit 15a32c6cc48e645de6cfcb518b744d16ead8a055 -Author: Christina Holland -Date: Tue Jun 25 15:56:08 2019 -0700 - - Enable Typescript strict flag for app, logger, and util packages (#1897) - - Full strict mode for app, logger, and util - -commit 56414e83fca9b4b1290914539501f06eb1add32d -Author: Christina Holland -Date: Tue Jun 25 15:09:59 2019 -0700 - - Merge branch 'release' - Release 6.2.3 - -commit 00cb96401b31af955f6e9e92a69834c00fd1faf9 -Merge: 6ef135584 a5b559016 -Author: Christina Holland -Date: Tue Jun 25 15:06:58 2019 -0700 - - Merge branch 'release' - Release 6.2.3 - -commit 6ef1355849f99acc06317d758f70ba93266a04aa -Author: James Daniels -Date: Tue Jun 25 14:24:21 2019 -0600 - - Empty import typings for firebase/storage (#1812) - -commit ea3adf16c0c4eb21018e7a51ba8db5d161acdb65 -Author: Michael Lehenbauer -Date: Tue Jun 25 12:53:25 2019 -0700 - - Fix prettier to avoid adding extra files. (#1914) - - Ensure we don't "git add" and submit extra files in the repo during our pre-push hooks. - -commit 9bb7e70bc4cb1394fcb53bf58a07198d521df0ee -Author: Konstantin Varlamov -Date: Mon Jun 24 23:03:05 2019 -0400 - - Fix array-contains queries (#1913) - - #1894 introduced a regression that made persisted queries deserialize incorrectly. Fix the regression and add tests. - - The root cause is that the refactoring introduced a type hierarchy of classes derived from `FieldFilter`, but serializer always deserializes persisted filters to the base class `FieldFilter`, never to the derived types. This would have affected array-contains queries, in queries, and key field queries. - - Fixes #1904. - -commit 95cbd6fba42de980025fca9947e50fba85a46bcd -Author: alikn -Date: Mon Jun 24 16:22:34 2019 -0700 - - Do not initialize performance if required apis are not available (#1895) - -commit a5b559016beaa61cba666e26d0dbf7d9ca3ba4a5 (tag: rxfire@3.6.3, tag: firebase@6.2.3, tag: @firebase/testing@0.11.3, tag: @firebase/app@0.4.8) -Author: Christina Holland -Date: Mon Jun 24 15:23:02 2019 -0700 - - Publish firebase@6.2.3 - -commit 728f4f54b4589c07a2d474deb94328a332c8fe39 -Author: Christina Holland -Date: Mon Jun 24 14:35:23 2019 -0700 - - Fix typo causing auth errors in Node. (#1910) - -commit 6e01b2a8a7b0939337f4b8bc5ea907545613c4ad -Author: Christina Holland -Date: Mon Jun 24 13:27:20 2019 -0700 - - Roll back to 6.2.1 and add RN and XMLHttpRequest fixes (#1909) - - Roll back import of newer AsyncStorage (#1902) and fix XMLHttpRequest import line - -commit c919b45b06061133c412ea7ac981a161fbd20a2e -Author: Sebastian Schmidt -Date: Mon Jun 24 10:34:23 2019 -0700 - - Don't store document with 0 version in Spec Test (#1903) - -commit a6b81804b00002e78cad267fbb8a215c2a06a9f9 (tag: rxfire@3.6.2, tag: firebase@6.2.2, tag: @firebase/testing@0.11.2, tag: @firebase/storage@0.3.4, tag: @firebase/performance@0.2.9, tag: @firebase/firestore@1.4.2, tag: @firebase/app@0.4.7) -Author: Christina Holland -Date: Fri Jun 21 16:12:50 2019 -0700 - - Publish firebase@6.2.2 - -commit cbdc78984495d4e07af94d675e6807edae44b467 -Author: Christina Holland -Date: Fri Jun 21 15:37:34 2019 -0700 - - Roll back import of newer AsyncStorage (#1902) - -commit 74a397afa3ef6509fb8bc8850b3bbd6c1220ea18 -Author: Gil -Date: Fri Jun 21 07:57:32 2019 -0700 - - Refactor Filters (#1894) - - * Rename RelationFilter to FieldFilter - - * Remove NullFilter and NanFilter (replaced by just using FieldFilter) - - * Rename RelationOp to Operator - - * Extract KeyFieldFilter from FieldFilter - - This makes it possible to validate arguments once rather than - per-document. - - * Extract ArrayContainsFilter from FieldFilter - - * Extract InFilter from FieldFilter - - * Extract ArrayContainsAnyFilter from FieldFilter - - * Factor out ArrayValue.contains - -commit 3caea2bf50f570ea1b03a99e72cad00bf6cc49b2 -Merge: 6ec76614a 6ae2cbfa9 -Author: Christina Holland -Date: Thu Jun 20 15:36:14 2019 -0700 - - Merge branch 'release' - Release 6.2.1 - -commit 6ae2cbfa9f7711d6643cfeac648408d772b5e211 (tag: rxfire@3.6.1, tag: firebase@6.2.1, tag: @firebase/webchannel-wrapper@0.2.21, tag: @firebase/util@0.2.20, tag: @firebase/testing@0.11.1, tag: @firebase/storage@0.3.3, tag: @firebase/performance@0.2.8, tag: @firebase/messaging@0.4.3, tag: @firebase/logger@0.1.17, tag: @firebase/installations@0.1.7, tag: @firebase/functions@0.4.10, tag: @firebase/functions-types@0.3.6, tag: @firebase/firestore@1.4.1, tag: @firebase/firestore-types@1.4.1, tag: @firebase/database@0.4.6, tag: @firebase/app@0.4.6) -Author: Christina Holland -Date: Thu Jun 20 14:59:08 2019 -0700 - - Publish firebase@6.2.1 - -commit 6ec76614a16a70c75a93cfb8494ee99234f7b849 -Author: Feiyang -Date: Thu Jun 20 13:40:12 2019 -0700 - - enable eslint for Storage (#1850) - - * storage auto fix - - * fix test files - - * more storage fixes - - * fix more lint issues - - * fix metadata.ts - - * [AUTOMATED]: Prettier Code Styling - - * update param type - - * revert accidental change - - * use unknown[] for rest param - - * Further improve Storage typings (#1860) - - * disable unused var check for function params - - * remove duplicate imports - - * [AUTOMATED]: Prettier Code Styling - - * update test command - - * fix something - - * fix some ts errors - - * [AUTOMATED]: Prettier Code Styling - - * fix some lint issues - -commit 32cb0e121254cce2d626f713b3875bf8f79c288b -Author: Michael Lehenbauer -Date: Thu Jun 20 10:10:18 2019 -0700 - - Make IOS_INDEXEDDB_BUG1 error more prominent when it happens (so it shows up in the error surfaced repeatedly by the AsyncQueue). (#1896) - -commit 7a52f753c94d326e690ccafed48d82c8959dcf72 -Author: Gil -Date: Wed Jun 19 10:09:32 2019 -0700 - - Fix the implementation of Bound.isEqual (#1893) - -commit ae2698f3e8f4e6ae3f464d6d071b2ef6c624da33 -Author: James Liu <37026441+zijianjoy@users.noreply.github.com> -Date: Wed Jun 19 08:36:27 2019 -0700 - - Update Fireperf HttpMethod from hardcoded value '1' to networkRequest object value. (#1887) - - Firebase Performance now accepts '0' as value for HttpMethod. '0' means HTTP_METHOD_UNKNOWN. - -commit 5856b9d60ea6c98b5f534a1893572d8437c04a43 -Author: Christina Holland -Date: Tue Jun 18 11:51:16 2019 -0700 - - Update React Native AsyncStorage import (#1879) - - Update to import AsyncStorage from new repo if available and fallback to the one included with React Native if not. - -commit dce78ca0899e9fbbef208047622e0afb1045f267 -Author: Mertcan Mermerkaya -Date: Tue Jun 18 16:52:00 2019 +0100 - - Fix a few linter issues (#1892) - -commit 7866e2235998de53458c11a063c0fc588d982ae1 -Author: Christina Holland -Date: Mon Jun 17 14:43:11 2019 -0700 - - Enable noImplicitAny Typescript compiler flag (#1862) - - Updated all packages except database to use noImplicitAny Typescript compiler flag. - -commit 9f109f85ad0d99f6c13e68dcb549a0b852e35a2a -Author: Feiyang -Date: Fri Jun 14 15:10:14 2019 -0700 - - enable eslint for functions (#1864) - - * enable eslint for functions - - * add ignore path - - * [AUTOMATED]: Prettier Code Styling - - * address Bryan's comments - - * update eslint version - - * update types - - * add messaging as devDep in functions - -commit 1804b1d920a99170acce981098e5a4eedcedface -Author: Feiyang -Date: Fri Jun 14 13:42:16 2019 -0700 - - enable eslint for installations (#1877) - - * enable eslint for installations - - * add eslint to the template project - - * add sinon as devDeps for logger - - * address mertcan's comments - - * add sinon to util - - * add missing dep to performance - -commit ba19625aa16f1ae21e6196b4e74ef753c5920073 -Merge: c55d1e9e2 64a9a0d33 -Author: Feiyang1 -Date: Fri Jun 14 10:11:14 2019 -0700 - - Merge with firebase 6.2.0 - -commit c55d1e9e269db59a74ea745e8744e8c33d57c007 -Author: Jack Steam -Date: Fri Jun 14 11:53:18 2019 -0500 - - Check that self.firebase is not undefined (#1868) - - * Check that self.firebase is not undefined - - * Add linting ignore and remove redundant condition - -commit fb45cd65e27ec858ca7170d5d8a9f47f49a70dcd -Author: Ryan Brewster -Date: Thu Jun 13 18:05:38 2019 -0700 - - Upgrade faye-websocket from 0.11.1 to 0.11.3 (#1880) - -commit 64a9a0d33ab0ac1918a912d98f3ec3a719d6e4f2 (tag: rxfire@3.6.0, tag: firebase@6.2.0, tag: @firebase/util@0.2.19, tag: @firebase/testing@0.11.0, tag: @firebase/storage@0.3.2, tag: @firebase/storage-types@0.3.1, tag: @firebase/performance@0.2.7, tag: @firebase/messaging@0.4.2, tag: @firebase/logger@0.1.16, tag: @firebase/installations@0.1.6, tag: @firebase/firestore@1.4.0, tag: @firebase/firestore-types@1.4.0, tag: @firebase/database@0.4.5, tag: @firebase/app@0.4.5) -Author: Feiyang1 -Date: Thu Jun 13 14:49:14 2019 -0700 - - Publish firebase@6.2.0 - -commit 5511cbd6c2659868bae524209a833b6894ddc8c9 -Author: Erik Macik <42585523+esmacik@users.noreply.github.com> -Date: Thu Jun 13 09:49:09 2019 -0700 - - add code fonts (#1871) - -commit b91f690d83aba450697e5c73ea5523fcf1d58b83 -Author: Christina Holland -Date: Wed Jun 12 11:57:56 2019 -0700 - - Fix storage Reference.put param type (#1876) - -commit 9678bf9a5692b0a33822cfdef27ddb27834cebb2 -Author: Brian Chen -Date: Wed Jun 12 11:30:32 2019 -0700 - - Add IN and ARRAY_CONTAINS_ANY (not publicly exposed) (#1843) - -commit dd098c6a87f23ddf54a7f9b21b87f7bb3fd56bdd -Author: Feiyang -Date: Wed Jun 12 11:01:44 2019 -0700 - - Migrate messaging to eslint (#1872) - - * add no-default-export to global rules - - * add some rules - - * Migrate messaging to eslint - - * [AUTOMATED]: Prettier Code Styling - - * fix duplicate imports - - * use suppression individually - - * [AUTOMATED]: Prettier Code Styling - -commit fd5a31a6bba01b79f9fd269c96926c8aa6248701 -Author: Mertcan Mermerkaya -Date: Wed Jun 12 13:14:12 2019 +0100 - - Generate a new token after getId calls if there is no valid token (#1869) - - Moved fetchAuthToken to helpers and renamed it to refreshAuthToken. - -commit 99e6cc8267d4eea4b2893a45d097c6cb20eddd15 -Author: Brian Chen -Date: Tue Jun 11 16:24:14 2019 -0700 - - Add support for running Firestore integration tests against the emulator (#1851) - -commit 3f2c7bf8a08978bea065ac1706af016e8646f234 -Author: Brian Chen -Date: Tue Jun 11 15:55:43 2019 -0700 - - Check that window is complete in BrowserConnectivityMonitor (#1870) - -commit 73f10767a8473468aa6fb6300abe93f998b59ecf -Author: egilmorez -Date: Tue Jun 11 13:42:58 2019 -0700 - - Minor style changes for a RTDB comment block (#1857) - - * Fixing some formatting. - - * Making some minor style changes in comments for database.Reference.push(). - -commit 021a38cbd29854923e6b49eda282bed09136f253 -Author: Michael Lehenbauer -Date: Mon Jun 10 16:10:15 2019 -0700 - - Remove unnecessary getMutationQueueMetadata() call. (#1863) - -commit 76539be9b3ab19f5be70275f2334bee9b022e3c4 -Author: Feiyang -Date: Mon Jun 10 13:28:24 2019 -0700 - - enable eslint in Performance (#1852) - - * enable eslint in Performance - - * [AUTOMATED]: Prettier Code Styling - - * use unknown[] for rest args - - * [AUTOMATED]: Prettier Code Styling - - * allow any for rest parameter - -commit 6673a92a29c8a67777dc7cab075e42a4f5354127 -Author: Michael Lehenbauer -Date: Mon Jun 10 07:05:53 2019 -0700 - - Provide warning and potential workaround for iOS Safari bug described by #1670. (#1854) - - * On iOS 12.2 we proactively warn about the "internal error was encountered in - Indexed Database Server" Bug. - * When the bug is actually encountered on iOS >= 12.2 an < 13 we log a custom - error message. - - Both log message and error link to https://stackoverflow.com/q/56496296/110915 which - provides potential error handling / recovery example. - -commit d164cac31ba8f147fa55bd6c62def193747d22ec -Author: egilmorez -Date: Fri Jun 7 12:32:36 2019 -0700 - - Fixing some formatting. (#1848) - -commit 15fee3ba7f447d1bb68c0baaa9a25f93b1b9bfcc -Author: Michael Lehenbauer -Date: Fri Jun 7 10:41:44 2019 -0700 - - Change test:node:persistence to use --require instead of --file so it actually works. (#1855) - -commit 568647953229a2e1eebae467cdcc077d6cf6363c -Author: Brian Chen -Date: Thu Jun 6 18:27:21 2019 -0700 - - Make yarn test:emulator work again (#1853) - -commit ce8ecb933eaffabc692c2023abc656ee2930e206 -Merge: 039f06be8 ff439705d -Author: Christina Holland -Date: Thu Jun 6 15:39:06 2019 -0700 - - Merge branch 'release' - Release 6.1.1 - -commit ff439705d1a57267660303fa8639c3e7761932ca (tag: rxfire@3.5.1, tag: firebase@6.1.1, tag: @firebase/util@0.2.18, tag: @firebase/testing@0.10.1, tag: @firebase/storage@0.3.1, tag: @firebase/performance@0.2.6, tag: @firebase/performance-types@0.0.2, tag: @firebase/messaging@0.4.1, tag: @firebase/logger@0.1.15, tag: @firebase/installations@0.1.5, tag: @firebase/functions@0.4.9, tag: @firebase/firestore@1.3.5, tag: @firebase/database@0.4.4, tag: @firebase/auth@0.11.3, tag: @firebase/app@0.4.4) -Author: Christina Holland -Date: Thu Jun 6 14:03:06 2019 -0700 - - Publish firebase@6.1.1 - -commit 039f06be85b15e0dad7206ebd9cb1b60a4da762f -Author: Fred Zhang -Date: Thu Jun 6 10:35:12 2019 -0700 - - Add listAll() to storage-types (#1829) - -commit ee610626bef1f6f05852041b2161c01c5e99aa59 -Author: Feiyang -Date: Wed Jun 5 13:40:36 2019 -0700 - - Enable linting and fix lint issues for app, util and logger (#1845) - - * add eslint rules - - * fix firebase/app lint issues - - * fix firebas/util lint issues - - * add eslint deps to util - - * fix firebase/logger lint issues - - * [AUTOMATED]: Prettier Code Styling - - * remove intermediate merge messages - - * add missing code during merge - - * rename parameter - -commit 7a15e7e54bbd80d04311865c46588b68eff93d3b -Author: Brian Chen -Date: Wed Jun 5 11:55:14 2019 -0700 - - Expose clearPersistence() publicly (#1717) - - Addresses (#449). - -commit 4b126b745aee48997aa0220b5c08773d46c89c1c -Author: Brian Chen -Date: Tue Jun 4 17:17:10 2019 -0700 - - Rename value to other in RelationFilter (#1844) - -commit bdfcd6ca82a21e57cdf5109504cfc83570f37e94 -Author: Feiyang -Date: Tue Jun 4 16:15:33 2019 -0700 - - eslint rules for firebase projects (#1831) - - * add eslint rules - - * ignore unused params with a leading _ - - * update curly and arrow-body-style rules - -commit 6668b59e2fa495fcea42a24a6b24821407ee703f -Author: Christina Holland -Date: Mon Jun 3 14:35:57 2019 -0700 - - Apply strictNullChecks to all packages except database (#1805) - - * TS changes before splitting database - - * Roll back database changes - - * [AUTOMATED]: Prettier Code Styling - - * Put back database nullcheck exception - - * Finish fixing strictNullCheck errors - - * Fix logger test. - - * Fix tests - - * Update primitive array types to type[] - - * [AUTOMATED]: Prettier Code Styling - - * Put test exclusion back in rxfire - - * Address PR comments - - * [AUTOMATED]: Prettier Code Styling - - * Addressing PR comments - - * Few more comments to address - - * change assertThrows to assume it never returns null - - * [AUTOMATED]: Prettier Code Styling - - * Fix additional warnings after merge - - * Fix storage test - - * [AUTOMATED]: Prettier Code Styling - - * Address comments in PR - -commit 54ee3837b69c352be05d4dcb738edb2c4e612c3b -Author: Brian Chen -Date: Mon Jun 3 13:53:07 2019 -0700 - - Update protos to include IN and ARRAY_CONTAINS_ANY (#1838) - -commit f701260854d67eed1df0075b3409428b5e55c641 -Merge: 3fdc252f5 bca79d621 -Author: Feiyang1 -Date: Mon Jun 3 10:10:22 2019 -0700 - - Merge branch 'release' - Release 6.1.0 - -commit 3fdc252f558b52dfb8cd5bc9afaa138768a65707 -Author: Christina Holland -Date: Mon Jun 3 10:03:36 2019 -0700 - - Fix display of deprecated tags in generated docs. (#1827) - - * Fix display of deprecated tag. - - * [AUTOMATED]: Prettier Code Styling - -commit db06f63056d84d7948f4bf6a67603ee564549e5b -Author: Christina Holland -Date: Mon Jun 3 10:03:14 2019 -0700 - - Update license checking script. (#1822) - - Update license update script and add missing license tags. - -commit ae78569ef2116ceac7145a2628696453f0e2464e -Author: Mertcan Mermerkaya -Date: Thu May 30 17:34:49 2019 +0100 - - Retry API requests once if the server returns a 5xx response (#1828) - -commit 6045a08995ed4549bce033eed90d31eb892c29a2 -Author: Mertcan Mermerkaya -Date: Thu May 30 11:22:30 2019 +0100 - - Remove return type generics (#1830) - -commit bca79d621854fe2a93fe9048f95960f9a1219f85 (tag: rxfire@3.5.0, tag: firebase@6.1.0, tag: @firebase/testing@0.10.0, tag: @firebase/storage@0.3.0, tag: @firebase/storage-types@0.3.0, tag: @firebase/performance@0.2.5, tag: @firebase/messaging@0.4.0, tag: @firebase/messaging-types@0.3.0, tag: @firebase/installations@0.1.4, tag: @firebase/functions@0.4.8, tag: @firebase/firestore@1.3.4) -Author: Feiyang1 -Date: Tue May 28 14:32:18 2019 -0700 - - Publish firebase@6.1.0 - -commit bc4a844c35e40a8f0fbb3053dc21e465426a6a40 -Author: Fred Zhang -Date: Tue May 28 13:27:27 2019 -0700 - - Storage List API (#1610) - -commit 2e6c4aa741f667f0726f7c4bf9f5c821837f1bd9 -Merge: cc4f2b54d 802fd8d5f -Author: Christina Holland -Date: Tue May 28 10:33:33 2019 -0700 - - Merge branch 'release' - Release 6.0.4 - -commit cc4f2b54d4b8b5106c7e686e6df2f3681a5919cc -Author: Mertcan Mermerkaya -Date: Tue May 28 16:43:18 2019 +0100 - - Fix throwing a Promise object instead of Error (#1826) - -commit 31438c18e7c525bf6181fa75826e8b87d7b61bb6 -Author: Feiyang -Date: Fri May 24 13:22:55 2019 -0700 - - fix the condition that checks if window is available (#1819) - -commit cd2a43f5d8e3221615ea631576f58e7455859324 -Author: Mertcan Mermerkaya -Date: Fri May 24 20:42:38 2019 +0100 - - Remove outdated Node version information (#1782) - -commit a3b2aca3d0395c65644a80a514e3151ea54e6102 -Author: Mertcan Mermerkaya -Date: Fri May 24 18:08:49 2019 +0100 - - Deprecate messaging.requestPermission (#1791) - -commit 802fd8d5f314ba87e2fb8c751d6012b5ba27515c (tag: rxfire@3.4.8, tag: firebase@6.0.4, tag: @firebase/util@0.2.17, tag: @firebase/testing@0.9.6, tag: @firebase/performance@0.2.4, tag: @firebase/messaging@0.3.22, tag: @firebase/installations@0.1.3, tag: @firebase/installations-types@0.1.1, tag: @firebase/firestore@1.3.3, tag: @firebase/database@0.4.3, tag: @firebase/app@0.4.3) -Author: Christina Holland -Date: Thu May 23 17:56:40 2019 -0700 - - Publish firebase@6.0.4 - -commit ae32b2b58a3969266ab701a6b2a4895b790c8ea8 -Author: Michael Lehenbauer -Date: Thu May 23 17:13:05 2019 -0700 - - Revert "Switch from 'grpc' to '@grpc/grpc-js' dependency. (#1804)" (#1813) - - This reverts commit 47711840afa61b27b4dfeeac0a6dd292658c140f. Since this - changes our minimum node dependency from v6 to v8, it is a breaking change and - can't be done at this time. - -commit 412cff973e681532f84e40d0be1caf0b655afc72 -Merge: cee7ad81a 1d5ccce8a -Author: Christina Holland -Date: Thu May 23 14:45:00 2019 -0700 - - Merge branch 'release' - Release 6.0.3 - -commit 1d5ccce8a84a7fe89565a77fba0b9920d41b3080 (tag: rxfire@3.4.7, tag: firebase@6.0.3, tag: @firebase/util@0.2.16, tag: @firebase/testing@0.9.5, tag: @firebase/performance@0.2.3, tag: @firebase/messaging@0.3.21, tag: @firebase/installations@0.1.2, tag: @firebase/firestore@1.3.2, tag: @firebase/database@0.4.2, tag: @firebase/app@0.4.2) -Author: Christina Holland -Date: Thu May 23 14:12:33 2019 -0700 - - Publish firebase@6.0.3 - -commit cee7ad81ac6393a2c0518c85a4dd401ac56611c4 -Author: Mertcan Mermerkaya -Date: Thu May 23 19:59:20 2019 +0100 - - Add types to ErrorFactory message parameters (#1720) - - * Add types to ErrorFactory message parameters - - * Add ErrorParams to packages that use ErrorFactory - -commit 6dc1533d9ba29521289d27e1b776a7dff10c64f3 -Author: Mertcan Mermerkaya -Date: Thu May 23 18:27:02 2019 +0100 - - Add Installations to Firebase package (#1763) - - * Add Installations types to firebase/index.d.ts - - * Add Installations to Firebase package - -commit 42eae2328825c8d912e61a1fc7e78cfaac6ca1a1 -Author: Brian Chen -Date: Wed May 22 17:43:56 2019 -0700 - - Check window in BrowserConnectivityMonitor (#1810) - -commit 772115abf63f70b694133c287117157396427a23 -Author: Brian Chen -Date: Wed May 22 16:48:50 2019 -0700 - - Allow firestore to recover quicker when a network change occurs (#1809) - -commit df1b58816a5f502853f4b6fde59033abca92f3c9 -Author: Brian Chen -Date: Tue May 21 14:39:46 2019 -0700 - - Add ConnectivityMonitor to Firestore(#1808) - -commit 47711840afa61b27b4dfeeac0a6dd292658c140f -Author: Michael Lehenbauer -Date: Tue May 21 12:04:52 2019 -0700 - - Switch from 'grpc' to '@grpc/grpc-js' dependency. (#1804) - - Fixes #1783, reduces package size, and should ease compatibility issues with Electron, etc. - -commit 18115186da7ee97ff06fcc05ba73fd45cd4438c2 -Author: Feiyang -Date: Tue May 21 11:37:16 2019 -0700 - - add packages to dep list for peer dep requirement (#1807) - -commit c8dcdc5ac76851cc4be32620802158d6f660916e -Author: Ryan Brewster -Date: Mon May 20 17:04:33 2019 -0700 - - Use @grpc/proto-loader in @firebase/testing (#1806) - - * Use @grpc/proto-loader in @firebase/testing - - * [AUTOMATED]: Prettier Code Styling - - * rename - -commit 3635f534fd4b491e7c7a29982d86cd44abf34ec5 -Author: Sebastian Schmidt -Date: Mon May 20 14:03:20 2019 -0700 - - Add performance spec tests for queries against large collections (#1802) - -commit 22a530200469a9a14b180abf8370ee643a58c2d4 -Author: Ryan Brewster -Date: Mon May 20 13:52:52 2019 -0700 - - Stop hacking around old gRPC misbehavior (#1803) - -commit dc50232fa8a0d46b35392071c5d9395d8a501fa2 -Author: Michael Lehenbauer -Date: Mon May 20 12:20:21 2019 -0700 - - Gracefully fall back to memory persistence for Firefox Private Browsing. (#1801) - - Fixes #801. - -commit 5f5f1c151686c72158e921bcc4954b0847be8269 -Author: Brian Chen -Date: Fri May 17 14:33:10 2019 -0700 - - Remove exception throwing from clearPersistence() (#1793) - -commit 2b165d552b61e6c25ce078bb08d8d714d436f94d -Author: Mertcan Mermerkaya -Date: Fri May 17 14:40:06 2019 +0100 - - Don't skip messaging tests in browsers that don't support messaging (#1790) - -commit 1e23e8869a710bd59bc820c8f6dc844901be456f -Author: Mertcan Mermerkaya -Date: Fri May 17 14:39:01 2019 +0100 - - Add tslib to Installations dependencies (#1788) - - This allows Rollup to detect tslib as an external dependency and doesn't bundle it in the package builds. It should prevent tslib being bundled twice in the main build. - -commit dd65ae7ec1d0880f0e209efccdd6f4456b21c870 -Author: Mertcan Mermerkaya -Date: Fri May 17 14:38:33 2019 +0100 - - Fix TODOs (#1787) - -commit a80cf4e6865b4ea4e93b8cfd855383b35104790f -Author: Mertcan Mermerkaya -Date: Thu May 16 17:55:32 2019 +0100 - - Delete unused code (#1789) - -commit 462047e2b664efd4612d670d73bec93caeace7f0 -Author: Christina Holland -Date: Mon May 13 11:04:22 2019 -0700 - - Separate Saucelabs cross-browser tests by package (#1756) - - Set up Saucelabs tests to run separately, on CI or locally. - -commit 9f6dbc82b54eaba6551cc969df9b8d43574371e7 -Author: Feiyang -Date: Fri May 10 13:22:09 2019 -0700 - - point ENVIRONMENTS.md to devsite (#1772) - - * point ENVIRONMENTS.md to devsite - - * remove environment support section to README - -commit 46ba69ae87c7515ba08d8e89493ad47039149505 -Author: Mertcan Mermerkaya -Date: Fri May 10 19:54:10 2019 +0100 - - Fix browser detection (#1773) - - Web Workers are browser too. - -commit 9a499734c2f7c81d79c9ad2689b4d5b7695978d6 -Author: Mertcan Mermerkaya -Date: Fri May 10 19:51:55 2019 +0100 - - Import package version from package.json (#1764) - -commit 38cb158a12793c3b2d39740909b1a8a64f1e638b -Merge: c0ab7b47b 78216f803 -Author: Feiyang1 -Date: Thu May 9 17:12:00 2019 -0700 - - Merge branch 'release' - Release 6.0.2 - -commit 78216f803e199adf801ce77cbe31ff56aefa8040 (tag: rxfire@3.4.6, tag: firebase@6.0.2, tag: @firebase/webchannel-wrapper@0.2.20, tag: @firebase/util@0.2.15, tag: @firebase/testing@0.9.4, tag: @firebase/storage@0.2.16, tag: @firebase/polyfill@0.3.14, tag: @firebase/performance@0.2.2, tag: @firebase/messaging@0.3.20, tag: @firebase/logger@0.1.14, tag: @firebase/installations@0.1.1, tag: @firebase/functions@0.4.7, tag: @firebase/firestore@1.3.1, tag: @firebase/database@0.4.1, tag: @firebase/auth@0.11.2, tag: @firebase/app@0.4.1) -Author: Feiyang1 -Date: Thu May 9 16:58:32 2019 -0700 - - Publish firebase@6.0.2 - -commit c0ab7b47ba0a43831c755e2f4f5dfcaec96473bd -Author: Brian Chen -Date: Thu May 9 16:05:41 2019 -0700 - - Standardize shutdown checking logic (#1776) - -commit 0c0000a4c075841368fedda41a5518aab648e090 -Author: Piérre Reimertz -Date: Thu May 9 20:09:51 2019 +0200 - - Update index.ts (#1710) - -commit 6064f2744bc01b00fa771ffd08e5309c89110f84 -Author: Feiyang -Date: Wed May 8 16:30:31 2019 -0700 - - report auth test failures (#1770) - - * report auth test failures - - * use firefox 66.0 - -commit f698323fe42d8c8ec189b46e32c362c29f3f8786 -Author: Ryan Brewster -Date: Wed May 8 14:57:50 2019 -0700 - - Fall back to FIRESTORE_EMULATOR_HOST if FIREBASE_FIRESTORE_EMULATOR_ADDRESS is not found (#1760) - -commit 5a615eb42e52b2db22a26c5569a2ff63f5be2c40 -Author: Ryan Brewster -Date: Wed May 8 14:54:04 2019 -0700 - - Update CODEOWNERS (#1771) - -commit 491598a499813dacc23724de5e237ec220cc560e -Author: Brian Chen -Date: Wed May 8 11:00:38 2019 -0700 - - Fix generate spec for Firestore spec tests (#1766) - -commit aac7864759831fa58f943da2d66385cd7c8d5d62 -Author: Brian Chen -Date: Wed May 8 11:00:11 2019 -0700 - - Add OnVersionChange listener to Firestore (#1762) - -commit fc58bfd1e19cdbfc5fa4ace2f34bf36a1320f43e -Merge: a3a8cb358 5d27b42f2 -Author: Feiyang1 -Date: Wed May 8 10:36:32 2019 -0700 - - Merge branch 'release' - Release 6.0.1 - -commit a3a8cb358d06e89b824274d31ccf3f7a54cf66a1 -Author: Feiyang -Date: Wed May 8 10:33:04 2019 -0700 - - downgrade protractor to use compatible chrome driver (#1768) - -commit 5d27b42f26989dd90f75d9efbb777d59f7cd7254 (tag: rxfire@3.4.5, tag: firebase@6.0.1, tag: @firebase/testing@0.9.3, tag: @firebase/auth@0.11.1) -Author: Feiyang1 -Date: Tue May 7 19:55:16 2019 -0700 - - Publish firebase@6.0.1 - -commit 1224821e720cebddcd66ab02dd12707eca6aa511 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue May 7 17:54:17 2019 -0700 - - replaced firebase promise with native promise (#1767) - -commit 201c53e7e245222cef4cd590f1baac9c5703941d -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue May 7 17:54:17 2019 -0700 - - replaced firebase promise with native promise (#1767) - -commit 63b93c3e490dfb136a6c99ebebd26e7dd04f905f -Author: Feiyang -Date: Tue May 7 13:49:53 2019 -0700 - - update doc html header (#1739) - -commit 3d474acc0275a1a2d82fdbf5d9c133fe3a96e745 -Author: Christina Holland -Date: Tue May 7 11:20:45 2019 -0700 - - Update yarn.lock (#1761) - -commit 59c3a699a5f2c04917c150f819789657485bfe65 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue May 7 11:14:26 2019 -0700 - - updated demo to remove deprecated APIs (#1755) - -commit f6afa45fe24f7adf5ea9a672100049c2ca8571db -Author: Feiyang -Date: Tue May 7 09:36:39 2019 -0700 - - Revamp environment check for firebase app (#1757) - - * rewrite environment check for firebase app - - * [AUTOMATED]: Prettier Code Styling - -commit 4a8faadaf5a0d8ae65ba5cff7a1e0203ea9c7700 -Merge: 52bdce3fd 0f35ed63b -Author: Christina Holland -Date: Tue May 7 08:57:58 2019 -0700 - - Merge branch 'release' - v6.0.0 - -commit 0f35ed63b6839a0b87badc3c9da63e48d855b274 (tag: rxfire@3.4.4, tag: firebase@6.0.0, tag: @firebase/testing@0.9.2, tag: @firebase/firestore@1.3.0, tag: @firebase/firestore-types@1.3.0, tag: @firebase/database@0.4.0, tag: @firebase/database-types@0.4.0, tag: @firebase/auth@0.11.0, tag: @firebase/auth-types@0.7.0, tag: @firebase/app@0.4.0, tag: @firebase/app-types@0.4.0) -Author: Christina Holland -Date: Tue May 7 08:27:18 2019 -0700 - - Publish firebase@6.0.0 - -commit 52bdce3fd7a7b04d130c7d0e4bba137f789e3d3e -Author: DPEBot -Date: Fri May 3 14:31:48 2019 -0700 - - Auto-update dependencies. (#1748) - - * Auto-update dependencies. - - * revert dep update because it doesn't work well with rpt2 - - * update yarn lock - - * update grpc - - * update lock file - - * revert firebase version - - * update lock file - - * exclude idb from dep update list - - * add .ncurc to performance - - * update lock file - - * downgrade rollup-plugin-copy-assets - - * update yarn lock - -commit 664b82c65f5aecb9cbef56d57babf01fbc1c7aa3 -Merge: 5d67b57cc fb7560720 -Author: Feiyang1 -Date: Thu May 2 16:23:15 2019 -0700 - - Merge branch 'release' into master-io - -commit fb756072079e9fb0ff8462985d781f10cc17b7f7 (tag: rxfire@3.4.3, tag: firebase@5.11.1, tag: @firebase/testing@0.9.1, tag: @firebase/performance@0.2.1) -Author: Feiyang1 -Date: Thu May 2 15:56:28 2019 -0700 - - Publish firebase@5.11.1 - -commit 9c59f5554a8db01be5d741cd6b837b20d6d57b28 -Author: alikn -Date: Thu May 2 14:58:04 2019 -0700 - - Update the condition in RC service of performance to allow config objects with no entries (#1747) - -commit 9f25ab67b9362cad07c76dad4d5fc6845bda33f7 -Author: Brian Chen -Date: Thu May 2 14:06:15 2019 -0700 - - Adding call to clearPersistence() into AsyncQueue (#1740) - -commit 20a4430bfd9162ad3b0d8200b776d7c1ae698e7a -Author: Mertcan Mermerkaya -Date: Thu May 2 20:49:04 2019 +0100 - - Rename message to errorInfo in Messaging errors (#1737) - -commit 5a411e011960676d38af747b0369f93ccf033666 -Author: Mertcan Mermerkaya -Date: Thu May 2 18:28:24 2019 +0100 - - Use Sinon fake timers in tests that deal with time (#1744) - - Fixes flaky tests. Removes some redundant code. - -commit 9673907ae7d8d2ca6bfe518234b1473c473a54ab -Author: Mertcan Mermerkaya -Date: Thu May 2 18:26:57 2019 +0100 - - Add @dwoffinden to Installations code owners (#1745) - -commit 5d67b57ccea26686a8ca0d856995e539602303f3 -Author: Feiyang -Date: Thu May 2 10:22:39 2019 -0700 - - Remove Promise from FirebaseNamespace (#1741) - - * Remove Promsie from FirebaseNamespae - - * remove the test case that checks promise - -commit a0605e64454ba56d6ee587469fcebf283ce4310a -Author: Sebastian Schmidt -Date: Wed May 1 16:18:38 2019 -0700 - - Rename multi-tab setting to synchronizeTabs (#1728) - - * Rename multi-tab setting to synchronizeTabs - - * [AUTOMATED]: Prettier Code Styling - - * Update error message - -commit 9d16808777f1e51a6b5bd642dfb1863ada80177c -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed May 1 15:49:48 2019 -0700 - - Auth deprecation (#1726) - - * Auth deprecation for V6 - - * updated externs and index.d.ts - - * [AUTOMATED]: Prettier Code Styling - - * fixed the deprecation message - - * added deprecation notation for the doc - -commit aca99669dd8ed096f189578c47a56a8644ac62e6 -Author: Sebastian Schmidt -Date: Wed May 1 15:44:44 2019 -0700 - - Revert "Revert "Fix the type annotations in the RTDB Query.on/off/once API. (#1204)" (#1723)" (#1724) - - This reverts commit b6bfae0af63491e2d8257af2aa748636be5c068b. - -commit a7bb0b5e8429b8540a47ea13358101a8b728ca72 -Author: Michael Lehenbauer -Date: Wed May 1 15:44:17 2019 -0700 - - Expose Collection Group queries API. (#1722) - -commit f7a46de181d05598b41947a9f27a7c7bb774a458 -Author: Feiyang -Date: Wed May 1 15:31:33 2019 -0700 - - Remove polyfills from all builds except for firebase.js (#1731) - -commit be1eb2c30e3554432b5d039c7f107b49dd9b27c0 -Author: rsgowman -Date: Wed May 1 15:59:08 2019 -0400 - - Remove use of deprecated grpc.load() method (#1669) - - * Workaround for deprecated grpc.load() method - - * Update to protobufjs 6.x - - * Switch serializer tests to test round trips - - Rather than separate tests for encoding/decoding. Similar to the other - platforms. - - * update descriptor.proto - - * Clean up some serializer stuff. - - 1. The switch to protobufjs 6.x seems to have removed the need for hasTag() (and actually it had broken our usage of it since the tags ended up changing from snake_case to camelCase). So I've removed hasTag() and set `oneofs: false` in protoLoaderOptions so the virtual "fooType" fields are no longer added. - 2. 'seconds' in timestamps should always be serialized as a string, since it's an int64 but we weren't doing that. I fixed it, which removed some of the special casing from rsgowman/grpc_load. - 3. I reworked the expect...RoundTrip methods into a single unified one which saves some repetition and I think is easier to make sense of. - 4. I re-added the disabled useProto3Json assert and instead tweaked the offending test not to try to round-trip through protobufjs. - - * Update grpc/proto-loader to 0.5.0. - -commit 46213bb2fdc5ac721b04d659d24fd03103d344ff (tag: rxfire@3.4.2, tag: firebase@5.11.0, tag: @firebase/webchannel-wrapper@0.2.19, tag: @firebase/util@0.2.14, tag: @firebase/testing@0.9.0, tag: @firebase/storage@0.2.15, tag: @firebase/storage-types@0.2.11, tag: @firebase/polyfill@0.3.13, tag: @firebase/performance@0.2.0, tag: @firebase/performance-types@0.0.1, tag: @firebase/messaging@0.3.19, tag: @firebase/messaging-types@0.2.11, tag: @firebase/logger@0.1.13, tag: @firebase/installations@0.1.0, tag: @firebase/installations-types@0.1.0, tag: @firebase/functions@0.4.6, tag: @firebase/functions-types@0.3.5, tag: @firebase/firestore@1.2.2, tag: @firebase/firestore-types@1.2.1, tag: @firebase/database@0.3.20, tag: @firebase/database-types@0.3.11, tag: @firebase/auth@0.10.2, tag: @firebase/auth-types@0.6.1, tag: @firebase/app@0.3.17, tag: @firebase/app-types@0.3.10) -Author: Feiyang1 -Date: Tue Apr 30 16:32:39 2019 -0700 - - Publish firebase@5.11.0 - -commit 96617d3d5b7a3d439e6c13ebb66d318fca7d8786 -Author: Feiyang -Date: Tue Apr 30 14:30:55 2019 -0700 - - make performance-types public (#1736) - -commit 932d7bea1568e6923bdd617d3830404f5578af84 -Author: Feiyang -Date: Tue Apr 30 12:23:18 2019 -0700 - - Firebase Performance and Installations (#1735) - - * Firebase Performance - - * Remove outdated test case - - * Increase timeout for test case that fails in CI - - * Fix flaky test - - * Fix messaging tests - - * null check before checking SDKVERSION - -commit b6a05fdbb4e6904d0d6a7c01f1611441dc3ab138 -Author: Michael Lehenbauer -Date: Tue Apr 30 10:42:10 2019 -0700 - - Fix stack traces and expected/actual values for custom equality mismatches. (#1730) - - We were losing the chai 'ssfi' flag which is needed to generate stack traces and so custom equality errors had no file / line number associated with them, making them hard to pinpoint. Using utils.transferFlags(), we now preserve these flags. - - I also noticed that the actual/expected values were swapped in the error messages and fixed that as well. - -commit 0acd32c07703a6976a21350e00d02bab9d74e7ac -Author: Mertcan Mermerkaya -Date: Tue Apr 30 16:55:59 2019 +0100 - - Refactor FirebaseError (#1725) - -commit b758647f990cc7bd66efeb8e5a0469fc30f2026f -Author: Christina Holland -Date: Mon Apr 29 16:07:29 2019 -0700 - - Add version and release notes badge (#1729) - - Add an NPM version badge and make release notes badge more prominent using https://shields.io/ - -commit d09bee6fbc3f8c4752989f821db1f4ce6f536504 -Author: DPEBot -Date: Sat Apr 27 12:11:42 2019 -0700 - - Auto-update dependencies. (#1727) - -commit 366713abf5a3443067056e32f0d8a255feb5e3cd -Merge: b6bfae0af ea6bd60c4 -Author: Christina Holland -Date: Thu Apr 25 11:19:29 2019 -0700 - - Merge branch 'release' - v5.10.1 - -commit ea6bd60c4fe4808a5cd784cd4c715c1c7065379d (tag: rxfire@3.4.1, tag: firebase@5.10.1, tag: @firebase/testing@0.8.1, tag: @firebase/firestore@1.2.1, tag: @firebase/auth@0.10.1) -Author: Christina Holland -Date: Thu Apr 25 10:36:28 2019 -0700 - - Publish firebase@5.10.1 - -commit b6bfae0af63491e2d8257af2aa748636be5c068b -Author: Sebastian Schmidt -Date: Wed Apr 24 16:59:40 2019 -0700 - - Revert "Fix the type annotations in the RTDB Query.on/off/once API. (#1204)" (#1723) - - This reverts commit e50b070fa531fa5c3911f2f597d9ab57b4457b36. - -commit e50b070fa531fa5c3911f2f597d9ab57b4457b36 -Author: Sebastian Schmidt -Date: Wed Apr 24 14:33:43 2019 -0700 - - Fix the type annotations in the RTDB Query.on/off/once API. (#1204) - -commit 233708903c03b4b2e9b791793fd6541e5b5d2717 -Author: Christina Holland -Date: Wed Apr 24 10:35:57 2019 -0700 - - Add app to component list (#1719) - - Add app to master list of components in `package.json` - -commit 721ac1cd64edd85bda7d3f4f317ffa1879ec9c54 -Author: Brian Chen -Date: Tue Apr 23 18:32:33 2019 -0700 - - Adding documentation for batch() and runTransaction() size limit (#1715) - -commit e641eddc3b7d5622b2bb175450e6194323fe1a57 -Author: Christina Holland -Date: Tue Apr 23 11:06:35 2019 -0700 - - Create package.json field for components (#1716) - - Centralized list of components to publish. - -commit b35ae725cfb0dc7c46877df1f5e0aae549b520d3 -Author: Brian Chen -Date: Tue Apr 23 09:41:46 2019 -0700 - - Add clearPersistence(), separate functionality out from shutdown() (#1712) - -commit dc705895f69107db334c8c25a1724d0cf2e5bdce -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Apr 23 01:24:42 2019 -0700 - - Track AuthEvent with ID to remove duplicate events (#1718) - -commit 37873b6154b1b5c580fa03f8812cd37ef4ac9ab6 -Merge: be5e65ffe f400e2905 -Author: Feiyang1 -Date: Mon Apr 22 21:28:25 2019 -0700 - - Merge branch 'release' - v5.10.0 - -commit be5e65ffe5b3d8fd07bf5d3c46fc22bec1f1e427 -Author: Sebastian Schmidt -Date: Fri Apr 19 13:36:50 2019 -0700 - - Remove extra (#1709) - -commit f400e29050af9ae293cfe473365b5047d725c5ba (tag: rxfire@3.4.0, tag: firebase@5.10.0, tag: @firebase/webchannel-wrapper@0.2.18, tag: @firebase/util@0.2.13, tag: @firebase/testing@0.8.0, tag: @firebase/storage@0.2.14, tag: @firebase/storage-types@0.2.10, tag: @firebase/polyfill@0.3.12, tag: @firebase/messaging@0.3.18, tag: @firebase/messaging-types@0.2.10, tag: @firebase/logger@0.1.12, tag: @firebase/functions@0.4.5, tag: @firebase/functions-types@0.3.4, tag: @firebase/firestore@1.2.0, tag: @firebase/firestore-types@1.2.0, tag: @firebase/database@0.3.19, tag: @firebase/database-types@0.3.10, tag: @firebase/auth@0.10.0, tag: @firebase/auth-types@0.6.0, tag: @firebase/app@0.3.16, tag: @firebase/app-types@0.3.9) -Author: Feiyang1 -Date: Thu Apr 18 14:08:27 2019 -0700 - - Publish firebase@5.10.0 - -commit 4b9894666e8d4bef62319e6d101b8fc22240f23f -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Apr 17 22:15:12 2019 -0700 - - Updates isWorker() check to test if importScripts and WorkerGlobalScope are defined (#1706) - -commit b5c8cf63cf1f2f5c258b759f24cfd27d43cc2b93 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Apr 17 22:14:23 2019 -0700 - - added admin_only_operation error (#1707) - -commit 26d95544b81071d2e1ef6f8c8d64711ac3b9656a -Author: Brian Chen -Date: Wed Apr 17 15:46:13 2019 -0700 - - Exclude iOS Safari < 10.0 and Android < 4.4 when checking isAvailable() to enable persistence (#1703) - -commit acaa10b41f9e3420ffcd663ae590d18d37c16a80 -Author: Mertcan Mermerkaya -Date: Wed Apr 17 22:27:34 2019 +0100 - - Use yarn install --frozen-lockfile in CI (#1676) - -commit 2b3b5e6d8b59de4250412816533e0decbf785fe5 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Apr 16 17:58:09 2019 -0700 - - replaced methods that are deprecated with new ones (#1704) - -commit 4e0348f5a4668968afd44e01d77829d87140b5e9 -Author: Feiyang -Date: Tue Apr 16 16:46:20 2019 -0700 - - update lock file (#1702) - -commit ac44bb2605eb1efff168197a1ec4a7b81a2d377e -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Apr 16 15:16:27 2019 -0700 - - Updated externs for AuthCredential serialization/deserialzation (#1701) - - Updated externs for AuthCredential toJSON/fromJSON - -commit 780c302fd6da799dafed45345b694a8a8a4a3c78 -Author: Christina Holland -Date: Tue Apr 16 11:53:25 2019 -0700 - - Add internal delete method to functions (#1687) - - Implement `INTERNAL.delete()` method for Functions service. - -commit eb8279410d2c45498c211acf074bb5987d1b1f91 -Author: DPEBot -Date: Tue Apr 16 11:11:45 2019 -0700 - - Auto-update dependencies. (#1692) - -commit aba75dff0a08e165b22711ffa8d99ca791acbc11 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Apr 16 10:52:49 2019 -0700 - - Expose toJSON and fromJSON on AuthCredential (#1629) - - toJSON/fromJSON for AuthCredential - -commit 97428d42e0b9eb8ada0b87130c87a8e6a3940e85 -Author: Brian Chen -Date: Mon Apr 15 16:06:54 2019 -0700 - - Throw error in subsequent function calls after the client is shutdown (#1695) - - * `ensureClientConfigured()` is now called in `delete()` to ensure that errors are thrown after `shutdown()` is called - -commit eaa6aa1d9bc721a7db97a32ba78b9d21dd099ebb -Author: Michael Lehenbauer -Date: Fri Apr 12 16:20:44 2019 -0700 - - Fix test:node:persistence command. (#1688) - - Since our code is TypeScript we use `--require ts-node/register` for mocha to - be able to run our code. We have this require in our global - `../../config/mocha.node.opts` file, but it apparently isn't applied before the - `--require test/util/node_persistence.ts` in our test:node:persistence - command-line. So I've had to add an explicit `--require ts-node/register` to - our command-line. - -commit a5d8837c1ae207ff5acf78e31ad1d13b1a698eec -Author: Michael Lehenbauer -Date: Fri Apr 12 14:57:12 2019 -0700 - - Use `--concurrency 4` instead of `--parallel` for tests. (#1693) - - This should make travis more reliable by limiting the amount of concurrency for our tests . - - `--concurrency 4` was also slightly faster than `--parallel` on my local - machine. Though any value above 1 was actually fairly comparable: - - --parallel: 342.63s - --concurrency 1: 498.26s - --concurrency 2: 351.23s - --concurrency 3: 342.50s - --concurrency 4: 336.55s - --concurrency 5: 349.82s - --concurrency 6: 348.19s - --concurrency 7: 341.47s - --concurrency 8: 348.52s - - Comparing a couple travis runs from before (with `--parallel`) to this PR (with `--concurrency 4`), it seems like this speeds things up a bit: - - Before: 679.74s / 678.04s - After: 595.03s / 635.62s - - And I notice the RTDB emulator starts muuuch faster: - Before: Emulator has started up after 67.517s! - After: Emulator has started up after 9.068s! - -commit b27f4c75c4a27ede3cad124d9090b6563f22927f -Author: Michael Lehenbauer -Date: Fri Apr 12 14:25:33 2019 -0700 - - Fix firestore.Timestamp case in docs table of contents. (#1691) - -commit eccfbe2398a80df162494a5873c52d48ca34aba7 -Merge: e0aba76b9 ab2ecd6c9 -Author: Christina Holland -Date: Thu Apr 11 15:25:54 2019 -0700 - - Merge branch 'release' - Release 5.9.4 - -commit ab2ecd6c9ece397459743cfb0c94bdcccdf5e0f3 (tag: rxfire@3.3.11, tag: firebase@5.9.4, tag: @firebase/webchannel-wrapper@0.2.17, tag: @firebase/util@0.2.12, tag: @firebase/testing@0.7.10, tag: @firebase/storage@0.2.13, tag: @firebase/storage-types@0.2.9, tag: @firebase/polyfill@0.3.11, tag: @firebase/messaging@0.3.17, tag: @firebase/messaging-types@0.2.9, tag: @firebase/logger@0.1.11, tag: @firebase/functions@0.4.4, tag: @firebase/functions-types@0.3.3, tag: @firebase/firestore@1.1.4, tag: @firebase/firestore-types@1.1.2, tag: @firebase/database@0.3.18, tag: @firebase/database-types@0.3.9, tag: @firebase/auth@0.9.8, tag: @firebase/auth-types@0.5.6, tag: @firebase/app@0.3.15, tag: @firebase/app-types@0.3.8) -Author: Christina Holland -Date: Thu Apr 11 15:11:41 2019 -0700 - - Publish firebase@5.9.4 - -commit e0aba76b9d7436ea750ca953c668b0210471c2ae -Author: Christina Holland -Date: Thu Apr 11 11:57:16 2019 -0700 - - Implement @webonly tag to exclude items from Node docs (#1679) - - - Use built-in Typescript AST tools to generate a temporary abridged copy of `index.d.ts` as a source for generating Node documentation. - - - `@webonly` tag used to indicate which sections to omit. - - - Custom Typedoc theme updated to not display `@webonly` as a tag section in doc output. - - - Rearrange signature/description ordering of overloaded methods. - -commit 077b88bb6c109b31bde0e9080bf49e28cc8a3248 -Author: Brian Chen -Date: Wed Apr 10 14:10:17 2019 -0700 - - Update documentation to use yarn build (#1681) - - * Add option to specify projectId in `yarn test:setup`. - * Test set up details added to CONTRIBUTING.md in `firestore` package. - -commit c2b6eb86fb8edbda3a1d5a43219adf58f9cbe9f2 -Author: Christina Holland -Date: Wed Apr 10 10:33:44 2019 -0700 - - Change a documentation link to match docs changes (#1684) - -commit a669ee56b6710e445092f899a1ef733f1fdc30b7 -Author: Michael Lehenbauer -Date: Tue Apr 9 15:44:33 2019 -0700 - - Add "experimentalForceLongPolling" option. (#1662) - -commit d4eb7e4e76513ad7677e67a4f2a9a69986ffcec5 -Author: Brian Chen -Date: Tue Apr 9 15:12:32 2019 -0700 - - Validate operator enum in Query.where() calls (#1677) - -commit 96ab56bac05ccaf506ed3a02ccad5ff7e01a07d0 -Author: Feiyang -Date: Tue Apr 9 14:18:32 2019 -0700 - - Refactor firebaseApp into multiple files (#1664) - - * refactor firebaseApp into multiple files - - * [AUTOMATED]: Prettier Code Styling - -commit 963b4f02a7593c2f6da8fe875d8e624e2b64c70f -Author: Mertcan Mermerkaya -Date: Tue Apr 9 18:42:41 2019 +0100 - - Run yarn (#1675) - - Looks like `yarn.lock` wasn't updated properly. - -commit 5b2322512812b1f51b749fa40dfda161e7b43776 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Apr 8 13:59:19 2019 -0700 - - Added the constructor defination on OAuthProvider (#1673) - -commit 81a4bae3327a236dd030d7e2ed1dc52a8c019401 -Author: DPEBot -Date: Mon Apr 8 12:10:25 2019 -0700 - - Auto-update dependencies. (#1654) - -commit 5849598178743dc2708a9cc89c06c887333a593f -Author: Christina Holland -Date: Mon Apr 8 11:03:44 2019 -0700 - - Run prettier on whole repo (#1663) - -commit e510af702ed186cc84524d97345fd2c15c79d58a -Author: Christina Holland -Date: Mon Apr 8 11:00:45 2019 -0700 - - Fix accidental reversion due to bad merge (#1672) - -commit 524b9aaf075ac6ccd6d57f386c2474d77ce156c1 -Merge: bcb1dfe88 5c8da05c4 -Author: Feiyang1 -Date: Fri Apr 5 17:02:13 2019 -0700 - - Merge branch 'release' - Release 5.9.3 - -commit bcb1dfe88869cf0e99d14f3785f256e643f927a8 -Author: Christina Holland -Date: Fri Apr 5 12:04:40 2019 -0700 - - Add npm script to run prettier on whole repo (#1661) - -commit 3c5338699e1e83a200a6e976d286e2031073db7f -Author: Michael Lehenbauer -Date: Fri Apr 5 11:43:33 2019 -0700 - - Fix up Firestore CHANGELOG.md to reflect recent releases. (#1660) - -commit 5c8da05c43df1d7da697bb12f8c36c28afb64380 (tag: rxfire@3.3.10, tag: firebase@5.9.3, tag: @firebase/testing@0.7.9, tag: @firebase/polyfill@0.3.10, tag: @firebase/messaging@0.3.16, tag: @firebase/firestore@1.1.3, tag: @firebase/database@0.3.17, tag: @firebase/auth@0.9.7, tag: @firebase/app@0.3.14) -Author: Feiyang1 -Date: Thu Apr 4 15:39:58 2019 -0700 - - Publish firebase@5.9.3 - -commit d6c1119c056ffcefb3a00338b6be3a51c929d5cc -Author: Feiyang -Date: Thu Apr 4 11:21:56 2019 -0700 - - update types (#1658) - -commit 01c63e493b3dafe00425f031ffed037c00c967c6 -Author: Mertcan Mermerkaya -Date: Wed Apr 3 21:39:50 2019 +0100 - - Delete Hash base class in util (#1657) - - Removes the Hash base class that is only used in Sha1 in @firebase/util. It only has a single property and only one class extends from it, so I think it's fair to say that it's not very useful. - - The actual reason of me doing this is that Rollup doesn't realize that extended classes that are transpiled to ES5 don't have side effects. Without this change, any package using Rollup that imports anything from @firebase/util (like FirebaseError or ErrorFactory) will also get Sha1 and Hash classes included in their bundle. I suspect that Webpack does something similar but I haven't checked. - - After this change, using Rollup, an iife build of a package that only exports ErrorFactory and FirebaseError from @firebase/util went from 1478 bytes to 544 bytes (minified + gzipped). - -commit b22e1ad48e59327658eb130bb6f5ff391a0a4c37 -Author: Christina Holland -Date: Wed Apr 3 10:53:15 2019 -0700 - - Add auto documentation section to contributing page (#1655) - -commit cbf1777cf9547f4e1066ce61d725ca005295460c -Author: Feiyang -Date: Wed Apr 3 10:02:48 2019 -0700 - - Add explicit type parameters for typescript 3.4 (#1656) - - * Add explicit type parameters for typescript 3.4 - - * [AUTOMATED]: Prettier Code Styling - -commit 5a98d84d496950d05a1abb8525f55f00548410da -Author: Mertcan Mermerkaya -Date: Tue Apr 2 18:10:12 2019 +0100 - - Remove "noImplicitAny: false" from the base TSConfig (#1653) - - This option is `false` by default, so there is no need to set it to `false` explicitly. - - Also because of this, when a package enables the `strict` option, they also need to enable `noImplicitAny` explicitly, even though it is already a part of the `strict` option. - -commit 8e81a47c072a353a685e08ec459819770e01cffe -Author: Natan Sągol -Date: Tue Apr 2 19:04:04 2019 +0200 - - Fix a typo in a build file of the auth package (#1635) - -commit 46e3280cbab95091b19c4a8c782b75e1064b9adc -Author: Abhijeeth Padarthi -Date: Tue Apr 2 21:08:52 2019 +0530 - - Fix lint (#1652) - - two NOs make a YES 😄 - -commit 4ec3191447d2a5ce51ed1acb01b1cdef810633c4 -Author: Christina Holland -Date: Mon Apr 1 11:02:48 2019 -0700 - - Make default testing project easier to select (#1638) - - Put JSCore Sandbox repo at top of list - -commit dbd57b1cdbef43276537d317bc78b7e40ae97c6d -Author: Xin Du (Clark) -Date: Fri Mar 29 06:12:08 2019 +0000 - - chore: upgrade core-js to v3 (#1623) - -commit c16363967ec894a47a76ea140782d9577101091b -Merge: 18aecbc27 61b936c80 -Author: Christina Holland -Date: Thu Mar 28 13:10:36 2019 -0700 - - Merge branch 'release' - Release 5.9.2 - -commit 61b936c80e385c8c92488e0765dc098d83809f22 (tag: rxfire@3.3.9, tag: firebase@5.9.2, tag: @firebase/testing@0.7.8, tag: @firebase/firestore@1.1.2) -Author: Christina Holland -Date: Thu Mar 28 13:04:24 2019 -0700 - - Publish firebase@5.9.2 - -commit 18aecbc27c5eae73aa0ab3de79034a2c254d6eb0 -Author: Mertcan Mermerkaya -Date: Thu Mar 28 19:00:30 2019 +0000 - - Improve AppError typings (#1645) - -commit d97b62c7ef7632174af651dc3ab49c321835b00e -Author: Mertcan Mermerkaya -Date: Thu Mar 28 18:41:41 2019 +0000 - - Use a const enum for ErrorCode (#1646) - -commit c2d7498720d211dc4ab631be883f5dbd139961bb -Author: Christina Holland -Date: Wed Mar 27 15:30:22 2019 -0700 - - Add license tags for new files since last license tag add (#1643) - -commit 57d254efa65840063370cfd905236a14d0c0c32d -Author: Christina Holland -Date: Wed Mar 27 13:25:51 2019 -0700 - - Fix bug causing extra Node doc files to not be deleted (#1637) - - Fix bug causing extra Node doc files to not be deleted - -commit 03a4c8dbf58bab3db5742c094c91f46bbf446155 -Author: egilmorez -Date: Mon Mar 25 15:51:28 2019 -0700 - - Add firestore.FieldValue.increment to index.d.ts (#1632) - - - * Adding firestore.FieldValue.increment. - -commit e4604d08b9c1367d13f9900e52753e499f31805d -Author: Christina Holland -Date: Fri Mar 22 11:31:29 2019 -0700 - - Add html extension to toc on homepage (#1625) - - * Add html extension to toc on homepage - - * Add javascript language tags that were missed earlier - -commit 2e5c8426d2c5149f047d9303ea051baa6c252cc9 -Author: egilmorez -Date: Fri Mar 22 10:58:31 2019 -0700 - - Fixing a few typos. (#1628) - - * Fixing a few typos. - - * Update index.d.ts - -commit 4f446f0a1c00f080fb58451b086efa899be97a08 -Merge: 49e8e66c3 8f7229ff7 -Author: Feiyang1 -Date: Thu Mar 21 15:06:44 2019 -0700 - - Merge branch 'release' - Release 5.9.1 - -commit 8f7229ff70d334baf06e6562f96d40df8a519a16 (tag: rxfire@3.3.8, tag: firebase@5.9.1, tag: @firebase/webchannel-wrapper@0.2.16, tag: @firebase/util@0.2.11, tag: @firebase/testing@0.7.7, tag: @firebase/storage@0.2.12, tag: @firebase/storage-types@0.2.8, tag: @firebase/polyfill@0.3.9, tag: @firebase/messaging@0.3.15, tag: @firebase/messaging-types@0.2.8, tag: @firebase/logger@0.1.10, tag: @firebase/functions@0.4.3, tag: @firebase/functions-types@0.3.2, tag: @firebase/firestore@1.1.1, tag: @firebase/firestore-types@1.1.1, tag: @firebase/database@0.3.16, tag: @firebase/database-types@0.3.8, tag: @firebase/auth@0.9.6, tag: @firebase/auth-types@0.5.5, tag: @firebase/app@0.3.13, tag: @firebase/app-types@0.3.7) -Author: Feiyang1 -Date: Thu Mar 21 14:59:05 2019 -0700 - - Publish firebase@5.9.1 - -commit 49e8e66c39414d132c4360e99bd5c71c6d71508c -Author: Fred Zhang -Date: Thu Mar 21 13:49:51 2019 -0700 - - s/firebase.Promise/Promise (#1620) - - * s/firebase.Promise/Promise - - * remove unecessary type annotations - -commit e7053c72b38ffed454d0367102032143f8f3f9aa -Author: Christina Holland -Date: Thu Mar 21 11:15:20 2019 -0700 - - Update doc generation styling and content (#1622) - - * Remove aside when unneeded - - * Header margin changes - - * Fixes for code highlighting - - * Update `toc.yaml` files and `index.d.ts` - -commit bb7355945835c5b8908487ef3b939f716d7f5c42 -Author: Michael Lehenbauer -Date: Wed Mar 20 19:07:34 2019 -0700 - - b/32935141: Clean up remaining TODOs in first-party-auth implementation. (#1614) - -commit 6e90afc0142355999196557a6be2be3fe2704824 (origin/fz/transient-failed) -Author: Feiyang -Date: Fri Mar 15 16:11:42 2019 -0700 - - exclude karma-sauce-launcher in dep auto update (#1609) - - * exclude karma-sauce-launcher in dep auto update - - * update yarn lock - -commit ac8955d9c514a624ae5e1d55cc799b068313e13c -Author: Christina Holland -Date: Fri Mar 15 14:33:01 2019 -0700 - - Modify doc generation script to also generate node reference docs (#1604) - - Modify docgen script to generate node docs as well. Create npm scripts to generate js docs, or node docs, or both. - -commit 7514ac5d0cbd31096308abad34f07ab62a4bd634 -Author: Fred Zhang -Date: Fri Mar 15 09:47:44 2019 -0700 - - Externalize Storage Domain Constant (#1602) - - * extract domain constant - - * clean up unused imports - - * s/uploadUrl/makeUrl s/normalUrl/makeUrl - - * s/domainRegex/hostRegex/ - -commit e27cab8d880b1b9fe4d9a9ef102abce468c79e96 -Author: Feiyang -Date: Thu Mar 14 16:55:01 2019 -0700 - - Add delete() back to index.d.ts (#1607) - - * Add delete() back to index.d.ts - - * include rxFire in repo level test - - * [AUTOMATED]: Prettier Code Styling - -commit 5e851188a71b2ca596eeb0e725a8e5cd4df0c7d8 -Author: Michael Lehenbauer -Date: Thu Mar 14 15:34:31 2019 -0700 - - b/123095740: Increase webchannel timeout to accommodate slow internet connections (#1447). (#1603) - -commit 9fe1b6a5bde9e421c4200736a7debbdf39233277 -Merge: 6a9b0e41a 5df8e2e00 -Author: Christina Holland -Date: Thu Mar 14 14:43:34 2019 -0700 - - Merge branch 'release' - Release 5.9.0 - -commit 5df8e2e00f99cb1a3711ff56f199bc445fbfc994 (tag: rxfire@3.3.7, tag: firebase@5.9.0, tag: @firebase/webchannel-wrapper@0.2.15, tag: @firebase/util@0.2.10, tag: @firebase/testing@0.7.6, tag: @firebase/storage@0.2.11, tag: @firebase/storage-types@0.2.7, tag: @firebase/polyfill@0.3.8, tag: @firebase/messaging@0.3.14, tag: @firebase/messaging-types@0.2.7, tag: @firebase/logger@0.1.9, tag: @firebase/functions@0.4.2, tag: @firebase/functions-types@0.3.1, tag: @firebase/firestore@1.1.0, tag: @firebase/firestore-types@1.1.0, tag: @firebase/database@0.3.15, tag: @firebase/database-types@0.3.7, tag: @firebase/auth@0.9.5, tag: @firebase/auth-types@0.5.4, tag: @firebase/app@0.3.12, tag: @firebase/app-types@0.3.6) -Author: Christina Holland -Date: Thu Mar 14 13:56:16 2019 -0700 - - Publish firebase@5.9.0 - -commit 6a9b0e41ac4226a16385b42f73ae9cf24519efa9 -Author: Michael Lehenbauer -Date: Thu Mar 14 09:43:21 2019 -0700 - - b/125385470: Fix transactions w/ auth issue on NodeJS. (#1605) - - In https://github.com/firebase/firebase-js-sdk/commit/81cd260aeb729c5003952988b19d5b32788510d4 we moved to sending our auth metadata directly in each RPC call, but for RPCs that take a callback (i.e. non-streaming RPCs like we use to commit a transaction), the auth metadata must be passed *before* the callback, but we were unconditionally passing it as the last argument: https://github.com/firebase/firebase-js-sdk/blob/a18b2905a161f302bf0fad7a32dd82507932093e/packages/firestore/src/platform_node/grpc_connection.ts#L145 - - I've fixed this by removing the getRpcCallable() helper which I felt wasn't being that helpful anymore. I also cleaned up ensureActiveStub() which accepted a token but didn't do anything with it. - -commit c91096e2bcb16bc73936bac44392277ae7304ceb -Author: Sebastian Schmidt -Date: Thu Mar 14 08:30:49 2019 +0800 - - Running yarn:prettier' (#1601) - -commit 53d4efcba688736959b5bb7e589f23f37ba409b1 -Author: Christina Holland -Date: Wed Mar 13 10:34:20 2019 -0700 - - Remove source links from generated reference docs (#1598) - -commit b66962d1aa1443e19493af6966f0c46060d88103 -Author: Sebastian Schmidt -Date: Thu Mar 14 00:14:13 2019 +0800 - - Adding missing export for DataSnapshot (#1600) - -commit c923efab982900f50141554d284b3d762fda97d1 -Author: Sebastian Schmidt -Date: Thu Mar 14 00:11:32 2019 +0800 - - Ensure consistent JSON Serialization of DocumentKeys (#1596) - - Stop relying on JSON.stringify() as part of generating canonicalId() since we haven't made any effort to implement sane toJSON() methods on our types. We now use toString() instead, which required implementing it on SortedMap. - -commit a738a9d1be9dc8309487c8d3ee2a888b180f55bf -Author: Feiyang -Date: Tue Mar 12 16:05:11 2019 -0700 - - add deps update configuration to all projects (#1599) - -commit c0ec7a058b00d99c0b50113269c491d837a209f5 -Author: Feiyang -Date: Tue Mar 12 14:38:23 2019 -0700 - - rename prepare to build, so build is not triggered after yarn install (#1592) - - * rename prepare to build, so build is not triggered after yarn install - - * [AUTOMATED]: Prettier Code Styling - - * build packages before running tests - -commit 71b7abf67bc715cb369f06b52b93ca508164dedf -Author: Mertcan Mermerkaya -Date: Tue Mar 12 17:10:20 2019 +0000 - - Fix FCM in Chrome Extensions (#1597) - - Prevents sending messages to Chrome Extension background pages, which are always considered visible in Chrome. That causes our SDK try to send the message to the background page and to not show the notification. - - I'll also investigate if background page being considered a visible client is a bug in Chrome itself, and try to get it fixed if I can. But for now this seems like a good workaround. - -commit 0c9badf22d71dc0b37e410784e94bd6027f01e93 -Author: Natan Sągol -Date: Mon Mar 11 22:16:27 2019 +0100 - - Add `repository.directory` field to all `package.json` files. (#1595) - - npm supports links to `package.json` files that are not in a root of - a repostiory by supplying `directory` field in `repository`, see - https://docs.npmjs.com/files/package.json.html#repository - -commit 2297f444e8f9b87a82806ddf66ec0d74edd4fb04 -Author: Jeff -Date: Mon Mar 11 13:01:36 2019 -0700 - - Fix links on npm (#1594) - - Links in the [documentation section](https://www.npmjs.com/package/rxfire#documentation) of the npm package description page don't work correctly. Using the full URL of the docs pages will fix that. - -commit 9bb3603c2d840986009b4cbb810db5b8a6a0e70a -Author: Michael Lehenbauer -Date: Sat Mar 9 09:56:33 2019 -0800 - - Fix webchannel-wrapper sourcemap. (#1590) - - I accidentally broke this while tweaking my last change to write to a temp folder. - -commit 54bdfc4cebb038ffe19b16bb263b1007132ca356 -Author: Feiyang -Date: Fri Mar 8 14:53:51 2019 -0800 - - update remaining outdated deps before enabling auto update (#1589) - - * update remaining outdated deps before enabling auto update - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * remove temporary script - -commit 6c729f79910796b1fa14a7a2cb9ac19374904377 -Author: Michael Lehenbauer -Date: Fri Mar 8 12:06:58 2019 -0800 - - Add changelog entry for CG query internals. (#1588) - -commit 21c0f3c0c2bf0e06bf40c2966da1033570c3fb5c -Author: Michael Lehenbauer -Date: Fri Mar 8 10:37:41 2019 -0800 - - Collection Group Queries w/ indexing (#1440) - - * Collection Group Queries w/ indexing - - * [AUTOMATED]: Prettier Code Styling - - * Initial review feedback. - - * CR Feedback: QueryIndexes renames. - - * QueryIndexes => IndexManager - * indexCollectionParent() => addToCollectionParentIndex() - - * Create index entries from MutationQueue.addMutationBatch(). - - * Add spec tests. - - * Index existing data. - - * [AUTOMATED]: Prettier Code Styling - - * lint - - * Fix FieldPath.documentId() handling with CG queries. - - * Cleanup - - * Re-add accidentally-removed test. - - * Delete accidentally checked-in vim swap file. - - * Update changelog. - - * Tweak test to use path(). - - * Add asserts to verify collection paths. - - * Simplify schema migration test. - - * CR feedback. - - * Tweak comment. - - * CR Feedback. - - * Port minor CR feedback back to JS. - - * Hide public API for CG queries until backend support is ready. - -commit 455d7dbcb772a6a755ad3fa57a27194cf7dc8e0a -Author: Christina Holland -Date: Fri Mar 8 10:10:25 2019 -0800 - - Fix doc generation script to preserve old filename capitalization (#1586) - - Fix doc generation script to preserve old filename capitalization - -commit 00bc0869f28ed3561651617a91c12a73cd027e92 -Author: Feiyang -Date: Fri Mar 8 10:09:07 2019 -0800 - - fix (typing): replace any with concrete types (#1585) - -commit ff30c2721c9fea7440f2db0eede14c96dbd915d8 -Author: Michael Lehenbauer -Date: Thu Mar 7 18:30:17 2019 -0800 - - Enable sourcemap generation throughout repo. (#1576) - - Enable sourcemaps in all builds for easier debugging / size analysis. - - * Merge existing sourcemaps when building. - * Enable sourcemap for webchannel-wrapper. - - I reworked the build to actually write the intermediate output from closure so - I could plumb the source map through straightforwardly. - -commit e2bbfd0d256a6cc3fb878917638affa6007fa311 -Author: Michael Lehenbauer -Date: Thu Mar 7 18:29:34 2019 -0800 - - Rerun prettier on firestore code (somehow some changes got missed). (#1587) - -commit 278678c5bbcbf60d1e5e61295945294dc8233c72 -Merge: d6bd056c3 eacb4863e -Author: Feiyang1 -Date: Thu Mar 7 14:58:15 2019 -0800 - - Merge branch 'release' - Release 5.8.6 - -commit eacb4863e0b7057f167db1d2bc7dce2bfd92a684 (tag: rxfire@3.3.6, tag: firebase@5.8.6, tag: @firebase/util@0.2.9, tag: @firebase/testing@0.7.5, tag: @firebase/storage@0.2.10, tag: @firebase/messaging@0.3.13, tag: @firebase/logger@0.1.8, tag: @firebase/functions@0.4.1, tag: @firebase/firestore@1.0.6, tag: @firebase/database@0.3.14, tag: @firebase/app@0.3.11) -Author: Feiyang1 -Date: Thu Mar 7 13:47:38 2019 -0800 - - Publish firebase@5.8.6 - -commit d6bd056c3a0cab972f842dc5bee49eb0ef25c192 -Author: Michael Lehenbauer -Date: Thu Mar 7 11:33:16 2019 -0800 - - Fix vscode test runners based on changes in #1561. (#1584) - - TS_NODE_COMPILER_OPTIONS={"module":"commonjs"}. This change propagates this - into .vscode/launch.json. - -commit 35276912e7733a28920493a18a9cc6c65c8ae9b5 -Author: Christina Holland -Date: Thu Mar 7 11:05:50 2019 -0800 - - Update firestore externs file to avoid closure compiler errors (#1582) - - Update firestore externs to avoid closure compiler errors - -commit 1afd682dc43da695c2e1ae72e7e76b8386763771 -Author: Gil -Date: Thu Mar 7 09:39:24 2019 -0800 - - Fix test runners based on changes in #1561 (#1583) - - Fix yarn test:node:persistence in packages/firestore and also IntelliJ - test runner definitions. - -commit 3b520a2bdb6f2c10af13bb75e8c37e02aff4d707 -Author: Sebastian Schmidt -Date: Wed Mar 6 18:50:24 2019 -0800 - - Adding FieldValue.increment() to changelog (#1581) - -commit d3645695cdcd4cba26725fe0a6056e04c4c9ede8 -Author: Sebastian Schmidt -Date: Wed Mar 6 13:55:02 2019 -0800 - - Add Numeric Add (#1368) - -commit 400fd786a59340fd9adcb2c7f083479445b8981f -Author: Feiyang -Date: Tue Mar 5 16:25:03 2019 -0800 - - update dependency to avoid an error when running release process (#1579) - -commit 5d0d047c97b7b0ef430227d0de9951a7bcbb3ec8 -Author: Michael Lehenbauer -Date: Tue Mar 5 13:21:11 2019 -0800 - - Improved query performance in the face of subcollections. (#1578) - - Ports an optimization from Android where we skip parsing documents that are in - subcollections beneath the collection we're querying over. - -commit ef858acf510a498b4aef904caa072ec6fefd6134 -Author: Feiyang -Date: Mon Mar 4 13:51:36 2019 -0800 - - test: update test related packages (#1564) - - * test: update test related packages - - * build: add missing dependency - - * update yarn lock - -commit 86c2e14ed487dc4a7ef79189c714da8329a0ef08 -Merge: b56d6785d a78636904 -Author: Christina Holland -Date: Fri Mar 1 16:33:08 2019 -0800 - - Merge branch 'release' - Release 5.8.5 - -commit a786369041e4cb8dddfdafcb0c250d6f6c184ed9 (tag: rxfire@3.3.5, tag: firebase@5.8.5, tag: @firebase/webchannel-wrapper@0.2.14, tag: @firebase/util@0.2.8, tag: @firebase/testing@0.7.4, tag: @firebase/storage@0.2.9, tag: @firebase/storage-types@0.2.6, tag: @firebase/polyfill@0.3.7, tag: @firebase/messaging@0.3.12, tag: @firebase/messaging-types@0.2.6, tag: @firebase/logger@0.1.7, tag: @firebase/functions@0.4.0, tag: @firebase/functions-types@0.3.0, tag: @firebase/firestore@1.0.5, tag: @firebase/firestore-types@1.0.3, tag: @firebase/database@0.3.13, tag: @firebase/database-types@0.3.6, tag: @firebase/auth@0.9.4, tag: @firebase/auth-types@0.5.3, tag: @firebase/app@0.3.10, tag: @firebase/app-types@0.3.5) -Author: Christina Holland -Date: Fri Mar 1 16:04:19 2019 -0800 - - Publish firebase@5.8.5 - -commit b56d6785d494abd146086a7125c82f3e93ed4609 -Author: Eduard -Date: Fri Mar 1 17:07:28 2019 +0400 - - rxfire rollup config fix (#1568) - - closes #1567 - -commit af8400154533deea189ff1475d55fcb16b25cb10 -Author: Christina Holland -Date: Wed Feb 27 10:07:52 2019 -0800 - - Add autodocumentation scripts that run Typedoc (#1553) - - * Add doc generation files - - * Update index.d.ts - -commit b8daf84bb2e1a3cc2f950e5a69b0df831575a7b6 -Merge: 33a00083b 6e1860b45 -Author: Christina Holland -Date: Wed Feb 27 09:43:54 2019 -0800 - - Merge branch 'master' into release - -commit 6e1860b451e9ff27cdbbc6ac62e0154d2b372e09 -Author: Mike Lyons -Date: Wed Feb 27 10:52:44 2019 -0500 - - [rxfire] Reference realtime database typings (#1258) - - Realtime database typings exist for rxfire but the package.json file does not reference them and vscode can't find them. This change adds the missing reference, matching auth/, firestore/, and storage/. - -commit 43ff0636abf1a72a6625fa01fe85960911d48c93 -Author: Firebaser <34425799+angulartist@users.noreply.github.com> -Date: Wed Feb 27 16:22:55 2019 +0100 - - Docs(rxfire): replace docChanges method with collectionChanges (#1527) - - docChanges not found in rxfire/firestore package, collectionChanges is the correct method - -commit afba06d27ab43e0094561dccadbc5ebccfe9cf89 -Author: Christina Holland -Date: Wed Feb 27 02:01:29 2019 -0800 - - Delete gitignored generated files in rxfire (#1565) - -commit 33a00083b9bf923e1c5b1d1d2582969fae59d82c -Author: Christina Holland -Date: Tue Feb 26 21:34:05 2019 -0800 - - Remove gitignored files - -commit 5a10a6d485a65099c6699c937095903a45bc67f9 -Author: Feiyang1 -Date: Tue Feb 26 17:28:26 2019 -0800 - - Add new storage owner - -commit 4502a57af055c5ed57a60a0c413a9fea26b84772 -Author: Feiyang -Date: Tue Feb 26 17:24:30 2019 -0800 - - include rxfire in the global build scripts (#1563) - -commit d0bf3790d71d87b9a5eaba1e7b45afa443604690 -Author: Feiyang -Date: Tue Feb 26 11:22:30 2019 -0800 - - build: update build tools (#1561) - -commit 883e6123c9b880f9d8f03005e2b0998f60ea872d -Author: Paulo Busato Favarato -Date: Mon Feb 25 18:59:21 2019 -0300 - - Values of updateProfile method can be not passed (optional) (#1534) - - * Values of updateProfile method can be not passed (optional) - - * Fix on the firebase index.ts file - -commit 05c9e06ea9bc93f47880616d213fdf58c892e6e2 -Author: Bryan Klimt -Date: Mon Feb 25 13:32:20 2019 -0800 - - Implement timeouts in HttpsCallables. (#1518) - - Up the default timeout for Firebase Functions to 70s, and add an API method to allow changing it on a per-function basis. - -commit 6b710d8709d57bf277fe08cfcf6d40d8f46489bf -Author: Feiyang -Date: Mon Feb 25 10:40:01 2019 -0800 - - fix(auth): add OAuthCredential in typing file. (#1559) - -commit 4d82d1e6e697d2a3fef09757a7cac3700116c052 -Author: Michael Lehenbauer -Date: Fri Feb 22 15:11:24 2019 -0800 - - Drop usage of XhrIoPool to save 3865 bytes. (#1558) - - It's not necessary for us to reuse xhr objects or set pool-wide headers / - credentials, so we can just instantiate XhrIo objects directly and save 3865 - bytes by not pulling in XhrIoPool. We could consider using XmlHttpRequest - directly instead of going through the XhrIo closure wrapper, but WebChannel - uses XhrIo too, so we get it "for free." - -commit 4983420937f1d8d0217a44ffdf505758f570dada -Author: Michael Lehenbauer -Date: Fri Feb 22 15:10:02 2019 -0800 - - Upgrade closure-builder and optimize build size. (#1557) - - * Upgraded closure-builder (necessary to be able to specify multiple defines). - * Disabled closure debug code (in particular logging) and several legacy - fallbacks that we don't need. - -commit 6a0154aee104a163d6d3b1a28d80fcbb9bace908 -Author: Feiyang -Date: Fri Feb 22 14:50:06 2019 -0800 - - Replace AnyJs and Unknown with unknown (#1556) - - * refactor(firestore): replace AnyJs with unknown - - * refactor(firestore): replace Unknown with unknown - - * refactor(firestore): use Array to avoid tslint error - -commit 5adf4571b2df3b2e6539c3d5ef7d9183d3b2125f -Author: Yifan Yang -Date: Fri Feb 22 13:20:53 2019 -0800 - - Replace database tests that hit production with emulator test. (#1540) - - * Replace current database test that hits production with emulator test. - - * Adjust emulator startup wait time to 30s normally, and 100s when on Travis. - -commit 548e4a7d235bd96fd8306f2f3490a6c55b923509 -Merge: e3d491acc 20bc0a982 -Author: Feiyang1 -Date: Fri Feb 22 10:38:41 2019 -0800 - - Merge branch 'release' - Release 5.8.4 - -commit e3d491acc70ae15dc8f70b8d13531aa4819eaf58 -Author: Feiyang -Date: Thu Feb 21 14:47:14 2019 -0800 - - build: update typescript version (#1552) - - * build: update typescript version - - * refactor(messaging) : use spread operator - - * refactor(database): use unknown instead of any - - * fix(firestore): fix test case error - -commit 20bc0a982cee1985c2b88ceb14f8ccc7974dcfa9 (tag: rxfire@3.3.4, tag: firebase@5.8.4, tag: @firebase/testing@0.7.3, tag: @firebase/firestore@1.0.4) -Author: Feiyang1 -Date: Thu Feb 21 14:39:10 2019 -0800 - - Publish firebase@5.8.4 - -commit a18b2905a161f302bf0fad7a32dd82507932093e -Author: Christina Holland -Date: Wed Feb 20 10:09:29 2019 -0800 - - Add a console warning when browser bundle is loaded in node. (#1536) - - Add warning in console if browser bundle is used in node. Include links to instructions for pointing to "main" bundle in Webpack and Rollup. - -commit 03a87c202f4c1e75ee8cd553d4ff9f85f1bdf9ff -Author: Scott Crossen -Date: Tue Feb 19 11:28:55 2019 -0800 - - Made rulesets that don't compile throw errors in testing sdk (#1545) - - Made rulesets that don't compile throw errors in testing sdk method - -commit 0c8d080ef2852644545c4291ce900ecb5b255c27 -Author: Christina Holland -Date: Fri Feb 15 16:26:06 2019 -0800 - - Fix bugs in internal rollup config (#1530) - - Fix bugs in internal rollup config and add remaining missing license tags. - -commit 6d6c8432eb880b9e6132a7feaa144dc1bd69863f -Merge: 2d966e367 effd072c6 -Author: Christina Holland -Date: Fri Feb 15 15:37:54 2019 -0800 - - Merge branch 'release' - Release 5.8.3 - -commit effd072c6d9506f711d3aa6f7a3788cad6325d95 (tag: rxfire@3.3.3, tag: firebase@5.8.3, tag: @firebase/webchannel-wrapper@0.2.13, tag: @firebase/util@0.2.7, tag: @firebase/testing@0.7.2, tag: @firebase/storage@0.2.8, tag: @firebase/storage-types@0.2.5, tag: @firebase/polyfill@0.3.6, tag: @firebase/messaging@0.3.11, tag: @firebase/messaging-types@0.2.5, tag: @firebase/logger@0.1.6, tag: @firebase/functions@0.3.7, tag: @firebase/functions-types@0.2.3, tag: @firebase/firestore@1.0.3, tag: @firebase/firestore-types@1.0.2, tag: @firebase/database@0.3.12, tag: @firebase/database-types@0.3.5, tag: @firebase/auth@0.9.3, tag: @firebase/auth-types@0.5.2, tag: @firebase/app@0.3.9, tag: @firebase/app-types@0.3.4) -Author: Christina Holland -Date: Thu Feb 14 14:19:12 2019 -0800 - - Publish firebase@5.8.3 - -commit 2d966e36775228e657de5555251c53add2b91ab0 -Author: Michael Lehenbauer -Date: Wed Feb 13 10:47:25 2019 -0800 - - Fix issues with enablePersistence() in second tab. (#1537) - - 1. Fixes #1531 (Firestore error uncaught in promise when primary lease check fails). - 2. Ensures IndexedDbPersistence doesn't set up its visibility handler, etc. if - it fails to initialize. - -commit e16a1724f8a628af82e946cd19fbffb43d3458c4 -Author: Feiyang -Date: Tue Feb 12 14:19:27 2019 -0800 - - Firestore Console Build (#1502) - - * Firestore Console Build - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * update license header - - * comments for console build - - * [AUTOMATED]: Prettier Code Styling - - * remove all wrappers - - * escape unicode characters when uglifying - - * export Timestamp - -commit 0b7b93bb9d0bfca0be29f1c6cad1d76fb1dc9cf5 -Author: rsgowman -Date: Tue Feb 12 16:40:10 2019 -0500 - - Forbid queries endAt an uncommitted server timestamp. (#1529) - - * Forbid queries endAt an uncommitted server timestamp. - - Without this, it still fails, but: - a) not until serializing the query, and - b) the error is an internal error, and - c) the error message is quite cryptic and has nothing to do with the problem. - - Port of https://github.com/firebase/firebase-android-sdk/pull/138 - -commit 10bf7c18eb79eb62e716ffe47951b77165c4c61f -Author: James Daniels -Date: Mon Feb 11 09:24:39 2019 -0800 - - Add James Daniels to RxFire owners (#1528) - -commit 92ad91e797c5f9084440bdb4ff304c2aae8b882a -Merge: 6b53e0058 f2cdb89d1 -Author: Feiyang1 -Date: Thu Feb 7 11:56:02 2019 -0800 - - Merge branch 'release' - 5.8.2 - -commit 6b53e0058483c9002d2fe56119f86fc9fb96b56c -Author: Christina Holland -Date: Fri Feb 1 16:19:20 2019 -0800 - - Add @license tags (#1507) - - Add @license tag to existing source file licenses and create alternate rollup config for optionally adding licenses to generated files for internal deployment. - -commit 74d72ce3a9b99ba82e566811388a73597b675698 -Author: Michael Lehenbauer -Date: Fri Feb 1 08:56:19 2019 -0800 - - Fix flaky test. (#1511) - - The "can return previous value through consecutive updates" test was flaky - because it did two consecutive server timestamp writes to the same field and - expected 2 local events. But if you do both writes within 1ms then the - snapshots will be indistinguishable (the estimated value for the server - timestamps will be the same) and so only 1 event will be raised. I added an - additional change to the second write to guarantee it triggers an event. - - While looking at the test, I also noticed it was slightly broken / incomplete. - There was an incorrect line attempting to disable the network and the test was - missing the remaining code to re-enable the network and verify the behavior. I - fixed that as well. - -commit f2cdb89d1eceb4fc0851459c0dbd80e8f82980e3 (tag: rxfire@3.3.2, tag: firebase@5.8.2, tag: @firebase/testing@0.7.1, tag: @firebase/firestore@1.0.2) -Author: Feiyang1 -Date: Thu Jan 31 16:47:34 2019 -0800 - - Publish firebase@5.8.2 - -commit d0f981e2821c0984ba641835e5ba3c10e97e7429 -Author: Michael Lehenbauer -Date: Thu Jan 31 16:31:15 2019 -0800 - - Remove "can write very large batches" test. (#1510) - - This reverts the test added in commit 20beaef8a74b1d9c379da90218f73a6b55aa4d98 - but leaves the test re-ordering. - - The test took ~6s to run causing some timeouts, and we're unlikely to regress - large batch support given IndexedDb doesn't have inherent size limitations for - us to work around. - -commit 1620d6ec9c039f000adb3ebd85888ecda40eceef -Author: Feiyang -Date: Thu Jan 31 15:46:06 2019 -0800 - - Use a different lerna command to accurately find changed packages (#1509) - - * remove skipped packages - - * [AUTOMATED]: Prettier Code Styling - - * manually point to the latest release tag - - * use a different lerna command to accurately find changed packages - - * [AUTOMATED]: Prettier Code Styling - - * remove skip logic - -commit 0c313d2404c7e0288cef5a1a4f375933fe3ca983 -Author: Feiyang -Date: Wed Jan 30 18:51:56 2019 -0800 - - Allow skipping packages in a release (#1505) - - * allow skipping packages in a release - - * [AUTOMATED]: Prettier Code Styling - - * add lerna issue link - - * [AUTOMATED]: Prettier Code Styling - -commit 27e683f2dc2bedb54d2dcf5d94c207932fafacad -Author: Feiyang -Date: Wed Jan 30 18:15:58 2019 -0800 - - update license header text (#1504) - -commit 4391a88ea4ed75ea7bdd2854deed50a64c9b40c6 -Merge: a28fec2b3 63344ca26 -Author: Feiyang1 -Date: Tue Jan 29 10:08:45 2019 -0800 - - Merge release branch - -commit a28fec2b36f7af76099e2e305971fccd7a425deb -Author: Doggy -Date: Mon Jan 28 22:10:13 2019 -0600 - - Update import path (#1492) - - Correct import path should be `firebase/storage` - -commit 20beaef8a74b1d9c379da90218f73a6b55aa4d98 -Author: Gil -Date: Mon Jan 28 17:21:21 2019 -0800 - - Verify large write batches support (#1501) - - Port can write very large batches from Android - -commit ff294e9966512324ff8d80dccf0e4a9015aff075 -Author: Ifiok Jr -Date: Fri Jan 25 22:31:32 2019 +0000 - - Include empty import file in npm installation (#1485) - - Fixes missing line from #1347 - -commit 3603066ea06e2d44f13f45c9c8b7e609f6d8d6c5 -Author: Feiyang -Date: Fri Jan 25 14:30:52 2019 -0800 - - update grpc to 1.18.0 (#1483) - -commit 63344ca26074bb116b4e12a78e1a86ef2aee2757 (tag: rxfire@3.3.1, tag: firebase@5.8.1, tag: @firebase/webchannel-wrapper@0.2.12, tag: @firebase/util@0.2.6, tag: @firebase/testing@0.7.0, tag: @firebase/storage@0.2.7, tag: @firebase/storage-types@0.2.4, tag: @firebase/polyfill@0.3.5, tag: @firebase/messaging@0.3.10, tag: @firebase/messaging-types@0.2.4, tag: @firebase/logger@0.1.5, tag: @firebase/functions@0.3.6, tag: @firebase/functions-types@0.2.2, tag: @firebase/firestore@1.0.1, tag: @firebase/firestore-types@1.0.1, tag: @firebase/database@0.3.11, tag: @firebase/database-types@0.3.4, tag: @firebase/auth@0.9.2, tag: @firebase/auth-types@0.5.1, tag: @firebase/app@0.3.8, tag: @firebase/app-types@0.3.3) -Author: Feiyang1 -Date: Thu Jan 24 13:32:35 2019 -0800 - - Publish firebase@5.8.1 - -commit fe48712fd9f0d1e1cd05bb2b706de5302d5c7d6e -Author: rsgowman -Date: Sat Jan 19 09:14:50 2019 -0500 - - Backport changelog fixups (#1484) - - https://github.com/firebase/firebase-android-sdk/pull/207 - -commit 512847e9322e1152078cd7248818738f0f362e89 -Author: Christina Holland -Date: Fri Jan 18 15:17:08 2019 -0800 - - Prettier prepush improvements (#1480) - - * Check user is running the correct version of prettier and exit and warn if not. - - * Run prettier only on *.js/*.ts files changed in this branch. - -commit 27a6de2d8a02cfc7f53da23e65623b3e6c0be058 -Author: Scott Crossen -Date: Fri Jan 18 11:13:45 2019 -0800 - - Added firestoreClearData() testing sdk method (#1453) - - Added firestoreClearData() testing sdk method - -commit 580c53cd2c933426faf08586fdd0c4011b3ecdce -Author: Yifan Yang -Date: Fri Jan 18 10:32:10 2019 -0800 - - Do not print duplicate error messages to stdout. (#1468) - - * Do not print duplicate error messages to stdout. - - * Upgrade to latest lerna version (v3.10.5). - -commit 61470e171988dbd81c3d06c409ed6f7c1fffbaf9 -Merge: f5b81a174 2ea8f2006 -Author: Feiyang1 -Date: Thu Jan 17 17:15:19 2019 -0800 - - Merge branch 'release' - 5.8.0 release - -commit 2ea8f2006bc09ca6cb0b2b86f0ed8aefa48d350c (tag: rxfire@3.3.0, tag: firebase@5.8.0, tag: @firebase/util@0.2.5, tag: @firebase/testing@0.6.0, tag: @firebase/storage@0.2.6, tag: @firebase/messaging@0.3.9, tag: @firebase/logger@0.1.4, tag: @firebase/functions@0.3.5, tag: @firebase/firestore@1.0.0, tag: @firebase/firestore-types@1.0.0, tag: @firebase/database@0.3.10, tag: @firebase/database-types@0.3.3, tag: @firebase/app@0.3.7) -Author: Feiyang1 -Date: Thu Jan 17 16:47:37 2019 -0800 - - Publish firebase@5.8.0 - -commit f5b81a17497024ba30c8786ae4490d098a4d0b54 -Author: Christina Holland -Date: Thu Jan 17 16:09:52 2019 -0800 - - Add @firebase/util dependencies to auth-types and storage-types (#1479) - - * Add @firebase/util to peerDependencies in package.json of auth-types and storage-types - -commit d7bb2ec0c1d2b52c4c63be19ac8fc0f2f77b9dc0 -Author: Yifan Yang -Date: Thu Jan 17 12:33:43 2019 -0800 - - Upgrade yarn from v1.10.1 to v1.13.0. (#1481) - -commit c9414d3e17812def8552195f3742b3b698edbb6b -Author: Ryan Brewster -Date: Thu Jan 17 12:20:53 2019 -0800 - - Run prettier on the whole codebase (#1482) - -commit 45b0591d4df4f9b0f8bcbebda51646770257c69e -Author: Yifan Yang -Date: Wed Jan 16 13:47:35 2019 -0800 - - Consolidate mocha configurations into config file. (#1469) - - * Consolidate mocha configurations into config file. - -commit 238c621400e55a9499b045684ad99761c642f89b -Author: Konstantin Varlamov -Date: Mon Jan 14 14:25:40 2019 -0500 - - Add a changelog entry for "Stop persisting last acknowledged batch ID" (#1477) - -commit 4b71b13f620a628d5833e141145257f536daebbb -Author: Konstantin Varlamov -Date: Mon Jan 14 13:22:24 2019 -0500 - - Port "Stop persisting last acknowledged batch ID" from iOS - - A straightforward port of https://github.com/firebase/firebase-ios-sdk/pull/2243. - -commit 604acf37ce920f58207cfb83c556412636048286 -Author: Michael Lehenbauer -Date: Fri Jan 11 09:57:13 2019 -0800 - - Change timestampsInSnapshots default to true. (#1464) - - Also update log messages instructing folks what to do if they're using the - soon-to-be-removed timestampsInSnapshots setting. - -commit aa62e43a29eca566de1bdc8fae8a9f9e23289345 -Author: Michael Lehenbauer -Date: Fri Jan 11 09:40:02 2019 -0800 - - Add comment regarding presence of '/documents' to fromQueryPath(). (#1474) - -commit 2e0d0ad94cc6b11f19892980f91d87b5238d829f -Author: Michael Lehenbauer -Date: Fri Jan 11 08:03:10 2019 -0800 - - Update to v1 protos. (#1473) - - 1. Update src/protos/update.sh script to use v1. - 2. Search/replace V1beta1 => V1 on firestore_proto_api.d.ts - 3. Check in output of src/protos/update.sh script (and remove old v1beta1 directory.) - 4. Search/replace all "v1beta1" instances to "v1". - 5. Include '/documents' for root document paths (v1 endpoint requires this now). - -commit 92e2bafd5fedc5601458566354aed2f6c95fc68b -Author: Feiyang1 -Date: Thu Jan 10 17:23:31 2019 -0800 - - [AUTOMATED]: License Headers - -commit 4be79fd83f5c2ebc031760f60766c8b371d7b0f5 -Merge: a2bc7e3a7 9513e3da1 -Author: Feiyang1 -Date: Thu Jan 10 17:21:40 2019 -0800 - - Merge branch 'release' - 5.7.2 release - -commit 9513e3da139caa23d0db09a558c6412c1742aa7e (tag: rxfire@3.2.3, tag: firebase@5.7.3, tag: @firebase/util@0.2.4, tag: @firebase/testing@0.5.3, tag: @firebase/storage@0.2.5, tag: @firebase/polyfill@0.3.4, tag: @firebase/messaging@0.3.8, tag: @firebase/logger@0.1.3, tag: @firebase/functions@0.3.4, tag: @firebase/firestore@0.9.3, tag: @firebase/database@0.3.9, tag: @firebase/app@0.3.6) -Author: Feiyang1 -Date: Thu Jan 10 14:10:17 2019 -0800 - - Publish firebase@5.7.3 - -commit a2bc7e3a78ba912a1c3f92d79a74050f43d80e0b -Author: Gil -Date: Wed Jan 9 18:15:53 2019 -0800 - - Break import cycle (#1470) - - LruParams.COLLECTION_DISABLED <=> CACHE_SIZE_UNLIMITED - -commit 791b2b37e62eca1b992d3dd75e9b3592eec8366b -Author: Yifan Yang -Date: Wed Jan 9 16:35:16 2019 -0800 - - Change downloaded emulator file mode to 'rwxr-xr-x'. (#1465) - - * Change downloaded emulator file mode to 'rwxr-xr-x'. - - The firestore emulator binary file cannot be started by 'java -jar' with - permission 'rw-r--r--' on Google corp workstation (Debian). The reason - why we didn't notice this before is that the emulator can run on macbook - (macOS Mojave) and Travis VM (Ubuntu Trusty) perfectly without this - change though. - - * Add comments explaining the change of file permission. - -commit 65d584cee6144d88086eaad555de4815a9e79a42 -Author: Feiyang -Date: Wed Jan 9 16:32:29 2019 -0800 - - update grpc to 1.17.0 (#1466) - -commit d96a80616bba66f7eb17be0ca8f07236ff1d96b9 -Author: Ifiok Jr -Date: Wed Jan 9 19:53:30 2019 +0000 - - Create empty-import.d.ts and reference it in submodule imports (#1347) - - * Create empty-import.d.ts and reference it in submodule imports - - * Add reference to typings for rxfire/database - -commit 78b99782bbdc630db53495c56ad350c870215ab1 -Author: Feiyang -Date: Wed Jan 9 10:27:26 2019 -0800 - - update npm-run-all to avoid potential exploit (#1406) - -commit 0b42ff8bb87236ab4fe3622d8a7167c83b76782c -Author: Michael Lehenbauer -Date: Wed Jan 9 10:18:38 2019 -0800 - - Fixes #1450: ThenableReference should extend Promise, not PromiseLike. (#1462) - - Since we implement .catch(), we should extend Promise. - -commit 1e7771cec5232ef968698aae1e3cbd8c614a60d1 -Author: Feiyang -Date: Tue Jan 8 16:12:02 2019 -0800 - - use secret team as code owners to avoid review requests spam. (#1458) - - * use secret teams to avoid review requests - - * [AUTOMATED]: Prettier Code Styling - -commit 9982004188aecad0d99e2778fbc2054ff97dfba2 -Author: Gil -Date: Tue Jan 8 14:18:48 2019 -0800 - - Treat ABORTED writes as retryable (#1456) - -commit d63df58299ef6c32af3cd89574fe5f0e1f578f3a -Author: Abraham Hernandez -Date: Mon Jan 7 16:50:16 2019 -0500 - - add code syntax highlighting (#1438) - -commit e89993518f608d8699e40a9f0d8537d1e255da6a -Author: Yifan Yang -Date: Fri Jan 4 15:09:22 2019 -0800 - - Upgrade firestore emulator version to v1.2.3. (#1454) - -commit 802c07c105aee4d2c3c99be640bf32b43c99b1ed -Author: Mertcan Mermerkaya -Date: Thu Jan 3 23:24:42 2019 +0000 - - Remove unused Rollup plugins (#699) - - * Remove unused Rollup plugins - - * Consider submodule imports from dependencies as external - - * Use CJS version of promise-polyfill for browserify support - -commit f6cfdbfaa76a652ea526c4a31469fc562c778c1c -Author: Sebastian Schmidt -Date: Wed Jan 2 16:15:39 2019 -0800 - - Remove some Array to SortedSet conversion (#1443) - - * Remove some Array to SortedSet conversion - - * Adding fromSet - -commit 72e109cc7e144d78aa5c19a865863a4eb3aa6ad5 -Author: Ryan Brewster -Date: Wed Jan 2 14:43:54 2019 -0800 - - Allow both databaseName and projectId (#1449) - -commit c6357fbaf99e80257816dafb28e748de4a039edf (tag: rxfire@3.2.2, tag: firebase@5.7.2, tag: @firebase/testing@0.5.2, tag: @firebase/firestore@0.9.2) -Author: Feiyang1 -Date: Thu Dec 27 15:20:17 2018 -0800 - - Publish firebase@5.7.2 - -commit 0bbf7088d76717bec7e4bd1c89af2edf0ae40690 -Author: Michael Lehenbauer -Date: Sun Dec 23 10:41:43 2018 -0800 - - Fixes #1436: Ensure only the primary tab tries to garbage collect. (#1441) - - Only schedule garbage collections on the primary tab and gracefully ignore - if they fail. - -commit 1888bd733dbb50ab6bf5423312ee00348fe33faf -Author: Konstantin Varlamov -Date: Sat Dec 22 16:52:43 2018 -0500 - - Port performance optimizations to speed up reading large collections from Android (#1433) - - Straightforward port of https://github.com/firebase/firebase-android-sdk/pull/123. - -commit 54df99722720f66ee619fa6bd1d15ae8714f654a -Author: Yifan Yang -Date: Thu Dec 20 15:00:53 2018 -0800 - - Add code for managing emulators and running database/firestore emulator tests via yarn commands. (#1435) - - Refactor code for managing database/firestore emulators. - - Add yarn commands for running database/firestore tests with their emulators. - -commit 088718ea0d9f16b6fc5ea48cd62daec30ac5a0d5 (tag: rxfire@3.2.1, tag: firebase@5.7.1, tag: @firebase/testing@0.5.1, tag: @firebase/firestore@0.9.1, tag: @firebase/database@0.3.8, tag: @firebase/auth@0.9.1) -Author: Feiyang1 -Date: Thu Dec 20 13:46:37 2018 -0800 - - Publish firebase@5.7.1 - -commit 5509eafcf44595cc751c6b62f651835b920b83aa -Author: Greg Soltis -Date: Mon Dec 17 13:24:30 2018 -0800 - - Add a custom error for schema downgrades, and a note about it (#1428) - - * Add a custom error for schema downgrades, and a note about it - -commit 6e89ddcca2e2b218ba7dae0bcd4275eacfd059c4 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Fri Dec 14 15:41:41 2018 -0800 - - change email validation logic to allow international emaill address (#1427) - -commit f970f9cd51c17897e397d5b0e30dc5abc3c4999d -Author: Greg Soltis -Date: Mon Dec 10 15:40:27 2018 -0800 - - Finish type migration and get rid of AnyDuringMigration (#1424) - - Remove AnyDuringMigration - -commit 35e3cb5ffd48b5a1cbdc78ea5f1b6f2134ad594e -Author: Yifan Yang -Date: Thu Dec 6 17:38:15 2018 -0800 - - Enable database test with local emulator. (#1414) - - * Fix flaky database transaction test. (#1408) - - * Change getFreshRepo() to only take a path, and use the DATABASE_URL constant. (#1410) - - * Enable Database SDK test with local emulators. - - * Address review feedback. - - * Address review comments. - - * Make whether to use emulator depend on whether env variable for emulator port is present or not. - - * Address pr feedback. - -commit 3520604105775902811310758eb1210f665585db (tag: rxfire@3.2.0, tag: firebase@5.7.0, tag: @firebase/testing@0.5.0, tag: @firebase/firestore@0.9.0, tag: @firebase/firestore-types@0.8.0, tag: @firebase/auth@0.9.0, tag: @firebase/auth-types@0.5.0) -Author: Feiyang1 -Date: Thu Dec 6 17:01:13 2018 -0800 - - Publish firebase@5.7.0 - -commit d93e15307e400443c23467c6646e5cd104380834 -Author: Greg Soltis -Date: Tue Dec 4 20:14:26 2018 -0800 - - Add LRU changelog entry (#1412) - - * Add LRU changelog entry - -commit 28bb3add8f7b8210a6d388e24e8206a92e32efb0 -Author: Greg Soltis -Date: Tue Dec 4 16:10:00 2018 -0800 - - Wire together LRU garbage collection (#1392) - - Wire together LRU garbage collection - - Added a garbage collection process to on-disk persistence that - removes older documents. This is enabled by default, and the SDK will attempt - to periodically clean up older, unused documents once the on-disk cache passes - a threshold size (default: 40 MB). - -commit c313962dc61b7f39e52a59625b96322b98591ac5 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue Dec 4 10:49:33 2018 -0800 - - Saml (#1343) - - Added SAML providers and exposed the API to enable OIDC providers. - -commit b3a5242ffb4e4354a88a7427fa185a7bf95bec28 -Author: rsgowman -Date: Fri Nov 30 15:09:01 2018 -0500 - - Rework FieldMask to use a SortedSet of FieldPaths (#1405) - - Rather than an array. - - Port of https://github.com/firebase/firebase-android-sdk/pull/137 - -commit 603cf63dd57daa5e53466a14f7f0a006d603bcfe -Author: Sunny Luo -Date: Sat Dec 1 03:30:12 2018 +0800 - - Update grpc to 1.16.1 to support node 11 (#1394) - - * Update grpc to 1.16.1 to support node 11 - - * Update grpc - -commit c3895ac255751c97cc2f622a707f28d7c3fb6753 -Author: Ryan Brewster -Date: Tue Nov 27 18:23:00 2018 -0800 - - Put another limit on gRPC backoff (#1403) - -commit b43ec038889de7df52779d60ce4df6ee3f4974d5 (tag: rxfire@3.1.0, tag: firebase@5.6.0, tag: @firebase/testing@0.4.0, tag: @firebase/auth@0.8.0, tag: @firebase/auth-types@0.4.0) -Author: Feiyang1 -Date: Thu Nov 29 14:50:01 2018 -0800 - - Publish firebase@5.6.0 - -commit 024b0744c99f1a85360cc32c31880b0a422d048d -Author: bojeil-google -Date: Mon Nov 26 17:39:03 2018 -0800 - - Fix error catching for IDBRequest.error. (#1401) - - `event.target.errorCode` is undefined, use event.target.error instead. - -commit 1baf7d6c18a8c314571a9f074ee7f034d5ad5250 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Nov 26 10:16:41 2018 -0800 - - added ability to custom FDL domain (#1382) - -commit 97cc3f89283d942a99c5c3e56e29eee331a0f5df -Author: Ryan Brewster -Date: Tue Nov 20 15:58:50 2018 -0800 - - Fix weird prettifier issue (#1393) - -commit b2b15d93038f445fe980dfb94d727a510e6a4ac0 (tag: rxfire@3.0.11, tag: firebase@5.5.9, tag: @firebase/util@0.2.3, tag: @firebase/testing@0.3.3, tag: @firebase/messaging@0.3.7, tag: @firebase/logger@0.1.2, tag: @firebase/functions@0.3.3, tag: @firebase/firestore@0.8.8, tag: @firebase/database@0.3.7, tag: @firebase/app@0.3.5) -Author: Feiyang1 -Date: Tue Nov 20 14:51:06 2018 -0800 - - Publish firebase@5.5.9 - -commit 249dab25a602d604a830cd616b2119b74b20aa2e -Author: Yifan Yang -Date: Tue Nov 20 13:49:00 2018 -0800 - - Upgrade mocha version to 5.2.0 in all packages. (#1375) - - We are trying to consolidate flags passed to mocha test - into mocha.opts (a mocha config file). In order for mocha - to support comments in this file, mocha needs to be upgraded - to its latest version (5.2.0 as of 11/09/2018). - -commit b3063e4158eed990cd283b0ed25b456f829a4b76 -Author: Ryan Brewster -Date: Mon Nov 19 19:42:56 2018 -0800 - - Limit gRPC's built-in exponential backoff (#1390) - - * Prevent gRPC from performing too much exponential backoff - - * [AUTOMATED]: Prettier Code Styling - - * Simplify comment - - * Set the initial backoff as low as possible - - * revert testing change - -commit 06ee761bd48ea86f1f280cabe94b253b1393d404 -Author: Ryan Brewster -Date: Sat Nov 17 03:04:44 2018 -0800 - - Expose database and firestore namespaces in the @firebase/testing module (#1386) - - * Expose database and firestore namespaces in the @firebase/testing module - - * random commit to trigger travis - -commit 1ed94fa8c61d8a3611d8c10a3b94dd3a5baf14c8 -Author: ooookai -Date: Mon Nov 12 06:22:43 2018 -0500 - - Update database.md (#1379) - -commit fcf1f6425883085c0f5349e35aad66d51698957c -Author: Greg Soltis -Date: Fri Nov 9 19:24:06 2018 -0800 - - Implement sequence number migration (#1374) - - * Implement sequence number migration - -commit 8375f67d0f56169bbf09681c3337dce9ade8006b -Author: Josep Sayol -Date: Sat Nov 10 03:07:11 2018 +0100 - - Fix waitsForCount EventAccumulator (tests) (#1378) - -commit ab4f7aba06df6bdaf506995f92689efc148b2787 -Author: Matt Gaunt -Date: Fri Nov 9 14:25:54 2018 -0800 - - Update CODEOWNERS (#1376) - - @mmermerkaya has messaging covered that I am no longer needed :) - -commit 6b3754fbe03a8a3794b4466c0b035ea6cb902326 -Author: Greg Soltis -Date: Thu Nov 8 19:14:34 2018 +0100 - - Use orphaned docs as part of GC calculation (#1355) - - * Use orphaned documents in sequence number count - -commit fb870c26dff6746b973a22969237e2b6a7db9bbc -Author: Ryan Brewster -Date: Wed Nov 7 18:08:57 2018 -0800 - - Throw a more helpful error if there isn't a 'sub' field (#1366) - - * Throw a more helpful error if there isn't a 'sub' field - - * fix test - -commit 3b498b15f2e6a37e6eab5f7dc61a724b5b5d0f65 (tag: rxfire@3.0.10, tag: firebase@5.5.8, tag: @firebase/testing@0.3.2, tag: @firebase/functions@0.3.2, tag: @firebase/functions-types@0.2.1, tag: @firebase/firestore@0.8.7, tag: @firebase/auth@0.7.9) -Author: Feiyang1 -Date: Thu Nov 8 14:59:45 2018 -0800 - - Publish firebase@5.5.8 - -commit d221abb42c7b6a4b898cbed8f631f45a7a9154ee -Author: Feiyang -Date: Tue Nov 6 15:19:38 2018 -0800 - - update yarn.lock (#1364) - -commit d248b9776bca13738d7e10e6caad6b2c10d8daad -Author: Feiyang -Date: Tue Nov 6 09:47:12 2018 -0800 - - generate source maps for auth build (#1313) - - * auth sourcemaps - - * [AUTOMATED]: Prettier Code Styling - -commit a6aa99953a1f35cba284ea3daaa3224ebecc38f1 -Author: Tyler Jones -Date: Tue Nov 6 07:53:08 2018 -0800 - - Upgrade GRPC to 1.16.0 (#1353) - -commit 9d6917efa8a3c3458968334f698b26ee9393ff65 -Author: Sebastian Schmidt -Date: Mon Nov 5 15:08:20 2018 -0800 - - Remove Mutation tombstones (#1354) - -commit f4f05202e975b4f73a352f5bb3ca97218349e3e0 -Author: Marco Pöhler -Date: Mon Nov 5 22:21:33 2018 +0100 - - added return type definition to useFuntionsEmulator (#1361) - -commit 8daa36ff0c52d40ce387350c3071a0227b41ba54 -Author: Josep Sayol -Date: Mon Nov 5 22:02:25 2018 +0100 - - [README] Supported Node.js versions for SDK development (#1359) - - Several dependencies currently have a `<=9` requirement on the Node.js engine version. The way the README is written, it may give people the impression that any version above 8 is also supported, but that's not the case for Node.js 10 and 11. - -commit 9f12e4a5d1a2d79da29b7a777aa6cddf414a4012 -Author: Yifan Yang -Date: Thu Nov 1 16:32:07 2018 -0700 - - Lockdown the version of yarn to 1.10.1 in our Travis environment. (#1351) - - The latest yarn (1.12.1 as of Nov 1st) appears to hang the CI build. - -commit 7fd329707612a0277f0c9a6fec925423e5bcc10e (tag: rxfire@3.0.9, tag: firebase@5.5.7, tag: @firebase/testing@0.3.1, tag: @firebase/storage@0.2.4) -Author: Feiyang1 -Date: Thu Nov 1 15:03:41 2018 -0700 - - Publish firebase@5.5.7 - -commit de179c994336c94f598e95d36f68ba743bafa637 -Author: Ifiok Jr -Date: Tue Oct 30 19:42:27 2018 +0000 - - add type for useFunctionsEmulator (#1263) - - According to this [comment](https://github.com/firebase/firebase-js-sdk/issues/941#issuecomment-401432710) this is now supported in the library. I just couldn't see it anywhere in the types. - -commit 61a93e43f113f400b67f75fc464f09bb8cf47d3f -Author: Michael McDonald -Date: Sun Oct 28 04:59:18 2018 +0100 - - Add support for `_` in buckets (#1318) - -commit c2fd8f779b2e584c83e6718eafc838aa43c4f888 (tag: rxfire@3.0.8, tag: firebase@5.5.6, tag: @firebase/testing@0.3.0, tag: @firebase/firestore@0.8.6) -Author: Feiyang1 -Date: Thu Oct 25 13:49:50 2018 -0700 - - Publish firebase@5.5.6 - -commit d8b89bfba607668502f4adfbb828fae490b31456 -Author: Feiyang -Date: Wed Oct 24 16:47:50 2018 -0700 - - update the version of firebase-tools (#1336) - -commit 29feeae98c04cdf2cd528e71b79bf24686a225e1 -Author: Feiyang -Date: Wed Oct 24 14:45:53 2018 -0700 - - update yarn.lock (#1335) - -commit 0e85e42e84a592a6ce2028685983a22cf8db6fec -Author: Ryan Brewster -Date: Wed Oct 24 14:13:34 2018 -0700 - - Make npm happier about security vulnerabilities (#1333) - - * Make npm happier about security vulnerabilities - - * lock - -commit 16662c9d49e0438599a091730abe1769acf120a5 -Author: Ryan Brewster -Date: Wed Oct 24 13:23:32 2018 -0700 - - Export more functions from the firebase module (#1332) - - * Export more functions from the firebase module - - * [AUTOMATED]: Prettier Code Styling - - * Remove unnecessary import - - * Remove console log - -commit 1fce8f40dfb10c1bdbca24b0bc931cd9078f81ac -Author: Feiyang -Date: Wed Oct 24 10:12:00 2018 -0700 - - create component bundles in umd to support lazy loading in requireJS (#1325) - - * create component bundles in umd to support lazy loading in requireJS - - * [AUTOMATED]: Prettier Code Styling - -commit 5bac19c5bbbcfa4fc2e749cb4e6aaf1b107c9755 -Author: Sebastian Schmidt -Date: Tue Oct 23 15:09:52 2018 -0700 - - Remove Symbol.iterator (#1330) - -commit ffd1526420a39a064ebdafcba02214141530a8f0 -Author: Ryan Brewster -Date: Tue Oct 23 14:38:04 2018 -0700 - - Switch @firebase/testing dependency from '@firebase/app' to 'firebase' (#1331) - - * Introduce protos to communicate with the Firestore Emulator - - * [AUTOMATED]: Prettier Code Styling - - * PR feedback - - * Add apache license to emulator protos - - * Wrap firebase instead of @firebase/app - - * Remove @firebase/app dependencies - - * Switch from dep -> peer dep - - * Force re-authentication - - * idk - - * Use an environment variable to find the protos - - * [AUTOMATED]: Prettier Code Styling - - * Remove sadness typescript - - * Remove log - -commit da28e5b8abe9846c1f58a32710355232576fafa0 -Author: Sebastian Schmidt -Date: Tue Oct 23 14:02:39 2018 -0700 - - Add missing Porting Notes (#1327) - -commit f1637385bb2792093d318cda651de829cc08c613 -Author: Sebastian Schmidt -Date: Tue Oct 23 14:02:22 2018 -0700 - - Remove non-test only invocation of findIndex (#1328) - -commit 55cde2ab8e083bc8caa0b3af864bb75c97fc6712 -Author: Ryan Brewster -Date: Mon Oct 22 19:14:52 2018 -0700 - - Make @firebase/testing publishable (#1326) - -commit 6ebdb03d10a112190a138ed2f46d0ad017c39d3a -Author: Ryan Brewster -Date: Mon Oct 22 17:55:06 2018 -0700 - - Introduce protos to communicate with the Firestore Emulator (#1323) - - * Introduce protos to communicate with the Firestore Emulator - - * [AUTOMATED]: Prettier Code Styling - - * PR feedback - - * Add apache license to emulator protos - -commit 54b9f8e8079b945975a4791d4bae6e2904d5244e (tag: rxfire@3.0.7, tag: firebase@5.5.5, tag: @firebase/firestore@0.8.5) -Author: Feiyang1 -Date: Thu Oct 18 15:39:26 2018 -0700 - - Publish firebase@5.5.5 - -commit 51c87a28addbd190f63468869f1bc3215ead33fb -Author: Feiyang -Date: Thu Oct 18 11:13:33 2018 -0700 - - update documentation to show the correct import syntax (#1274) - - * update documentation to show the correct import syntax - - * update import syntax for firebase/app - - * add example for native es6 module in node - - * update warning message to use the correct syntax for typescript - -commit 5046327cb5150cd5b876149445d0cbf97a57adf3 -Author: Feiyang -Date: Wed Oct 17 16:59:43 2018 -0700 - - update storage owner (#1311) - - * update storage code owner - -commit fdff378d333ad69c56adfa29e803df3d8ed98904 -Author: Ryan Brewster -Date: Wed Oct 17 16:57:13 2018 -0700 - - Allow environment variables to override the default emulator addresses (#1312) - - * Allow environment variables to override the default emulator addresses - - * [AUTOMATED]: Prettier Code Styling - - * Add type signatures - -commit 698743451c22ec0c48525c0035e96fb473aa83dc -Author: Greg Soltis -Date: Wed Oct 17 16:09:10 2018 -0700 - - Implement byte counting for the RemoteDocumentCache. (#1309) - - * Implement byte counting for the RemoteDocumentCache. - -commit 5f70881b8efbd133ef73dcbd378d5cb56492376e -Author: Scott Crossen -Date: Tue Oct 16 16:28:25 2018 -0700 - - Removed warning messages when using testing SDK (#1307) - - * Removed warning messages when using testing SDK - - * [AUTOMATED]: Prettier Code Styling - - * changed artifact in test case comment - - * reworked code to spam setLogLevel instead of setDefaultLogLevel - - * Update logger.test.ts - -commit 4d2fa6c528662d312c237f7012807a8e0e40d665 -Author: Emerson Jair -Date: Mon Oct 15 12:25:04 2018 -0300 - - Fix RxFire auth docs with wrong import path (#1297) - - The imports should be `rxfire/auth` instead of `rxfire/firestore`. - This could lead beginner developers to frustration since they wouldn't be able to use the examples from the docs successfully. - -commit 7ebb2d6ea11f7aa2b0b6e1f5ed56821a09cab92c (tag: rxfire@3.0.6, tag: firebase@5.5.4, tag: @firebase/webchannel-wrapper@0.2.11, tag: @firebase/firestore@0.8.4, tag: @firebase/auth@0.7.8) -Author: Feiyang1 -Date: Thu Oct 11 15:38:15 2018 -0700 - - Publish firebase@5.5.4 - -commit 5c84f505a28af99e5e2c7e63bbdc03d65e704158 -Author: Michael Lehenbauer -Date: Thu Oct 11 14:10:04 2018 -0700 - - Fix #798: Avoid eval() in webchannel-wrapper. (#1304) - - Set goog.json.USE_NATIVE_JSON to true in our webchannel-wrapper build to avoid - fallback to eval() which isn't necessary, since we already rely on JSON.parse() - throughout the codebase. - -commit 53bdf9d7e48e41ba800db9dada3ed271e085946c -Author: Sebastian Schmidt -Date: Wed Oct 10 15:16:04 2018 -0700 - - Clear reference set when we lose our primary lease (#1289) - -commit f85dbce8f620145f4c235f7a414514153b51337a -Author: Feiyang -Date: Wed Oct 10 13:00:31 2018 -0700 - - update firebase version in readme example (#1303) - -commit 755327097b09e3ac0a3d18da0ea5fb66a74cb816 -Author: Greg Soltis -Date: Wed Oct 10 10:14:11 2018 -0700 - - Make ReferenceSet.containsKey synchronous since it no longer needs the GarbageSource interface (#1301) - - ReferenceSet used to have an async method for this so it could conform to the GarbageSource interface, but that no longer exists. So, we can have a synchronous containsKey implementation. - -commit fa9c3e5b449e30773546b992bbce41fb857885d3 -Author: Greg Soltis -Date: Tue Oct 9 19:34:28 2018 -0700 - - Fix error in Memory LRU implementation (#1299) - - * Implement iterator for object map - - * Use iterator to fix memory lru bug - -commit a9f4bc7071f70b7bfcc49f4ee9c45757ce7da67b -Author: Sebastian Schmidt -Date: Mon Oct 8 18:47:49 2018 -0700 - - [Multi-Tab] Separate GC threshold from Primary Election threshold (#1295) - -commit 334716862ca34f7c3fd908dd982fc1527ccd2fb1 -Author: Sebastian Schmidt -Date: Mon Oct 8 13:13:57 2018 -0700 - - Detect when another tab was primary before regaining lease (#1287) - -commit 474b0f56cb670a322c1b18d909838ec7fd669947 -Author: Feiyang -Date: Fri Oct 5 16:16:22 2018 -0700 - - use apply instead of call to invoke iife (#1291) - -commit 9e28b7ddfcf715cfce675033b87f274dfdd7472f -Author: Sebastian Schmidt -Date: Fri Oct 5 13:15:16 2018 -0700 - - Remove LocalStore.start() (#1290) - -commit 281356332dee1867bafd409d248c70a84d6fc2fe -Author: Sebastian Schmidt -Date: Thu Oct 4 15:18:09 2018 -0700 - - Update CHANGELOG.md (#1286) - -commit dce420b85ff2e8ca310720fe49c427d56da2de55 (tag: rxfire@3.0.5, tag: firebase@5.5.3, tag: @firebase/firestore@0.8.3) -Author: Feiyang1 -Date: Thu Oct 4 14:54:47 2018 -0700 - - Publish firebase@5.5.3 - -commit dd3ea8fd4dadca3a119aa8e3bdbad3ae38272a72 -Author: Greg Soltis -Date: Thu Oct 4 14:36:44 2018 -0700 - - Merge LRU tracking PRs (#1285) - - * Implement IndexedDB LRU Reference Delegate, add LRU tests (#1224) - * Implement LRU Reference Delegate for Memory Persistence (#1237) - * Implement Eager Reference Delegate for Memory Persistence, drop old GC (#1256) - * Remove sequential forEach, replace with parallel forEach - -commit 211a9b16d922d14f77b4f668457f6a5b79d6b1af -Author: Sebastian Schmidt -Date: Wed Oct 3 15:58:52 2018 -0700 - - Stop iterating when we encounter an error (#1284) - -commit 322357244dfc3f35ae97e7d522d40d345b216b51 -Author: Sebastian Schmidt -Date: Wed Oct 3 15:02:37 2018 -0700 - - [Multi-Tab] Detect and recover from GCed Remote Document Changelog (#1272) - -commit 6f08d5dc204c25ffb54e4f29b588747c0066d4f8 -Author: Sebastian Schmidt -Date: Wed Oct 3 15:02:00 2018 -0700 - - Always update LocalStorage state (#1282) - -commit 32792521a235fc46d15a3b384772525dda04329d -Author: Feiyang -Date: Wed Oct 3 14:40:18 2018 -0700 - - update yarn.lock with integrity field (#1283) - -commit f213ba661d5ca61d3cbd897cd4b6c415614d1f0a -Author: Sebastian Schmidt -Date: Wed Oct 3 13:57:41 2018 -0700 - - Don't use the escaped persistence keys when we write to Local Storage (#1281) - -commit 31c1bf444f3a6a398727ca33e5a2424e0701be4f -Author: Sebastian Schmidt -Date: Wed Oct 3 13:13:03 2018 -0700 - - Using readWrite query mode for (#1280) - -commit 9c7354fe6d9e46c9a573468fb681e41f551b2626 -Author: rsgowman -Date: Wed Oct 3 14:17:44 2018 -0400 - - Backporting reviewer suggested comments from cl/214509458 (#1277) - - This is the web port of - https://github.com/firebase/firebase-android-sdk/pull/49 - -commit 64d11a49df86bf8f86a9aac8fd6c996781996ee0 -Author: Sebastian Schmidt -Date: Wed Oct 3 11:09:42 2018 -0700 - - Uncomment in all the files (#1278) - -commit 8347840b2b2ba7b3ffef6968ea5ab24ed93ca0cf -Author: Feiyang -Date: Tue Oct 2 22:29:19 2018 -0700 - - print debug info in release cli (#1276) - -commit f2cfd21efbc21bc1594e4b7bc5322c122155b13d -Author: Sebastian Schmidt -Date: Tue Oct 2 14:23:10 2018 -0700 - - Backfill Firestore Changelog (#1275) - -commit 950499d5edcc037052b46cbb6712ab44f19903d8 -Author: Sebastian Schmidt -Date: Mon Oct 1 15:55:00 2018 -0700 - - Fix map() (#1271) - -commit f2159b97dbbd3207c230eb1eda667b2a155c52da -Author: Sebastian Schmidt -Date: Mon Oct 1 15:02:41 2018 -0700 - - Add hasCommittedMutations to NoDocument equals (#1245) - -commit 5ca119a3cafb2f211cb0884b068a51da5761e5bf -Author: Sebastian Schmidt -Date: Mon Oct 1 12:20:32 2018 -0700 - - Allow iterables in PersistencePromise.map/forEach/waitFor (#1269) - -commit c577a7eea0d34e0a3f85bd95db6c24a25f3fef02 -Author: Michael Lehenbauer -Date: Fri Sep 28 12:38:29 2018 -0700 - - Add priming logic to integration tests to avoid cold start issues. (#1259) - -commit 1221dba9ae05cec8ed002555871aab815e1f187b (tag: rxfire@3.0.4, tag: firebase@5.5.2, tag: @firebase/webchannel-wrapper@0.2.10, tag: @firebase/firestore@0.8.2, tag: @firebase/auth@0.7.7) -Author: Feiyang1 -Date: Thu Sep 27 16:22:10 2018 -0700 - - Publish firebase@5.5.2 - -commit 25138510ac679b614689ac9f34b5f2c690a17b00 -Author: Feiyang1 -Date: Thu Sep 27 15:24:16 2018 -0700 - - update lock file - -commit 57b9231ccc1038cae8f2077fcdcd60f7a94d8f34 -Author: Feiyang -Date: Thu Sep 27 09:48:42 2018 -0700 - - remove incorrect typing (#1252) - -commit e9e025527cbe57e5a1670128b45e2757a6b07f44 -Author: Ryan Brewster -Date: Wed Sep 26 17:41:38 2018 -0700 - - Fix a few issues with the @firebase/testing package.json (#1253) - - * Remove file-system dependency - - * Manually include request - - * [AUTOMATED]: Prettier Code Styling - - * Import firestore in tests - - * [AUTOMATED]: Prettier Code Styling - - * Fixed version - -commit 85abf9aef69d820bd953e613430d0875c18a6ff8 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Sep 26 14:22:21 2018 -0700 - - Maps backend error REJECTED_CREDENTIAL to client error (#1251) - -commit 331a507f4f83710375fec9cd028ad7715373e112 -Author: Sebastian Schmidt -Date: Wed Sep 26 09:03:04 2018 -0700 - - Remove computeInitialDocChanges (#1246) - -commit 0beb028de38c74198592f47618400f9905d605da -Author: Feiyang -Date: Tue Sep 25 21:14:01 2018 -0700 - - support es6 module in webchannel-wrapper (#1248) - - * support es6 module in webchannel-wrapper - - * [AUTOMATED]: Prettier Code Styling - -commit 9d8181084d4cc9fa60849e8e59cd38af34ad9704 -Author: Sebastian Schmidt -Date: Tue Sep 25 15:11:40 2018 -0700 - - Update test comments (#1247) - -commit d7a7f0abbdc11f993ca9f4536c13240126161b0f -Author: Feiyang -Date: Fri Sep 21 11:12:38 2018 -0700 - - wrap component with try catch outside of iife for old browser compatibility (#1239) - -commit 3dd9bcf6e1283677d95d91e4b20c75b997c00499 -Author: Michael Lehenbauer -Date: Fri Sep 21 11:01:58 2018 -0700 - - Firestore: Add "max-line-length" and "ordered-imports" tslint rules. (#1238) - - This enforces a maximum line length (of 100) and import ordering via tslint rules and fixes all violations. - - The line length violations were fixed manually. Prettier already targets a line length of 80 for code (but this isn't a strict limit) so mostly I just split string literals and long comments, but I did have to use tslint:disable in one place since prettier was formatting at > 100 chars. - - The import ordering violations were fixed automatically via yarn lint:fix. - -commit 1e948e602c2675e8c049a807b6727e97c7da5706 (tag: rxfire@3.0.3, tag: firebase@5.5.1, tag: @firebase/webchannel-wrapper@0.2.9, tag: @firebase/functions@0.3.1, tag: @firebase/firestore@0.8.1, tag: @firebase/database@0.3.6, tag: @firebase/auth@0.7.6) -Author: Feiyang Chen -Date: Thu Sep 20 14:39:11 2018 -0700 - - Publish firebase@5.5.1 - -commit a4ab0f68d50575c9cd409199e6963fc76dbf1d81 -Author: Feiyang -Date: Wed Sep 19 12:08:42 2018 -0700 - - Functions test fix (#1236) - - * check the browser compatibility more reliably before running the test - - * [AUTOMATED]: Prettier Code Styling - -commit 33871d4787955eb6793dc02f76080a077f48c6bc -Author: Feiyang -Date: Tue Sep 18 10:16:52 2018 -0700 - - add @Feiyang1 to the global code owners list (#1231) - -commit 03a78c7de538a3d57df4d8668c0289eb526061b7 -Author: Ryan Brewster -Date: Mon Sep 17 16:25:06 2018 -0700 - - Ensure that we set the subject for unsecured JWTs (#1217) - - * Ensure that we set the subject for unsecured JWTs - - * feedback - -commit 0841153c592868c8b9a040e662941b66c35de1b3 -Author: Michael Lehenbauer -Date: Mon Sep 17 14:46:43 2018 -0700 - - Upgrade closure-builder dependency to 2.3.0. (#1230) - - Java 10 removed the -d64 flag, which closure-builder was passing. Updating to the latest version resolves the issue. - - Also removed auth's unused dependency on closure-builder. - -commit d257bf8cc8064c7fda74f341a1547157e56a0c28 -Author: Feiyang -Date: Thu Sep 13 18:30:32 2018 -0700 - - change build order, so d.ts files are created in the right place (#1223) - -commit 68f8c6f0c746d38c7eb969659adde3fc291ac17e (tag: rxfire@3.0.2, tag: firebase@5.5.0, tag: @firebase/util@0.2.2, tag: @firebase/messaging@0.3.6, tag: @firebase/firestore@0.8.0, tag: @firebase/firestore-types@0.7.0, tag: @firebase/database@0.3.5, tag: @firebase/auth@0.7.5, tag: @firebase/app@0.3.4) -Author: Josh Crowther -Date: Thu Sep 13 15:43:54 2018 -0700 - - Publish firebase@5.5.0 - -commit c067eefd2dca364fac09ad0bc4d22a91cab9c35c -Author: Ryan Brewster -Date: Mon Sep 10 10:26:20 2018 -0700 - - Consider JWTs with empty signatures to be valid (#1218) - - * Recognize unsecured JWTs as valid - - * [AUTOMATED]: Prettier Code Styling - -commit 713222c3f495c357d15c023d0628254db12cef58 -Author: Nicolas Garnier -Date: Fri Sep 7 03:49:49 2018 +0200 - - Switch from cordova-universal-links-plugin to cordova-universal-links… (#1187) - - * Switch from cordova-universal-links-plugin to cordova-universal-links-plugin-fix - -commit 2b16a589a619d64d3a331f9fd5f2e7e98ea48406 -Author: Sebastian Schmidt -Date: Thu Sep 6 18:12:55 2018 -0700 - - Expose multi-tab flag (#1199) - -commit 33ea1086b5dabe53e91237537f95eb870a197309 -Author: Michael Lehenbauer -Date: Thu Sep 6 11:12:54 2018 -0700 - - b/111221684: Improve error message when passing empty strings to API methods. (#1211) - - In particular, doc("") and collection("") give better messages than saying the path must be even or odd-length. - -commit e2098a2a3d0cd5f21c31448bc1fbc9cf135bfc2a -Author: Michael Lehenbauer -Date: Thu Sep 6 09:41:11 2018 -0700 - - b/112778345: Improve argument validation for get(). (#1210) - - In particular, we'll throw a decent error if you accidentally pass a callback function to get(). - -commit 3e7a12faafad6a87ec3df8ef66e5fb2d5547a4b0 -Author: Sebastian Schmidt -Date: Thu Sep 6 09:40:34 2018 -0700 - - Remove TODOs (#1201) - -commit 01cd608f167e8f9d924d491808846f78f1c6a321 -Author: Sebastian Schmidt -Date: Thu Sep 6 09:40:12 2018 -0700 - - Remove TODO about making size O(1) (#1209) - -commit 588900a99c9a76d786298358ab60c4389489d2ef -Author: Michael Lehenbauer -Date: Thu Sep 6 09:20:37 2018 -0700 - - b/113691610: Prefix "methodName" in FieldTransform with underscore (#1208) - -commit 0e1f6e5d709cdc021d0dde2ad0c17d20bae88885 -Author: Sebastian Schmidt -Date: Wed Sep 5 20:05:37 2018 -0700 - - Don't drop empty objects during merge (#1202) - -commit eea6851f168e72d3f3411015407290213acce6f8 -Author: Sebastian Schmidt -Date: Wed Sep 5 18:58:43 2018 -0700 - - Update CHANGELOG.md (#1198) - -commit a5e16d4655da41bfbb73d833efde40aedb46900d -Author: Sebastian Schmidt -Date: Wed Sep 5 17:31:36 2018 -0700 - - Adding readwrite-primary mode (#1203) - -commit dbc8d70966c4edb630a6836a0d36a40d62eb7927 -Author: Greg Soltis -Date: Wed Sep 5 16:03:15 2018 -0700 - - Add sequence number to QueryData (#1194) - - * Add sequence numbers to QueryData - - * [AUTOMATED]: Prettier Code Styling - - * Dont used separate db prefix - - * [AUTOMATED]: Prettier Code Styling - -commit 5e109b17126e8a2d3b1b686df45d34f0d57c77a4 -Author: James Daniels -Date: Wed Sep 5 15:44:34 2018 -0700 - - Package.json has bad types reference (#1192) - -commit 65ea95112523e9f4bab76b57ea4f65487868e83f -Author: Sebastian Schmidt -Date: Wed Sep 5 14:15:06 2018 -0700 - - Rename LocalStorage to WebStorage (#1200) - -commit f30be09c7b32a1ade2cf849192033577b4571488 -Author: Michael Lehenbauer -Date: Wed Sep 5 13:40:35 2018 -0700 - - Offline get() improvements. (#1197) - - 1. Changed MAX_WATCH_STREAM_FAILURES to 1 per conversation with @wilhuff and - @jdimond. - 2. Fixed a "race" where when a get() triggered a watch stream error, we'd - restart the stream, then get() would remove its listener, and so we had no - listener left once the watch stream was "opened". Without a listen to send - we'd be stuck in Offline state (even though we should be Unknown whenever - we have no listens to send), resulting in the next get() returning data - from cache without even attempting to reach the backend. - -commit ad2d178dfa5d7701fc19c0422e703791456e075b -Author: Sebastian Schmidt -Date: Tue Sep 4 23:24:07 2018 -0700 - - Remove Held Write Acks (#1156) - -commit d99c197d5af2a2a301868757c8db329b04341f59 -Author: James Daniels -Date: Tue Sep 4 12:29:37 2018 -0700 - - Port AF2 duplicate emission changes to rxfire (#1185) - -commit 9493faaac962edcac7212339e1d3f28fab6b40e9 -Author: Greg Soltis -Date: Fri Aug 31 12:50:23 2018 -0700 - - Add sequence numbers and sync them (#1172) - - * Add sequence numbers and sync them - - * Lint and comments - - * FirestoreClient and ListenSequence review feedback - - * Make webStorage non-optional - - * Return a promise of removeddocs from removeMutationBatch - - * [AUTOMATED]: Prettier Code Styling - - * Rename sequence number parsing function - - * [AUTOMATED]: Prettier Code Styling - - * IndexedDb startup refactoring to throw proper errors early - - * Renamed tests - - * Refactor Syncer interface for sequence numbers to conform to other examples - - * [AUTOMATED]: Prettier Code Styling - - * Shorten the comment - - * Drop 'only' - - * Add comment re multiClientParams - - * SharedClientState existing doesn't imply multiple clients - - * Remove start() from Persistence interface (#1179) - - * WIP on switching to static constructors - - * Remove start() from Persistence interface, use static helpers for IndexedDbPersistence construction - - * [AUTOMATED]: Prettier Code Styling - - * Mark start() private - - * Remove unused import - - * Use explicit type, switch async to Promise.resolve - - * Export the type - - * Condense a few lines - - * Use persistence key to scope sequence numbers to a project - - * [AUTOMATED]: Prettier Code Styling - - * Fix test to use new sequence number key - - * updateSequenceNumber -> writeSequenceNumber - - * Add comments to interface, switch to assert for sequenceNumberHandler - - * [AUTOMATED]: Prettier Code Styling - -commit ac7f9ced0fd18088c17ed76470095f0dcde7a15d -Author: Sebastian Schmidt -Date: Fri Aug 31 11:23:55 2018 -0700 - - Escpae the persistence key everywhere & scope online state by project (#1182) - -commit 47d09ab4eda4d1603791b11613bba1f127f706f6 (tag: rxfire@3.0.1, tag: firebase@5.4.2, tag: @firebase/firestore@0.7.2, tag: @firebase/auth@0.7.4) -Author: Josh Crowther -Date: Thu Aug 30 13:59:02 2018 -0700 - - Publish firebase@5.4.2 - -commit 9d96d959474489c0ded88075f956df2066550696 -Author: Sebastian Schmidt -Date: Thu Aug 30 13:22:57 2018 -0700 - - Don't raise hasPendingWrites for documents outside of limit (#1178) - -commit 00b50e170d2df2b44e93f37aa58acf79101a863e -Author: Sebastian Schmidt -Date: Tue Aug 28 11:42:34 2018 -0700 - - Keep Query state consistent when primary lease is lost (#1162) - -commit f15f1f07fa8c5a65135d3a83ceb1654a5b841e62 -Author: Sebastian Schmidt -Date: Tue Aug 28 11:42:21 2018 -0700 - - Remove Multi-Tab TODOs (#1161) - - * Remove TODOs that are no longer applicable - - * [AUTOMATED]: Prettier Code Styling - -commit 3f3b3a742c0de026250071bbba7ac267d21eccb5 -Author: Sebastian Schmidt -Date: Tue Aug 28 11:42:03 2018 -0700 - - Adding Firestore team to code owners (#1104) - -commit 1d5e6392e4acd8fcb788ce36c1b428e58bfc6572 -Author: bojeil-google -Date: Mon Aug 27 16:02:34 2018 -0700 - - Various Auth fixes. (#1171) - - * `navigator.serviceWorker.ready` rejects in chrome extensions. - We need to catch that and suppress it. - - * Returns the credential when available in AuthErrorWithCredential - - This returns credentials in errors even when no email or phoneNumber is returned. - This is needed to help recover from credential auth/credential-already-in-use in multiple accounts per email settings, eg: user calling linkWithPopup/Redirect when the OAuth credential is already in use. - In this case, the top level email is null and the developer can't do account lookup but at least they can still recover. The developer can signInWithCredential after and handle merges manually. - -commit 19ed65ae14501e9fbb30e5190400c7dc38fd33aa -Author: bojeil-google -Date: Mon Aug 27 09:18:58 2018 -0700 - - Updates `navigator` check for environments that don't support it. (#1166) - -commit c08851c15092ad37ad5ea3d2953b173a5b903233 -Author: Sebastian Schmidt -Date: Fri Aug 24 14:28:08 2018 -0700 - - Enable strictNullChecks (#1159) - -commit 546440e34ed759dacb2d3aa6fd095fe76768897a (tag: rxfire@3.0.0, tag: firebase@5.4.1, tag: @firebase/firestore@0.7.1, tag: @firebase/auth@0.7.3) -Author: Josh Crowther -Date: Thu Aug 23 14:28:18 2018 -0700 - - Publish firebase@5.4.1 - -commit 96bbc99f890f02f22d3543ffee2e25b34c520bd9 -Author: David East -Date: Wed Aug 22 16:36:07 2018 -0600 - - RxFire: Peer deps versions and Rollup config (#1160) - - * changing peerDeps and rollup config - - * [AUTOMATED]: Prettier Code Styling - -commit d2f0667fceb4bb2cbc8b08f536bf3785d1de9801 -Author: bojeil-google -Date: Wed Aug 22 11:16:20 2018 -0700 - - Auth memory leak fix (#1121) - - Rewrites Auth indexedDB polling to avoid using infinite promise chaining. - -commit 7d9f11175cae14a00ceef8249c3bb4eaf32e6870 -Author: Sebastian Schmidt -Date: Tue Aug 21 15:38:58 2018 -0700 - - Schema migration that drops held write acks (#1149) - -commit 9dbf6b0d82b0feeee6d316c3b5901372c587437e -Author: Sebastian Schmidt -Date: Tue Aug 21 11:47:39 2018 -0700 - - Adding forEach Helper (#1150) - -commit 813a174135812016768afb087c5a1d599d9f8dc6 -Author: Sebastian Schmidt -Date: Tue Aug 21 10:43:56 2018 -0700 - - Speed up FieldPath validation tests (#1147) - -commit 76c2772a3cc7448613eeced56363504c0c227e1c -Author: Sebastian Schmidt -Date: Tue Aug 21 10:41:52 2018 -0700 - - Make MaybeDocument an abstract class (#1153) - -commit 4625e847b02140ea0fa2317c975c70309a4e2c95 -Author: Sebastian Schmidt -Date: Mon Aug 20 14:41:33 2018 -0700 - - Change removeMutationBatch to remove a single batch (#1148) - - * Change removeMutationBatch to remove a single batch - - * Review tweaks - -commit 86fea68a40f30c0fa591159ca99db188de04e216 -Author: bojeil-google -Date: Mon Aug 20 11:11:25 2018 -0700 - - Various auth fixes (#1141) - - * Fixes exportPrototypeProperties for multiple properties where the last property overrides the previous properties. - - * Fixes fireauth.messagechannel.Sender. - - Currently, this does not allow sending multiple messages from the same sender, since the port can only be transferred one time. The implementation has been modified to open a new messagechannel on each message instead. - Note this does not affect indexeddb usage of this utility since a new sender is created each time and one message sent. - - * Fixes service worker indexedDB on some slow browsers, which was detected in Edge. - - Unfortunately, some browsers (detected in Edge) are too slow to detect the first ack event and timeout quickly. - Instead what we can do is assume the following: - 1. one service worker activated at one time. - 2. The service worker once subscribed to the keyChanged event will not unsubscribe. - So on initialization, the client will ping the service worker when it's ready to get all subscribed events with a long timeout. - If the service worker responds with the keyChanged event, we can deduce that the sw can handle this event. - The next time a change event occurs, we can safely use a long ACK timeout. - -commit 3e98afa488d828348b9fe6d6c2468194f308fc7d -Author: Sebastian Schmidt -Date: Mon Aug 20 10:30:34 2018 -0700 - - Add Changelog entry for ReactNative fix (#1146) - -commit 74c57cfabf40d85b4f1ce4f514ad39e7978846ec -Author: Sebastian Schmidt -Date: Sun Aug 19 09:57:25 2018 -0700 - - Support BrowserPlatforms with no window or document (#1140) - -commit f241dd86d8283c5df59979e68606ca6444f14a53 -Author: Michael Lehenbauer -Date: Sat Aug 18 12:18:57 2018 -0700 - - mikelehen/revert offline get improvements (#1137) - - * Revert "Disable some spec tests on mobile (#1134)" - - This reverts commit a56134b66d1f74f44a8851f34b04567372f9ddb3. - - * Revert "Offline get() improvements. (#1133)" - - This reverts commit 14f9a71f43f3068cdbc274aed2924cf2fc105173. - -commit a56134b66d1f74f44a8851f34b04567372f9ddb3 -Author: Greg Soltis -Date: Fri Aug 17 15:22:30 2018 -0700 - - Disable some spec tests on mobile (#1134) - - * Disable some spec tests on mobile - - * [AUTOMATED]: Prettier Code Styling - -commit 229832f6bc968146c08e6bd6b28be098b305205b -Author: Greg Soltis -Date: Fri Aug 17 11:49:53 2018 -0700 - - Stop saving persistence layer across spec tests (#1129) - - * Add no-memory-persistence flag to spec tests. - - * Restart persistence for spec tests - - * [AUTOMATED]: Prettier Code Styling - - * No more negative tags - - * [AUTOMATED]: Prettier Code Styling - - * Put back the no-platform tags - - * [AUTOMATED]: Prettier Code Styling - -commit 14f9a71f43f3068cdbc274aed2924cf2fc105173 -Author: Michael Lehenbauer -Date: Fri Aug 17 11:44:21 2018 -0700 - - Offline get() improvements. (#1133) - - 1. Changed MAX_WATCH_STREAM_FAILURES to 1 per conversation with @wilhuff and - @jdimond. - 2. Fixed a "race" where when a get() triggered a watch stream error, we'd - restart the stream, then get() would remove its listener, and so we had no - listener left once the watch stream was "opened". Without a listen to send - we'd be stuck in Offline state (even though we should be Unknown whenever - we have no listens to send), resulting in the next get() returning data - from cache without even attempting to reach the backend. - -commit 95f3d18d5cd665ba02f77dff6d4f8d4f396fbaf3 -Author: Michael Lehenbauer -Date: Fri Aug 17 09:24:48 2018 -0700 - - Make backoff account for already-elapsed time. (#1132) - -commit 7ef7d517e4484afffd6b7bbb72adcc28c38c44b0 -Author: Sebastian Schmidt -Date: Thu Aug 16 15:59:22 2018 -0700 - - Attempt to delete client metadata row (#1131) - -commit 4152a2991cbc693eb63b7d1e72bf7f63f873a4ba -Author: Sebastian Schmidt -Date: Thu Aug 16 15:53:20 2018 -0700 - - Remove unused lastUpdateTime (#1130) - -commit bc40f0e5ee68672e1f390bbb6f7a30e561739912 -Author: Sebastian Schmidt -Date: Thu Aug 16 14:37:08 2018 -0700 - - Garbage Collect Query State (#1128) - -commit 032786d5d2d1d319adf175eeab82c62a8c5a12a3 -Author: Sebastian Schmidt -Date: Thu Aug 16 13:48:05 2018 -0700 - - Only delete zombied entries on commit success (#1127) - -commit ae5a0481ab4a760ac6e46383ce5c3e03e5d409d5 -Author: David East -Date: Thu Aug 16 14:38:17 2018 -0600 - - Rxfire docs update and adding the snapshot to the percentage observable (#1124) - - * update rxfire docs - - * update RxFire docs - - * [AUTOMATED]: Prettier Code Styling - -commit cc8967d3204244d4522ab1b9dab845f6d024f7c0 (tag: rxfire@2.0.0, tag: firebase@5.4.0, tag: @firebase/firestore@0.7.0, tag: @firebase/firestore-types@0.6.0) -Author: Josh Crowther -Date: Thu Aug 16 11:58:21 2018 -0700 - - Publish firebase@5.4.0 - -commit 9869db3229c321f000ec8bb3186211ad2442fd61 -Author: Josh Crowther -Date: Thu Aug 16 11:41:40 2018 -0700 - - Reverting version to 1.x for relase purposes - -commit 8f85b135218e2ca1a9920611c57c2a095b10a87a -Author: Michael Lehenbauer -Date: Thu Aug 16 08:04:08 2018 -0700 - - Update Firestore changelog for token change fix (4ec654d). (#1122) - - * Update Firestore changelog for token change fix (4ec654d). - -commit 0ba4225b134d430ab47adff5830f061437eaec79 -Author: Greg Soltis -Date: Wed Aug 15 16:09:37 2018 -0700 - - Keep stopping starting (#1125) - -commit d26866c693411b7ecc35bbe416f787fcd33e12b6 -Author: Sebastian Schmidt -Date: Wed Aug 15 13:49:25 2018 -0700 - - Delete leftover zombied client IDs (#1123) - -commit 4ec654de49c09724877bc09096348302536c245a -Author: Michael Lehenbauer -Date: Wed Aug 15 09:03:48 2018 -0700 - - firebase-ios-sdk/1499: Restart streams on any token change. (#1120) - - * firebase-ios-sdk/1499: Restart streams on any token change. - - See https://github.com/firebase/firebase-ios-sdk/issues/1499 - - This reworks our UserListener into a CredentialChangeListener which - fires on any token change, even if the User did not change. This allows - us to restart our streams (but not switch mutation queues, etc.) on token - changes. - -commit fc37f4cf7d0088632c8511d7fb2a076ad38974a4 -Author: Greg Soltis -Date: Tue Aug 14 15:13:21 2018 -0700 - - Stop starting the remote document cache (#1116) - - * Stop starting the remote document cache - - * Review feedback - - * MultiTab -> MultiClient - -commit d559e80697e923a2816eaccf76726423b45e991c -Author: Sebastian Schmidt -Date: Tue Aug 14 13:54:48 2018 -0700 - - Delete stale client metadata (#1119) - -commit 994107291caee20371c4d4fba95a40a80200d2cc -Author: Sebastian Schmidt -Date: Tue Aug 14 11:17:02 2018 -0700 - - Update Changelog with Multi-Tab Schema Changes (#1118) - -commit 89d46be765feb7c4c6576985dd0fa707a1bfbe97 -Author: Sebastian Schmidt -Date: Mon Aug 13 11:13:29 2018 -0700 - - Using mutable spec runner (#1114) - -commit b30ce32c519f1e4db608017b252982ddc3821774 -Author: Michael Lehenbauer -Date: Mon Aug 13 11:06:22 2018 -0700 - - Tweak array-contains test for partial object matches. (#1115) - - Ensure b/112521956 cannot happen (makes sure we don't partially match against objects in the array) - -commit d130e94c29628e2ab178f4657267350d7e0e784e -Author: Jeff Delaney -Date: Sun Aug 12 09:05:50 2018 -0700 - - rxfire: added functions to map RTDB changes to values (#1062) - -commit 5ff6dc0fa5a1c0fe48ac821a0eeda43e1ce72a2d -Author: Sebastian Schmidt -Date: Fri Aug 10 15:37:29 2018 -0700 - - Garbage Collect the Remote Document Changelog (#1108) - -commit 66873904ce90b4f971be55903bb1e20c7ed1ccc3 -Author: Michael Lehenbauer -Date: Fri Aug 10 09:52:44 2018 -0700 - - GRPC Tweaks. (#1109) - - * Don't lowercase RPC names because the gRPC stub supports both now. - * Remove event handlers / asserts that have been proven safe / unnecessary. - -commit d21071e913405533194504fceebad29cd5b05e61 -Author: Sebastian Schmidt -Date: Thu Aug 9 19:55:41 2018 -0700 - - Garbage Collect Mutation Batch Keys (#1106) - -commit b6e601067e1014c14e4e6f9808d5eed8e51b2cdb -Author: Greg Soltis -Date: Thu Aug 9 16:13:49 2018 -0700 - - Drop QueryCache.start() (#1107) - - * Drop QueryCache.start() - - * [AUTOMATED]: Prettier Code Styling - -commit b16bbcd5541b8f3d8b0e4a25ab26993cb232d923 -Author: Greg Soltis -Date: Thu Aug 9 09:10:06 2018 -0700 - - Drop limbo collector (#1105) - - * Remove calls to collect limbo docs - - * Pre-event sorting merge - - * Remove limbo collector - - * [AUTOMATED]: Prettier Code Styling - - * Chain promises, wait for them - - * [AUTOMATED]: Prettier Code Styling - - * Drop unnecessary type - - * Actually await the promise - -commit 541683ba2a323293289465043f97254a55898650 -Author: Sebastian Schmidt -Date: Wed Aug 8 15:37:40 2018 -0700 - - Remove mutation data from client state (#1102) - -commit c6d39934daf5f0fbcd3f9011f8f125685d83ed39 -Author: Sebastian Schmidt -Date: Wed Aug 8 15:26:42 2018 -0700 - - Spec Test: Sorting Query events (#1103) - -commit 28c0c065b8ba1bd9337cc1a7a3ca0d2e340ebb29 -Author: Sebastian Schmidt -Date: Tue Aug 7 23:03:04 2018 -0700 - - Use previous message for primary lease error (#1100) - -commit 2beaaea73c7df3eb9954c70f00ff2743928e7a85 -Author: Michael Lehenbauer -Date: Tue Aug 7 17:13:28 2018 -0700 - - Fixed `get({source: 'cache'})` to return nonexistent documents from cache. (#1096) - - Port of https://github.com/firebase/firebase-ios-sdk/pull/1642 - -commit 9684f84d901812d25632ae3bfc74c9f66fa86b2d -Author: Sebastian Schmidt -Date: Tue Aug 7 16:55:58 2018 -0700 - - Updating the indexeddb_persistence class comment (#1099) - -commit cb4b5296d7409bef6872aff93e94fdd222290535 -Author: Sebastian Schmidt -Date: Tue Aug 7 16:15:28 2018 -0700 - - Removing/Addressing TODOs (#1097) - -commit fb05d40e638cfc6cd33fdaee516cf54ca85faa55 -Author: Sebastian Schmidt -Date: Tue Aug 7 15:28:07 2018 -0700 - - Using BATCHID_UNKNOWN instead of null (#1098) - -commit 007ef8fc39f063f1feeb519068cc54fa02aa7864 -Author: David East -Date: Mon Aug 6 12:46:56 2018 -0600 - - rxfire public (#1093) - -commit 180b5e5bded92fc574713301d817f98aadbb13c7 -Author: Sebastian Schmidt -Date: Mon Aug 6 08:44:59 2018 -0700 - - Multi-Tab Renames (#1088) - -commit 2f17ba02a3a139678b849cd53b2199156e5bc6d1 -Author: Sebastian Schmidt -Date: Fri Aug 3 14:12:30 2018 -0700 - - Multi-Tab Persistence - - As per go/multi-tab. - - This feature is not yet enabled for third-party users. - -commit dc9a5d18883e329e29191aeb0f4a2de70e7ccbbe -Author: Michael Lehenbauer -Date: Fri Aug 3 13:37:22 2018 -0700 - - Enable no-floating-promises lint check and fix / suppress violations. (#1087) - - I noticed that we were failing to wait for promises in a couple places so I enabled no-floating-promises lint check and cleaned up all the violations. To make this a bit easier I introduced enqueue() vs enqueueAndForget() on the AsyncQueue, with the latter returning void instead of a Promise. - -commit b4ab8963543f0a49862f86d123c62ad4e7ccfcc6 (tag: firebase@5.3.1, tag: @firebase/firestore@0.6.1, tag: @firebase/auth@0.7.2) -Author: hiranya911 -Date: Fri Aug 3 10:18:37 2018 -0700 - - Publish firebase@5.3.1 - -commit 4af084323401e2fe8ae4f45600cd3f50e0e51b72 -Author: hiranya911 -Date: Thu Aug 2 23:00:16 2018 -0700 - - Removing the temp git diff hack - -commit c906eee41c7a6af3f7c1a2ce1a878a3741cfcba8 -Author: hiranya911 -Date: Thu Aug 2 21:50:01 2018 -0700 - - Updating yarn.lock for rxjs - -commit d31bb12c54d7f880c5b1e328ab3159d3053b8ce1 -Author: hiranya911 -Date: Thu Aug 2 20:07:44 2018 -0700 - - Temporarily logging the git diff - -commit d4251ae168240e51002c211cc652e64eb5720cb0 -Author: Hiranya Jayathilaka -Date: Thu Aug 2 17:47:07 2018 -0700 - - Revert "Prep rxfire release" (#1086) - - * Revert "Rxfire build fix (#1085)" - - This reverts commit fd413785eac96e6e11bc61f31561bd6d459d5f26. - - * Revert "Enable strict function types (#1082)" - - This reverts commit 22ed571bc9089f4912b23286c35015f9995a2138. - - * Revert "Fixes servicerworker/client state syncing (#1074)" - - This reverts commit 2dab48d13e2b79af96721ad05e30a9d1a91a1498. - - * Revert "Prep rxfire release (#1079)" - - This reverts commit c74c3b91ec7f26aed7d7cc10f384afdb6e73e4d4. - -commit fd413785eac96e6e11bc61f31561bd6d459d5f26 -Author: David East -Date: Thu Aug 2 16:19:17 2018 -0600 - - Rxfire build fix (#1085) - - * fix rxfire build - - * [AUTOMATED]: Prettier Code Styling - -commit 22ed571bc9089f4912b23286c35015f9995a2138 -Author: Greg Soltis -Date: Thu Aug 2 11:35:51 2018 -0700 - - Enable strict function types (#1082) - - * Strict - - * More strictness - - * [AUTOMATED]: Prettier Code Styling - - * Lint and cleanup - - * Use Unknown type - -commit 2dab48d13e2b79af96721ad05e30a9d1a91a1498 -Author: bojeil-google -Date: Thu Aug 2 11:31:25 2018 -0700 - - Fixes servicerworker/client state syncing (#1074) - - * Fixes servicerworker/client state syncing - - Defines the MessageChannel based utility for communicating window <=> window and window <=> worker. - - Adds receiver in indexedDB when operating from a service worker to listen to keyChanged events. - On detection, indexedDB is synced and a response is returned to sender whether the key change was processed. It may be that the key change was already detected. This would return false. - - Adds a sender when an indexedDB write operation occurs and a service worker is available. The client will send a keyChanged message to the service worker to process the change and blocks on it. On response, the indexedDB write operation will resolve. The operation will resolve on success or failure. This is a best effort approach. If the service worker fails to process, the write operation should still succeed. - - Updates obsoleted APIs in web worker. - -commit c74c3b91ec7f26aed7d7cc10f384afdb6e73e4d4 -Author: David East -Date: Wed Aug 1 15:09:30 2018 -0600 - - Prep rxfire release (#1079) - -commit e4ec0366c40f21457874c1462c08ca1bc5b122f2 -Author: Greg Soltis -Date: Wed Aug 1 11:22:15 2018 -0700 - - Ensure owner lease in owner lease refresh loop (#1072) - - * Ensure owner lease in owner lease refresh loop - - * Make it actually do the thing this time - -commit bb97c2739fd704b757c5b9087a79996990b24820 -Author: Greg Soltis -Date: Wed Aug 1 10:09:49 2018 -0700 - - Fix unsound type signature (#1075) - -commit e8460bc73cc6165ca022a3b9872cabd54af8262c -Author: Michael Lehenbauer -Date: Tue Jul 31 16:13:04 2018 -0700 - - Rename idleTimer and fix comments. (#1068) - -commit 08907dbeffe2737f4bb125da2d7570d99a9800fa -Author: Gil -Date: Tue Jul 31 14:31:40 2018 -0700 - - Add a CHANGELOG entry for #1052 (#1071) - - * Add a CHANGELOG entry for #1052 - - * Add notes for #1055 - -commit ca008a4827a8fd871d1f6b9379064efee79c5035 -Author: Konstantin Varlamov -Date: Tue Jul 31 14:24:22 2018 -0400 - - Port optimizations to LocalDocumentsView from iOS (#1055) - - * add a method to find batches affecting a set of keys (port of [1479](https://github.com/firebase/firebase-ios-sdk/pull/1479)); - * use the newly-added method to avoid rereading batches when getting documents in `LocalDocumentsView` (port of [1505](https://github.com/firebase/firebase-ios-sdk/pull/1505)); - * avoid rereading batches when searching for documents in a collection (port of [1533](https://github.com/firebase/firebase-ios-sdk/pull/1533)). - - Speedup was measured by running tests in browser and checking time spent writing 10 batches of 500 mutations each, and then querying the resulting 5K docs collection from cache in offline mode. For this case, the writing speedup is about 3x, and querying speedup is about 6x (see PR for more details). - -commit 063f729fc156fae6158f66d0992c23c5c401ce01 -Author: Greg Soltis -Date: Tue Jul 31 10:48:20 2018 -0700 - - Add a type parameter to Persistence (#1047) - - * Cherry pick sequence number starting point - - * Working on typed transactions - - * Start plumbing in sequence number - - * Back out sequence number changes - - * [AUTOMATED]: Prettier Code Styling - - * Fix tests - - * [AUTOMATED]: Prettier Code Styling - - * Fix lint - - * [AUTOMATED]: Prettier Code Styling - - * Uncomment line - - * MemoryPersistenceTransaction -> MemoryTransaction - - * [AUTOMATED]: Prettier Code Styling - - * Review updates - - * Style - - * Lint and style - - * Review feedback - - * [AUTOMATED]: Prettier Code Styling - - * Revert some unintentional import churn - - * Line 44 should definitely be empty - - * Checkpoint before adding helper function for stores - - * Use a helper for casting PersistenceTransaction to IndexedDbTransaction - - * [AUTOMATED]: Prettier Code Styling - - * Remove errant generic type - - * Lint - - * Fix typo - -commit 1f25d0dff5f7b5379cdb666ff9fc5cf42fb53c79 -Author: Gil -Date: Tue Jul 31 08:45:38 2018 -0700 - - Implement global resume token (#1052) - - * Add a spec test that shows correct global resume token handling - - * Minimum implementation to handle global resume tokens - - * Remove unused QueryView.resumeToken - - * Avoid persisting the resume token unless required - - * Persist the resume token on unlisten - -commit f14ebc245f58832776ec9fcde307175fba84f54e -Author: Michael Lehenbauer -Date: Mon Jul 30 16:37:10 2018 -0700 - - Refactor PersistentStream (no behavior changes). (#1041) - - This breaks out a number of changes I made as prep for b/80402781 (Continue - retrying streams for 1 minute (idle delay)). - - PersistentStream changes: - * Rather than providing a stream event listener to every call of start(), - the stream listener is now provided once to the constructor and cannot - be changed. - * Streams can now be restarted indefinitely, even after a call to stop(). - * PersistentStreamState.Stopped was removed and we just return to - 'Initial' after a stop() call. - * Added `closeCount` member to PersistentStream in order to avoid - bleedthrough issues with auth and stream events once stop() has - been called. - * Calling stop() now triggers the onClose() event listener, which - simplifies stream cleanup. - * PersistentStreamState.Auth renamed to 'Starting' to better reflect that - it encompasses both authentication and opening the stream. - - RemoteStore changes: - * Creates streams once and just stop() / start()s them as necessary, - never recreating them completely. - * Added networkEnabled flag to track whether the network is - enabled or not, since we no longer null out the streams. - * Refactored disableNetwork() / enableNetwork() to remove stream - re-creation. - - Misc: - * Comment improvements including a state diagram on PersistentStream. - * Fixed spec test shutdown to schedule via the AsyncQueue to fix - sequencing order I ran into. - -commit a80a597b57c7ac3cb91cc197b72913b5afcc014f -Author: David East -Date: Mon Jul 30 16:42:44 2018 -0600 - - RxFire: Api Change and documentation (#1066) - - * api changes and doc updates - - * fixes - -commit f86d8c97fd12e637a986a97235a56b380ef49301 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Jul 30 15:03:11 2018 -0700 - - Catch invalid provider id error (#1064) - -commit 5c485dc45e9725db1f6788f4995bca15424ab37c -Author: Sebastian Schmidt -Date: Mon Jul 30 13:07:50 2018 -0700 - - Add Watch update perf test (#1059) - -commit 6abb55fbee3070b7c8da51f1394edf5717f1da28 -Author: Sebastian Schmidt -Date: Mon Jul 30 12:29:37 2018 -0700 - - Don't look up TargetId in notifyLocalViewChanges (#1065) - -commit d9e432eb6405144ea0daaf1fa293a578182754ad -Author: Konstantin Varlamov -Date: Sun Jul 29 17:32:44 2018 -0400 - - Firestore: in tests, silence the verbose warning about old timestamp behavior (#1058) - - This cleans up the few leftover places where the warning was still being outputted in tests. Running locally, I get a clean log. - -commit 718953e7a6f78577deaa440972178fbd2651b1b3 -Author: Sebastian Schmidt -Date: Fri Jul 27 09:28:15 2018 -0700 - - Add benchmark spec tests (#1048) - -commit fc2e9678de067e04848eae998e041d63d3e21625 -Author: Greg Soltis -Date: Wed Jul 25 15:03:37 2018 -0700 - - Ensure persistence started (#1043) - - * Ensure persistence is started when passed to the local store - - * [AUTOMATED]: Prettier Code Styling - - * Review responses - -commit b8a061b62e933b20db80a98e7a6339810ea7133c -Author: Jeff Delaney -Date: Wed Jul 25 11:47:39 2018 -0700 - - (rxfire): unwrap operator (#982) - - * (rxfire): unwrap operator - added a custom rxjs operator to map collections/docs to their data payload - - * (rxfire): rm unused lines from spec - - * (rxfire) data mapping functions - refactored unwrap operator in favor of pure data mapping functions - -commit d61fbb25e10d0eeeeb338a9b3f20524e8b226d1b -Author: Sebastian Schmidt -Date: Tue Jul 24 22:50:06 2018 -0700 - - Upgrade GRPC to 1.13.1 (#1042) - -commit f4dd23109150a7ef142319db5f10053f693d93c7 -Author: Gil -Date: Tue Jul 24 09:57:48 2018 -0700 - - Use Alex's suggested phrasing instead (#1028) - -commit 8309eb3727b9b7d4016e1c688df5bff29e01a4a1 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Jul 23 11:08:43 2018 -0700 - - catch server error RESET_PASSWORD_EXCEED_LIMIT (#1037) - -commit 86c8077a011c817be52b6f1047e1040ea6e9e6d6 -Author: Ryan Brewster -Date: Fri Jul 20 15:55:42 2018 -0700 - - Add iat to fake access token payload (#1022) - - * Add iat to fake access token payload - - * [AUTOMATED]: Prettier Code Styling - - * Simpler tests - - * [AUTOMATED]: Prettier Code Styling - - * Do not clobber iat - -commit 5118935e516b5d9407c25306fc4802a43bc92f88 -Author: rsgowman -Date: Fri Jul 20 16:23:43 2018 -0400 - - Fix to #1027 to allow SnapshotVersion == 0 (#1033) - -commit 2d7a74ce8a169e22061a8cdc14ae7fb2ef87441a -Author: rsgowman -Date: Fri Jul 20 13:40:05 2018 -0400 - - Unify local.QueryData with the other platforms (#1027) - - This makes it line up with it's own docs, and also the other platforms. - -commit 60a58d998b63b7a3af918064fc0b74e495c86e73 (tag: firebase@5.3.0, tag: @firebase/firestore@0.6.0, tag: @firebase/firestore-types@0.5.0, tag: @firebase/auth@0.7.1) -Author: Josh Crowther -Date: Thu Jul 19 14:33:20 2018 -0700 - - Publish firebase@5.3.0 - -commit d60f6590d28680bf139062db86c65ff38121f5b3 -Author: Greg Soltis -Date: Thu Jul 19 14:18:19 2018 -0700 - - Remove unnecessary `any` (#1030) - - * Fix an errant any usage - - * [AUTOMATED]: Prettier Code Styling - -commit fffdb75e69c06a0affcc18a4d7bf13dfb4025513 -Author: Michael Lehenbauer -Date: Thu Jul 19 12:52:13 2018 -0700 - - Ensure that we create an empty TargetGlobal row. (#1029) - - Ensure the v3 migration unconditionally creates the TargetGlobal row. Remove the no-longer-necessary v2 schema migration. - -commit 4b51dee11ce415fe0d4ba6e0bce82f0a5ee08472 -Author: Gil -Date: Thu Jul 19 10:29:48 2018 -0700 - - Add a release note for the fix to #1548 (#1024) - -commit e6ab89470b567c1e00644b171d235252b7ffd38c -Author: Gil -Date: Wed Jul 18 19:58:47 2018 -0700 - - Add a schema migration that drops the query cache (#1019) - - * Add a schema migration that drops the query cache - - This is a force fix for potential existence filter mismatches caused by - https://github.com/firebase/firebase-ios-sdk/issues/1548 - - The essential problem is that when resuming a query, the server is - allowed to forget deletes. If the number of incorrectly synthesized - deletes matches the number of server-forgotten deletes then the - existence filter can give a false positive, preventing the cache from - self healing. - - Dropping the query cache clears any client-side resume token which - prevents a false positive existence filter mismatch. - - Note that the remote document cache and mutation queues are unaffected - so any cached documents that do exist will still work while offline. - - * Implement review feedback - -commit 593cd2015d985ff71908d3655a087ba456a521c7 -Author: Sebastian Schmidt -Date: Wed Jul 18 17:16:15 2018 -0700 - - Making sure we don't export 'experimental' (#1023) - -commit 3d26806317e13a7ab9643cf57bd1ba62d0552856 -Author: Michael Lehenbauer -Date: Wed Jul 18 15:47:33 2018 -0700 - - Fix getRemoteKeysForTarget() method name in comment. (#1020) - - While porting I noticed this was slightly wrong. targetContainsDocument() is the method in WatchChangeAggregator. The SyncEngine method I meant to reference is getRemoteKeysForTarget(). - -commit 6d663926d71b47f6a12b28440254012b4829dbbe -Author: Gil -Date: Wed Jul 18 12:38:19 2018 -0700 - - Allow remote updates from watch to heal a cache with synthesized deletes in it (#1015) - - * Write a spec test for the busted cache - - * Modify spec test to demonstrate deletedDoc issue. (#1017) - - * Allow updates for targets where the document is modified - -commit 3d1a15c7ec877c4e0425e74b26d0d6d9d835b7a0 -Author: Josh Crowther -Date: Wed Jul 18 10:59:44 2018 -0700 - - Add @firebase/util as a dep of @firebase/testing - -commit 49c81b1fa90326aef9133204d007285179856858 -Author: Josh Crowther -Date: Wed Jul 18 10:53:56 2018 -0700 - - Updating yarn.lock - -commit 5c338d1d9e69b2f65b173ccd50ad1e0361847b9d -Author: Michael Lehenbauer -Date: Wed Jul 18 10:33:47 2018 -0700 - - b/72533250: Fix issue with limbo resolutions triggering incorrect manufactured deletes. (#1014) - - This fixes an issue occurring when a limbo target receives a documentUpdate, - then a global snapshot, and then a CURRENT. Because there was a global - snapshot before the CURRENT, WatchChangeAggregator has no pending document - updates and calls SyncEngine.targetContainsDocument() to see if we previously got any - document from the backend for the target. See: - https://github.com/firebase/firebase-js-sdk/blob/6905339235ad801291edc696dd75a08e80647f5b/packages/firestore/src/remote/watch_change.ts#L422 - - Prior to this change, targetContainsDocument() returned false because - it relies on our Views to track the contents of the target, and we don't - have Views for limbo targets. Thus WatchChangeAggregator incorrectly - manufactures a NoDocument document update which deletes data from our - cache. - - The fix is to have SyncEngine track the fact that we did indeed get - a document for the limbo resolution and return true from - targetContainsDocument(). - -commit 6905339235ad801291edc696dd75a08e80647f5b -Author: Sebastian Schmidt -Date: Mon Jul 16 14:21:28 2018 -0700 - - Setting GarbageSource in SyncEngine's constructor (#1010) - -commit f1a5e2e2e9c1dfa0928635df2ca01d537622faea -Author: Tony Meng -Date: Mon Jul 16 13:38:33 2018 -0700 - - Enable firestore sdk to talk to emulator (#1007) - - * Enable firestore sdk to talk to emulator - - * [AUTOMATED]: Prettier Code Styling - - * Revert firestore sdk changes - - * [AUTOMATED]: Prettier Code Styling - - * Revert credentials.ts - - * Cleanup - - * [AUTOMATED]: Prettier Code Styling - - * Set webSafe=false - - * Combine initializeTestApp and initializeFirestoreTestApp - - * [AUTOMATED]: Prettier Code Styling - - * Cleanup - - * [AUTOMATED]: Prettier Code Styling - - * Update major version since this is a breaking change that will cause the testing sdk to no longer work with old versions of the RTDB emulator - - * Completely remove admin sdk - - * Change version back to 0.1.0 - -commit e12558899bc1a3b8757b157e640b0f296d7a8467 -Author: rsgowman -Date: Fri Jul 13 17:06:28 2018 -0400 - - Move fieldFilter (free function) to Filter.create() (#988) - - This is a refactoring to unify filter creation across platforms. - -commit ad69a2133eb6250d2cbea9860877a40d0a6b6fcc -Author: Michael Lehenbauer -Date: Thu Jul 12 15:46:43 2018 -0700 - - Expose array transforms and array contains queries. (#1004) - - Also remove test code that was combining multiple array contains queries since those were disallowed in 04c9c3a. - -commit a8e3b5ac800125c6e7478aa1c4b31be1a94f643e -Author: David East -Date: Thu Jul 12 16:09:48 2018 -0600 - - RxFire Realtime Database (#997) - - * initial database code - - * test setup - - * database tests - - * auditTrail and database tests - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Josh's comments. Database docs - - * [AUTOMATED]: Prettier Code Styling - - * Firestore docs - - * auth docs - - * declaration fixes - - * switch to peerDeps - - * [AUTOMATED]: Prettier Code Styling - - * test config - -commit d7cc609f1b6b61b3dd89fc88c318ec935d325bcc -Author: Carlos A. Cabrera -Date: Wed Jul 11 13:25:09 2018 -0500 - - Added missing type for optional database url. (#1001) - -commit 81cd260aeb729c5003952988b19d5b32788510d4 -Author: Ryan Brewster -Date: Tue Jul 10 10:35:15 2018 -0700 - - Embed metadata directly into the RPC call (#979) - - * Embed metadata directly into the RPC call - - * [AUTOMATED]: Prettier Code Styling - - * Use ...args - - * [AUTOMATED]: Prettier Code Styling - - * Minimize diff - - * Add the OAuth assertion back in - -commit 284a746b36157a9943387f7126c47aa6c11a654b -Author: Josh Crowther -Date: Mon Jul 9 11:41:04 2018 -0700 - - Add @davideast as a CODEOWNER (#996) - -commit 7cd0b5d3cd414a0777ed8e92ba31d2b1a3f612d0 -Author: Konstantin Varlamov -Date: Tue Jul 3 15:55:41 2018 -0400 - - Force refresh token if RPC fails with "Unauthenticated" error (#940) - - "Unauthenticated" is presumed to mean that token is expired (which might happen if local clock is wrong) and retried, subject to the usual backoff logic. - -commit 63e141488d9025eb5433b97132e6266a87f35310 -Author: Michael Lehenbauer -Date: Mon Jul 2 09:42:03 2018 -0700 - - Refactor pendingWrites / write pipeline. (#972) - - No functional changes. Just renames, moves, added comments, etc. - - * pendingWrites => writePipeline - * canWriteMutations() renamed canAddToWritePipeline() - * commit() => addToWritePipeline() - * lastBatchSeen removed since we can compute it on demand from - writePipeline. - * Removed cleanUpWriteStreamState() and instead inlined it in - disableNetworkInternal() since I didn't like the non-symmetry with - cleanUpWatchStreamState() which is called every time the stream closes. - * Lots of comment cleanup. - -commit 27d27789ad7cb6fc157f60488e151d7f83f710e8 -Author: bojeil-google -Date: Fri Jun 29 20:51:25 2018 -0700 - - Clears getRedirectResult() in AuthEventManager for a specified Auth instance when it is deleted. (#973) - - app.auth().getRedirectResult() => resolves with redirect result provided previous page called a redirect operation. - app.delete(); // deletes auth instance corresponding to app and clears redirect result. - // re-initialize app with same parameters. - app = firebase.initializeApp(config); - app.auth().getRedirectResult() should resolve with null. - - This is needed for firebaseui-web react wrapper which on component unmount will delete the firebaseui instance (which deletes the internal auth instance). When the component is mounted again, the previously temp auth instance was still caching the redirect result. - https://github.com/firebase/firebaseui-web/issues/440 - - Cleans up private property access in AuthEventManager tests. - -commit 7210db80b3e9ab9a5f20f3bcb56d1be3f98a3b8b -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Fri Jun 29 14:53:03 2018 -0700 - - fixed updateCurrentUser test failure on IE11/10 (#971) - -commit cd4b9afd4c93b404a6ce3785d24642d9cdfce8f5 -Author: Sebastian Schmidt -Date: Thu Jun 28 16:21:34 2018 -0700 - - Add spec test support for target-scoped resume tokens (#969) - -commit 3f353b8ca3548e03d185d532677f50db02dfdfdf (tag: firebase@5.2.0, tag: @firebase/functions@0.3.0, tag: @firebase/functions-types@0.2.0, tag: @firebase/firestore@0.5.6, tag: @firebase/database@0.3.4) -Author: Josh Crowther -Date: Thu Jun 28 14:14:55 2018 -0700 - - Publish firebase@5.2.0 - -commit 40205f3617abfb8b3e553a156d76ddca63d9a82b -Author: Josh Crowther -Date: Wed Jun 27 11:04:48 2018 -0700 - - Add some top level reviewers (#964) - -commit d134c39d4840195256c47174087da16ec02d08e0 -Merge: 189bcead9 fb759b481 -Author: David East -Date: Tue Jun 26 17:35:27 2018 -0600 - - Merge pull request #933 from firebase/rxfire-infra - - WIP: RxFire - -commit fb759b481b1b3882f07abc81ea82b4d0d9a2ce67 -Merge: 22d6f13a9 189bcead9 -Author: David East -Date: Tue Jun 26 16:56:41 2018 -0600 - - Merge branch 'master' into rxfire-infra - -commit 189bcead915258de79035fe0db61531811a03d7a -Author: Sebastian Schmidt -Date: Tue Jun 26 15:56:15 2018 -0700 - - Add onBlocked handler for schema upgrade (#963) - -commit 22d6f13a9615b10444878f309f14b153004cad79 -Author: David East -Date: Tue Jun 26 16:44:45 2018 -0600 - - package.json files - -commit dca768fa6b2b348f4b03bbc33a59540fb5770284 -Author: David East -Date: Tue Jun 26 16:34:50 2018 -0600 - - package.json files - -commit 5831f835d42f26348840852c287b273a6fe5bd0e -Author: David East -Date: Tue Jun 26 16:06:39 2018 -0600 - - package.json files - -commit 97ce638dc7edb484048318b4023e9bc5f8084c71 -Author: David East -Date: Tue Jun 26 15:29:06 2018 -0600 - - updated comments - -commit 07fb713e3f8d347f44a64af67f7379ba020b2dbf -Author: David East -Date: Tue Jun 26 15:18:40 2018 -0600 - - [AUTOMATED]: Prettier Code Styling - -commit ee8915df3288f83f15338e3752b3842b71a93082 -Author: David East -Date: Tue Jun 26 15:17:45 2018 -0600 - - forEach to for - -commit 8887b5125f883b2d569c2e301ae6cffe31d23f58 -Merge: 85c9da43a e87d98a35 -Author: David East -Date: Tue Jun 26 15:10:54 2018 -0600 - - Merge branch 'rxfire-infra' of https://github.com/firebase/firebase-js-sdk into rxfire-infra - -commit 85c9da43ad52d1239d89dfffd060777e2453be58 -Author: David East -Date: Tue Jun 26 15:09:05 2018 -0600 - - addressing Josh's comments. - -commit e87d98a35f90ed2fbcb289b9ddc4b8b2eba6a1cd -Merge: 065729c81 1bc1c4673 -Author: David East -Date: Tue Jun 26 14:36:27 2018 -0600 - - Merge branch 'master' into rxfire-infra - -commit 1bc1c4673277bd9e058058c66f6999de08327655 -Author: Bryan Klimt -Date: Mon Jun 25 19:34:57 2018 -0400 - - Add a method to allow using Functions with the local emulator. (#956) - - * Add a method to allow using Function with the local emulator. - * Add the function to the .d.ts. - -commit 7a41fe71fd3effd71b61548546e290015f58456b -Author: Bryan Klimt -Date: Mon Jun 25 17:41:49 2018 -0400 - - Add an optional parameter for region to Functions constructor. (#961) - - * Add region to functions constructors. - -commit ff35149142bedcb819d829f349870310194ade25 -Author: Fabio Crisci -Date: Mon Jun 25 18:56:51 2018 +0200 - - Remove startsWith because it's not supported in IE11 (#960) - -commit c2bd513b3232dd96b3f26af4dcfc697e56bf5076 (tag: firebase@5.1.0, tag: @firebase/messaging@0.3.5, tag: @firebase/firestore@0.5.5, tag: @firebase/auth@0.7.0, tag: @firebase/auth-types@0.3.4) -Author: Josh Crowther -Date: Thu Jun 21 11:26:59 2018 -0700 - - Publish firebase@5.1.0 - -commit 3c064a3a60fa4eb558012839cf9a77913996876a -Author: Christian Rackerseder -Date: Wed Jun 20 20:40:44 2018 +0200 - - Exporting firebase as namespace (#885) - -commit f21f3ca421f0de2dd8a1b168be4a23833698d2ae -Author: Thai Pangsakulyanont -Date: Thu Jun 21 01:39:25 2018 +0700 - - :memo: Add firebase-functions to README. (#924) - -commit 870fd29981fa813ac5563b6d77036a822fba4488 -Author: Mertcan Mermerkaya -Date: Wed Jun 20 15:35:08 2018 +0100 - - Add "browser version" to issue template (#925) - -commit f305430096c845e2820aba9079f9e6f96f2cac4f -Author: Greg Soltis -Date: Mon Jun 18 14:12:11 2018 -0700 - - Add support for 'no-lru' tag to spec tests (#935) - - * Add no-lru tag to spec tests - - * [AUTOMATED]: Prettier Code Styling - - * Review feedback - - * More accurate type - - * [AUTOMATED]: Prettier Code Styling - -commit 18ee278fd49a903944b3788267560044bf5b185b -Author: bojeil-google -Date: Mon Jun 18 13:07:25 2018 -0700 - - fix(auth): Fixes issue when hybrid indexedDB fallsback to localStorage (#937) - - because the write/read test fails because multiple windows or instances - try to write/read/delete from the same indexedDB entry. Instead of a - common key __sak, we use a random one minimizing the chances of - collision. - -commit 78b36cb3bb653c0c24615ed8a9691f1814190211 -Author: Mertcan Mermerkaya -Date: Mon Jun 18 19:14:55 2018 +0100 - - Add FcmOptions interface and link property (#942) - -commit 065729c818ec76330d93f5c618f888faf91a5a61 -Author: David East -Date: Fri Jun 15 13:50:57 2018 -0600 - - [AUTOMATED]: Prettier Code Styling - -commit 76a1124e4da6e44f63fed5f2a61a02ac511f300a -Author: David East -Date: Fri Jun 15 13:49:57 2018 -0600 - - josh comments - -commit 4cb0a992a15a22bf187712c60de9d6081395feb4 -Merge: ddc24aa48 3d1a53a70 -Author: David East -Date: Fri Jun 15 12:37:51 2018 -0600 - - Merge branch 'rxfire-infra' of https://github.com/firebase/firebase-js-sdk into rxfire-infra - -commit ddc24aa48ba20f8f3b053137f217d3df9d0856e6 -Author: David East -Date: Fri Jun 15 12:37:48 2018 -0600 - - firestore build - -commit 3d1a53a706e760aa131f72c641a6b9f4bd4d93c2 -Merge: 4503a55a8 c808a571a -Author: Josh Crowther -Date: Fri Jun 15 11:21:40 2018 -0700 - - Merge branch 'master' into rxfire-infra - -commit 4503a55a826e2e1d9e9c537952bd6470bfa3d89e -Author: David East -Date: Fri Jun 15 12:08:45 2018 -0600 - - [AUTOMATED]: Prettier Code Styling - -commit f4ea936b7896a9160c5d26ff7bf8fa1b9fdfeda8 -Author: David East -Date: Fri Jun 15 12:07:43 2018 -0600 - - comments - -commit cec2d572e26c86e0c38c4fb37337497499e113fa -Author: David East -Date: Wed Jun 13 12:00:09 2018 -0600 - - [AUTOMATED]: Prettier Code Styling - -commit da2cfb70defc84d20210d5e789d4cbde5442c20a -Author: David East -Date: Wed Jun 13 11:59:12 2018 -0600 - - fix double emission in docChanges() - -commit 9d9769c5abe9e77dd3cc3dddd393f58befe1692f -Author: David East -Date: Wed Jun 13 10:37:15 2018 -0600 - - fixed declaration problem - -commit c808a571ad8be2639a65fc4b2fb84dd57c1b61b5 -Author: rsgowman -Date: Wed Jun 13 11:40:09 2018 -0400 - - Refine onSnapshot tests to ensure correct number of events emitted (#903) - - * Refine onSnapshot tests to ensure correct number of events emitted - - Behaviour was already correct. This PR is effectively just porting the - existing iOS tests to typescript. - -commit a7a49f64f301008e946a4b082855a9dca9315ff0 -Author: David East -Date: Tue Jun 12 15:16:01 2018 -0600 - - [AUTOMATED]: License Headers - -commit 28c3a1135ed7b9c45fbcc8a9325652737d975fa2 -Author: David East -Date: Tue Jun 12 15:16:00 2018 -0600 - - [AUTOMATED]: Prettier Code Styling - -commit c2ffbdef0c26c64ec1c896d529151b5b467fd783 -Author: Josh Crowther -Date: Tue Jun 12 11:06:38 2018 -0700 - - Removing tsconfig.json from prod build (#915) - - * Remove the .npmignore and provide a pkg.files - - * [AUTOMATED]: Prettier Code Styling - -commit 3cdc3d7331333ac5aa996c9507c8f881040139f9 -Author: David East -Date: Mon Jun 11 20:35:22 2018 -0600 - - Firestore tests - -commit 4ca7bdf65069cefe096dfe012e796052b2429cce -Author: Josh Crowther -Date: Mon Jun 11 10:22:52 2018 -0700 - - Update yarn.lock - -commit f2a447291107a9deadca4d945043ea2f25f457bc -Author: Natan Sągol -Date: Mon Jun 11 09:15:42 2018 +0200 - - Added ES module bundle to the auth package (#819) - - * Added ES module build to the auth package. - - * [auth] Improved build efficiency by reusing Clousure Compiler output. - - * [auth] Improved a test script to accomodate hoisting. - - * [AUTOMATED]: Prettier Code Styling - - * Removed build step from a test script in the auth package. - - * Fixed an issue with getting a PID of a local server in auth tests. - - Issue was caused by getting a PID of a command creation, rather than the - command itself. - - * Changed a local method name in a gulp taks of an auth package. - - The new name should better reflect the purpose of a function. - - * Improved a documentation, spacing and prevented duplicate calls in auth - test script. - - * Formatted constants in auth package's gulpfile to fit in 80 columns. - - * Added a comment to explain the purpose of a wrap method used in auth - package's gulpfile. - - * Reformatted a gulpfile in the auth package according to reviewer's - comments. - - * Added spaces to multiline assignments to align with a style guide in the - auth package's gulpfile. - -commit 953483100621007ee40d3fbed4226600ee9c4129 -Author: Sebastian Schmidt -Date: Tue Jun 5 12:24:42 2018 -0700 - - Initializing WatchStreamAggregator before starting stream (#905) - - The WatchStreamAggregator has to be started before the stream, as at least on iOS we can receive message during stream start. - -commit 5e82b606c8e9f7e4e27ca321529b4fb36791dab6 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Jun 4 09:46:26 2018 -0700 - - Auth type update (#870) - - * updated type declaration for auth - - * [AUTOMATED]: Prettier Code Styling - - * updated verifyPhoneNumber return type - -commit 4673f7dbd8bdf8777ddd7d49f2e2e0d46300642e -Author: Michael Lehenbauer -Date: Mon Jun 4 07:43:44 2018 -0700 - - Test for b/72533250: Limbo documents resolve as deleted if snapshot received before CURRENT (#892) - - This is a test that demonstrates b/72533250 if you uncomment the line after the TODO. - - I'm punting on the actual bugfix at the moment because I think the best fix is a semi-large refactor. - -commit 4a85602be0ae5418530f3f9c1f9c86d71939aafd -Author: Josh Crowther -Date: Fri Jun 1 18:01:52 2018 -0700 - - Adding @hiranya911 to root owners (#895) - -commit 23c576ee54700ecdfb0e474c3e0116e1ab2fb6ac -Merge: 0f1425a9b 606171fa1 -Author: Yifan Yang -Date: Fri Jun 1 15:47:50 2018 -0700 - - Merge pull request #894 from firebase/yifany-browser-version - - Update Chrome and Safari version in cross-browser test. - -commit 606171fa1f746ed2e4081526df4c0c801185a53e -Author: Yifan Yang -Date: Fri Jun 1 14:08:41 2018 -0700 - - Allow failures from SauceLabs tests. - -commit 29296015af2aa72c1121ab22f3b7bfaf34136c93 -Author: Yifan Yang -Date: Fri Jun 1 13:13:37 2018 -0700 - - Update Chrome and Safari version in cross-browser test. - -commit 5661262d102006527df7b92a4ce6048150b0c905 -Author: David East -Date: Fri Jun 1 14:21:55 2018 -0600 - - firestore - -commit 1676c7b6b61d29dcc4043849e1b43a61fff37d5f -Author: David East -Date: Fri Jun 1 13:40:22 2018 -0600 - - functions observable - -commit af4a60169423162081488ccbe074ab87a550bba9 -Author: David East -Date: Fri Jun 1 13:08:19 2018 -0600 - - testing config. storage observables. - -commit 0f1425a9b0487bac917d263342f27730564236fb -Author: Mertcan Mermerkaya -Date: Fri Jun 1 16:06:40 2018 +0100 - - Remove Alec from Messaging owners (#893) - -commit 236d4d00112f00b278fe888229af4073c9af5387 -Author: Sebastian Schmidt -Date: Thu May 31 16:54:53 2018 -0700 - - Cleaning up test (#891) - -commit 233161d9ab0eb73591a3c287662337036d6488fe -Author: Mertcan Mermerkaya -Date: Thu May 31 16:06:13 2018 +0100 - - Check if cookies are enabled (#886) - - Messaging needs cookies to be enabled. - -commit 3e806caa65f45a893e46a55e4553b3b1debb24b4 -Author: Sebastian Schmidt -Date: Wed May 30 13:59:07 2018 -0700 - - Allow field deletes for SetOptions.mergeFields (#877) - -commit 2f7375a2c338112a4bef95f5b47872a3e5ffc19c -Author: Sebastian Schmidt -Date: Wed May 30 10:01:07 2018 -0700 - - Using LimboResolution for Limbo Resolution (#878) - -commit 96a10922ffdf3f986b1183070a2ccf15bed331fa -Author: Sebastian Schmidt -Date: Fri May 25 15:23:01 2018 -0700 - - Refactor RemoteEvent (#784) - -commit a08cfe6af7708f61a0f26924bf03ec8a0c446eaa -Author: Sebastian Schmidt -Date: Fri May 25 13:21:27 2018 -0700 - - Moving getStore() to SimpleDb (#869) - -commit cc5f15ee59238193dbf97f918302c69f218188b7 -Author: David East -Date: Fri May 25 13:42:13 2018 -0600 - - operators as external - -commit 1756126216ebde828a3e2f531c8852b1d427712f (tag: firebase@5.0.4, tag: @firebase/storage@0.2.3, tag: @firebase/storage-types@0.2.3, tag: @firebase/polyfill@0.3.3, tag: @firebase/messaging@0.3.4, tag: @firebase/messaging-types@0.2.3, tag: @firebase/functions@0.2.4, tag: @firebase/functions-types@0.1.3, tag: @firebase/firestore@0.5.4, tag: @firebase/firestore-types@0.4.3, tag: @firebase/database@0.3.3, tag: @firebase/database-types@0.3.2, tag: @firebase/auth@0.5.3, tag: @firebase/auth-types@0.3.3, tag: @firebase/app@0.3.3, tag: @firebase/app-types@0.3.2) -Author: Josh Crowther -Date: Thu May 24 15:55:03 2018 -0700 - - Publish firebase@5.0.4 - -commit b10c057a9c2e5b68233a970de86acde8b81a0525 -Author: Michael Lehenbauer -Date: Thu May 24 10:33:49 2018 -0700 - - Improves "Could not reach Firestore backend." log message. (#864) - - Improved message: - - Could not reach Cloud Firestore backend. Connection failed 2 times. Most recent error: FirebaseError: [code=unavailable]: 14 UNAVAILABLE: Connect Failed - This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend. - - Or: - - Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. - This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend. - -commit 300a1a699914017cb4dfc6ae79fec639283b0816 -Author: David East -Date: Wed May 23 15:13:57 2018 -0600 - - rxfire initial setup - -commit 4d16f51dd97b0a3faed41697660933ca03263b7c -Author: Mertcan Mermerkaya -Date: Wed May 23 18:22:55 2018 +0100 - - Use isArrayBufferEqual to compare VAPID keys (#862) - - * Use isArrayBufferEqual to compare VAPID keys - - Fixes #860. - - * Create a new VAPID key object instead of using the imported object in tests. - - This should be close enough to storing and retrieving it from IndexedDB and should prevent === comparison from working. - -commit 916c6927e39a4460c05ccffaa9d8423a244be639 -Author: Sebastian Schmidt -Date: Tue May 22 16:32:37 2018 -0700 - - Reworking PersistencePromise.waitFor to not use chaining (#851) - - * [AUTOMATED]: Prettier Code Styling - - * Reworking PersistencePromise.waitFor to not use chaining - - * it.only -> it.skip - -commit 47625d7d321413a3fd23d93c04aea27141aac901 -Author: Yifan Yang -Date: Tue May 22 14:48:23 2018 -0700 - - Saucelabs (#795) - - * Enable WebSocket transport and disable karma retry. - - * Reduce karma log verbosity. - - * Enable database and firestore saucelabs test. - - * fix - - * Enable database and firestore tests on multi-browsers including IE11. - - * Make test of database and firestore non-blocking due to their flakiness. - -commit b658d8cd3d572593ccadd2167ed6c2ee515bd20a -Author: Moritz Gunz -Date: Tue May 22 22:26:31 2018 +0200 - - Add missing tslib dependency (#856) - -commit 26222866e9e2c69bdadc1e2a4d7b5197805c4813 -Author: Sebastian Schmidt -Date: Tue May 22 11:29:59 2018 -0700 - - Adding ability to run prettier for Firestore (#854) - -commit e1fef76e025069bf87a1e635588dfe70a693d0e0 -Author: Josh Crowther -Date: Mon May 21 15:27:25 2018 -0700 - - Update the @firebase/* Package README.md Files (#853) - - * Updating all the @firebase/* package readmes - - * Consistency with other components - - * Addressing Nits - - * Nit: Josh sucks at english - -commit 9556469908b1101eae0fb294314f6106a1a2280d -Author: Sebastian Schmidt -Date: Mon May 21 13:29:35 2018 -0700 - - Explain when to use @firebase/firestore (#847) - -commit d068bc5d588cdf2de60ffcc1a36a5fd62064d2ad -Author: Sebastian Schmidt -Date: Mon May 21 11:53:32 2018 -0700 - - Adding Firestore to README/Cleaning up Externs (#844) - -commit e9caf3385dd91a96a1d860566066f90859f32b8f -Author: Sebastian Schmidt -Date: Mon May 21 10:35:18 2018 -0700 - - Propagating RTDB type changes (#845) - -commit f6fd8f52be282cc8e5f2e7a21948262eaffb343c -Author: Sebastian Schmidt -Date: Fri May 18 14:41:26 2018 -0700 - - Falling back on ABORTED_ERROR (#846) - -commit 3fa62ef9fe7176c8657b4d0f944afb17556b99c4 -Author: Justin Sprigg -Date: Sat May 19 03:59:29 2018 +1000 - - Update rtdb types (#840) - -commit 87b274b6f1c38bb4f10979496f4e44ea81186e91 -Author: Micah J Waldstein -Date: Fri May 18 12:52:54 2018 -0400 - - Add a link to the release notes in README.md (#842) - - Every time there is a new release, I need to go searching for this - not sure that everyone is aware of where these are placed online, seems to make sense to have a link included here. - -commit c3b33b20f2db8f9ffb25a179c0ce803b1e769f35 (tag: firebase@5.0.3, tag: @firebase/util@0.2.1, tag: @firebase/polyfill@0.3.2, tag: @firebase/messaging@0.3.3, tag: @firebase/functions@0.2.3, tag: @firebase/firestore@0.5.3, tag: @firebase/firestore-types@0.4.2, tag: @firebase/database@0.3.2, tag: @firebase/app@0.3.2) -Author: Josh Crowther -Date: Thu May 17 14:10:34 2018 -0700 - - Publish firebase@5.0.3 - -commit c660c35f039dc275cb5a275ddb1db7227d38fd84 -Author: Josh Crowther -Date: Thu May 17 11:27:05 2018 -0700 - - Add pkg.browser to firebase/app (#836) - -commit 04c9c3aed2428a349f87470c55a904bb5aa57042 -Author: Michael Lehenbauer -Date: Wed May 16 16:45:02 2018 -0700 - - b/79432277: Limit Queries to only a single array-contains clause. (#835) - -commit 2e5aa285cd34cb50c6c2c0b613d366375ab0ac33 -Author: Yifan Yang -Date: Wed May 16 15:40:11 2018 -0700 - - Enable IE11 testing on SauceLabs. (#821) - - * Enable IE11 testing on SauceLabs. - - * Use babel preset env instead of plugins. - -commit 5b59d75174b210725d20a80390028ca7c6c5eb87 -Author: Mertcan Mermerkaya -Date: Wed May 16 22:59:09 2018 +0100 - - Update import statements in documentation (#832) - - Prevents issues like #820. - -commit 7e7d36e516c53c9ec6c529ebf190598d7bb298b9 -Author: Sebastian Schmidt -Date: Wed May 16 14:17:35 2018 -0700 - - [AUTOMATED]: Prettier Code Styling (#833) - -commit a56cbafd564a1e9cad5be366fa58643118745c92 -Author: Jeff Sisson -Date: Wed May 16 12:48:55 2018 -0400 - - Allow storing Object.create(null) in Firestore (#827) - - Fixes #811 - -commit fbd5bd6324180158eef888cb2a8919c88023085e -Author: Michael Lehenbauer -Date: Tue May 15 17:05:00 2018 -0700 - - Mikelehen/doc changes for each (#825) - - Add 'forEach' (and 'map' for good measure) to Array methods we intercept on QuerySnapshot.docChanges. - -commit 1c5258c6881d77eb8b38eabfe86b6cc2a8f9d84e -Author: Sebastian Schmidt -Date: Tue May 15 16:06:45 2018 -0700 - - Treating onabort as an error (#823) - -commit 611949dba13010b5c070021364d41ccaba4f4386 -Author: Mertcan Mermerkaya -Date: Tue May 15 20:06:13 2018 +0100 - - Rename ControllerInterface, which is a class, to BaseController (#817) - -commit dd11cd17aada45a19732d6517a7d740e722546d2 -Author: Sebastian Schmidt -Date: Tue May 15 10:59:01 2018 -0700 - - Remove part of the mergeField comment (#822) - -commit 6a95a7ada63d4eab8d71a12ff7ead0871ab5b458 -Author: Mertcan Mermerkaya -Date: Tue May 15 18:23:50 2018 +0100 - - Fix messaging being optional and isSupported type definitions (#793) - - Fixes firebase.messaging() method being optional in TS types. - - Modifies isSupported so it is a namespace export and not a property on the factory function, which is not actually exported. - -commit 4ff990a9f0a0d804a63bcd49f22e2cd86a216721 -Author: Sebastian Schmidt -Date: Fri May 11 23:50:06 2018 -0700 - - Add listen spec tests (#812) - -commit c150044665bc5fa7b52553b5d7cf9e7a1c863865 -Author: Mertcan Mermerkaya -Date: Fri May 11 19:04:44 2018 +0100 - - Update grpc to 1.11.3 (#785) - - * Update grpc to 1.11.3 - - * [AUTOMATED]: Prettier Code Styling - -commit c1b4f40257c2a3f04c843bf3995927640af9ab1a -Author: pinarx -Date: Fri May 11 18:01:27 2018 +0100 - - Update messaging CODEOWNERS (#810) - -commit f99e42c00503265905aa67baabb03079d20a81c5 (tag: firebase@5.0.2, tag: @firebase/storage@0.2.2, tag: @firebase/storage-types@0.2.2, tag: @firebase/messaging@0.3.2, tag: @firebase/messaging-types@0.2.2, tag: @firebase/functions@0.2.2, tag: @firebase/functions-types@0.1.2, tag: @firebase/firestore@0.5.2, tag: @firebase/firestore-types@0.4.1, tag: @firebase/database@0.3.1, tag: @firebase/database-types@0.3.1, tag: @firebase/auth@0.5.2, tag: @firebase/auth-types@0.3.2, tag: @firebase/app@0.3.1, tag: @firebase/app-types@0.3.1) -Author: Josh Crowther -Date: Thu May 10 13:32:37 2018 -0700 - - Publish firebase@5.0.2 - -commit bd01dfe010bb0a07870a707c4fa697dbf8241336 -Author: Josh Crowther -Date: Thu May 10 13:18:38 2018 -0700 - - Disable the publish renderer for canary builds - -commit 97a3727ed3009d4ac0815cf13e1713f0986092b8 -Author: Josh Crowther -Date: Thu May 10 13:38:49 2018 -0600 - - Multiple Issue Fixes (#805) - - * Revert "SubImport Typings Fix (#796)" - - This reverts commit 3110d6b5e2976e11ac6de73a494faf7cd572ab4b. - - * Fixes #799 - - * Fixes #791, #800 - - * [AUTOMATED]: Prettier Code Styling - - * Add submodule typings tests - -commit e04cfb159bbc484b0ea527498370af2f4ea479f7 -Author: Josh Crowther -Date: Thu May 10 12:20:22 2018 -0600 - - Refactor firebase node builds (#804) - -commit 44de46da687a384e6a458a40ef60e17e5edd193f -Author: Sebastian Schmidt -Date: Thu May 10 09:53:38 2018 -0700 - - Update Firestore Changelog (#803) - -commit dd6937176d543352373181fce24ab67065ac1b96 -Author: Mertcan Mermerkaya -Date: Thu May 10 17:12:55 2018 +0100 - - Fix variable and class names (#802) - - * Fix variable and class names - - Fixes abbreviations in variable and class names to match Google TypeScript style guide, which follows the Java style guide: https://google.github.io/styleguide/javaguide.html#s5.3-camel-case - - Also changes some variable names in tests. - - * [AUTOMATED]: Prettier Code Styling - -commit 3110d6b5e2976e11ac6de73a494faf7cd572ab4b -Author: Josh Crowther -Date: Wed May 9 14:13:55 2018 -0600 - - SubImport Typings Fix (#796) - - * WIP: Fix #791 - - * Updating .gitignore - -commit 9fd02293703c20a9c624f28ec6b54325f67e9ffa -Author: Mertcan Mermerkaya -Date: Wed May 9 18:48:41 2018 +0100 - - Refactoring Messaging (#730) - - * Some more async/await - - * Remove deprecated callback API - - * Make manifestCheck a function - -commit e91742db40332061e13cdb6245d38bebed346c71 -Author: Mertcan Mermerkaya -Date: Wed May 9 16:50:31 2018 +0100 - - Refresh token instead of breaking if VAPID key doesn't exist (#794) - -commit 8922c3aeaf74493e1aefc4edd54e85606442479e -Author: Mertcan Mermerkaya -Date: Tue May 8 20:48:40 2018 +0100 - - Add tests for *-types packages (#789) - -commit 9c953fa337f4e6e4cbcdf67e32888bea349be377 (tag: firebase@5.0.1, tag: @firebase/storage@0.2.1, tag: @firebase/storage-types@0.2.1, tag: @firebase/messaging@0.3.1, tag: @firebase/messaging-types@0.2.1, tag: @firebase/functions@0.2.1, tag: @firebase/firestore@0.5.1, tag: @firebase/auth@0.5.1, tag: @firebase/auth-types@0.3.1) -Author: Josh Crowther -Date: Tue May 8 12:08:28 2018 -0700 - - Publish firebase@5.0.1 - -commit b351749bc17816a8577f132cf4bf8025721c315a -Author: Mertcan Mermerkaya -Date: Tue May 8 19:52:43 2018 +0100 - - Update Observer and Messaging types to match internal types (#786) - - * Fix Observer and Messaging types - - * [AUTOMATED]: Prettier Code Styling - - * Add second generic with Error as default - -commit 785cc8b49f149068dbabb6f7482ac0763aeec85e -Author: paulstelzer -Date: Tue May 8 20:51:38 2018 +0200 - - Fix #787 (#788) - - Generic type 'Observer' requires 1 type argument(s). - -commit 6003c32e9d80b3c1a09600e8f2b999623febb748 (tag: firebase@5.0.0, tag: @firebase/util@0.2.0, tag: @firebase/storage@0.2.0, tag: @firebase/storage-types@0.2.0, tag: @firebase/messaging@0.3.0, tag: @firebase/messaging-types@0.2.0, tag: @firebase/functions@0.2.0, tag: @firebase/firestore@0.5.0, tag: @firebase/firestore-types@0.4.0, tag: @firebase/database@0.3.0, tag: @firebase/database-types@0.3.0, tag: @firebase/auth@0.5.0, tag: @firebase/auth-types@0.3.0, tag: @firebase/app@0.3.0, tag: @firebase/app-types@0.3.0) -Author: Josh Crowther -Date: Tue May 8 10:31:33 2018 -0700 - - Publish firebase@5.0.0 - -commit 21f83a630627e9e4a5e620571273875d3a7de4c3 -Author: Michael Lehenbauer -Date: Tue May 8 08:45:55 2018 -0700 - - Test cleanup: Create indexeddbshim SQLite files in a temporary directory now that https://github.com/axemclion/IndexedDBShim/issues/319 is fixed. (#781) - -commit 84686bab79215020464eb61e130883d5187de469 -Author: Mertcan Mermerkaya -Date: Tue May 8 14:29:18 2018 +0100 - - Combine Observer and PartialObserver types (#770) - - * Combine Observer and PartialObserver types - - Uses Partial from TS to create a PartialObserver from Observer. - - * Fix Observer types in messaging - - * Fix Observer types in app-types - - * [AUTOMATED]: Prettier Code Styling - -commit 3c40284d96f8d6f3d30a281178849cf5a5424727 -Author: Michael Lehenbauer -Date: Mon May 7 16:17:09 2018 -0700 - - Array Contains support (not publicly exposed yet). (#764) - - Port of https://github.com/firebase/firebase-ios-sdk/commit/e4384c3e809556e75907df74cd116307f397472f - -commit 403c12367bbfee93209f2de6e4b9d77f9601c4d7 -Author: Mertcan Mermerkaya -Date: Mon May 7 20:17:28 2018 +0100 - - Add types for messaging.isSupported() (#769) - - * Add types for messaging.isSupported() - - * Change messaging type in app - -commit de19a840a4e7a82c45093f1db3c90f495bbe02fa -Author: Ryan Brewster -Date: Mon May 7 11:31:23 2018 -0700 - - Allow passing in .rules or .rulesPath (#775) - - * Allow passing in .rules or .rulesPath - - * [AUTOMATED]: Prettier Code Styling - - * Remove duplicated test - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: Prettier Code Styling - -commit 238fabece4df0d09fbcd577115237a6366c516d9 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon May 7 11:04:26 2018 -0700 - - fixed wrong return type in auth-extern (#783) - -commit e441ffbb42bd24db8457ee89a1c8d6042f0d625e -Author: Michael Lehenbauer -Date: Mon May 7 10:35:19 2018 -0700 - - Add arrayUnion() and arrayRemove() Transforms (not publicly exposed yet) (#763) - -commit a413ec21163e68aa15d3d46eb21f8bdc4e8bea4f -Author: Mertcan Mermerkaya -Date: Sat May 5 00:33:01 2018 +0100 - - Enable Messaging tests on Sauce Labs (#773) - - * Enable messaging tests on multi-browsers. - - * optional: add karma-safari-launcher - - * Modify messaging tests to be enabled on Safari. - - * Fix issues - - * Skip maxAction test on browsers that do not support actions - -commit 7f4ae1f7e4a33bc1fde86bb64cbedd8166c0cbf5 -Author: Josh Crowther -Date: Thu May 3 14:48:51 2018 -0600 - - IE11 "Can't redefine non-configurable property 'length'" Error (#772) - - * Fix IE11 property override issue - - * [AUTOMATED]: Prettier Code Styling - -commit 77647467a4075fb082a3eb9601227ef0f520b7f5 -Author: Mertcan Mermerkaya -Date: Thu May 3 10:10:49 2018 +0100 - - Check browser support before instantiating controllers (#700) - - * Check browser support before instantiating controllers - - Prevents issues such as #658 by making sure we don't call any unsupported methods by accident. - - Also adds some tests for index.ts. - - * Skip tests on unsupported browsers - - * Ignore 'unsupported-browser' errors in namespace validation - - * Check browser support within SW - - * Implement isSupported static method - - * [AUTOMATED]: Prettier Code Styling - -commit dfd09bc2c053c43e77205c0cbf965714a3aebc6f -Author: Sebastian Schmidt -Date: Wed May 2 17:35:04 2018 -0700 - - Speed up spec tests with connection backoffs (#766) - -commit f096ba0eff279b2a44fcacf3bcd4b672ef8b0fe9 -Author: Michael Lehenbauer -Date: Wed May 2 14:55:34 2018 -0700 - - b/78539022: Fix test at risk of range violation errors depending on time-of-day. (#765) - - micros could underflow or overflow if the test was run at the wrong time... Replaced with hardcoded timestamps as I don't think making it time-dependent gains us interesting additional coverage. - -commit fa5d157751ae64524691150f6bb512b94d86b6f6 -Author: Greg Soltis -Date: Wed May 2 11:17:03 2018 -0700 - - Port limbo document identification (#744) - - * Port local store test changes - - * [AUTOMATED]: Prettier Code Styling - - * Assert target ids - - * Add first test for event changes - - * Implement update filtering - - * [AUTOMATED]: Prettier Code Styling - - * Now linted - - * Review feedback - - * [AUTOMATED]: Prettier Code Styling - - * Swap to use targetId rather than targetChange - - * [AUTOMATED]: Prettier Code Styling - - * Start work on limbo doc identification - - * Finish porting limbo document tracking - - * [AUTOMATED]: Prettier Code Styling - - * Docs changes - - * [AUTOMATED]: Prettier Code Styling - - * Add comment from iOS version - - * Reflow - - * [AUTOMATED]: Prettier Code Styling - - * Rewrite comment - -commit 4ffc979b8fb17e39af64343200d26991a781fe10 -Author: Michael Lehenbauer -Date: Wed May 2 10:44:08 2018 -0700 - - Disable httpHeadersOverwriteParam for ReactNative to address #703. (#717) - -commit 099688f9458048697fd84b9b3b696a50f2e3744b -Author: Michael Lehenbauer -Date: Wed May 2 08:59:56 2018 -0700 - - Fix up changelog. (#761) - - A bunch of the "Unreleased" changes have actually been released, so I broke them out - into the appropriate versions. Also added a changelog entry for the 0.4.1 patch release - to fix Node.JS support. - -commit de6750bc2f38428a84d17f415927c0c35a1cb9fb -Author: Mertcan Mermerkaya -Date: Wed May 2 16:40:04 2018 +0100 - - Fix Edge not setting default transaction mode (#762) - -commit 533e5762aa8e79c5e223d9b7d41f02e0d8ade7a8 -Author: Mertcan Mermerkaya -Date: Wed May 2 13:36:22 2018 +0100 - - Don't overwrite user defined data (#760) - - This operation was safe when we didn't allow users to define "data" on their notification. Not anymore. - -commit 2de84e586fbc2edce26b6d0bee8fc8541916a53f -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Tue May 1 17:15:42 2018 -0700 - - updated externs and type def (#758) - - * updated externs and type def - - * updated comments - -commit 53d15106091470b80c4a1d5de4dce9801488ee9b -Author: Sebastian Schmidt -Date: Tue May 1 13:45:26 2018 -0700 - - Adding mergeFields support to the Web SDK (#701) - -commit 0997040b6a231e54cbc2d6f8c293a78e83451220 -Author: Josh Crowther -Date: Tue May 1 12:37:13 2018 -0600 - - 5.0.0 Breaking Changes (#741) - - All breaking changes for the 5.0.0 release. - -commit 7edf6499f038a2f6340d937fcf37b6c0dd1c4ad7 -Author: Shyam Chen -Date: Wed May 2 00:37:19 2018 +0800 - - docs(firebase): gcloud -> google-cloud (#718) - -commit 66980bde61c436e826cff124818538ccd052121f -Author: Marco Pöhler -Date: Tue May 1 18:36:10 2018 +0200 - - Added TypeScript definitions for firebase.functions() (#724) - - * added typing for functions - - * [AUTOMATED]: Prettier Code Styling - - * renamed firebase.functions.FirebaseFunctions to firebase.functions.Functions, moved Firestore/FunctionsErrorCodes to ErrorStatus in their namespaces. - - * returned back to FirestoreErrorCode as ErrorStatus in the firestore namespace for now. - -commit 9751e46a6db466fe86f634b5af1c612eec9537e0 -Author: Michael Lehenbauer -Date: Tue May 1 09:01:16 2018 -0700 - - Fix a couple test issues cropping up from mock_persistence work (#753) - - 1. We weren't actually calling db.INTERNAL.delete(), leading to lingering webchannel connections in tests. - 2. Fixed a missed reference to mock_persistence.ts. - -commit 5f3716d872d5247d92e5d124fd25ab860d498c71 -Author: Greg Soltis -Date: Mon Apr 30 16:25:18 2018 -0700 - - Port feedback on event filtering (#749) - - * Move filtering onto mapping subclasses - - * [AUTOMATED]: Prettier Code Styling - - * Fix comment - - * Clean the lint trap - -commit 8251c17aca64932486a58d7a226cd1bdbc903254 -Merge: b28c74f57 055c3b01d -Author: Sebastian Schmidt -Date: Mon Apr 30 14:04:20 2018 -0700 - - Merge pull request #746 from firebase/mrschmidt-mockrename - - Renaming mock_persistence to node_persistence - -commit 055c3b01da549d235ad8a7e4019586daa0cf11ff -Author: Sebastian Schmidt -Date: Mon Apr 30 13:37:49 2018 -0700 - - Renaming mock_persistence to node_persistence - -commit b28c74f579354ba951a21ae0289767d82c7c6237 -Author: Greg Soltis -Date: Mon Apr 30 11:57:32 2018 -0700 - - Port https://github.com/firebase/firebase-ios-sdk/pull/1122 (#727) - - * Port local store test changes - - * [AUTOMATED]: Prettier Code Styling - - * Assert target ids - - * Add first test for event changes - - * Implement update filtering - - * [AUTOMATED]: Prettier Code Styling - - * Now linted - - * Review feedback - - * [AUTOMATED]: Prettier Code Styling - - * Swap to use targetId rather than targetChange - - * [AUTOMATED]: Prettier Code Styling - -commit 8d1f1bf8276d3ff88b21ea08279f5404079a8770 -Author: Mertcan Mermerkaya -Date: Mon Apr 30 17:39:18 2018 +0100 - - Add a warning for notifications with too many actions (#731) - -commit 5adab2cf12a6e3825aa0d6810897bc92004347e4 -Author: Michael Lehenbauer -Date: Fri Apr 27 16:52:08 2018 -0700 - - Add VS Code launcher for persistence tests and minor cleanup. (#735) - - * Add SQLite files to .gitignore so they don't pollute 'git status' or - accidentally get committed. - * Use node-cleanup instead of process.on('exit') since it catches ctrl-C. - Unfortunately it can't catch a pure SIGKILL. - -commit f49eaec07c80b2d8cdced3f71a3c1e11db786f50 -Merge: 4b4eebc26 ce5157aa7 -Author: Sebastian Schmidt -Date: Fri Apr 27 12:15:35 2018 -0700 - - Using an IndexedDB mock for Node testing - - Using an IndexedDB mock for Node testing - -commit ce5157aa7de92ba066464e18029922257399a714 -Author: Sebastian Schmidt -Date: Fri Apr 27 11:49:53 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit c28dc97c2db3089ebad51ebc33827191c881c18a -Author: Sebastian Schmidt -Date: Fri Apr 27 11:49:26 2018 -0700 - - Review comments - -commit 8a6f571daa96a0da7da6a423924cebf60d58b812 -Author: Sebastian Schmidt -Date: Fri Apr 27 10:58:44 2018 -0700 - - Fixing lint - -commit dfdce5bb8c75895d1df0bdbaaf3ce15a1b385d9e -Author: Sebastian Schmidt -Date: Fri Apr 27 10:36:57 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 630e0a64e6ae8b0ec5ffcda5c4b4f934496d535f -Author: Sebastian Schmidt -Date: Fri Apr 27 10:36:29 2018 -0700 - - Review comments - -commit a168703eeb9c527bc57c761375fc7adcafb0577a -Author: Sebastian Schmidt -Date: Thu Apr 26 13:33:42 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 7d87122ac1a47231d07b9f1070d909c8e6d8e9c4 -Author: Sebastian Schmidt -Date: Thu Apr 26 12:36:25 2018 -0700 - - Debugging like it's 1999 - -commit 4b4eebc269b22320e744a391ecd1a69ac38f3827 -Author: Michael Lehenbauer -Date: Wed Apr 25 17:33:00 2018 -0700 - - Use correct assert() method so we get good error messages. (#728) - - BEFORE: - AssertionError: expected null to roughly deeply equal undefined - - AFTER: - AssertionError: expected { Object (elements) } to roughly deeply equal { Object (elements) } - + expected - actual - { - "elements": [ - { - - "internalValue": "foo" - + "internalValue": "tag" - "typeOrder": 4 - } - ] - } - -commit b60ffffdbd020bf47a0be22faac4a7731ce37c73 -Author: Greg Soltis -Date: Wed Apr 25 13:45:55 2018 -0700 - - Port of https://github.com/firebase/firebase-ios-sdk/pull/1114 (#722) - - * Port local store test changes - - * [AUTOMATED]: Prettier Code Styling - - * Assert target ids - -commit 0e141c07bf38b20a1a67abf507ca35772ff66890 -Author: Michael Lehenbauer -Date: Wed Apr 25 11:54:06 2018 -0700 - - Ban xit and xdescribe (and suppress existing violations). (#725) - -commit 2471497b87c8fd65af37443498a422f2274b55fe -Author: Matt Gaunt -Date: Wed Apr 25 04:48:31 2018 -0700 - - Update base64-to-array-buffer.ts (#721) - - Use global atob instead of window so it works in SW. - -commit 9d41b963d9e4a6cf54be20adb92dc8a4c8487c9c -Author: Mertcan Mermerkaya -Date: Wed Apr 25 12:48:01 2018 +0100 - - Do nothing for action clicks (#702) - - * Do nothing for action clicks - - * [AUTOMATED]: Prettier Code Styling - - * Address comment - -commit bfa8a5e453fd7925d5ffd1bf739731a8109b454f -Author: Michael Lehenbauer -Date: Fri Apr 20 17:38:25 2018 -0700 - - Update Firestore protos (#713) - -commit 878d392f212fef10b04c00d0f697f625c8271712 (tag: firebase@4.13.1, tag: @firebase/firestore@0.4.1) -Author: Josh Crowther -Date: Fri Apr 20 12:40:03 2018 -0700 - - Publish firebase@4.13.1 - -commit fd996899096a057c7765281db98a5bc48410ac56 -Author: Josh Crowther -Date: Fri Apr 20 11:59:21 2018 -0700 - - Firestore Proto Loading Fix (#712) - - * Fix firestore proto issue - - * [AUTOMATED]: Prettier Code Styling - - * Re-enable browser builds for firestore - - * Fix typings reference - - * Fixing linter error - -commit 7c1aa4470c0f5474b11fe57ada4edff65ed90adc (tag: firebase@4.13.0, tag: @firebase/webchannel-wrapper@0.2.8, tag: @firebase/util@0.1.11, tag: @firebase/storage@0.1.9, tag: @firebase/storage-types@0.1.3, tag: @firebase/polyfill@0.3.1, tag: @firebase/messaging@0.2.4, tag: @firebase/messaging-types@0.1.3, tag: @firebase/logger@0.1.1, tag: @firebase/functions@0.1.1, tag: @firebase/functions-types@0.1.1, tag: @firebase/firestore@0.4.0, tag: @firebase/firestore-types@0.3.0, tag: @firebase/database@0.2.2, tag: @firebase/database-types@0.2.1, tag: @firebase/auth@0.4.2, tag: @firebase/auth-types@0.2.1, tag: @firebase/app@0.2.0, tag: @firebase/app-types@0.2.0) -Author: Josh Crowther -Date: Thu Apr 19 14:46:45 2018 -0700 - - Publish firebase@4.13.0 - -commit 6991857c6742d99ca0a64f60a306380de85ea19b -Author: Mertcan Mermerkaya -Date: Thu Apr 19 22:32:35 2018 +0100 - - Update grpc to version 1.10.1 (#694) - - * Update grpc in firestore - - Fixes #515 - - * Fix tests - - Not sure how, but updating grpc made the test start using long@4.0.0, which has some extra properties (https://github.com/dcodeIO/long.js/commit/bc96a70758cf1e431af6956e56d70dd181943162) that broke the deep equals check. - - In any case, all dependencies that are referenced should be added to package.json explicitly. I added the relevant tslint rules and also added other missing deps. - - * Revert TSLint changes - -commit fcb277a832058407a33456b2887a6b9990708b28 -Author: Mertcan Mermerkaya -Date: Wed Apr 18 11:25:36 2018 +0100 - - Lint rules, refactoring and better types (#684) - - * Enable TSLint rule "no-any" in src/ - - * Enable noImplicitAny - - * Use the same ErrorFactory object in all of messaging - - * Enable TSLint variable-name rule - - * Move all testing utils to testing-utils/ - - * Async/await fixes - - * Enable TSLint no-redundant-jsdoc rule - - * Use any instead of ts-ignore - - * Remove any types from messaging-types - - * Add better types for Message Payload - - * Remove another any - -commit ffcaf85117ca0ac4a082cbcb19dbf91730c3cc12 -Author: Josh Crowther -Date: Tue Apr 17 14:00:00 2018 -0700 - - Add pkg.files entry to each package.json (#695) - - * Add pkg.files entry to each package.json - - * Removing trailing slash - -commit 456059954bac0f3d1a8fa0546bc302c0e573af77 -Author: Josh Crowther -Date: Fri Apr 13 16:46:40 2018 -0700 - - Firestore Node.js External Fix (#686) - - * Reference the external Node 'util' lib - - * [AUTOMATED]: Prettier Code Styling - -commit 92aea91ddabb2af6b8f2095cb965e5fad30d511c -Author: Yifan Yang -Date: Fri Apr 13 16:26:54 2018 -0700 - - Skip deployment if it is not master build in main repo. (#685) - -commit eaec0b8060db6dbaef8e0fd96293af4049897d50 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Fri Apr 13 13:57:43 2018 -0700 - - expose custom claims (#681) - - * expose custom claims - - * idtoken type declaration - - * idtoken type declaration - - * [AUTOMATED]: Prettier Code Styling - - * style issue fix - - * [AUTOMATED]: Prettier Code Styling - - * add namesapce - - * [AUTOMATED]: Prettier Code Styling - -commit 05e05b81dc84cf89a62af6da3b19ca2480c0006a -Author: Yifan Yang -Date: Thu Apr 12 19:24:39 2018 -0700 - - Fix deployment procedures. (#682) - - Install stage was mistakenly set to be skipped by PR #674. - -commit c0643926c1cfea44df248e0c909f2f18422ae268 -Author: Josh Crowther -Date: Thu Apr 12 15:35:54 2018 -0700 - - Saucelabs Badges/Attribution (#680) - - * Add saucelabs badge and associated shoutout - - * Update Link - -commit cadf5883b38e56ef44fdbb334fad6d56160881e3 -Author: Yifan Yang -Date: Thu Apr 12 15:35:42 2018 -0700 - - Expand browsers support (#674) - - * Add karma config for running all tests with SauceLabs. - - IE11 is not supported due to the compatibility issue. It will be - enabled once the issue is resolved. - - Currently these tests are excluded for saucelabs testing: - - 'packages/database/*', - 'packages/firestore/*', - 'packages/messaging/*', - 'integration/firestore/*', - 'integration/messaging/*'. - - Database and firestore tests appear to be flaky on saucelabs and - tend to take much longer time than running in local browsers. Message - tests use service worker functionality which is not supported by Safari - and Edge currently. They will be included later on when these problems - are resolved. - - * Group Travis jobs for different test commands into one test stage. - - Deployment starts only after all jobs in test stage have succeeded. - - * Add karma Firefox launcher to each applicable package. - - In case of a pull request build on Travis where saucelabs testing - is not available, tests will run locally in Chrome and Firefox on - Travis VMs instead. - - https://docs.travis-ci.com/user/pull-requests/#Pull-Requests-and-Security-Restrictions - - * fix nit - -commit 231110c34d590f41269fa6c8068680904648733f -Author: Michael Lehenbauer -Date: Thu Apr 12 15:17:25 2018 -0700 - - Minor additional UserDataConverter cleanup. (#677) - - * Rearrange methods based on usage order. - * Minor cleanup tweaks. - -commit 8b29658a074bd48225efe81731e151251b0ed659 -Author: rsgowman -Date: Thu Apr 12 17:46:21 2018 -0400 - - GetOptions for controlling offline behaviour (#463) - - Add option to allow the user to control where DocumentReference.get() - and Query.get() fetches from. By default, it fetches from the server (if - possible) and falls back to the local cache. It's now possible to - alternatively fetch from the local cache only, or to fetch from the - server only (though in the server only case, latency compensation is - still enabled). - -commit 27a77fda0bf22c851208476606819c4789276642 -Author: Mertcan Mermerkaya -Date: Thu Apr 12 22:29:55 2018 +0100 - - Add types for Service Worker Controller (#673) - -commit aaee15d5c9d47ee8dd25504fc5e0aa8cea670f03 -Author: Mertcan Mermerkaya -Date: Thu Apr 12 21:46:35 2018 +0100 - - Upgrade dependencies (#676) - - * Run yarn upgrade - - * [AUTOMATED]: Prettier Code Styling - - * Remove unused dependencies, add mocha in messaging/ - - * Update @types/mocha - - * Remove version ranges from package.json files - - * Update most dependencies to their latest versions - - * Save exact dependency versions by default - - * Revert firestore grpc update - -commit 00659cadd3b0a118c53e541d4a69e897a7fce3e1 -Merge: 078f83a09 e1d458173 -Author: Sebastian Schmidt -Date: Wed Apr 11 11:37:47 2018 -0700 - - Enabling TSLint for our test cases - - Enabling TSLint for our test cases - -commit e1d4581733a13f3bd386e834fe91c636456e1a2c -Author: Sebastian Schmidt -Date: Wed Apr 11 11:12:36 2018 -0700 - - Comment - -commit 078f83a09631b3fe9d882db1eed4b80e7da41251 -Author: Mertcan Mermerkaya -Date: Wed Apr 11 19:04:26 2018 +0100 - - Enable noUnusedLocals in TS compiler options (#672) - - * Enable noUnusedLocals in TS compiler options - - * [AUTOMATED]: Prettier Code Styling - -commit 3327845b0f68c2c2a5aff69ab05efe8861e08a73 -Author: Mertcan Mermerkaya -Date: Wed Apr 11 17:39:37 2018 +0100 - - Use core-js for polyfills (#671) - - * Use core-js for polyfills - - * Remove DOM polyfill, it's not used - - * Only polyfill parts of ES2015 we currently use - -commit 7463443a867d3303b723a404d33a3fef9a7b29a2 -Author: Mertcan Mermerkaya -Date: Wed Apr 11 15:03:11 2018 +0100 - - Async/await refactor and test fixes (#660) - - * Add async/await to SWController and tests - - * Combine IID Model tests and remove duplicated code - - * Delete empty test - - * Replace Promise calls with async - - * [AUTOMATED]: Prettier Code Styling - -commit f1f5fe21b132a86486d8866da074d80a663087b8 -Author: Sebastian Schmidt -Date: Tue Apr 10 17:30:19 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit c595fe150026c254d0358862c8b34d8d81f4842f -Author: Sebastian Schmidt -Date: Tue Apr 10 17:29:52 2018 -0700 - - Addressing lint errors after master merge - -commit 682c7fc49db304369b03b1f17f5eaeac496487a7 -Author: Sebastian Schmidt -Date: Tue Apr 10 17:06:58 2018 -0700 - - Update package.json - -commit 544fefea3bc1e3705c1b02a32c4e5bcf60105a24 -Merge: 1fa9aa29b d0a614c86 -Author: Sebastian Schmidt -Date: Tue Apr 10 17:06:33 2018 -0700 - - Merge branch 'master' into mrschmidt-enforcinglint - -commit d0a614c86822facc9e9efef1974c2a4877ad6296 -Author: Josh Crowther -Date: Tue Apr 10 17:05:58 2018 -0700 - - Porting Polyfills Fix (missing in master) (#668) - - * Fix polyfills for fetch - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Removing legacy file - -commit ca57c4d3ea188beee2020b69c5ba64acdef4a676 -Author: Mertcan Mermerkaya -Date: Wed Apr 11 00:54:44 2018 +0100 - - Remove redundant lib declarations (#663) - - es2015 includes es5 and es2015.promise - - https://github.com/Microsoft/TypeScript/blob/master/lib/lib.es2015.d.ts - -commit 3fe3d2c4fb3fd1740ec3b7dc61e0c0732bee50a6 -Merge: b87933477 11a1d7b9c -Author: Sebastian Schmidt -Date: Tue Apr 10 16:52:29 2018 -0700 - - Merge pull request #665 from firebase/mrschmidt-noconsole - - TSLINT: Adding No-Console rule - -commit b8793347791053881d2c1cbeb35d99d84356643d -Merge: 14c2c4a33 0bca4827a -Author: Sebastian Schmidt -Date: Tue Apr 10 16:52:19 2018 -0700 - - Merge pull request #664 from firebase/mrschmidt-returntypes - - Enable TSLint Return Type Check - -commit 1fa9aa29b353c5ea8ac40cdd5ccdac9382ac3715 -Author: Sebastian Schmidt -Date: Tue Apr 10 16:52:07 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit e45b40f76e23d4cfcc1e45c4d1d17919aadb6945 -Author: Sebastian Schmidt -Date: Tue Apr 10 16:51:37 2018 -0700 - - Actually using TSLint for the test files - -commit 14c2c4a33b98691e6eef7c511a08b239471569b9 -Author: Josh Crowther -Date: Tue Apr 10 16:05:28 2018 -0700 - - Build Refactoring (#653) - - * Removing gulp dependency from the default build path - - * Updating .gitignore - - * @firebase/util Build Refactor - - * @firebase/testing Build Refactor - - * @firebase/template Build Refactor - - * @firebase/storage Build Refactor - - * @firebase/polyfill Build Refactor - - * @firebase/messaging Build Refactor - - * @firebase/logger Build Refactor - - * @firebase/functions Build Refactor - - * @firebase/database Build Refactor - - * @firebase/app Build Refactor - - * @firebase/firestore Build Refactor - - * @firebase/app version replace - - * Fix script rename in @firebase/util - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Remove unnecessary build artifacts - - * Removing unused test files from types-* packages - - * [AUTOMATED]: Prettier Code Styling - - * firebase Package Build Refactor - - * [AUTOMATED]: Prettier Code Styling - - * Refactor peerDependencies to properly reference the entire major 0 - - * Change NPM Publish Concurrency - - * Add sourcemaps - - * Refactor messaging named export - - * Add try-catch block for firebase-app error - - * Add package-lock.json to the .gitignore - - * Adding a package.json to remove duplicate .d.ts - -commit aeed607cd00f5887a1bb087a4d62d29f522240e5 -Author: Spencer Phippen -Date: Tue Apr 10 15:53:52 2018 -0700 - - Deprecate downloadURL property in Storage metadata types. (#651) - - * Deprecate downloadURL property in Storage metadata types. - - * Mark Storage downloadURL deprecation in additional TypeScript definition files. - -commit 11a1d7b9c1371654e643f9377c9dc7ee77bdd542 -Author: Sebastian Schmidt -Date: Tue Apr 10 15:37:23 2018 -0700 - - Adding No-Console rule - -commit eeab13f72d75fe1b89aa5667413ba6c49f20b66b -Author: Mertcan Mermerkaya -Date: Tue Apr 10 22:51:30 2018 +0100 - - Replace "any" types (#661) - -commit 0bca4827a822426a20eb4832ee5a49fe174d55bf -Author: Sebastian Schmidt -Date: Tue Apr 10 14:48:21 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit c0fc185b1b3dfd0e21d5de650dd8d957be4a66bb -Author: Sebastian Schmidt -Date: Tue Apr 10 14:47:52 2018 -0700 - - Adding return types everywhere - -commit 452a4be0de4a8f9f5c9163ffb0600d2c741787b7 -Author: Mertcan Mermerkaya -Date: Tue Apr 10 19:25:19 2018 +0100 - - Fix TokenDetails in messaging/ (#649) - - Makes sure that we use only one type of TokenDetails object, both in the code and in the database. - - Updates DB and adds a function to fix the old values. - - Fixes and adds tests. - -commit 49072850edad4eef07eb629b164062f75c01659e -Author: bojeil-google -Date: Tue Apr 10 08:51:55 2018 -0700 - - Update Auth codeowners (#657) - - Remove @tmsch from auth code owners - -commit fe0d69455a07c8b1c94464475b393e0c6d991760 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Apr 9 14:51:01 2018 -0700 - - Indexeddb fix (#655) - - * indexedDB fix for issues in Firefox multi-tab and private mode browsing. - - * fix for network error when navigator.onLine is incorrectly false. - -commit 1e3254d51239362613de7a26ce4d2dc00f41d57b -Merge: f95425ff4 7e56c8227 -Author: Sebastian Schmidt -Date: Mon Apr 9 12:20:14 2018 -0700 - - Merge pull request #650 from firebase/mrschmidt-promisefix - - Waiting for writes in acknowledgeBatch - -commit f95425ff4ae175282e4eb56a049c362332eb9b75 -Merge: 547538332 b466ab09c -Author: Sebastian Schmidt -Date: Mon Apr 9 11:38:52 2018 -0700 - - Merge pull request #652 from firebase/revert-613-mrschmidt-remvoepath - - Revert "Removing .path from Database Typings" - -commit 547538332facf4740efc255dfe4df09c6473e0dc -Author: pinarx -Date: Mon Apr 9 19:32:40 2018 +0100 - - Add @mmermerkaya to CODEOWNERS - -commit b466ab09cd382dce9f1415f88b2e5131b7cdb2b8 -Author: Sebastian Schmidt -Date: Mon Apr 9 11:07:20 2018 -0700 - - Revert "Removing .path from Database Typings" - -commit 7e56c822792a2d9095efd2224265334bb81a32cf -Author: Sebastian Schmidt -Date: Mon Apr 9 10:08:55 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 5d9e543c407a53d06b2b52da1ccfbd3c9685efad -Author: Sebastian Schmidt -Date: Mon Apr 9 10:08:25 2018 -0700 - - Waiting for writes in acknowledgeBatch - -commit fce6f7a73d3e9fe1ebb12d9f7ca1a5df42d60b26 -Merge: 6754b7fb8 5ad3285e9 -Author: Sebastian Schmidt -Date: Sun Apr 8 09:47:18 2018 -0700 - - Merge pull request #613 from firebase/mrschmidt-remvoepath - - Removing .path from Database Typings - -commit 6754b7fb8e6cf41bd420c6c93a6c2248c0a888de -Author: Mertcan Mermerkaya -Date: Sat Apr 7 11:40:34 2018 +0100 - - Re-enable --strict flag in messaging/ (#643) - - * Reenable --strict in messaging/ - - * Revert "Remove some assertions that are no longer needed as --strict is disabled" - - This reverts commit 6ea7e54640ea3c19942a1881a3f738d89b51dafe. - - * Fix strict issues in messaging/ - - * Fix type errors in app/ - - * Fix errors - - * Fix errors - -commit 5e71095ce13683ab78ae34153223f327a32ca88f -Author: Spencer Phippen -Date: Fri Apr 6 12:12:48 2018 -0700 - - Specify types of observer and next function for UploadTask.on (#642) - -commit 1f985cfe20469ad7423890fd3980f9e3bc86b2d1 -Author: Mertcan Mermerkaya -Date: Fri Apr 6 19:34:38 2018 +0100 - - Refactor IndexedDb operations (#645) - - * Refactor IndexedDb operations - - Simplifies a lot of IndexedDb operations and removes most of the duplicated code. Also refactors tests. - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Fix failing tests - - * Address comments - - * Address comments - -commit 9eace31bef7235bb0a5a796aa23a843616aed19d -Author: Mertcan Mermerkaya -Date: Fri Apr 6 17:22:30 2018 +0100 - - Add typedef TSLint rule (#644) - - * Add typedef TSLint rule - - Requires type definitions for function parameters and signatures, and class/interface member variables. - - * Fix errors - -commit b45baec26372fbefab84502f9400023a43a15a16 -Author: Mertcan Mermerkaya -Date: Fri Apr 6 13:46:01 2018 +0100 - - Add TSLint and (mostly uncontroversial) rules (#641) - - * Add TSLint and (mostly uncontroversial) rules - - Fixed lint errors. Added running TSLint to the test command in package.json. - - * Remove some assertions that are no longer needed as --strict is disabled - - * [AUTOMATED]: Prettier Code Styling - - * Add a few more rules from Google TS style that are already passing - - * Fix tests - -commit 12e839d7e5fcb2b3c147a8eccda911259252b74b -Author: Josh Crowther -Date: Thu Apr 5 14:21:32 2018 -0700 - - Misc Fixes (#640) - - * Remove resetWorkingTree call - - * Remoing package-lock.json - - * Refactor @firebase/template versions - - * Pin gulp version for auth - - * Update all packages to gulp@^4.0.0 - - * Revert "Remove resetWorkingTree call" - - This reverts commit 064dd2bc5cd46d77a256c60c86b617683b7c0fb1. - - * Fix issue with messaging compilation throwing on FirebaseApp - -commit 7857c212f944a2a9eb421fd4cb7370181bc034b5 -Author: Mertcan Mermerkaya -Date: Thu Apr 5 22:14:35 2018 +0100 - - Add types (#637) - - * Add types to @firebase/messaging - - This makes src/ compatible with --noImplicitAny. test/ still needs work. - - * [AUTOMATED]: License Headers - - * Remove casts - -commit a1020bfdce850b8e2e75186ed4bdd1a9f1d28dbd -Author: Josh Crowther -Date: Thu Apr 5 10:55:21 2018 -0700 - - Fixing type could be null errors (#639) - -commit a4778d61118eaf1bc4b3e3240bfe1a44f6dd705a -Author: Josh Crowther -Date: Wed Apr 4 15:16:41 2018 -0700 - - automaticDataCollectionEnabled Flag (#625) - - * Adding new FirebaseAppConfig type - - * Adding automaticDataCollectionEnabled flag, and config object support to initializeApp - - * [AUTOMATED]: Prettier Code Styling - -commit 315a7581c8d94718e67bcf682466a82ca0577852 -Author: Matt Gaunt -Date: Wed Apr 4 11:28:51 2018 -0700 - - IID Model types (#626) - - * Adding idd-types - - * Adding iid-types - - * Adding iid-types - - * [AUTOMATED]: Prettier Code Styling - - * Correcting comment - - * Fixing merge mismatch - -commit 8c54f6a21d16d683c3222ae1157b151f72bb85ad -Author: Mertcan Mermerkaya -Date: Wed Apr 4 19:10:22 2018 +0100 - - Add --strict flag to TSConfig and fix errors (#629) - - * Add --strict flag to TSConfig and fix resulting errors - - This doesn't really fix anything, but explicit "any"s are still better than implicit "any"s. - - * Remove unnecessary 'use strict's - - * Add a type-check command and run it as part of tests - - * [AUTOMATED]: Prettier Code Styling - -commit 073cc191a1457cadc70bf9604078367cd034ccd0 -Author: Matt Gaunt -Date: Wed Apr 4 10:27:58 2018 -0700 - - Fixes getToken in SW (#623) - -commit 2a0a33f039d9309f607af118ba2b68c021037a32 -Author: Mertcan Mermerkaya -Date: Wed Apr 4 11:07:03 2018 +0100 - - Refactor default exports into named exports (#622) - - Following Google TS best practices. - -commit 4f280965a2f285e4eecb88ade276747031bf9769 -Author: pinarx -Date: Tue Apr 3 11:17:47 2018 +0100 - - Fix a bug that was introduced in PR: #591 (#614) - - * Fix a bug that was introduced in PR: #591 - - * [AUTOMATED]: Prettier Code Styling - - * rewording and reordering functions to adhere to comments. - -commit 790c15827351af85608580864d935972d7cedd69 -Merge: 92f380950 5959b54e1 -Author: Sebastian Schmidt -Date: Mon Apr 2 16:55:11 2018 -0700 - - Adding .skip and .only for validation tests - - Adding .skip and .only for validation tests - -commit 5959b54e15b60cb06aa2d2a57c5ab18572309f32 -Author: Sebastian Schmidt -Date: Mon Apr 2 16:27:27 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 957056e3d305f1cb70b27844e6a29b2e79d126ad -Author: Sebastian Schmidt -Date: Mon Apr 2 16:26:49 2018 -0700 - - Removing usage of "any" - -commit 7072718d8872191f3ab9f6353be1be9daa5d5a20 -Author: Sebastian Schmidt -Date: Mon Apr 2 15:25:57 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 756288bce1daa7073e7872840d793d0285a1b6c8 -Author: Sebastian Schmidt -Date: Mon Apr 2 15:25:26 2018 -0700 - - Adding .skip and .only for validation tests - -commit 5ad3285e9e44c284ee427993e9f3ad682fe80f69 -Author: Sebastian Schmidt -Date: Mon Apr 2 11:17:35 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 5512c8cd2cb1f802426e8940291709f7a8f4f912 -Author: Sebastian Schmidt -Date: Mon Apr 2 11:17:09 2018 -0700 - - Removing package-lock - -commit 6235eca547cf201f40486e4450f8674214c54c7a -Author: Sebastian Schmidt -Date: Mon Apr 2 11:14:31 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 1b930610c7496f405974914bc0e8c666d6308555 -Author: Sebastian Schmidt -Date: Mon Apr 2 11:14:00 2018 -0700 - - Removing .path from Database Typings - -commit 92f380950c6ce3991ea577575c60ce81e327dc27 -Author: Yukimasa Funaoka <37928585+mochiya98@users.noreply.github.com> -Date: Tue Apr 3 01:14:20 2018 +0900 - - Fix implicit global variable (#610) - -commit 1608edb5f1b8d3dae342727b4914e3edc8b5dcd8 -Author: Konstantin Varlamov -Date: Fri Mar 30 14:54:12 2018 -0400 - - Make Timestamp a part of the public Firestore API. (#544) - - * Make Timestamp a part of the public Firestore API. - - * Accept Timestamps as a parameter where Dates are currently accepted. - - * Add an option to settings to control how timestamp fields are returned. - - This is a transitional state; eventually, Timestamp will live in a new - separate package (common-types/). - - The behavior to return timestamp fields as dates is now legacy. It's on - by default to allow for a transitional period. The new behavior to - return Timestamp objects instead is opt-in, but will become default in - the future. The advantage Timestamps have is higher precision than - native browser Date. If the new behavior is not enabled, a warning is - logged on startup urging users to upgrade. - -commit b5aa5b8335cd13ce8c30c188843723f3a766ac53 -Author: Sebastian Schmidt -Date: Thu Mar 29 19:13:32 2018 -0700 - - Fixing Storage Types (#588) - - * Fixing Storage Types - - * [AUTOMATED]: Prettier Code Styling - -commit 541fbbefd13d0d7a7a2058c983bbcbb8e894102a -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Thu Mar 29 17:23:49 2018 -0700 - - fixed checkActionCode for email signin (#606) - -commit 5cfbafd60ec88e64e2119c16855f09e822a99d8b (tag: firebase@4.12.1, tag: @firebase/webchannel-wrapper@0.2.7, tag: @firebase/messaging@0.2.3, tag: @firebase/firestore@0.3.7, tag: @firebase/auth@0.4.1) -Author: Josh Crowther -Date: Thu Mar 29 15:05:06 2018 -0700 - - Publish firebase@4.12.1 - -commit b14678002bf6e8cc9ebd7561efbafe29315ceb8e -Author: Michael Lehenbauer -Date: Thu Mar 29 09:36:28 2018 -0700 - - Small cleanup to FieldValue sentinel code to make it easier to add more sentinels in the future. (#603) - -commit babd759e87699857c31c4798b7ffe92bdee894fb -Author: Michael Lehenbauer -Date: Wed Mar 28 16:31:58 2018 -0700 - - Update packages/firebase/app/index.d.ts with all the API changes we've made in the last couple months. (#600) - -commit ac4dac3a037683089b9f16e5a0881edd45426738 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Mar 28 15:48:29 2018 -0700 - - Paring FDL link in getActionCodeFromSignInEmailLink to support deep link (#604) - -commit 3259004ee0a3b8a448a0d045bf599bcee5f8586a -Author: Josh Crowther -Date: Wed Mar 28 13:28:15 2018 -0700 - - Remove unneeded declare module statement (#599) - -commit dd86fc7ab1e684ad8a734189b65c495f0c6057db -Author: Matt Gaunt -Date: Wed Mar 28 11:41:58 2018 -0700 - - Tweaks message for useServiceWorker error (#598) - -commit a538b83846fc34560fccd02644601a4bdaacc0dc -Author: pinarx -Date: Wed Mar 28 16:58:56 2018 +0100 - - PushSubscription validation (#591) - - * Check pushSubscription details when validating a token: this should enable us to deal with permission changes where new push subscriptions are generated but the token is not validated - -commit faa54d8cb07efcfbdc0c9e7fc1455830f07a49c5 -Author: Josh Crowther -Date: Mon Mar 26 12:55:37 2018 -0700 - - Updates the @firebase/webchannel-wrapper Version (#596) - - * Updating closure-builder version - - * Update yarn.lock - -commit d90beabb584d34236980462e783b6f69e98a5c11 -Author: Michael Lehenbauer -Date: Fri Mar 23 17:56:25 2018 -0700 - - Fix issue that could cause offline get()s to wait up to 10 seconds. (#592) - - OnlineStateTracker was reverting to OnlineState Unknown on every stream attempt - rather than remaining Offline once the offline heuristic had been met (i.e. 2 - stream failures or 10 seconds). This means that get() requests made while - offline could be delayed up to 10 seconds each time (or until the next backoff - attempt failed). - -commit bb93e470f8cb1cb5d7bad30b91d8bec6ad27b77d -Author: Michael Lehenbauer -Date: Fri Mar 23 16:33:08 2018 -0700 - - [AUTOMATED]: Prettier Code Styling - -commit 8a10e7cb6371ca5f4287e9b50981ca9dd8732032 -Author: pinarx -Date: Thu Mar 22 16:19:28 2018 -0700 - - Unify pushSubscription/publicVapidKey retrievals (#587) - - Use await/async and unify pushSubscription/publicVapidKey retrievals - -commit ab0faeb9e066cd7c5ef1b40c8779eaea40080ac5 -Author: pinarx -Date: Thu Mar 22 10:33:21 2018 -0700 - - Move getPushSubscription method to ControllerInterface. (#579) - - * rename getPushSubscription - - * [AUTOMATED]: Prettier Code Styling - - * replace renamed variable - - * all - - * [AUTOMATED]: Prettier Code Styling - -commit 84896ec489ef162555c5b48881822982281d8921 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Mar 21 11:15:47 2018 -0700 - - added new method declarations (#583) - -commit 563e048f17c756376a76a2f8b11ae7f9450eb9ff -Author: bojeil-google -Date: Tue Mar 20 13:41:04 2018 -0700 - - Fetch API missing support handling (#578) - - * Fixes vague errors thrown in older browsers such as IE10/11 and iOS mobile Safari related to worker support. - Most of these are attributed to lack of support for fetch related APIs even when web workers are still supported. - In that case we throw an operation not supported in environment error on operations that require http requests. - - * Added yarn.lock auto changes. - -commit ef14d4f81beb4cfb21f6f5a2fa61a197ff9eea4e (tag: firebase@4.12.0, tag: @firebase/polyfill@0.3.0, tag: @firebase/functions@0.1.0, tag: @firebase/functions-types@0.1.0, tag: @firebase/firestore@0.3.6, tag: @firebase/database@0.2.1, tag: @firebase/auth@0.4.0, tag: @firebase/auth-types@0.2.0) -Author: Josh Crowther -Date: Tue Mar 20 11:12:10 2018 -0700 - - Publish firebase@4.12.0 - -commit d59b72493fc89ff89c8a17bf142f58517de4c566 -Author: Bryan Klimt -Date: Tue Mar 20 10:42:38 2018 -0700 - - @firebase/functions release - -commit 908227cac856652d5f5408df1da365f069463223 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Mar 19 12:35:48 2018 -0700 - - added typedef for passwordless and new sign in methods which returns UserCredential (#575) - -commit c25e7a186b38190f626a97f892ddfc6c5c53acee -Author: bojeil-google -Date: Mon Mar 19 10:46:19 2018 -0700 - - Adds tests in demo app for service worker compatibility with Firebase Auth (#571) - - * Adds tests in demo app for service worker compatibility with Firebase Auth. - - This modifies the service worker to append the ID token in every fetch - request via a custom HTTP header. - - Using Functions with Hosting, an HTTP endpoint was setup which will - parse the ID token from the header and verify it using Admin SDK and - then return a status response. - - A button is added to the demo app to test this. When a user is signed - in, the user's uid is returned, otherwise an error is shown. - - * [AUTOMATED]: License Headers - - * Fixes comment. - - * Renames /echoIdToken endpoint to /checkIfAuthenticated. - -commit 9d00c6f0c57f8ddd73a740766918eece7a53c6aa -Author: gonzaloriestra -Date: Mon Mar 19 16:53:05 2018 +0100 - - add missing function in auth interface (#574) - -commit d3ec2e02b0f4095bd2a13ca7ef67e3c67461db44 -Author: bojeil-google -Date: Fri Mar 16 11:04:02 2018 -0700 - - Adds Auth tests to demo app for web worker environment functionality. (#567) - - This helps test that Auth API works as expected in that environment. - -commit df183a5ce45c435e9d36dbb1125cd244a2dc044c -Author: Michael Lehenbauer -Date: Thu Mar 15 12:04:02 2018 -0700 - - Remove assert I accidentally left in (I meant to remove it when I re-added the defensive check above). (#565) - -commit 1b3ba41f7c5207907a32601e552168e29281948e -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Thu Mar 15 10:18:10 2018 -0700 - - Refactor Auth storage test (#530) - - * refactored storage test - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: Prettier Code Styling - - * migrate storage from localstorage to indexedDb - - * added worker compatibility, exposed finally, updated error message - - * appended photo size for google hosted image - -commit 2cb9ef50c0894fa0d154e5cd1ae1784105c1744b -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Thu Mar 15 10:17:49 2018 -0700 - - Passwordless (#529) - - * passwordless signin - - added new files for passwordless signin - - added licence - - exported function - - * updated externs and types - - * [AUTOMATED]: Prettier Code Styling - - * added passwordless sign in in demo and fixed type - - * remove email in localstorage after used for passwordless sign in - -commit b949d81363e664f7be651c6a4a94265470e042ce -Author: Michael Lehenbauer -Date: Wed Mar 14 16:22:47 2018 -0700 - - Fix for b/74749605: Cancel pending backoff operations when closing streams. (#564) - -commit bf7a221e905a2d50ef0773d7528b25aaedf8ff6a -Author: Josh Crowther -Date: Wed Mar 14 14:23:45 2018 -0700 - - Set log level to VERBOSE if enableLogging(true) is passed (#561) - -commit 0c5cbe038968fcedf55d123f47bf3db4a0b6dfde -Author: Abe Haskins -Date: Wed Mar 14 14:09:11 2018 -0700 - - Fixes #562, Adds usePublicVapidKey to firebase/index.d.ts (#563) - -commit 786082d542a5d80611c110e9c9ff3592d129cd3b -Author: Michael Lehenbauer -Date: Mon Mar 12 11:30:13 2018 -0700 - - Fix MutationQueue issue resulting in re-sending acknowledged writes. (#559) - - getNextMutationBatchAfterBatchId() was not respecting highestAcknowledgedBatchId and therefore we were resending writes if they had been acknowledged but not removed (aka the held write acks case). This showed up when a user disabled / enabled the network as reported here and I've included a spec test to emulate that case: firebase/firebase-ios-sdk#772 - -commit 69c9a971fa4e48bf965369744559e4c9a2fab12b -Author: Josh Crowther -Date: Thu Mar 8 15:00:44 2018 -0800 - - Fix issues that arose in latest release flow - -commit 6aed77a501ae66f42ea61323cc67b1f1c8ff6954 -Author: Josh Crowther -Date: Thu Mar 8 14:46:53 2018 -0800 - - Update yarn.lock - -commit 98ab8e5d76fd1b37205bca175fba79bbbb4c34e1 (tag: firebase@4.11.0, tag: @firebase/polyfill@0.2.0, tag: @firebase/messaging@0.2.2, tag: @firebase/logger@0.1.0, tag: @firebase/firestore@0.3.5, tag: @firebase/database@0.2.0) -Author: Josh Crowther -Date: Thu Mar 8 14:41:44 2018 -0800 - - Publish firebase@4.11.0 - -commit 7681d0355f632f420e833e40dc2c627d07dd845a -Author: Michael Lehenbauer -Date: Wed Mar 7 14:28:12 2018 -0800 - - Remove "google-cloud-resource-prefix" header in favor of "database" url parameter in WebChannel requests. (#554) - - I verified that the client still works against prod and that the ?database=... paremeter was included in every WebChannel network request. - - NOTE that prior to this change we were including the "google-cloud-resource-prefix" header on non-streaming RPC requests, but with this change we will not include the header or use the "database" url parameter. - -commit 121c1674a998e03e44b8509da27fd1710d5898a1 -Author: Josh Crowther -Date: Tue Mar 6 14:56:46 2018 -0800 - - Fixes an issue with staged release version (#552) - - * Refactor so staging releases use a staging version - - * [AUTOMATED]: Prettier Code Styling - -commit 03d224f08b7267a4ceb57ec12ed62fb215a62d83 -Author: Josh Crowther -Date: Tue Mar 6 12:19:32 2018 -0800 - - Release Fixes (#551) - - * Fix some issues w/ the release process. - - This commit addresses two issues: - - - The banner text not correctly displaying on macOS due to the changed emoji spacing - - The release CLI throwing errors when trying to stage an unpublished package - - * [AUTOMATED]: Prettier Code Styling - - * Refactor to handle production initial releases - - * [AUTOMATED]: Prettier Code Styling - -commit 2b20a14bdce1004a7f6f0fd0dac134bb13ef7837 -Author: Zev Goldstein -Date: Tue Mar 6 11:59:02 2018 -0500 - - removes unecessary lcov-result-merger dependency (#547) - -commit a0583f76d975c8183c0a1f46468688d8ffc1f060 -Author: Josh Crowther -Date: Mon Mar 5 10:45:15 2018 -0800 - - Shim refactor (#550) - - * Refactor to organize shims by Object - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - -commit 0fa319e5e019dd0d40ab441d2ff9f8f6d4724e43 -Author: Michael Lehenbauer -Date: Fri Mar 2 17:23:26 2018 -0800 - - Add 10 second timeout waiting for connection before client behaves as-if offline. - - * Refactored OnlineState tracking out of RemoteStore and into new OnlineStateTracker component. - * Added a 10 second timeout to transition from OnlineState.Unknown to - OnlineState.Offline rather than waiting indefinitely for the stream to succeed or fail. - * Added a SpecTest to verify OnlineState timeout behavior. - * Misc cleanup: - * Renamed OnlineState states: Failed => Offline, Healthy => Online - * Renamed TimerIds (ListenStreamConnection => ListenStreamConnectionBackoff) - * Added a dummy .catch() handler to the CancelablePromises returned by - AsyncQueue.enqueueAfterDelay() to avoid UnhandledPromiseRejection log spam - due to canceled timers. - * Added ability to run timers from spec tests (including assigning string - names to TimerId enum values) - * Added TimerId.All to match iOS and make it easier to run all timers from spec - tests. - -commit aba869cf779b32da2901ac1502577e240ec2efbb -Author: Michael Lehenbauer -Date: Fri Mar 2 14:05:47 2018 -0800 - - [AUTOMATED]: Prettier Code Styling - -commit dbed6899923aceedb87860a1381b478d8d9880c4 -Author: Sebastian Schmidt -Date: Thu Mar 1 09:45:46 2018 -0800 - - Database API: Ref from Ref (#534) - -commit fbb2aabe2527cafce4dca1d56bd34f8e0e0a0d65 -Author: Josh Crowther -Date: Wed Feb 28 11:41:40 2018 -0800 - - Remove the "private" flag from the @firebase/logger package (#537) - -commit c1a07da3d4607e175f7952c7bff8205359164336 -Author: Josh Crowther -Date: Wed Feb 28 11:36:36 2018 -0800 - - Refactor npm publish command (#536) - -commit 3d6289dd7853240a09887cbf2fea06b0a33ac357 -Author: Josh Crowther -Date: Wed Feb 28 10:49:47 2018 -0800 - - @firebase/logger (#473) - - * Start work on @firebase/logger package - - * Refactor to remove debug dep - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Expose a LogHandler type - - * Allow users to "silence" our logging - - * Adding some comments - - * Do @firebase/firestore integration - - * Do @firebase/database integration - - * [AUTOMATED]: Prettier Code Styling - - * Refactor to propagate the default level if changed - - * Add some basic tests - - * [AUTOMATED]: Prettier Code Styling - - * Feedback from @mikelehen and @schmidt-sebastian - - Refactor to also log fatal issues - - Refactor to not attempt to log if the level is invalid - - Adding docs and more feedback - - * [AUTOMATED]: Prettier Code Styling - - * Fixing an error message - - * Updating yarn.lock - - * Address @mikelehen feedback - - * [AUTOMATED]: Prettier Code Styling - - * Refactor logClient.log -> logClient.debug - - * Update deps - - * More @mikelehen feedback - - * Fixing comment - - * Feedback from @schmidt-sebastian - -commit 9cda9c927bfd2b19eff13357beac6646ec9f1413 -Author: Greg Soltis -Date: Tue Feb 27 09:48:07 2018 -0800 - - Keep track of number of queries in the query cache (#510) - - * Adding Schema Migration - - * Pseudocode for Schema Migration - - * [AUTOMATED]: Prettier Code Styling - - * IndexedDb Schema Migration - - * Lint cleanup - - * Removing unused import - - * Removing user ID from instance row - - * [AUTOMATED]: Prettier Code Styling - - * Review comments - - * Lint fixes - - * Review - - * [AUTOMATED]: Prettier Code Styling - - * Fixing the tests - - * Closing the Database in the Schema tests - - * [AUTOMATED]: Prettier Code Styling - - * Changing test helper to close the DB - - * [AUTOMATED]: Prettier Code Styling - - * Making v2 the default version - - * [AUTOMATED]: Prettier Code Styling - - * Addressing comment - - * [AUTOMATED]: Prettier Code Styling - - * Renamed to ALL_STORES - - * Start work on adding query counts - - * Implement target count - - * [AUTOMATED]: Prettier Code Styling - - * Separate out add and update for the query cache - - * [AUTOMATED]: Prettier Code Styling - - * Comments and formatting - - * Comments and restructuring - - * [AUTOMATED]: Prettier Code Styling - - * Use SimpleDb, shorten iOS-y name - - * [AUTOMATED]: Prettier Code Styling - - * addTargetCount -> saveTargetCount - - * Fix lint warnings - - * Comment fixes - - * Rename test file - - * Add expectation for 0 targets if none were added - - * [AUTOMATED]: Prettier Code Styling - - * Switch to PersistenceTransaction for schema upgrade - - * Fix the other tests - - * [AUTOMATED]: Prettier Code Styling - - * Update comment - - * Add some asserts, revert to PersistencePromise - - * Add assert - - * [AUTOMATED]: Prettier Code Styling - - * helpers moved - - * Review feedback - - * Switch to just using fail() - - * Rename updateMetadata - - * Renaming and thread metadata through schema upgrade - - * Use the proper assert - - * Review feedback - - * [AUTOMATED]: Prettier Code Styling - - * Drop note re running time, initialize metadata to null - - * Fix tests that weren't calling start - - * [AUTOMATED]: Prettier Code Styling - -commit e70ef379c6cf2d4e00c72ff2feda82d6dda44bd1 (tag: firebase@4.10.1, tag: @firebase/util@0.1.10, tag: @firebase/storage@0.1.8, tag: @firebase/storage-types@0.1.2, tag: @firebase/polyfill@0.1.6, tag: @firebase/messaging@0.2.1, tag: @firebase/messaging-types@0.1.2, tag: @firebase/firestore@0.3.4, tag: @firebase/firestore-types@0.2.2, tag: @firebase/database@0.1.11, tag: @firebase/database-types@0.1.2, tag: @firebase/auth@0.3.4, tag: @firebase/auth-types@0.1.2, tag: @firebase/app@0.1.10, tag: @firebase/app-types@0.1.2) -Author: Josh Crowther -Date: Thu Feb 22 14:21:38 2018 -0800 - - Publish firebase@4.10.1 - -commit cde4e44a2e552791d9c0249a20e435e2ec15929d -Author: Josh Crowther -Date: Wed Feb 21 16:25:56 2018 -0800 - - Dependencies Update (#528) - - * Run "yarn upgrade-interactive --latest" - - * Update gulp to a proper NPM dep - - * Regen yarn.lock - - * Fix typescript generics issues - - * [AUTOMATED]: Prettier Code Styling - -commit 0226ed23128f4a0a9fbc5896c207d3157c9d06de -Author: Josh Crowther -Date: Wed Feb 21 16:03:26 2018 -0800 - - Remove bash grouping - -commit 1b44b4d6166ccd523a3beefda89349c9e4162609 -Author: Josh Crowther -Date: Wed Feb 21 15:58:16 2018 -0800 - - Fixing fork testing issues - -commit 3ee5bdfde8ea59e884d4551c216646e41f44c2aa -Author: Natan Sągol -Date: Wed Feb 21 22:34:55 2018 +0100 - - Remove `return Promise.resolve()` statements from the codebase (#422) - - * Remove `return Promise.resolve()` statements from the codebase. - - * Fix compilation errors. - - * Fix more compiler errors. - - * Use `tslib` module and `importHelpers` Typescript compiler option. - - It reduces the size of TypeScript packages (namely `firebase-database`, - `firebase-firestore`, `firebase-messaging` and the combined `firebase`) - be reusing TypeScript helper methods (e.g. `__awaiter`) which were - included in every single file relying on features not available - in ES5 (emitted during transpilation process). - - * [AUTOMATED]: Prettier Code Styling - - * Regenerate top-level yarn.lock - - * Add `tslib` as a dependency to app, polyfill, storage, template and util packages. - - Since we set `importHelpers` compiler option to `true` in the base config, - we need to add `tslib` to all packages. `*-types` packages are omitted - since they do not contain any executable code. - - * Revert unnecessary change in comment formatting. - - * Revert moving comments out of empty else block to make - the context more clear. - - Addresses @mikelehen review - https://github.com/firebase/firebase-js-sdk/pull/422#pullrequestreview-98041340 - -commit 3aec5ac28d0439599af77184b1ffe86e0e16d790 -Author: Matt Gaunt -Date: Wed Feb 21 10:14:50 2018 -0800 - - Updating API surface (#527) - -commit dbe5fff5039ec09da651c724bb12d3a1da30bed2 -Author: Matt Gaunt -Date: Tue Feb 20 16:16:00 2018 -0800 - - Messaging - IDB Cleanup (#523) - - * Goes through and deletes old IDB entries - - * [AUTOMATED]: Prettier Code Styling - - * Fixing tests with db name differences - - * Altering some logic / logs - -commit e78411043f424c42505f768d3b8b5890fb5124b8 -Author: Josh Crowther -Date: Tue Feb 20 16:12:51 2018 -0800 - - Version Patch for Firebase Admin (#524) - - * Patch the version info and the firebase.SDK_VERSION - - * [AUTOMATED]: Prettier Code Styling - -commit b6b4e2fb968549dd1a680797c497af8a2466a493 -Author: Tony Meng -Date: Fri Feb 16 13:58:24 2018 -0800 - - Add testing module (#514) - - * Adding testing module - - * Typescript it - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Do not register testing module with firebase - - * [AUTOMATED]: Prettier Code Styling - - * Feedback - - * Add owners - -commit 2e147ff61da8fc7a62c9b72d8e9a7e0c28d862c5 -Author: Tony Meng -Date: Fri Feb 16 13:53:30 2018 -0800 - - Fix query string parsing (#518) - - * Fix query string parsing - - * [AUTOMATED]: Prettier Code Styling - - * Feedback - -commit fc81427d4ed8df51752608030aa289b8631531b3 (tag: firebase@4.10.0, tag: @firebase/util@0.1.9, tag: @firebase/storage@0.1.7, tag: @firebase/polyfill@0.1.5, tag: @firebase/messaging@0.2.0, tag: @firebase/firestore@0.3.3, tag: @firebase/database@0.1.10, tag: @firebase/app@0.1.9) -Author: Josh Crowther -Date: Thu Feb 15 16:31:25 2018 -0800 - - Publish firebase@4.10.0 - -commit db389db97bf3698384a4d708f4be70beecfabb0c -Author: Tony Meng -Date: Tue Feb 13 16:17:42 2018 -0800 - - Support ns queryparam (#496) - - * Support ns query param - - * [AUTOMATED]: Prettier Code Styling - - * Add tests - - * Strip query params from the host - - * Feedback - - * [AUTOMATED]: Prettier Code Styling - - * Feedback - - * Always use the query param when not connecting to production - - * Improve test coverage - -commit 2cacc75e54f48dcb89b95454861c56216579556a -Author: Michael Lehenbauer -Date: Tue Feb 13 10:40:31 2018 -0800 - - Upgrade closure-builder dependency to fix b/68061273 (slow response time in Microsoft Edge). (#509) - -commit f173ad0f5648e579dd662b52b9f763b0805f5aff -Author: Josh Crowther -Date: Tue Feb 13 09:32:56 2018 -0800 - - Refactor dev scripts to properly include top-level files (#508) - -commit 515eff7c82f0ab15eb1ac72f2caf703ce1442b4a -Author: Josh Crowther -Date: Mon Feb 12 12:55:21 2018 -0800 - - Disabling Flaky Tests (#505) - - * Disable int tests (due to flakiness) - - * [AUTOMATED]: Prettier Code Styling - -commit 09f7b137bc76ea8318611b404e7c05c9e8ad7cba -Author: Sebastian Schmidt -Date: Mon Feb 12 09:57:01 2018 -0800 - - Updating firebase/index.d.ts (#500) - -commit fce4168309f42aa038125f39818fbf654b65b05f -Author: Michael Lehenbauer -Date: Sun Feb 11 15:39:13 2018 -0800 - - Improve usage and testing of delayed operations. (#499) - - Core changes: - * Moves ExponentialBackoff to the AsyncQueue (matches iOS / Android). - * Adds a TimerId enum for identifying delayed operations on the queue and - uses it to identify our existing backoff and idle timers. - * Added AsyncQueue.hasDelayedOperation(id) and .runDelayedOperationsEarly(id) - which can be used from tests to check for the presence of an operation and - to schedule them to run early. - * Idle tests now use these mechanisms. - * Spec tests now use this rather than setting initalBackoffDelay to 1ms. - * Reworked mechanism by which DelayedOperation objects get removed from - AsyncQueue's delayedOperations list to make sure it happens synchronously. - - Cleanup: - * Renamed schedule() to enqueue() and scheduleWithDelay() to - enqueueAfterDelay(). - * Reorders AsyncQueue.enqueueAfterDelay() arguments to put operation last. - -commit 7a611b645fbedcd6c732853ed19e3f6a1a2638d5 -Author: Matt Gaunt -Date: Thu Feb 8 14:10:01 2018 -0800 - - Adds usePublicVapidKey() (#482) - - * Uses new token models, adds usePublicVapidKey() and improved integration - tests. - - * Updated yarn lock - - * Resetting karma config - -commit 453677f005d04e47be2324b9c1577051139652c0 -Author: Sebastian Schmidt -Date: Tue Feb 6 18:07:48 2018 -0800 - - Adding no-unused-vars to TSLint (#493) - -commit a1e346ff93c6cbcc0a1b3b33f0fbc3a7b66e7e12 -Author: Michael Lehenbauer -Date: Tue Feb 6 12:20:20 2018 -0800 - - Refactor AsyncQueue's "delayed scheduling" support and add cancellation. (#489) - - * Introduces a DelayedOperation helper class in AsyncQueue to encapsulate - delayed op logic. - * Adds cancellation support which I want to use in - https://github.com/firebase/firebase-js-sdk/pull/412 - * Updates the idle timer in persistent_stream.ts to use new cancellation support. - * Remove delayedOperationsCount in favor of keeping delayedOperations populated - correctly at all times. - * Fixes a preexisting issue in AsyncQueue.schedule() where the returned promise - would always be resolved with undefined, instead of the result of your op. - Also remove an AnyDuringMigration usage. - -commit 2db58a051bda565e5ca8d4bd98058709363e17c6 -Author: Josh Crowther -Date: Mon Feb 5 15:40:55 2018 -0800 - - Release CLI Fixes (#490) - - * Add --skipRebuild and --skipTests flags - - * Temporary: Target localhost NPM server - - * Refactor git push step - - * Refactor to push to current branch - - * Refactor commitAndTag fxn - - * Adding some logging - - * Refactor tag pushing - - * Revert "Temporary: Target localhost NPM server" - - This reverts commit dd4ab7155137060d2e194f3fbec062c2edf766e2. - - * [AUTOMATED]: Prettier Code Styling - - * Comments from @hiranya911 - -commit 49dcb25ca01c86e9b5329030ab315c06d118f386 -Author: zxu -Date: Fri Feb 2 13:52:04 2018 -0500 - - renaming isUnauthenticated() to isAuthenticated() for better style (#484) - -commit 631e1ad1687dd51acf2f496badf200c48ad046d0 (tag: firebase@4.9.1, tag: @firebase/util@0.1.8, tag: @firebase/messaging@0.1.9, tag: @firebase/firestore@0.3.2, tag: @firebase/database@0.1.9, tag: @firebase/auth@0.3.3, tag: @firebase/app@0.1.8) -Author: Josh Crowther -Date: Thu Feb 1 16:02:06 2018 -0800 - - Publish - -commit 9fb3c4c3c706760ab0f2651f53f19c1c6f081dbe -Author: Sebastian Schmidt -Date: Thu Feb 1 15:34:55 2018 -0800 - - Actually using the option name in validateNamedPropertyEquals (#480) - -commit 8f76c286dc70187f701806d3abdc42c1b36b9627 -Author: Gil -Date: Thu Feb 1 06:16:18 2018 -0800 - - Remove SortedMap.getPredecessorKey (#477) - - This is dead code. - - I think it was probably useful in the RTDB because of the way it - notified of changes, but we give changes with indexes in Firestore so I - think we don't need it. - - This parallels https://github.com/firebase/firebase-ios-sdk/pull/735 - -commit bcc8983a0cae673bafc386935c64e9245c60c84c -Author: bojeil-google -Date: Wed Jan 31 20:08:30 2018 -0800 - - fix(auth): Fixes broken universallinks.subscribe in Android when multiple listeners are set. (#478) - -commit fcc77c2dccb9780450def9d511540e64991f3723 -Author: Michael Lehenbauer -Date: Mon Jan 29 08:58:37 2018 -0800 - - Add changelog entry for my last PR (oops) and also add enable/disableNetwork() which we missed last release. (#472) - -commit fca1076f166293a4ee9a60148c80463e54e43618 -Author: Michael Lehenbauer -Date: Fri Jan 26 14:21:56 2018 -0800 - - Fix b/72502745: OnlineState changes cause limbo document crash. (#470) - - Context: I made a previous change to raise isFromCache=true events when the - client goes offline. As part of this change I added an assert for - "OnlineState should not affect limbo documents", which it turns out was not - valid because: - * When we go offline, we set the view to non-current and call - View.applyChanges(). - * View.applyChanges() calls applyTargetChange() even though there's no target - change and it recalculates limbo documents. - * When the view is not current, we consider no documents to be in limbo. - * Therefore all limbo documents are removed and so applyChanges() ends up - returning unexpected LimboDocumentChanges. - - Fix: I've modified the View logic so that we don't recalculate limbo documents - (and generate LimboDocumentChanges) when the View is not current, so now my - assert holds and there should be less spurious removal / re-adding of limbo - documents. - -commit 81d6b1e196ca2ee4ac9bc7c3984a3d483a2f2c82 -Author: Michael Lehenbauer -Date: Fri Jan 26 12:48:25 2018 -0800 - - [AUTOMATED]: Prettier Code Styling (#469) - -commit c647fe42cf92f6947a6a2fe21b82e46446922b9e -Author: Josh Crowther -Date: Thu Jan 25 11:05:19 2018 -0800 - - Refactor script to create .npmrc in home directory - -commit 0213f96f8e98859188461ad65d31839c264b1f10 -Author: Josh Crowther -Date: Thu Jan 25 10:40:14 2018 -0800 - - Add @pinarx to the CODEOWNERS for messaging update sandbox URL (#466) - -commit 4a397948573b8d8ab01bffb475ac7414ddadcda0 -Author: Josh Crowther -Date: Thu Jan 25 10:38:46 2018 -0800 - - Move the .npmrc creation to a before_install step - -commit 2874d8745e5097f2f20d937b9397160f1853e83f -Author: Josh Crowther -Date: Thu Jan 25 10:07:26 2018 -0800 - - Skipping cleanup step breaking deploy in Travis CI - -commit 5cffa3e829f50c5923cb2f67ddeb2554a7d648ed -Author: Josh Crowther -Date: Thu Jan 25 09:54:44 2018 -0800 - - Update yarn.lock (#467) - -commit c102e7be2af83894e64cf6f3482d65084aee40af -Author: Josh Crowther -Date: Thu Jan 25 09:47:30 2018 -0800 - - Automated Release Process (#451) - - * Update inquirer version - - * Initial work on automating release process - - * Fix array index mismatch error - - * Add ability to auto commit and tag - - * Refactoring util functions - - * Add step to clean git tree - - * Fix missing fxn - - * Change to force mode - - * Refactor git clean to use exec - - * Reorder steps to not commit changes till later, add rebuild and test processes - - * Adding indicators to long running processes - - * Add missing dep - - * Build in reset mechanism - - * Adding in a log statement - - * Refactoring the test setup stuff - - * Testing the testing - - * Fixing scoping issue - - * Fixing another scoping issue - - * Fixing the result is undefined issue - - * Refactor from exec -> spawn - - * Expose test output to the console - - * Revert "Expose test output to the console" - - This reverts commit d0ae119b1dfb7d868faed8ad0c42c447c0947d22. - - * Refactor so we don't use a spinner for the test run - - * Adding the version check - - * Updating the CLI to tag and push releases - - * Initial work on NPM publish - - * Continuing work on npm publish - - * Redirect npm publish stdio - - * Add some logging to the NPM publish - - * More logging - - * Add newline to end of JSON files - - * Remove disabling comments - - * Remove "dry-run" stuff - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Remove the old publish scripts - - * [AUTOMATED]: Prettier Code Styling - - * Fix issue where validation wasn't properly being captured - - * Add missing push verification - - * [AUTOMATED]: Prettier Code Styling - - * Add banner text - - * [AUTOMATED]: Prettier Code Styling - - * Changing publish to fail fast - - * Add npm whoami check - - * Add .yarnrc - - * Remove logic to update peerDependencies - - See: https://github.com/lerna/lerna/issues/1018 for rationale. - - * for...in -> for...of - - * Point .yarnrc to public NPM registry - - * [AUTOMATED]: Prettier Code Styling - - * Add ability to get releaseType from command line args - - * Fix await/async issue - - * Refactor to handle canary builds - - * Update version names and associated tagging - - * Remove early return (for debugging) - - * Update .yarnrc for testing - - * Add try-catch to async fxn - - * Change error messaging - - * [AUTOMATED]: Prettier Code Styling - - * Refactor to exclude prerelease versions from the git log - - * More canary updates - - * Refactor to only push to github on prod releases - - * Add error logging - - * Fix misassigned var issue - - * Pass raw releaseType - - * Fix private package issue - - * Removing trim() call - - * Remove log - - * Add comment describing canary versioning - - * Update comments - - * Removing early return - - * Temporarily disabling validation - - * Fix scoping issue - - * Add auto-reset to the working tree for non-production releases - - * Fetch an uncached version of the pkg.json for final push - - * Fix whitespace issues, filter to public packages - - * Parallelize the publishing of packages - - * Fix issues - - * Refactor to show parallel spinners - - * Return Listr obj - - * Fix a bad variable ref - - * Run the publish - - * Pass the proper variable along - - * Add a console log - - * Adding some whitespace - - * Refactor logs - - * [AUTOMATED]: Prettier Code Styling - - * Add git validation before release - - * Compare git sha's before allowing publish - - * Compare git sha's before allowing publish - - * Debugging - - * Fix conditional - - * Remove unneeded log - - * Refactor to get the latest master sha - - * Remove "at head" check - - * [AUTOMATED]: Prettier Code Styling - - * Update .yarnrc to point to remote NPM - - * Re-enable build verification - - * Travis CI canary builds - - * Updating yarn.lock (autogenerated) - - * [AUTOMATED]: Prettier Code Styling - - * Copy of master yarn.lock - - * Commiting isolated yarn.lock changes - - * [AUTOMATED]: Prettier Code Styling - - * Refactor to do a single script value as travis doesn't support multiple scripts - - * Refactor root -> projectRoot from @hiranya911 - - * Add logging around npm whoami - - * Removing comma - - * [AUTOMATED]: Prettier Code Styling - - * Refactor production push verification order - - * Adding some notes to the process - - * [AUTOMATED]: Prettier Code Styling - -commit 2689287940543b5340a58bdf9e82aac810e58aa0 -Author: Mathias Døhl -Date: Thu Jan 25 18:45:44 2018 +0100 - - fix: Closure Compiler ES6 Wildcard import not supported (#370) - -commit 9fcdd378fdd9253248bb385ce87161de64b54592 -Author: Josh Crowther -Date: Wed Jan 24 18:51:04 2018 -0800 - - Add a new package template (#433) - - * Adding a private "template" package for easier bootstrapping - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - -commit e938bfbcbfc807d47d4bf9280d4b4a7583b6515b -Author: Sebastian Schmidt -Date: Mon Jan 22 13:57:48 2018 -0800 - - Allowing hosts with port (#460) - -commit c653c56e0a1da30117f1a5d824a4d3bb13528742 -Author: Ryan Baxley -Date: Mon Jan 22 14:32:47 2018 -0500 - - Allow localhost:port database URL (#426) - - * Allow localhost database URL - - * Setting domain on localhost server address - - * [AUTOMATED]: Prettier Code Styling - - * Allow namespace to be invalid if the host is localhost - - * [AUTOMATED]: Prettier Code Styling - -commit 1b6b9ab3c02756ebe33246f49c766e520c91263b -Author: Michael Lehenbauer -Date: Mon Jan 22 10:03:55 2018 -0800 - - Update VSCode launch.json to match updated package.json config. (#459) - -commit ac95e754c059ec618c1bc9a47a99a0dc2ffc42bf -Author: Michael Lehenbauer -Date: Mon Jan 22 07:34:32 2018 -0800 - - Refactor integration/api/ tests to have no src/ dependencies. (#454) - - This lets us run these tests (via firebase-js-sdk/integration/firestore/) - against the minified build without risk of accidentally mixing in non-minified - classes (leading to tests misbehaving or skipping testing the minified code - that we were intending to test). - - Fixes b/71721842 and b/66946692. - - Changes include: - * Split integration/api into api/ and api_internal/ - * Move Idle Timeout tests (that drain the async queue) to api_internal/ and - removes semi-public db.INTERNAL.drainAsyncQueue() method. - * Remove src/ dependencies from integration/api tests: - * Split integration/util/helpers.ts into helpers.ts (with no src/ - dependencies) and internal_helpers.ts (with src/ dependencies). - * Create test/util/promise.ts with Deferred<> implementation to avoid depending - on src/util/promise.ts. - * Move EventsAccumulator into its own - test/integration/util/events_accumulator.ts file. - * Change minified test build (/integration/firestore/) to only include the - desired test/ code without pulling over any src/ code. - -commit a586a7f2a487a5a88aecaebe4b188019c50752f5 (tag: firebase@4.9.0, tag: firebase-webpack-test@0.2.1, tag: firebase-typescript-test@0.2.1, tag: firebase-package-typings-test@0.2.1, tag: firebase-messaging-selenium-test@0.2.1, tag: firebase-browserify-test@0.2.1, tag: @firebase/util@0.1.7, tag: @firebase/messaging@0.1.8, tag: @firebase/firestore@0.3.1, tag: @firebase/firestore-types@0.2.1, tag: @firebase/database@0.1.8, tag: @firebase/app@0.1.7) -Author: Josh Crowther -Date: Thu Jan 18 15:39:43 2018 -0800 - - Publish - - - @firebase/app@0.1.7 - - @firebase/database@0.1.8 - - firebase@4.9.0 - - @firebase/firestore-types@0.2.1 - - @firebase/firestore@0.3.1 - - @firebase/messaging@0.1.8 - - @firebase/util@0.1.7 - - firebase-browserify-test@0.2.1 - - firebase-package-typings-test@0.2.1 - - firebase-messaging-selenium-test@0.2.1 - - firebase-typescript-test@0.2.1 - - firebase-webpack-test@0.2.1 - -commit cae0bf1fec9daa95a512c447e3e6a31ae7e52f21 -Author: Michael Lehenbauer -Date: Thu Jan 18 09:26:33 2018 -0800 - - Upgrade ts-node and disable its cache. (#446) - - I upgraded ts-node while investigating a cache-related issue and that solved my issue, but it also led me to realize that the cache is inaccurate and can hide type failures. - - By default ts-node caches the JS output for each TS file it encounters. But if A.ts depends on types in B.ts and B.ts changes, ts-node will still use the cached compilation of B.ts even if it no longer should compile. - - Disabling the cache adds ~6s to incremental test time but ensures we don't miss type violations. It should have no effect on travis which always starts with a clean cache. - -commit 7d9af1b4b27b535083f44f85a6c6a58f7c228099 -Author: Sebastian Schmidt -Date: Wed Jan 17 14:32:56 2018 -0800 - - Adding lint hook (#448) - -commit f55eb55c4b2af6df3c4d56f10a05cf796bdfb6dd -Author: Sebastian Schmidt -Date: Wed Jan 17 13:44:38 2018 -0800 - - Removing last lint errors (#447) - -commit efcb608032b6acdabca21628e65ee74ef13fa6b5 -Author: Sebastian Schmidt -Date: Wed Jan 17 10:19:55 2018 -0800 - - Removing any from LLRBTree (#442) - -commit 623728088f61f0ba44c651fa871255a938645356 (tag: firebase@4.9.0-2, tag: firebase-webpack-test@0.2.1-1, tag: firebase-typescript-test@0.2.1-1, tag: firebase-package-typings-test@0.2.1-1, tag: firebase-messaging-selenium-test@0.2.1-1, tag: firebase-browserify-test@0.2.1-1, tag: @firebase/firestore@0.3.1-1, tag: @firebase/firestore-types@0.2.1-1) -Author: Josh Crowther -Date: Wed Jan 17 09:34:48 2018 -0800 - - Publish - - - firebase@4.9.0-2 - - @firebase/firestore-types@0.2.1-1 - - @firebase/firestore@0.3.1-1 - - firebase-browserify-test@0.2.1-1 - - firebase-package-typings-test@0.2.1-1 - - firebase-messaging-selenium-test@0.2.1-1 - - firebase-typescript-test@0.2.1-1 - - firebase-webpack-test@0.2.1-1 - -commit fc46797c12843327b300e2d99b3611a5d5269f11 -Merge: 68b9c44e4 77bf1fbda -Author: Josh Crowther -Date: Wed Jan 17 09:33:13 2018 -0800 - - Merge branch 'master' of https://github.com/firebase/firebase-js-sdk - -commit 77bf1fbdac16e08053958638f72d1df5001c29cc -Author: Sebastian Schmidt -Date: Wed Jan 17 09:28:59 2018 -0800 - - Adding generics to the Connection API (#441) - -commit 68b9c44e4c88b1a20010c9a3b7dde82c3d6f0d46 (tag: firebase@4.9.0-1, tag: firebase-webpack-test@0.2.1-0, tag: firebase-typescript-test@0.2.1-0, tag: firebase-package-typings-test@0.2.1-0, tag: firebase-messaging-selenium-test@0.2.1-0, tag: firebase-browserify-test@0.2.1-0, tag: @firebase/firestore@0.3.1-0, tag: @firebase/firestore-types@0.2.1-0) -Author: Josh Crowther -Date: Wed Jan 17 09:26:10 2018 -0800 - - Publish - - - firebase@4.9.0-1 - - @firebase/firestore-types@0.2.1-0 - - @firebase/firestore@0.3.1-0 - - firebase-browserify-test@0.2.1-0 - - firebase-package-typings-test@0.2.1-0 - - firebase-messaging-selenium-test@0.2.1-0 - - firebase-typescript-test@0.2.1-0 - - firebase-webpack-test@0.2.1-0 - -commit 571a3a9cf9e10bb279144e74886a5cac839464df (tag: firebase@4.9.0-0, tag: firebase-webpack-test@0.2.0-0, tag: firebase-typescript-test@0.2.0-0, tag: firebase-package-typings-test@0.2.0-0, tag: firebase-messaging-selenium-test@0.2.0-0, tag: firebase-browserify-test@0.2.0-0, tag: @firebase/firestore@0.3.0-0, tag: @firebase/firestore-types@0.2.0-0) -Author: Josh Crowther -Date: Wed Jan 17 09:17:58 2018 -0800 - - Publish - - - firebase@4.9.0-0 - - @firebase/firestore-types@0.2.0-0 - - @firebase/firestore@0.3.0-0 - - firebase-browserify-test@0.2.0-0 - - firebase-package-typings-test@0.2.0-0 - - firebase-messaging-selenium-test@0.2.0-0 - - firebase-typescript-test@0.2.0-0 - - firebase-webpack-test@0.2.0-0 - -commit b381dc9ec1786de19f15b83027173b2bcfcd9dd3 -Author: Sebastian Schmidt -Date: Wed Jan 17 08:52:38 2018 -0800 - - Removing some of the 'any' usage in our Promise implementation (#437) - -commit 6e60bb09484a9abf2ec1d6739c7275830dc82499 -Author: Sebastian Schmidt -Date: Tue Jan 16 11:06:34 2018 -0800 - - Welcoming the new year (#439) - - * Welcoming the new year - - * [AUTOMATED]: Prettier Code Styling - -commit 6abd6484730971e2390b2b9acbb61800852fb350 -Merge: a55dba2e1 57fadf180 -Author: Michael Lehenbauer -Date: Fri Jan 12 11:23:44 2018 -0800 - - Merge pull request #429 from firebase/firestore-api-changes - - Firestore API Changes - -commit 57fadf1801cf3c199edb871a88fdc10cc3c1b1b5 -Author: Sebastian Schmidt -Date: Thu Jan 11 19:47:43 2018 -0800 - - Added missing entries in CHANGELOG.md - -commit 02b1fde976461013c2d64a5eec9f22a1c9940158 -Author: Sebastian Schmidt -Date: Thu Jan 11 19:37:09 2018 -0800 - - Fix a bunch of lint warnings in Firestore (#427) - -commit 3a3687fa00ac8d988959b65a41ecec632620d471 -Merge: 2a2d1989a a55dba2e1 -Author: Sebastian Schmidt -Date: Thu Jan 11 19:11:15 2018 -0800 - - Merge branch 'master' into firestore-api-changes - -commit a55dba2e140e866abe7c951551d1629cbd9d32a5 -Author: Sebastian Schmidt -Date: Thu Jan 11 19:10:50 2018 -0800 - - Accepting new backend error message for missing docs (#428) - -commit 2a2d1989ad1d8711be2a88231b5e4cfbfd914752 -Author: zxu -Date: Thu Jan 11 17:05:44 2018 -0500 - - Firestore `isEqual()` on Public Types (#396) - - * refactoring equals => isEqual - * bug fix - * Blob, FieldPath, GeoPoint equality test - * isEqual for FieldValue, DocumentReference, Query - * isEqual for CollectionReference, DocumentSnapshot, QuerySnapshot - * isEqual for SnapshotMetadata - * update firestore-types - * add missing import - * small refactoring adding ViewSnapshot.isEqual() - -commit 7b8640d264e969244689232e1398195b95fbf225 (tag: firebase@4.8.2, tag: firebase-webpack-test@0.1.3, tag: firebase-typescript-test@0.1.3, tag: firebase-package-typings-test@0.1.1, tag: firebase-messaging-selenium-test@0.1.3, tag: firebase-browserify-test@0.1.3, tag: @firebase/webchannel-wrapper@0.2.6, tag: @firebase/util@0.1.6, tag: @firebase/storage@0.1.6, tag: @firebase/storage-types@0.1.1, tag: @firebase/polyfill@0.1.4, tag: @firebase/messaging@0.1.7, tag: @firebase/messaging-types@0.1.1, tag: @firebase/firestore@0.2.3, tag: @firebase/firestore-types@0.1.1, tag: @firebase/database@0.1.7, tag: @firebase/database-types@0.1.1, tag: @firebase/auth@0.3.2, tag: @firebase/auth-types@0.1.1, tag: @firebase/app@0.1.6, tag: @firebase/app-types@0.1.1) -Author: Josh Crowther -Date: Thu Jan 11 11:31:12 2018 -0800 - - Publish - - - @firebase/app-types@0.1.1 - - @firebase/app@0.1.6 - - @firebase/auth-types@0.1.1 - - @firebase/auth@0.3.2 - - @firebase/database-types@0.1.1 - - @firebase/database@0.1.7 - - firebase@4.8.2 - - @firebase/firestore-types@0.1.1 - - @firebase/firestore@0.2.3 - - @firebase/messaging-types@0.1.1 - - @firebase/messaging@0.1.7 - - @firebase/polyfill@0.1.4 - - @firebase/storage-types@0.1.1 - - @firebase/storage@0.1.6 - - @firebase/util@0.1.6 - - @firebase/webchannel-wrapper@0.2.6 - - firebase-browserify-test@0.1.3 - - firebase-package-typings-test@0.1.1 - - firebase-messaging-selenium-test@0.1.3 - - firebase-typescript-test@0.1.3 - - firebase-webpack-test@0.1.3 - -commit bd553a13f06271fe37b4453cdcb4870b3321da8d -Author: Josh Crowther -Date: Thu Jan 11 10:27:10 2018 -0800 - - Removing internal URL (#425) - -commit 5d52a82eea3e8b379ebe7fda35fe1acd4e5a67fe -Author: Josh Crowther -Date: Thu Jan 11 10:25:36 2018 -0800 - - Add a "declare module" statement to index.d.ts (#424) - -commit d849aa1ef7a52ea82a356c3b92530cb2865ae3ae (tag: firebase@4.8.2-0, tag: firebase-webpack-test@0.1.3-0, tag: firebase-typescript-test@0.1.3-0, tag: firebase-package-typings-test@0.1.1-0, tag: firebase-messaging-selenium-test@0.1.3-0, tag: firebase-browserify-test@0.1.3-0, tag: @firebase/webchannel-wrapper@0.2.6-0, tag: @firebase/util@0.1.6-0, tag: @firebase/storage@0.1.6-0, tag: @firebase/storage-types@0.1.1-0, tag: @firebase/polyfill@0.1.4-0, tag: @firebase/messaging@0.1.7-0, tag: @firebase/messaging-types@0.1.1-0, tag: @firebase/firestore@0.2.3-0, tag: @firebase/firestore-types@0.1.1-0, tag: @firebase/database@0.1.7-0, tag: @firebase/database-types@0.1.1-0, tag: @firebase/auth@0.3.2-0, tag: @firebase/auth-types@0.1.1-0, tag: @firebase/app@0.1.6-0, tag: @firebase/app-types@0.1.1-0) -Author: Josh Crowther -Date: Tue Jan 9 13:46:36 2018 -0800 - - Publish - - - @firebase/app-types@0.1.1-0 - - @firebase/app@0.1.6-0 - - @firebase/auth-types@0.1.1-0 - - @firebase/auth@0.3.2-0 - - @firebase/database-types@0.1.1-0 - - @firebase/database@0.1.7-0 - - firebase@4.8.2-0 - - @firebase/firestore-types@0.1.1-0 - - @firebase/firestore@0.2.3-0 - - @firebase/messaging-types@0.1.1-0 - - @firebase/messaging@0.1.7-0 - - @firebase/polyfill@0.1.4-0 - - @firebase/storage-types@0.1.1-0 - - @firebase/storage@0.1.6-0 - - @firebase/util@0.1.6-0 - - @firebase/webchannel-wrapper@0.2.6-0 - - firebase-browserify-test@0.1.3-0 - - firebase-package-typings-test@0.1.1-0 - - firebase-messaging-selenium-test@0.1.3-0 - - firebase-typescript-test@0.1.3-0 - - firebase-webpack-test@0.1.3-0 - -commit 143897186fcc70632273e59452f01bd976061864 -Author: Josh Crowther -Date: Tue Jan 9 10:45:57 2018 -0800 - - Add @license annotation to externs (#421) - -commit 84a7e7998c7f5782d973a4e4b9f5ac3d96079676 -Author: Josh Crowther -Date: Mon Jan 8 13:48:28 2018 -0500 - - Partial Typings Revert (#401) - - * Partial revert of a6b6689 to fix wrapper package typings - - * Add helper to setup links to all packages - - * [AUTOMATED]: Prettier Code Styling - - * Add a simple test to validate that the typings are properly exported - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Fix database typings issue - - * [AUTOMATED]: Prettier Code Styling - - * Fixing nit from @hiranya911 - -commit 7789ad54082c879d219371bec2b65ea88d6301e7 -Author: Josh Crowther -Date: Mon Jan 8 13:17:22 2018 -0500 - - package.json Fixes (#416) - - * Add "author" field to package.json files - - * Add repository field to package.json - -commit 1a1bd233b0f459932f8f970836fb7ec2c13d1ee5 -Author: Sebastian Schmidt -Date: Fri Jan 5 13:59:16 2018 -0800 - - Fixing potential race in ServerTimestamp tests (#413) - - * Fixing potential race in ServerTimestamp tests - - * Removing firebase as any - -commit b3c2b5b3bc1595ab51abe180f00cd35545ab9cef -Author: Michael Lehenbauer -Date: Thu Jan 4 09:20:16 2018 -0800 - - Update yarn.lock. - -commit d61c0a56f974cc690088027bfa8cf4aace627f43 -Author: Justin Sprigg -Date: Fri Jan 5 04:10:35 2018 +1100 - - Narrow ThenableReference type definition (#410) - - Fixes #354 - -commit 3daa975eb754fa88f843cd794a303fb07dfe53e5 -Author: Michael Lehenbauer -Date: Thu Jan 4 09:07:00 2018 -0800 - - Add an initial tslint.json and add a "yarn lint" command to use it. (#409) - -commit acb7321fe9a48e0e581059672c4149ae32b96fbc -Merge: 3f5d7f787 3822d3a27 -Author: Sebastian Schmidt -Date: Tue Jan 2 15:57:24 2018 -0800 - - Merge - -commit 3822d3a27521c96a999669a0760863e8809cbb32 -Author: Thomas Broadley -Date: Wed Dec 27 12:18:35 2017 -0500 - - docs: fix typos (#397) - -commit 72cd164614b3eef29012c6343fd38ce38fef46d6 -Author: Austin Peterson -Date: Wed Dec 27 12:17:47 2017 -0500 - - Replace all instances of 'intialize' with 'initialize'. (#399) - -commit 3f5d7f78762b590d3bfd5d3185fb3eb96fbb742c -Author: Greg Soltis -Date: Thu Dec 21 15:39:04 2017 -0800 - - Add requested log line (#395) - -commit 403a0b868c00542ced2f9c91486af4abc20b6903 -Author: Josh Crowther -Date: Tue Dec 19 13:32:17 2017 -0800 - - Ensure app-types package includes private.d.ts (#391) - -commit 6c4a686f31859f2146a1001ae890db51ad4b984b -Author: Michael Lehenbauer -Date: Tue Dec 19 10:18:48 2017 -0800 - - Rename EventManager.onOnlineStateChanged => applyOnlineStateChange (#385) - -commit d8c20f08672e644fbab85ecbd11b5dc246f43454 (tag: firebase@4.8.1, tag: firebase-webpack-test@0.1.2, tag: firebase-typescript-test@0.1.2, tag: firebase-messaging-selenium-test@0.1.2, tag: firebase-browserify-test@0.1.2, tag: @firebase/util@0.1.5, tag: @firebase/storage@0.1.5, tag: @firebase/storage-types@0.1.0, tag: @firebase/messaging@0.1.6, tag: @firebase/messaging-types@0.1.0, tag: @firebase/firestore@0.2.2, tag: @firebase/firestore-types@0.1.0, tag: @firebase/database@0.1.6, tag: @firebase/database-types@0.1.0, tag: @firebase/auth@0.3.1, tag: @firebase/auth-types@0.1.0, tag: @firebase/app@0.1.5, tag: @firebase/app-types@0.1.0) -Author: Josh Crowther -Date: Mon Dec 18 16:00:29 2017 -0800 - - Publish - - - @firebase/app-types@0.1.0 - - @firebase/app@0.1.5 - - @firebase/auth-types@0.1.0 - - @firebase/auth@0.3.1 - - @firebase/database-types@0.1.0 - - @firebase/database@0.1.6 - - firebase@4.8.1 - - @firebase/firestore-types@0.1.0 - - @firebase/firestore@0.2.2 - - @firebase/messaging-types@0.1.0 - - @firebase/messaging@0.1.6 - - @firebase/storage-types@0.1.0 - - @firebase/storage@0.1.5 - - @firebase/util@0.1.5 - - firebase-browserify-test@0.1.2 - - firebase-messaging-selenium-test@0.1.2 - - firebase-typescript-test@0.1.2 - - firebase-webpack-test@0.1.2 - -commit 8fca35fca700a27954316542ccdb0640743316af -Author: Sebastian Schmidt -Date: Mon Dec 18 12:23:42 2017 -0800 - - Adding Snapshot Options to deal with Server Timestamps (#361) - -commit 60c9d4acaf5b89448f5789d6bb7dc4072da16d78 -Author: Greg Soltis -Date: Mon Dec 18 10:25:01 2017 -0800 - - Expose network management (#378) - - * Drop a few unused parameters to RemoteStore - - * [AUTOMATED]: Prettier Code Styling - - * Start work on exposing network management - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Drop unnecessary remote_store test - - * [AUTOMATED]: Prettier Code Styling - - * Update comments - - * Drop a few unused parameters to RemoteStore - - * [AUTOMATED]: Prettier Code Styling - - * Start work on exposing network management - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Drop unnecessary remote_store test - - * Update comments - - * fix another firebaseInternal reference - - * Add spaces - - * [AUTOMATED]: Prettier Code Styling - - * Add conditional logic to shutdown() and handleUserChange() - - * Move state changes out of disableNetworkInternal - - * Drop extra debounce - - * Update comments - -commit 9f0674af10e67b99096b511afbdc619f2da27925 -Author: Michael Lehenbauer -Date: Fri Dec 15 16:21:13 2017 -0800 - - Add changelog entry for new warning log messages. (#382) - - * Add changelog entry for offline warning. - - * Make offline warning an `error` instead of `debug`. (#379) - - * Add changelog entry for resource-exhausted log message. - -commit 0c80882bf26fd7e95675f661cbea7a3d9a69d675 -Author: rsgowman -Date: Thu Dec 14 14:04:23 2017 -0500 - - Remove 'tags' from log.error() statements. (#376) - - While log.debug() statements take a tag parameter, log.error() - statements do not. (Note that they still work even with a tag parameter - since log.error() takes in a va_list.) - -commit 8f6270639538d07e14d6cbb4e6871a4f1c07b84b -Author: Greg Soltis -Date: Thu Dec 14 10:27:27 2017 -0800 - - Make disable internal sync and update notes about OnlineState (#380) - - * Make disableNetworkInternal explicitly synchronous - - * Add notes to OnlineState type - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: Prettier Code Styling - - * Update comments per Michael's suggestions - - * More fixup - -commit 414e78bc7f7e452830c1b1d0321097c67b31ba13 -Author: rsgowman -Date: Thu Dec 14 13:19:52 2017 -0500 - - Always log resource exhausted errors to console ... (#375) - - ... when receiving webchannel messages. Even without debug mode one - (i.e. even when the caller hasn't called - firebase.firestore.setLogLevel('debug')). - - Without this, the developer would have no idea why firestore was not - returning any data, as it would just silently not work. - - b/69638501 - -commit 2fa51d3b45705e9f27f500ab4def078905cbed4e -Author: zxu -Date: Wed Dec 13 16:15:41 2017 -0500 - - Make offline warning an `error` instead of `debug`. (#379) - - * make offline warning an `error` instead of `debug` - - By default, debug is not shown. We actually want the default behavior to show offline warning, if offline. - - * not using tag in `log.error` - -commit 0eaecd8fcd44afec72e7910f5111589eb0a349f7 -Author: Michael Lehenbauer -Date: Wed Dec 13 09:45:45 2017 -0800 - - b/68276665: Raise isFromCache=true events when offline (#358) - - * Plumbs OnlineState changes through to views. - * View sets this.current to false on OnlineState.Failed, triggering - isFromCache=true events. It will automatically be returned to true - once the listen is reestablished and we get a new CURRENT message. - * Updated tests (and added one new one) to verify behavior. - * Unifies setOnlineStateToUnknown(), setOnlineStateToHealthy(), and - updateAndBroadcastOnlineState() into a single updateOnlineState() - method. - * Split disableNetwork() into `public disableNetwork()` and - `private disableNetworkInternal(targetOnlineState: OnlineState)`. - * Some miscellaneous comment cleanup. - -commit 39d1bffb65637e9b738af25b46554864c1e6c091 -Author: Sebastian Schmidt -Date: Wed Dec 13 17:07:58 2017 +0800 - - Making DocumentSnaphot.data() nullable (#364) - - * Making DocumentSnapshot nullable - -commit dedd2dcfb8840419aa2eb967d60a4c6753f034e6 -Author: Sebastian Schmidt -Date: Wed Dec 13 09:48:04 2017 +0800 - - [AUTOMATED]: Prettier Code Styling - -commit 7a23ec5f03dbbafe1b16af596bff1e66cc3b7b7e -Author: Josh Crowther -Date: Tue Dec 12 14:45:11 2017 -0500 - - Updating CODEOWNERS file (#373) - -commit aefa9517a2a3bdcf2ff8ef77f9238568dd557cd9 -Author: Ryan Brewster -Date: Mon Dec 11 11:08:23 2017 -0800 - - Encode strings as UTF-8 before/after converting to base64 (#362) - - * Add test that catches error - - * Even simpler test - - * Steal goog.crypt UTF8 encoding - - * [AUTOMATED]: Prettier Code Styling - - * More test cases - -commit a6b66892806d8393d20fad4f11325ba5b1a0e701 -Author: Josh Crowther -Date: Mon Dec 11 09:45:20 2017 -0500 - - Typings Refactor (#334) - - * Add @firebase/app-types - - * Add @firebase/auth-types stub - - * Add @firebase/database-types stub - - * Add @firebase/firestore-types stub - - * Add @firebase/messaging-types stub - - * Add @firebase/storage-types stub - - * Add "typings" field to components package.json - - * Add typings dependencies to each component - - * Add @firebase/messaging-types - - * Add @firebase/storage-types - - * Add @firebase/auth-types - - * Refactor the Persistence object on FirebaseAuth class - - * Add @firebase/firestore types - - * Fix compilation type module require issues - - * Add @firebase/database types - - * Fix issues in firestore/storage types - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Refactor firebase package types - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Review feedback from @mikelehen - - * [AUTOMATED]: Prettier Code Styling - - * Reintroduce private constructors - - * Remove "as any" cast in firebase_export.ts - - * [AUTOMATED]: Prettier Code Styling - - * Removing unneeded comment - - * Address feedback from @schmidt-sebastian - - * Fix disparities with prod externs - - * Adding new @firebase/auth methods - - * [AUTOMATED]: Prettier Code Styling - -commit a2c99358a0d63242e39c5c0ab36364259446e694 -Author: Greg Soltis -Date: Fri Dec 8 11:48:58 2017 -0800 - - Drop unused params (#360) - - * Drop a few unused parameters to RemoteStore - - * [AUTOMATED]: Prettier Code Styling - -commit 819eda131ab67796269b20e7d088144879ed6931 (tag: firebase@4.8.0, tag: firebase-webpack-test@0.1.1, tag: firebase-typescript-test@0.1.1, tag: firebase-messaging-selenium-test@0.1.1, tag: firebase-firestore-integration-test@1.0.1, tag: firebase-browserify-test@0.1.1, tag: @firebase/webchannel-wrapper@0.2.5, tag: @firebase/util@0.1.4, tag: @firebase/storage@0.1.4, tag: @firebase/polyfill@0.1.3, tag: @firebase/messaging@0.1.5, tag: @firebase/firestore@0.2.1, tag: @firebase/database@0.1.5, tag: @firebase/auth@0.3.0, tag: @firebase/app@0.1.4) -Author: Josh Crowther -Date: Thu Dec 7 15:33:22 2017 -0800 - - Publish - - - @firebase/app@0.1.4 - - @firebase/auth@0.3.0 - - @firebase/database@0.1.5 - - firebase@4.8.0 - - @firebase/firestore@0.2.1 - - @firebase/messaging@0.1.5 - - @firebase/polyfill@0.1.3 - - @firebase/storage@0.1.4 - - @firebase/util@0.1.4 - - @firebase/webchannel-wrapper@0.2.5 - - firebase-browserify-test@0.1.1 - - firebase-firestore-integration-test@1.0.1 - - firebase-messaging-selenium-test@0.1.1 - - firebase-typescript-test@0.1.1 - - firebase-webpack-test@0.1.1 - -commit c6c09764a7bca1521e21bacfbbaf65b12da86665 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Wed Dec 6 16:48:02 2017 -0800 - - handled empty auth uri error (#353) - -commit 72536c468d2375794a3b18c20fd032d6f0adf178 -Author: zxu -Date: Wed Dec 6 16:18:13 2017 -0500 - - Firestore log offline warning (#352) - - * Firestore log offline warning iff not ever online and not log before. - -commit 631c4634fdba4cffdab879a06ec01b9df3c062ca -Author: Josh Crowther -Date: Tue Dec 5 13:14:05 2017 -0500 - - Lerna exact (#351) - - * Update packages to publish exact versions - - * Removing scopes from lerna commands - -commit 1fddc3b57f229d4d7bcb047396d3b57635bc2c05 -Author: wti806 <32399754+wti806@users.noreply.github.com> -Date: Mon Dec 4 14:47:43 2017 -0800 - - Merged first part of revamp_sign_in_methods (#344) - - * Merged first part of revamp_sign_in_methods - - * used new sign in methods in test app - - * added second part of revamp sign in methods - - * added new APIs to Auth externs - - * [AUTOMATED]: Prettier Code Styling - - * fixed indentation - - * updated auth externs for sign-in methods - - * changed format of type name is reference doc - -commit b70a30960fce937c0b625de762fa184a55002117 -Author: Robin -Date: Mon Dec 4 17:08:53 2017 +0100 - - extended build config webchannel-wrapper to support web worker - based on issue #285 (#346) - -commit cc92e4af5f9a78ac5b0bd69bc0b46463b35ac930 -Author: Greg Soltis -Date: Mon Dec 4 07:23:10 2017 -0800 - - Add Java dependency (#347) - - Closure compiler requires java 8, update docs. - -commit e979cc7793ee0a4f1c22590e4635f975615627b6 (tag: firebase@4.7.0, tag: @firebase/util@0.1.3, tag: @firebase/storage@0.1.3, tag: @firebase/messaging@0.1.4, tag: @firebase/firestore@0.2.0, tag: @firebase/database@0.1.4, tag: @firebase/app@0.1.3) -Author: Josh Crowther -Date: Thu Nov 30 13:05:22 2017 -0800 - - Publish - - - @firebase/app@0.1.3 - - @firebase/database@0.1.4 - - firebase@4.7.0 - - @firebase/firestore@0.2.0 - - @firebase/messaging@0.1.4 - - @firebase/storage@0.1.3 - - @firebase/util@0.1.3 - -commit dd8042b76e0c0d498761eb85098b4d3babff29c3 -Author: jhuleatt -Date: Wed Nov 29 14:35:29 2017 -0800 - - Remove IE9 and 10 in ENVIRONMENTS.md (#342) - - https://github.com/firebase/firebase-js-sdk/issues/341 - -commit b703bafb0a8cb36da77f12862faac195399d7d32 -Author: Josh Crowther -Date: Tue Nov 28 13:24:57 2017 -0800 - - Add .sh extension to missing scripts (#339) - -commit 790fa1af995a2f89623b477757820708f7ce8ff1 -Author: Josh Crowther -Date: Tue Nov 28 09:58:48 2017 -0800 - - Publish helper (#326) - - * Adding publish script to automate publish workflow - - * Adding scripts to aid in publishing the SDK - - * Implement @hiranya911 feedback - - * Added "prod" flag - -commit 9f356b6e9ecdf15a7eb16ca554c0c595b7ae8ccd -Author: Michael Lehenbauer -Date: Mon Nov 20 16:29:01 2017 -0800 - - Add Node.JS support to changelog. (#327) - -commit 087375c5cf1b3acadec99b93b2a63079118e6434 -Author: Michael Lehenbauer -Date: Mon Nov 20 11:36:58 2017 -0800 - - Revive Node.JS Support for Cloud Firestore (fixes #221). (#319) - - * Fix miscellaneous node / GRPC bit rot. - * Re-add grpc dependency (upgraded). - * Avoid protobufjs dependency by loading protos via grpc. - * Remove crazy grpc stream error handling nonsense that is no longer - necessary after https://github.com/grpc/grpc/pull/9101 - * Clean up grpc_connection logging (and consistently use util.inspect()). - * Fix WebChannel / GRPC Connection compatibility issues. - * Add an explicit mapping from "RPC name" (e.g. "BatchGetDocuments") to the - REST url path (e.g. "batchGet") for WebChannel, and for GRPC just assume - the first letter should be lowercased (e.g. "batchGetDocuments"). - * Split Connection.invoke() into invokeRPC() and invokeStreamingRPC(), with - the latter accepting a stream of results and aggregating them into an - array (needed to support BatchGetDocuments RPC). - * Fix serializer issues - * Query limits are an 'Int32Value' but we were serializing them as a normal - int which GRPC / protobufjs didn't like. - * Several proto "oneof tags" were outdated. - * Add build steps to copy protos into npm package. - * Run integration tests for Node.JS - * Added to 'test:node' script in package.json and in .vscode/launch.json - * Include index.ts for browser and index.node.ts for node so the appropriate - PlatformSupport gets registered. - * Misc cleanup - * Remove unused MockPlatform since we use the normal NodePlatform now. - * Remove 'google-auth-library' CredentialsProvider that we used to use for - node.js (before we were integrated with FirebaseAuth). - * Fixed several tests that were hitting node.js warnings about unhandled - promise failures. - * mocha commmand-line args: - * "--compilers ts:ts-node/register" was deprecated in favor of - "--require ts-node/register" - * Remove "--retries 5" when running mocha tests from VS Code. - * Consistently use "--require" instead of "-r" - * Add "--exit" when running from VS Code. - -commit 2e1b376206f6dc03ad0723f94802492ba0311a34 -Author: Michael Lehenbauer -Date: Fri Nov 17 09:19:01 2017 -0800 - - Add Webchannel change to changelog. (#324) - -commit 796828d979d60dd9a5ebd7f903c87f963a9d31e0 -Author: Michael Lehenbauer -Date: Fri Nov 17 08:12:10 2017 -0800 - - b/68251551: Send headers via URL Param to avoid CORS preflight round-trip. (#322) - - Send headers via URL Param to avoid CORS preflight round-trip. - -commit 7db74e6111051eab499b0d3e95fb0789200cb14a -Author: Josh Crowther -Date: Thu Nov 16 15:26:37 2017 -0800 - - Instrument Repo for Code Coverage (#268) - - * First pass coverage implementation - - * Instrumenting node coverage where appropriate - - * [AUTOMATED]: Prettier Code Styling - - * Configure to pipe to coveralls - - * Configure karma to report coverage by browser - - * Augment .travis.yml to report coverage - - * Refacor .travis.yml to use yarn for consistency - - * Refactor to properly use lcovonly reporter - - * Refactor to run coverage scripts only on success - - * [AUTOMATED]: Prettier Code Styling - -commit c5e318c0a1e6960b40542650464332d5e3b6c502 -Author: Michael Lehenbauer -Date: Thu Nov 9 16:19:23 2017 -0800 - - Update Firestore changelog. (#313) - - * changelog - - * Add React Native fix. - - * Revert "Add React Native fix." - - This reverts commit f19e49e82c2ded9e85c76667f184a792e3a29c9c. - - * Add version number, and FieldValue.delete() feature missed in the 0.1.2 notes. - -commit 1f0712ea6361d956f2e1402ca7380c8f720ee54e -Author: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> -Date: Thu Nov 9 16:14:32 2017 -0800 - - Firestore: in tests, fix SpecWatchFilter type to work on upcoming Typescript 2.7 (#310) - - * Fix definition of SpecWatchFilter:firestore tests - - Previously, the type SpecWatchFilter in spec_test_runner was specified - as a tuple, but it was later used with `push` and is actually an array with a - first element that is guaranteed to be present, and of type TargetId[]. - - In Typescript 2.7, tuples will be fixed-length and this usage will fail. - This changes the definition of SpecWatchFilter to an interface - that extends Array and whose required '0' property - is a TargetId[]. - -commit cbb07d346e59e5187ac12ff96aa52e7e3cca2b8a (tag: firebase@4.6.2, tag: @firebase/webchannel-wrapper@0.2.4, tag: @firebase/firestore@0.1.4, tag: @firebase/auth@0.2.2) -Author: Josh Crowther -Date: Thu Nov 9 15:27:35 2017 -0800 - - Publish - - - @firebase/auth@0.2.2 - - firebase@4.6.2 - - @firebase/firestore@0.1.4 - - @firebase/webchannel-wrapper@0.2.4 - -commit 6dbc3c957b22145a795e5bbb951fe8bce973db7f -Author: Josh Crowther -Date: Thu Nov 9 15:14:19 2017 -0800 - - Supply default (working) config for CI environment (#312) - -commit 7ac5c2e3f226b75e0066055c42483dbc69a2af84 -Author: Michael Lehenbauer -Date: Wed Nov 8 14:18:34 2017 -0800 - - b/68783609: Ensure test cleanup runs for failed spec tests. (#307) - -commit 43785a46a2410842be7f748fe8f5f515959140d1 -Author: Michael Lehenbauer -Date: Wed Nov 8 12:25:08 2017 -0800 - - Upgrade closure-builder to fix #183. (#304) - -commit 14c0a37459518d5283487c954cbfcce0a420a9f5 -Author: Michael Lehenbauer -Date: Wed Nov 8 11:43:32 2017 -0800 - - Ensure test cleanup runs after failed tests. (#305) - -commit d2b14365957779e350759b3dafded30b76f267a5 -Author: Michael Lehenbauer -Date: Tue Nov 7 18:40:51 2017 -0800 - - Remove no-longer-necessary asyncIt wrappers. (#302) - -commit 88c85ef639657bc172ed14f20ecb80ec1f4aa404 -Author: Sebastian Schmidt -Date: Tue Nov 7 16:32:04 2017 -0800 - - Sending an empty write request before tearing down the WriteStream. (#297) - -commit c8bcb678454ad850d2959d50a9dce2ce6a602fd4 -Author: Michael Lehenbauer -Date: Tue Nov 7 00:49:11 2017 +0100 - - b/68058918: Async Queue error handling testing / improvement. (#296) - - * Adds testing to ensure that the original error is preserved and propagated in - the face of multiple failures in the queue (this already worked). - * Adds an asynchronous exception on queue failures so that they can be caught by - crash reporting libraries (otherwise, only subsequent failures with - "AsyncQueue is already failed: ..." would be caught). - -commit 4803cd38f99137bedfc773a528268b406e2ab33a -Author: Michael Lehenbauer -Date: Tue Nov 7 00:20:56 2017 +0100 - - b/67049845: Remove error logging on failed WebChannel RPCs. (#299) - - (and also remove inaccurate comments / logs about retrying) - -commit e6c1653d5b4cb871df0569d3280bd5776eb9d4b4 -Author: Michael Lehenbauer -Date: Mon Nov 6 23:11:48 2017 +0100 - - Fix broken Firestore test. (#298) - - This test had two problems: - - 1. After reading the document a second time (as doc) it was validating fromCache on the old version (snapshot). - 2. It wasn't returning the Promise, causing the failure to happen asynchronously and not be noticed by mocha. - - This in turn seems to have (sometimes?) caused errors about offline persistence being enabled in a different tab. I fixed the test and implemented it with more chaining instead of nesting. :-) - -commit d43d461aaa2496d4cd12fd593373f6dad214716f -Author: Sebastian Schmidt -Date: Fri Nov 3 18:40:15 2017 -0700 - - Closing the write and the watch stream after 60s of idleness (#275) - -commit 369b411b52de56ad38c82993c9dca4b6bd7b82a4 -Author: bojeil-google -Date: Thu Nov 2 17:14:39 2017 -0700 - - fix(auth): fixes various Auth bugs. (#287) - - Fixes verifyAssertion unrecoverable errors when returnIdpCredential is set to true. - In this case, the error code is returned along with the credential in the errorMessage without any - ID token/refresh token. - - Catch, suppress/handle when localStorage is null or when `localStorage.getItem` - throws a security error due to access being disabled by the browser for whatever reason. - -commit 7dc12c2cad4652b64ec1a78b00c6376082845005 -Author: bojeil-google -Date: Thu Nov 2 16:22:50 2017 -0700 - - Adds a demo app to help test and facilitate Firebase Auth API development (#279) - - * Adds a demo app to help test and facilitate Firebase Auth API development. - -commit 60d8f4f6ec7a222014f389352d732b3a556eed0b -Author: Josh Crowther -Date: Thu Nov 2 15:48:32 2017 -0700 - - Disable automatic integration tests (#289) - -commit 0ea11f25910615b5a9643b44177356ca6374dc13 (tag: firebase@4.6.1, tag: @firebase/util@0.1.2, tag: @firebase/storage@0.1.2, tag: @firebase/polyfill@0.1.2, tag: @firebase/messaging@0.1.3, tag: @firebase/firestore@0.1.3, tag: @firebase/database@0.1.3, tag: @firebase/auth@0.2.1, tag: @firebase/app@0.1.2) -Author: Josh Crowther -Date: Thu Nov 2 15:06:26 2017 -0700 - - Publish - - - @firebase/app@0.1.2 - - @firebase/auth@0.2.1 - - @firebase/database@0.1.3 - - firebase@4.6.1 - - @firebase/firestore@0.1.3 - - @firebase/messaging@0.1.3 - - @firebase/polyfill@0.1.2 - - @firebase/storage@0.1.2 - - @firebase/util@0.1.2 - -commit 305a3f95d18f99912970f120194f060a0db30ecb -Author: Josh Crowther -Date: Thu Nov 2 15:02:42 2017 -0700 - - Update publish scripts - -commit 53d762207a1369f2c5cd9c647bfd83d0a21cf33c -Author: Josh Crowther -Date: Wed Nov 1 19:00:28 2017 -0700 - - Adding new auth code owner (#288) - -commit eedae9b4f255a3a985f45da7fddff4411308241a -Author: Josh Crowther -Date: Wed Nov 1 15:13:12 2017 -0700 - - Add a debug script to integration/firestore (#286) - -commit f2c4e6dbbcc32adc475545166801ef2006ea6b69 -Author: Josh Crowther -Date: Tue Oct 31 14:15:09 2017 -0700 - - Pin Node version to 8 (released as LTS) (#282) - -commit a7c71d4f97db69ed5e061dc1fce4ca05c6a928d9 -Author: Josh Crowther -Date: Tue Oct 31 10:59:24 2017 -0700 - - Temporarily disable flakey messaging tests (@gauntface to investigate) (#281) - -commit 263596a6aeb059acf19a619b00716b9a0ae624c4 -Author: Josh Crowther -Date: Mon Oct 30 16:49:58 2017 -0700 - - Open Source Firebase Authentication (#273) - - * Open source Firebase Auth - - * Cleans up some comments in the Auth open sourced code. - - * Recommiting yarn.lock - -commit dc17ad5531c531504c5df7aca7fb4c3f9d373feb -Author: Josh Crowther -Date: Mon Oct 30 14:20:26 2017 -0700 - - Update Package Dependencies (#270) - - * Update dependencies throughout application - - * Adjust to mocha 4 breaking runner issues - - * Updating webpack dep - -commit 41f80d0aadb6dc9d9c85e731887ddcbe772b5c04 -Author: Todd Pressley -Date: Mon Oct 30 17:16:15 2017 -0400 - - typo in comment (#276) - -commit deedb015d3bd7b63dca10459f87180a73e5c77a9 -Author: Josh Crowther -Date: Fri Oct 27 11:07:15 2017 -0700 - - Refactor messaging integration test to retry test failures (#271) - -commit 53d13c56323f5940d4955b2d366c6dbc3aae9d51 -Author: Josh Crowther -Date: Wed Oct 25 16:34:07 2017 -0700 - - Fixing Typings for RTDB (#264) - - * Re-exported the typings from database for admin use case - - * [AUTOMATED]: Prettier Code Styling - - * Fixing case issue - - * Whoops, missed one - -commit e1dceac317168fb7017ddf84a49c3c3cac1601c0 -Author: Sebastian Schmidt -Date: Wed Oct 25 13:55:47 2017 -0700 - - Creating Stream Tests for the Web Client (#260) - -commit 0f888d1272e02ade50c40e49f6b187b8f1c0c98a -Author: Michael Lehenbauer -Date: Wed Oct 25 13:05:36 2017 -0700 - - Firestore typings fix: Add firestore() to firebase.app.App. (#263) - -commit fba3c06cfd7baee797c1bec629ade4c200b01d18 -Author: Michael Lehenbauer -Date: Mon Oct 23 10:11:09 2017 -0700 - - Fix generate_spec_json script. (#257) - - * The tsconfig path was broken after the recent repo refactor. - * We were accidentally leaving a .ts in the destination json file names. - * I made it so the destination directory doesn't need to exist in advance. - -commit e104359325f970e84360309a71a7c07d7f67aa05 -Author: Gil -Date: Mon Oct 23 09:27:23 2017 -0700 - - Update CHANGELOG for Firestore v0.1.2 (#254) - -commit 52a4cdffd0a6d41f224c4d1c20312e1c8ee17133 -Author: Josh Crowther -Date: Mon Oct 23 08:07:30 2017 -0700 - - Update the test:setup script to configure firestore settings (#240) - - * Update test:setup command to configure firestore - - * [AUTOMATED]: Prettier Code Styling - - * Add required "indexes" field - - * Update the README.md for firestore - -commit b7566d11f52f34e41e5c3349c8db0f9349e937cd -Author: Sebastian Schmidt -Date: Sat Oct 21 18:34:30 2017 -0700 - - Allowing field deletes with merge-enabled sets (#248) - -commit a8181f4560725b902daab1dc3d31a48f3f96e919 -Author: Michael Lehenbauer -Date: Fri Oct 20 15:31:40 2017 -0700 - - Avoid using hardcoded document paths which could cause conflicts when tests are running concurrently (e.g. on Travis). (#250) - -commit eba194f7ec4a2e8b4fe6c365fa4407c5e1922c99 -Author: Michael Lehenbauer -Date: Fri Oct 20 10:07:49 2017 -0700 - - Dev-X improvements for running Firestore tests. (#243) - - See new packages/firestore CONTRIBUTING.md doc for new abilities. - - Changes: - * Add --local flag to run against a localhost Firestore server. - * Add --unit and --integration flags to limit to unit or integration tests. - * Make --grep work with karma / mocha to limit the tests that run. - * Change default karma port to 8089 to avoid conflicting with localhost - Firestore server on 8080 (and other common web servers that default - to 8080). - -commit 8db58d37ba420c793b2ac7561d8dd9d39cec3ff9 (tag: firebase@4.6.0, tag: @firebase/messaging@0.1.2, tag: @firebase/firestore@0.1.2, tag: @firebase/database@0.1.2, tag: @firebase/auth@0.2.0) -Author: Josh Crowther -Date: Thu Oct 19 15:12:52 2017 -0700 - - Publish - - - @firebase/auth@0.2.0 - - @firebase/database@0.1.2 - - firebase@4.6.0 - - @firebase/firestore@0.1.2 - - @firebase/messaging@0.1.2 - -commit f5e674c5c6e8a056c08dfee69b78c637f7432430 -Author: bojeil-google -Date: Thu Oct 19 10:30:08 2017 -0700 - - fix(externs): fix missing auth externs for 4.6.0 (#241) - - * fix(externs): fix missing auth externs for 4.6.0 - - * Update auth typings - - * [AUTOMATED]: Prettier Code Styling - -commit f046e0e5d7657ea9d57a5103c366fee15095d278 -Author: Josh Crowther -Date: Wed Oct 18 15:34:10 2017 -0700 - - Leverage Cached Token from firebase-tools (#215) - - * Build in a check for the cached firebase-tools refresh_token - - * [AUTOMATED]: Prettier Code Styling - -commit 0a6ad04befd820ec52b05040e86ff52a62e37fa5 -Author: Matt Gaunt -Date: Wed Oct 18 15:15:31 2017 -0700 - - Tidy firebase-messaging Tests (#232) - - * Tidied tests to more reliably close and delete indexedDB databases before and after each test - - * Update package.json - -commit 3ca20c7a562d007091b4fc27d64ad7fffefa28e1 -Author: Josh Crowther -Date: Wed Oct 18 13:11:55 2017 -0700 - - Fixing named prop "_lat" (#238) - - * Fixing named prop "_lat" - - * Adding comment to regex - -commit c2e1d3db632704bb6ac797d41bd63d07d1055f56 -Author: Michael Lehenbauer -Date: Wed Oct 18 11:26:59 2017 -0700 - - Try to address flaky database transaction tests. (#235) - - The test "Transaction without local events (2)" is inherently racey (we're trying to do 4 sets on one connection before the other connection retries the transaction 25 times). And when it fails, it could cause the rest of the tests to fail by not calling restoreHash(). So I've disabled the test and made the restoreHash handling a bit more robust so similar cascading failures can't happen in the future. - -commit f13188b0f98d635a3148a58ebcb3a2d27c87e094 -Author: Josh Crowther -Date: Wed Oct 18 11:23:36 2017 -0700 - - Reimport auth from internal (#237) - -commit 326a187ae83648314680470e246dd9c4a22d16cc -Author: Gil -Date: Wed Oct 18 10:12:33 2017 -0700 - - Add an initial CHANGELOG for firestore (#233) - - * Add an initial CHANGELOG for firestore - - * Add notes for v4.5.1 - - * Use Firestore package versions, not global Firebase versions - - * Empty commit - -commit 383f772c1e75e1148517ca352af3d1dc87bb40f9 -Author: Gil -Date: Tue Oct 17 15:25:55 2017 -0700 - - Fix validation of nested arrays to allow indirect nesting (#228) - - * Fix validation of nested arrays to allow indirect nesting - - With this change indirectly nested arrays are allowed. We still disallow - directly nested arrays. - - Fixes internal bug b/66253451. - - Port of https://github.com/firebase/firebase-ios-sdk/pull/377 - - * Add IntelliJ .iml files to .gitignore - - * Use comments to name literal arguments - -commit 4b555720172c71c8a4b70fad89193a4330b01840 -Author: Michael Lehenbauer -Date: Mon Oct 16 16:07:11 2017 -0700 - - Firestore: Add isEqual() and port DocumentReference array test. (#222) - - * Ports the test for the fix I made for Android for DocumentReference objects in arrays (bug not present in Web). - * Implements isEqual() on Query and DocumentReference - -commit 646dbb2dca6f099fa325b14ce85364275ac4b647 (tag: firebase@4.5.2, tag: @firebase/webchannel-wrapper@0.2.3, tag: @firebase/util@0.1.1, tag: @firebase/storage@0.1.1, tag: @firebase/polyfill@0.1.1, tag: @firebase/messaging@0.1.1, tag: @firebase/firestore@0.1.1, tag: @firebase/database@0.1.1, tag: @firebase/auth@0.1.1, tag: @firebase/app@0.1.1) -Author: Josh Crowther -Date: Mon Oct 16 10:24:54 2017 -0400 - - Bump firebase NPM packages - - - @firebase/app@0.1.1 - - @firebase/auth@0.1.1 - - @firebase/database@0.1.1 - - firebase@4.5.2 - - @firebase/firestore@0.1.1 - - @firebase/messaging@0.1.1 - - @firebase/polyfill@0.1.1 - - @firebase/storage@0.1.1 - - @firebase/util@0.1.1 - - @firebase/webchannel-wrapper@0.2.3 - -commit 9777c4b8533ce4dbeee97354743af8eac4523948 -Author: Josh Crowther -Date: Mon Oct 16 06:46:48 2017 -0700 - - @firebase/app Version Fix (#227) - - * Replace version in @firebase/app, add test to validate - - * [AUTOMATED]: Prettier Code Styling - -commit 95d04900d0558b2c6075474d7aaf57755259e5b2 -Author: Josh Crowther -Date: Mon Oct 16 06:13:13 2017 -0700 - - Add "react-native" prop to firebase/package.json (#224) - -commit f696a8fd511dcde1e703b2e63cef39e1ff0042a0 -Author: Josh Crowther -Date: Thu Oct 12 16:39:40 2017 -0700 - - Adding an entrypoint for firebase-admin-node (#216) - - * Expose init function for admin SDK - - * Fixing issues with module.exports for @firebase/database - - * [AUTOMATED]: Prettier Code Styling - - * Refactor namespaces -> namespace - -commit 9f4fb913e042ea2cb743a0b5ad81610540527447 -Author: Josh Crowther -Date: Thu Oct 12 15:07:21 2017 -0700 - - Refactor firestore int tests to be a private package (#218) - -commit 3e78ff3905ba06ccba6334787d754fa141f4d80c -Author: Josh Crowther -Date: Thu Oct 12 14:59:37 2017 -0700 - - Disabling travis branch restriction (#219) - -commit 6c4c2aad6e38d6ff2606d047899b63539f44a622 -Author: Michael Lehenbauer -Date: Thu Oct 12 14:42:38 2017 -0700 - - b/66916481: Reenable serializer unit tests. (#214) - - * Imports the protos we need (and adds an update.sh to re-import in the future) - * Reenables our serializer unit tests (for node only). - -commit fbb5f17d8eed279f652ba7087767205fdb7b333d (tag: v4.5.1) -Author: Josh Crowther -Date: Thu Oct 12 12:46:42 2017 -0700 - - Removing duplicate require (#217) - -commit 93622b217e0b49a05bc0fbbba00658950fa38d6e -Author: Michael Lehenbauer -Date: Thu Oct 12 10:54:16 2017 -0700 - - Firestore: Exclude node tests in the browser. (#213) - -commit 0a574801d3b3decd4fbd0b148307d5021c9e9e5c -Author: Josh Crowther -Date: Thu Oct 12 10:01:37 2017 -0700 - - Update READMEs of all of the packages (#210) - -commit 31d0f8dce31d73b4419459548b1b9081a3d9dbed -Author: Josh Crowther -Date: Wed Oct 11 17:23:57 2017 -0700 - - Removing storage/messaging from node build (included by accident) (#209) - -commit 33f1a0d0ef91b6a5072a9cb0f42ff25fb4d596dc -Author: Josh Crowther -Date: Wed Oct 11 17:18:05 2017 -0700 - - Fix default include problem (#208) - -commit 7b790bddcfb729740cb2cd96115fb33ec844ac21 -Author: Michael Lehenbauer -Date: Wed Oct 11 15:50:43 2017 -0700 - - Expose enable/DisableNetwork() via INTERNAL so it can be used in tests (but don't add to our .d.ts at least for now). (#207) - -commit 9a82f4360da1347fb1e7855b82b86d7cd0fcaa5a -Author: Josh Crowther -Date: Wed Oct 11 10:39:43 2017 -0700 - - Augmenting .npmignore and .gitignore (#206) - -commit de8c146c2593e292e5e0d49b1cc1e6828dc18c40 -Author: Josh Crowther -Date: Wed Oct 11 10:16:05 2017 -0700 - - Adding Firestore minified int tests (#199) - - * Fixing firestore integration tests - - * Regen yarn.lock - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Refactor timeout/retry logic to be globally applied - - * Documenting changes to firestore int tests - - * Fixing tests to properly build the firestore int tests - - * Trim dist directory for consistent rebuilds - - * [AUTOMATED]: Prettier Code Styling - - * Fixing some whitespace issues - -commit 1d9f803e50d6d26d770880567e34735fa37d0bf3 -Author: Sebastian Schmidt -Date: Wed Oct 11 17:40:27 2017 +0200 - - Adding goOnline/goOffline to the Web SDK (#201) - -commit d15d48c8358d1042de33d63f942ac678ff50d36f -Author: Bryan Klimt -Date: Tue Oct 10 16:12:57 2017 -0700 - - Update README files to fix names of packages. (#204) - -commit 3f827b82aa83cb6b5538bb7881f3253e9af0d15f -Author: Josh Crowther -Date: Mon Oct 9 14:17:37 2017 -0700 - - Fix for issue where firestore could not be loaded alongside firebase.js (#196) - - * Add gulpfile to properly build firebase.js binary - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Update yarn.lock - - * Refactor to use external maps (THANKS @mikelehen) - - * Add firebase files to .prettierignore - -commit d49daa04dee5bdae84cdb038cd9cf4b3b747c6a4 -Author: Michael Lehenbauer -Date: Mon Oct 9 13:39:54 2017 -0700 - - Avoid "private" getter _databaseId, since it breaks the minified build. (#197) - - Avoid "private" getter _databaseId, since it breaks the minified build. - - This should work fine, but there seems to be an issue with our minification process where usages of _databaseId get minified but the actual property does not, causing runtime errors. :-( - - I've opened https://github.com/firebase/firebase-js-sdk/issues/194 and https://github.com/firebase/firebase-js-sdk/issues/195 to track the underlying causes. - -commit 73a586c92afe3f39a844b2be86086fddb6877bb7 -Author: Josh Crowther -Date: Fri Oct 6 20:15:50 2017 -0700 - - Monorepo Refactor (#171) - - * Refactor monorepo to use yarn workspaces and lerna - - WIP: testing - - Refactor folder structure to use lerna - - WIP: more testing - - feat(util): add deferred class - - Publish - - - @firebase/app@0.1.1 - - @firebase/util@0.2.0 - - WIP: asdoifj - - WIP: build artifact - - WIP: asdf - - Cleaning up from .gitignore - - Add prepublish script - - Isolate base configs - - Making top level scripts parallel - - Adding storage - - Add messaging - - Adding database code - - TODO: Fix all of the broken issues and import the rest of the utils - - Adding type info - - add database - - Adding firebase package - - Generating ES Module builds - - Attaching firebase.js to the global scope - - Adding lint-staged to the build - - Removing commitizen dependency - - Updating metafiles - - Working on devx - - Add react-native package - - Move packages/firebase -> packages/core - - Fix issues with package.json - - Bump core version - - testing a thing - - Add more entries to the .npmignore - - * Refactor to better separate ESM/CJS builds - - * Adding test:setup script - - * Fix breaking test (sourcemaps loaded in the test breaks the regex) - - * Remove commitizen message from CONTRIBUTING.md - - * WIP: Migrate integration tests - - * Adding namespace integration tests - - * Add messaging integration tests - - * Fix issue with indv-module builds - - * Committing yarn.lock - - * Import 4.4.0 Changes - - * Add dev scripts, move core -> firebase - - * Add missing dependencies, flesh out dev experience - - * Add top level repl for test/debugging - - * Make the REPL pretty - - * Refactor to scope prepublish execution - - * Add @firebase/auth - - * Fixing broken int tests - - * Picking up missing changes from edad44d9bc30689635e994c9d4ba99adfb799af7 - - * Adding comment to .prettierignore - - * Fixed issue where firebase didn't exist on reset - - * Update yarn.lock for lint-staged - - * Refactor test setup script and .travis.yml - - * Fix firebase package dep versions - - * Refactor precommit hook -> prepush hook - - * [AUTOMATED]: Format Styling - - * Update prettier and prettierrc - - * [AUTOMATED]: Format Styling - - * Adding dist to .prettierignore - - * Fixing some oddities in yarn.lock - - * Refactor hooks prepublish -> prepare - - * Updating top-level scripts - - * Add pretest validation/checking - - * [AUTOMATED]: Prettier Code Styling - - * Running travis tests w/ xvfb-run - - * Add a spinner instead of the prettier stdio - - * update yarn.lock - - * [AUTOMATED]: Prettier Code Styling - - * Fixing child process STDOUT - - * [AUTOMATED]: Prettier Code Styling - - * Switch to using stopAndPersist() - - * Moving file gitHooks/index.js -> gitHooks/prepush.js - - * Remove legacy .lintstagedrc - - * Add typinngs file for those only including fiebase/app - - * Add initial stub for @firebase/polyfill - - * Adding new clean yarn.lock - - * Refactor const -> var (no transpiling) - - * Add automated license header validation - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Aesthetic prepush validation things - - * [AUTOMATED]: Prettier Code Styling - - * Add karma-sauce-launcher - - * Attempt 1: Try to get saucelabs browser testing working - - * Attempt 2: Adding sauceLabs config prop to karma.base - - * [AUTOMATED]: Prettier Code Styling - - * Attempt 3: Getting rid of the connectOptions - - * [AUTOMATED]: Prettier Code Styling - - * Fix CODEOWNERS - - * Add module boilerplate for @firebase/firestore - - * Refactor Firestore source to standalone package - - * Remove unneeded typings - - * Remove unneeded promise dependency - - * Fix top level paths - - * Bump firebase package version - - * Fix firestore source paths - - * Fix @firebase/app reference - - * Refactor to fix TSC errors - - * Refactor to make node unit tests work - - * Publish - - - @firebase/app@0.1.0 - - @firebase/auth@0.1.0 - - @firebase/database@0.1.0 - - firebase@4.5.1 - - @firebase/firestore@0.1.0 - - @firebase/messaging@0.1.0 - - @firebase/polyfill@0.1.0 - - @firebase/storage@0.1.0 - - @firebase/util@0.1.0 - - * Add firestore to main firebase binary - - * Pin firebase package to strict versions - - * Fix browser firestore tests - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Changing base karma browsers - - * Disabling cross-browser karma tests - - * [AUTOMATED]: Prettier Code Styling - - * Removing sauce_connect addon from .travis.yml - - * Refactor messaging test script - - * Refactor the browserNoActivityTimeout - - * [AUTOMATED]: Prettier Code Styling - - * Adding polyfills to the main browser bundles - - * Add firestore/README.md - - TODO(jshcrowthe): Fix these tests per the comments in this file - - * Fix firestore VSCode scripts - - * Fix regex for firestore __data__ prop - - * [AUTOMATED]: Prettier Code Styling - - * Initial Commit - - * Add a brief README.md - - * Add *.tgz to .npmignore - - * Publish: v0.1.1 - - * Turn on advanced optimizations for this code - - * Leverage "ADVANCED_OPTIMIZATIONS" mode in closure compilation - - * 0.2.0 - - * Add XhrIo prototype overrides - - * 0.2.1 - - * Remove unneeded lockfile - - * Fixing dependency versions - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * TEMP: Remove saucelabs reporter - - * Fix prettier styling bug (fights with closure) - - * Update firebase/app typings - - * Leverage default exports - - * Updating top-level README.md - - * Refactor mocha timeout to be 20 seconds for firestore - - * Addressing some review comments from @mikelehen - - * temp - - * Fixing license header spacing issues - - * Refactor license header check - - * [AUTOMATED]: Prettier Code Styling - - * [AUTOMATED]: License Headers - - * Revert "[AUTOMATED]: License Headers" - - This reverts commit 559068ceb070519f39207e15886e147787cd941a. - - * Revert "Refactor license header check" - - This reverts commit 34c671ab9730d6480e487b6ddcd7283f7df3979a. - - * Fixing more license headers - - * Add @wilhuff and @wti806 to CODEOWNERS - - * Adding one more --auto-watch flag - - * Add 3 retries to firestore tests - - * Bumping browserNoActiityTimeout - - * @firebase/app - package.json housekeeping - - * @firebase/auth - README.md housekeeping - - * @firebase/database - README.md housekeeping - - * @firebase/firestore - README.md housekeeping - - * Updating auth readme - - * @firebase/messaging - README.md housekeeping - - * Updating database readme - - * Fixing issue with messaging/package.json (copy-paste fail) - - * @firebase/polyfill - README.md housekeeping - - * @firebase/storage - README.md housekeeping - - * @firebase/util - README.md housekeeping - - * Fixing package.json repo links - - * Refactor from PromiseLike -> Promise - - * Add firebase externs - - * [AUTOMATED]: Prettier Code Styling - - * Fix license values in package.json - -commit 8bbbece1e8978ea92a23a49e2d5d7f02052f4c69 -Author: Sebastian Schmidt -Date: Fri Oct 6 14:09:26 2017 -0700 - - fix(Firestore): Rejecting 'null' and 'undefined' as arguments for CollectionRef.doc() (#188) - -commit 7593f5ef268867d922491dc6acb91150347fb746 -Author: bojeil-google -Date: Thu Oct 5 14:49:56 2017 -0700 - - fix(externs): fix auth externs (#186) - - Updates Auth references with the missing OAuthCredential and OAuthProvider classes. In addition adds the missing data from ActionCodeInfo. - -commit f49c8b5c50919014d852847c755d0eb13a0fc803 (tag: v4.5.0) -Author: Josh Crowther -Date: Tue Oct 3 07:16:32 2017 -0700 - - Add Cloud Firestore Support - -commit da87982ad06e15c1430419b4ac01de5ae7fd9bfe -Author: Gil -Date: Wed Sep 27 18:15:27 2017 -0700 - - Add licenses to files that are missing them (#172) - -commit 88bbce8aeb676ffc456de84cec76b86bff5cca68 -Author: Gil -Date: Wed Sep 27 18:15:15 2017 -0700 - - Fix indentation in license headers (#173) - - * Fix license indent for js files - - * Fix license indent for ts files - -commit b8c9782f3d20d359141626bce51b7c7b55d18f22 -Author: Michael Lehenbauer -Date: Thu Sep 21 17:13:16 2017 -0700 - - fix(typings): Remove incorrect firebase.Promise type definition. (#165) - - We were defining our own Promise type, but it's not compatible with the normal - es2015.promise type definition, which can result in compile errors if you try to - use them together. - -commit bfcd89e596f4cc90f7e4afecf9cb4d740cda5b65 -Author: Josh Crowther -Date: Thu Sep 21 16:40:48 2017 -0700 - - chore(publish): 4.4.0 (#162) - - * WIP: update yarn.lock - - * WIP: Import Auth - - * chore(publish): 4.4.0 - -commit 942874a551dc885cb7a7ade469ef263a10f5bad9 -Author: Josh Crowther -Date: Thu Sep 14 17:28:21 2017 -0700 - - fix(externs): fix auth externs (#160) - - * fix(externs): fix auth externs - - * refactor(auth): Refactor firebase.auth.Auth instantiation - -commit edad44d9bc30689635e994c9d4ba99adfb799af7 -Author: Josh Crowther -Date: Thu Sep 14 15:38:10 2017 -0700 - - feat(database): enable database multi-resource support (#159) - - * feat(database): enable database multi-resource support - - * refactor(database): fix property names - -commit c4d6e20de936c06ba2f0ea126f8b8021997d7eda -Author: Josh Crowther -Date: Thu Sep 7 13:42:59 2017 -0700 - - chore(release): 4.3.1 (#153) - -commit cd49e2b733346c8767ec4182d98be2bbfd6bcf8d -Author: Matt Gaunt -Date: Wed Sep 6 11:24:05 2017 -0700 - - Messaging smoke test (#129) - - * test(messaging): Smoke tests - - * test(messaging): Adding full test logic - - * test(messaging): Adding integration tests in new folder - - * fix(messaging): fixed a small runner issue to ensure each run is reproducable - - * refactor(travis.yml): make it so push commits only run on master - - * fix(messaging): Add mocha devDep - -commit c4fbf8bb49d38b1a8b9f3a6c51e814ee120db742 -Author: bojeil-google -Date: Wed Aug 23 12:09:27 2017 -0700 - - fix(externs): Added externs for 4.3.0 release. (#140) - - * fix(externs): Added externs for 4.3.0 release. - - * docs(typings): updating typings from externs - -commit 3652c1d42997a1fdc413efd2d756483e857bbcc1 -Author: Josh Crowther -Date: Thu Aug 17 14:05:52 2017 -0700 - - chore(release): 4.3.0 (#135) - - * chore(release): 4.3.0 - - * feat(auth): import from auth source (8/16/2017) - -commit e71cc70fe44d4cee950361113235cbd802e248bf -Author: Sebastian Schmidt -Date: Wed Aug 16 19:20:48 2017 -0700 - - fix(database): Including bandwidth usage in error message for queries without indexes (#138) - -commit bca804a61665ce0ad1d08ec6ac595a35035ff4c5 -Author: Josh Crowther -Date: Tue Aug 15 14:21:18 2017 -0700 - - refactor(test): Refactor integration test suite (#131) - - * refactor(test): refactor to leverage a test matrix in CI environments - - WIP: fiddling with Travis YML Jobs - - WIP: refactor build matrix - - WIP: remove integration tests (Will reimpl) - - WIP: remove files that snuck in - - WIP: remove unneeded arg - - WIP: add node_modules bin to path - - fix(*): remove project config (intended to be supplied) - - WIP: reset TEST_ENV for int tests - - WIP: update Travis yarn dep - - WIP: use before_install script instead of install script - - * WIP: slight glob refactor - - WIP: reimplement browserify/webpack integration tests - - WIP: fiddling with int test CI - - WIP: build matrix for Integration tests (parallelize those jobs too) - - WIP: trying to parallelize int tests - - WIP: remove unneeded env assignment - - WIP: blahhh... - - WIP: should work... - - WIP: removing env - - WIP: removing test harness I haven't started yet - - test(typescript): add typescript namespace tests - - * refactor(tests): refactor test harness to be more isolate - - * docs(integration-tests): add README.md to explain high level concepts - - * test(integration): add service worker testing - - * refactor(tests): better isolate the tests from the main package by leveraging their own binaries - - * fix(storage): remove unnecessary console.log statements - - * fix(travis.yml): remove unneeded test script argument - - * test(quickstart): add quickstart integration tests - - refactor(quickstart-tests): refactor to use FIREBASE_PROJECT as an env var rather than an arg - - fix(tests): ensure that the wdio binary is pointing to the proper location - - fix(deps): add dep to quickstart package.json - - refactor(deps): move ts-node dep to devDeps - - fix(quickstart-tests): run tests on saucelabs - - WIP: refactor to remove reload (causing flakiness issues) - - refactor(quickstart): refactor to only navigate to the base URL instead of reloading the page - - fix(quickstarts): fix timing issue with reloads - - WIP: try limiting the scope to the :first-child - - WIP: refactor the tests to reference the intended post directly rather than indirectly. - - WIP: refactor to not iterate - -commit 16ca08bf45065b7c6a253dfe5043fdd6683e8881 -Author: Tyler Rockwood -Date: Sat Aug 12 10:26:15 2017 -0700 - - Remove the need to return undefined in typings (#126) - - * Remove the need to return undefined - - Fixes: https://stackoverflow.com/questions/45386915/wrong-function-definition-in-typescript - - * Also fix firebase.d.ts - -commit 7ccc77c6b2e30d9aeb0df36b028a0f1d3714dcc4 -Author: Josh Crowther -Date: Fri Jul 28 12:00:02 2017 -0700 - - Contributing updates [triage-skip] (#113) - - * WIP: update CONTRIBUTING.md - - * WIP: 1st draft contributing guidelines - - * WIP: slight updates - - * WIP: updates from review - - * WIP: changes from @hiranya911 - -commit 63d77684e1cefb6b5342d5eda4dc778fad1edf37 (tag: v4.2.0) -Author: Josh Crowther -Date: Thu Jul 27 15:37:43 2017 -0700 - - chore(publish): 4.2.0 (#109) - -commit 4b6936a6be64fb03a07b458c308b079a0d5a417b -Author: Josh Crowther -Date: Thu Jul 27 13:56:10 2017 -0700 - - fix(ie11): add Array.prototype.find/findIndex polyfills (#115) - - These two functions are part of ES2015 and are not present in IE11. In the migration we removed - closure compiler which was injecting these by default - -commit c58719c13862e59e91145d9566bc323bee2eaa9d -Author: bojeil-google -Date: Tue Jul 25 15:53:25 2017 -0700 - - feat(auth): Adds support to specifying Auth state persistence. (#105) - - * feat(auth): Adds support to specifying Auth state persistence. - fix(auth): Adds missing phoneNumber property in UserInfo. - fix(auth): Fixes incorrect return type in reauthenticateAndRetrieveDataWithCredential. - - * docs(*): automatic .d.ts update from externs - - * feat(auth): import from auth source - -commit bc1f67c448804a28fa64e91611ea60398890bcaa -Author: Josh Crowther -Date: Tue Jul 25 15:53:09 2017 -0700 - - style(*): Automate Code Formatting (#90) - - * style(*): add prettier automation - - * fix(deps): fix issue where new typescript version was causing errors in the build - - Something breaks in version 2.4.1 of typescript. We are pinning to 2.3.0 till those things can be - triaged and fixed - - * WIP: remove tslint.json - - Temporarily removing this file as we don't pass the checks - - * refactor(style): refaactor to prefer single quotes over double quotes - - * style(*): run prettier on codebase - -commit d9e0ce9e7648d7b2fa88b2b1235bb7b0a891b1b6 -Author: Sebastian Schmidt -Date: Tue Jul 25 09:41:47 2017 -0700 - - fix(database): Adding toJSON() method to TransactionResult (#104) - - * fix(database): Adding toJSON() method to TransactionResult - - * fix(database): Making return type of toJSON explicit - -commit 1c300d90f0b2d992e569784aca6072624ab9bacd (tag: v4.1.5) -Author: Josh Crowther -Date: Tue Jul 25 00:34:03 2017 -0600 - - chore(publish): 4.1.5 (#108) - -commit 8553caaa4bfe1a141cadb6d7b2e21ca9b96890ce -Author: Josh Crowther -Date: Tue Jul 25 00:23:15 2017 -0600 - - fix(database): fix issue with base64Decode (#107) - - ISSUES CLOSED: 106 - -commit c8dfea3edfeb03403e3c303adbc9ad866e8a49da -Author: Sebastian Schmidt -Date: Mon Jul 24 13:14:13 2017 -0700 - - fix(*): Fix compilation problems in my local environment (#98) - - * fix(*): Fix compilation problems in my local environment - - * fix(deps): update typescript, ts-loader, and karma-typescript versions - - * docs(tests): update README.md to include the necessary project.json instructions - - * fix(comment): Adding comment on TS compiler - -commit 2f989fb5800850f694e572b18de3fa38e44b9057 (tag: v4.1.4) -Author: Josh Crowther -Date: Mon Jul 24 11:09:28 2017 -0600 - - chore(publish): 4.1.4 (#96) - -commit bcd13ad7174dc45bc7976c8f687fe969ead77c22 -Author: Josep Sayol -Date: Thu Jul 13 02:54:44 2017 +0200 - - refactor(build): Refactor build process to generate smaller bundles - - * fix(build): generate smaller bundles - - * WIP: address review comments - -commit 00f9c37543b6250f601f524bb50408ccf1c56bd9 -Author: Josep Sayol -Date: Sat Jul 8 22:56:41 2017 +0200 - - refactor(database): Add types to several classes and utility methods (#66) - - * refactor(database): Several classes and utility methods - - * WIP: fix tests with recent type changes - - * refactor(database): Type casting format for TSX support - - * refactor(database): Add 'noImplicitAny' support - Adds support for the 'noImplicitAny' Typescript compiler option to the database implementation. - -commit 58fc4c9d21b07f9a0677e2296f7dc6d8ad40fca7 -Author: Josh Crowther -Date: Fri Jul 7 15:21:36 2017 -0700 - - fix(externs): fix window var provided extern (#93) - -commit 36f81f8a310f5a645446c1893d96ae3213bc427b -Author: Josh Crowther -Date: Fri Jul 7 14:03:16 2017 -0700 - - chore(*): add license headers (#92) - -commit e67c9bf5824d78fbac19836a491da223f2d5ca90 -Author: Josh Crowther -Date: Thu Jul 6 16:27:46 2017 -0700 - - Update CODEOWNERS - -commit 6b08de17bed7245a0d9c6431cc92e9658e2c13ad -Author: Josh Crowther -Date: Thu Jul 6 16:22:34 2017 -0700 - - Update CODEOWNERS - - Add @schmidt-sebastian to database codeowners - -commit a2c04b84afdb3099bfc3ca65d09b6447fdaf6e0c -Author: Josh Crowther -Date: Thu Jul 6 15:57:23 2017 -0700 - - feat(*): add CODEOWNERS file to .github (#91) - -commit a8919cdd16f3a4811efcc8736d2f167955f54047 -Author: Josh Crowther -Date: Thu Jul 6 15:14:08 2017 -0700 - - refactor(database): Implement database in Typescript (#72) - - * refactor(database): remove old database implementation [Part 1/3] (#61) - - * refactor(database): remove old database implementation - - This is part #1 of 4 PR's to migrate database - - * refactor(database): remove database build processes - - * refactor(database): Add typescript database implementation [Part 2/3] (#62) - - * refactor(database): add typescript implementation - - * refactor(database): update build process to include database.ts - - All integration tests pass at this point - - * refactor(*): refactor environment builds to be based on separate .ts files - - * WIP: patch database code in nodeJS - - * refactor(database): classes for typescript database implementation (#55) - - * refactor(database): classes for typescript database implementation - - * refactor(database): requested changes & other improvements - - * fix(database): Add missing "typeof" (#74) - - https://github.com/firebase/firebase-js-sdk/blob/fd0728138d88c454f8e38a78f35d831d6365070c/src/database/js-client/core/Repo.js#L86 - - * WIP: fixes from @schmidt-sebastian's review - - * WIP: fix: TS Build error - - * fix(database): fix issue with missing repo method - - * WIP: review adjustments #1 - - * WIP: review comments #2 - - * WIP: refactor(database): Add migrated test harness [Part 3/3] (#71) - - * refactor(database): add typescript implementation - - * refactor(database): update build process to include database.ts - - All integration tests pass at this point - - * refactor(*): refactor environment builds to be based on separate .ts files - - * WIP: patch database code in nodeJS - - * refactor(database): classes for typescript database implementation (#55) - - * refactor(database): classes for typescript database implementation - - * refactor(database): requested changes & other improvements - - * WIP: add the /tests/config dir to the .gitignore - - * WIP: add test harness - - * WIP: add query tests - - There are some tests that have weird timing issues, and because of the polling nature of the - original implementation, we never caught the issue. These should be resolved when able - - * WIP: add database.test.ts - - * WIP: add node.test.ts - - * WIP: add sortedmap.test.ts - - * WIP: add datasnapshot.test.ts - - * WIP: add sparsesnapshottree.test.ts - - * refactor(database): refactor query.test.ts to better preserve original test meaning - - * WIP: add crawler_support.test.ts - - * WIP: refactor EventAccumulator.ts for data.test.ts - - * WIP: fix issue with query.test.ts - - * WIP: add connection.test.ts - - * WIP: add info.test.ts - - * WIP: add order_by.test.ts - - I only migrated some of these tests as there was a dependency on the server for several tests - - * WIP: fix several code signature problems, add test files - - * WIP: add transaction.test.ts - - * WIP: working on the broken npm test command - - * WIP: working on fixes - - * WIP: remove logging - - * WIP: fix node tests - - * fix(*): fixing test files and CI integration - - * WIP: tEMP: Allow branch builds - - * WIP: escape string - - * refactor(CI): use ChromeHeadless launcher - - * WIP: fixes from review. - - * WIP: skip flakey test - - * WIP: remove unneeded debugger statement - - * WIP: fixing nits - - * Prevent using uninitialized array in EventEmitter (#85) - - * perf(*): fixing build size output issues - - * chore(*): remove unneeded build deps - -commit 6aaef702b56e66a60934594f14419328abbc3af3 -Author: Josep Sayol -Date: Wed Jul 5 22:42:02 2017 +0200 - - fix(core): improve typings with new Observer interface (#56) - -commit 9a6f0db974a88af4a83708376afd112436a75417 -Author: Josep Sayol -Date: Wed Jun 28 18:48:40 2017 +0200 - - fix(messaging): Add check for Fetch API support (#79) - -commit 657055d3c81101d55e86baac0a49d7cfd0a25863 -Author: Josh Crowther -Date: Wed Jun 21 16:06:57 2017 -0700 - - chore(publish): 4.1.3 (#68) - -commit 109cbb328022e59f0c5a52eee4be8587a0593814 -Author: Josep Sayol -Date: Tue Jun 20 18:53:12 2017 +0200 - - fix(app): Allow Object.prototype member names as app names (#70) - -commit 5f2ca5a4eaac1257abfc2a5c919706992afbdc8f -Author: Josh Crowther -Date: Mon Jun 19 10:54:00 2017 -0700 - - fix(auth): fix redirect invalid caching issue (#67) - -commit 13ff80a72f778b5716f6eeb5bfc06bc93991cef5 -Author: Josep Sayol -Date: Mon Jun 19 18:52:23 2017 +0200 - - chore(.gitignore): Add '.idea' folder for JetBrains IDEs (#64) - -commit 7d88c38a6af07cc5ba8f0e85af3ab801b599d379 -Author: I. Leow -Date: Sat Jun 17 00:25:25 2017 +0800 - - Add @override annotation to Promise methods that override Thenable's. (#57) - -commit 26d3e4fd4b954a7d658124ffe9dd945260105055 -Author: Jimi Ford -Date: Fri Jun 16 06:00:35 2017 -0400 - - Update README.md (#58) - - fix grammar - -commit bc94aaed90928eae760702ba0187eb18f0676243 -Author: Josep Sayol -Date: Wed Jun 14 20:01:36 2017 +0200 - - fix(auth): fix typings and externs for PhoneAuthProvider.credential (#50) - -commit ec19fc57e3087ce7e92470ff08f4522036240b8a -Author: Josep Sayol -Date: Thu Jun 8 02:27:23 2017 +0200 - - fix(storage): allow missing some methods in UploadTask observer (#41) - -commit 2801c344f20929e812f44b259c0bfa4d6d505087 -Author: Josh Crowther -Date: Wed Jun 7 10:18:50 2017 -0700 - - chore(package.json): 4.1.2 (#30) - -commit 45624b4542ac8a25779254267893f250fca50952 -Author: Josh Crowther -Date: Wed Jun 7 09:49:01 2017 -0700 - - fix(core): utilize "webpackJsonpFirebase" for Webpack JSONP output func (#43) - - ISSUES CLOSED: #42 - -commit cb46f758fa4e49ba8c08ec5dd7b294071afa5231 -Author: bojeil-google -Date: Tue Jun 6 23:32:05 2017 -0700 - - fix(app): fix issue with FirebaseApp extending INTERNAL (#38) - - * fix(app): fix issue with FirebaseApp extending INTERNAL - FirebaseAppImpl should not extend prototype.INTERNAL as this will apply to - all Firebase app instances. - To reproduce, do the following: - var app1 = firebase.initializeApp(config); - var app2 = firebase.initializeApp(config, 'app2'); - console.log(app1.INTERNAL === app2.internal); - The above incorrectly resolves to true. - This means that if I sign in with app1.auth() and then call app1.INTERNAL.getToken(), - it will resolve with null as it is getting app2.INTERNAL.getToken. - The last initialized instance will basically overwrite all existing ones. - - This is currently breaking all FirebaseUI-web single page applications - using Firebase real-time database with JS version >= 4.1.0: - https://github.com/firebase/firebaseui-web/issues/47#issuecomment-306648715 - This should also be breaking any application using Auth and Database with - multiple app instances. - - * fix(app): removed extra spaces and commented code - -commit 8a90518e5a0a9ace7948012ad9dc11c39a951085 -Author: Spencer Phippen -Date: Mon Jun 5 14:13:13 2017 -0600 - - docs(*): add per-feature supported environment info. (#33) - -commit 4a9618993531647a7941113b7f18ddadf0dd75d3 -Author: Josh Crowther -Date: Thu Jun 1 14:20:48 2017 -0700 - - fix(sourcemaps): fix sourcemap generation for browser code [triage-skip] (#29) - - * fix(sourcemaps): fix sourcemap generation for browser code - - * chore(*): add ts-loader dependencies - -commit f70c7f2c1c099e4e0363b43997bf35ee7db4e01e -Author: Josh Crowther -Date: Thu Jun 1 10:38:04 2017 -0700 - - fix(travis.yml): pin Node.js version to 6 (#28) - -commit 395d261e729e3cfc53250bdcd3b6b1a3233b2569 (tag: v4.1.1) -Author: Josh Crowther -Date: Wed May 31 12:31:32 2017 -0700 - - chore(package.json): 4.1.1 (#27) - -commit 01e953555e32825965d728e78770c55b42c72d08 -Author: Josh Crowther -Date: Wed May 31 12:05:24 2017 -0700 - - fix(app): fix issue with default instanceIdentifier (#26) - - FirebaseApp's contract with the components is that the instanceIdentifier will be undefined if - default (not the string '[DEFAULT]'). This was not tested by any existing tests and was broken in - the async refactor. This fixes that issue and adds a test. - -commit 0766643edac6ac7c1e50680e946e32fa330e5caf (tag: v4.1.0, tag: 4.1.0) -Author: Josh Crowther -Date: Wed May 31 11:35:40 2017 -0700 - - chore(publish): 4.1.0 (#25) - -commit 9d7443625191b68079ef3810857950476165f390 -Author: Josh Crowther -Date: Thu May 25 16:08:43 2017 -0600 - - Update ISSUE_TEMPLATE.md [triage-skip] (#13) - - * refactor(github-meta): leverage .github directory - - * docs(ISSUE_TEMPLATE): added JSBin template for repros - - To help encourage people to reproduce issues, I've made a small JSBin that will load Firebase and - give developers a REPL environment to demonstrate the issue. - - * docs(ISSUE_TEMPLATE): restructuring issue template to only display needed info - - * fix(docs): fix link to CONTRIBUTING.md - - * refactor(ISSUE_TEMPLATE): refactor based on feedback from @samtstern - - * fix(ISSUE_TEMPLATE): fix README.md link - -commit 85ec114c73e95cbf1dbff5e979aa2a03db4d6446 -Author: Josh Crowther -Date: Thu May 25 10:26:42 2017 -0600 - - fix(auth): fix Safari iFrame loop issue (#24) - - Import from Auth to fix infinite localStorage write loop - - ISSUES CLOSED: #21 - -commit bd24f71f31ddb6468f5c4fa9f73ff023bc84d3b4 -Author: Josh Crowther -Date: Thu May 25 10:12:40 2017 -0600 - - feat(app): Allow for lazy registration of app components (#15) - - * WIP: add lazy module instantiation - - * feat(app): allow for lazy loading of services - - * test(app): add integration test for webpack/browserify for lazy instantiation - - * fix(app): fix issue where auth listeners weren't being patched properly - - * docs(app): adding doc explaining Firebase Auth specific code in firebase_app.ts - - * fix(app): revert code refactor to _getService function - - * test(app): add tests and fix issue with multiple instances of a service - - There was an issue where we weren't properly limiting mulitple service instances. Added a test and - refactored the code to support that use case - - * refactor(app): remove unneeded ternary - - * fix(app): fix issue where instanceIdentifier wasn't being passed - - Fixed an issue where instance identifiers weren't being passed to their creation factories. Added - some tests to validate that we don't accidentally remove that in the future. - -commit 706bdbbef1094d088991ae4cb2ac8bef0f165db7 -Author: Ken Powers -Date: Thu May 18 16:27:45 2017 -0400 - - fix(docs): CONTRIBUTING link in README (#16) - -commit 3a4c3146ccfb3450988c1ef0a9b4d472e38f9304 -Author: Michael J. Ryan -Date: Wed May 17 16:44:00 2017 -0700 - - refactor(package.json): Fix external license reference (#12) - - Update package license for easier dist, no need for foreign reference with the license change to Apache-2.0 - -commit 241470c51b57f71e16986b7faf9f97f2b0f9d671 -Author: Josh Crowther -Date: Wed May 17 16:19:28 2017 -0700 - - feat(travis-ci): add .travis.yml [triage-skip] (#9) - - * feat(travis-ci): add .travis.yml [triage-skip] - - * docs(*): add travis badge to README files - - * fix(travis): include C++11 Standard Compiler - - Node.js v4.0 and greater requires a C++11 standard-compliant compiler - (See: https://docs.travis-ci.com/user/languages/javascript-with-nodejs#Node.js-v4-(or-io.js-v3)-compiler-requirements) - - * refactor(travis): turn on caching for .travis.yml to improve build times - - * refactor(travis): limit push builds to the master branch - - * refactor(deps): bump karma version - -commit 822a02c777396d4eff7506a4caeed9051d7cd815 -Author: ismail BASKIN -Date: Thu May 18 01:22:17 2017 +0300 - - docs(README): Fix listed CDN version (#10) - -commit c054dab68ce4d30af7fcb0bb850f1a064ba023c5 (tag: v4.0.0) -Author: Josh Crowther -Date: Tue May 16 22:25:20 2017 -0700 - - fix(auth): fix race condition in anonymous sign in [triage-skip] (#8) - -commit a9a678bf5e72580664dbfd95e8f75fe78fb458e5 -Author: Josh Crowther -Date: Tue May 16 11:52:48 2017 -0700 - - fix(gulp): fix path to unit tests for "gulp test" task [triage-skip] (#7) - -commit 9e7a5c0c1a4ef4c44ba0015ce5bae2726092fd5f -Author: Josh Crowther -Date: Tue May 16 11:10:01 2017 -0700 - - fix(gulp): fix the gulp task "test:unit:node" (#5) - - There was an issue where the task "test:unit:node" was running tests that dependend on the - build artifact. This change ignores those tests as they are run in a different suite. - -commit fd0728138d88c454f8e38a78f35d831d6365070c -Author: Josh Crowther -Date: Mon May 15 17:37:21 2017 -0700 - - feat(*): initial open source push (#2) - -commit 8f99963971c1f572c54f980d1ead0d53eae769bd -Author: Vikrum Nijjar -Date: Mon Apr 24 14:52:11 2017 -0700 - - Initial commit diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index 6c14efb6ef3..cb5d15e3901 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -78,13 +78,6 @@ interface OutstandingPut { onComplete: (a: string, b?: string) => void; } -interface OutstandingGet { - action: string; - request: object; - queued?: boolean; - deferred: Deferred; -} - /** * Firebase connection. Abstracts wire protocol and handles reconnecting. * @@ -102,8 +95,6 @@ export class PersistentConnection extends ServerActions { /* path */ string, Map > = new Map(); - private outstandingGets_: OutstandingGet[] = []; - private outstandingGetCount_ = 0; private outstandingPuts_: OutstandingPut[] = []; private outstandingPutCount_ = 0; private onDisconnectRequestQueue_: OnDisconnectRequest[] = []; @@ -227,7 +218,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -316,8 +307,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -335,7 +326,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => {}); + this.sendRequest('unauth', {}, () => { }); } } @@ -399,7 +390,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -657,8 +648,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } From 2a7f81f68224654aad4ba3c64601a99423db3bf7 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 12:39:43 -0700 Subject: [PATCH 17/37] fixup query tests --- packages/database/test/query.test.ts | 52 ++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index c7e3ba3f034..3a39b7f2f24 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -20,6 +20,7 @@ const expect = chai.expect; import * as chaiAsPromised from 'chai-as-promised'; chai.use(chaiAsPromised); import { Reference } from '../src/api/Reference'; +import { DataSnapshot } from '../src/api/DataSnapshot'; import { Query } from '../src/api/Query'; import '../src/core/snap/ChildrenNode'; import { getRandomNode, getFreshRepo, getPath, pause } from './helpers/util'; @@ -29,8 +30,6 @@ import { } from './helpers/EventAccumulator'; import * as _ from 'lodash'; -import { SnapshotHolder } from '../src/core/SnapshotHolder'; - type TaskList = Array<[Query, any]>; describe('Query Tests', () => { @@ -2196,6 +2195,37 @@ describe('Query Tests', () => { }); }); + it('set() at query root raises correct value event', done => { + const nodePair = getRandomNode(2); + const writer = nodePair[0]; + const reader = nodePair[1]; + + let readerLoaded = false; + writer + .child('foo') + .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { + reader + .child('foo') + .limitToLast(10) + .on('value', snapshot => { + const val = snapshot.val(); + if (!readerLoaded) { + readerLoaded = true; + expect(val.bar).to.equal('a'); + expect(val.baz).to.equal('b'); + expect(val.bam).to.equal('c'); + writer.child('foo').set({ bar: 'd', baz: 'b', bat: 'e' }); + } else { + expect(val.bar).to.equal('d'); + expect(val.baz).to.equal('b'); + expect(val.bat).to.equal('e'); + expect(val.bam).to.equal(undefined); + done(); + } + }); + }); + }); + it('get at empty node returns null', async () => { const node = getRandomNode() as Reference; const snapshot = await node.get(); @@ -2244,6 +2274,24 @@ describe('Query Tests', () => { }); }); + it('get reads from cache if database is not connected', async () => { + const node = getFreshRepo('db', true); + const node2 = getFreshRepo('db'); + await node2.set({ foo: 'bar' }); + const prom = new Promise((resolve, _) => { + node.on('value', snap => { + resolve(snap); + }); + }); + let onSnapshot = await prom; + node.database.goOffline(); + const getSnapshot = await node.get(); + node.off(); + expect(JSON.stringify(getSnapshot.val())).to.equal( + JSON.stringify((onSnapshot as DataSnapshot).val()) + ); + }); + it('get above path caches data', async () => { const reader = getFreshRepo('db'); const writer = getFreshRepo('db'); From 00a0959ed949c86606bad49097edf177568c6b43 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 12:51:33 -0700 Subject: [PATCH 18/37] more test fixes --- .../database/src/core/PersistentConnection.ts | 14 +++---- packages/database/test/query.test.ts | 37 ++----------------- 2 files changed, 11 insertions(+), 40 deletions(-) diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index cb5d15e3901..72c1c6f10ac 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -218,7 +218,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -307,8 +307,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -326,7 +326,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => { }); + this.sendRequest('unauth', {}, () => {}); } } @@ -390,7 +390,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -648,8 +648,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index 3a39b7f2f24..0357a3dc31c 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -2195,37 +2195,6 @@ describe('Query Tests', () => { }); }); - it('set() at query root raises correct value event', done => { - const nodePair = getRandomNode(2); - const writer = nodePair[0]; - const reader = nodePair[1]; - - let readerLoaded = false; - writer - .child('foo') - .set({ bar: 'a', baz: 'b', bam: 'c' }, (error, dummy) => { - reader - .child('foo') - .limitToLast(10) - .on('value', snapshot => { - const val = snapshot.val(); - if (!readerLoaded) { - readerLoaded = true; - expect(val.bar).to.equal('a'); - expect(val.baz).to.equal('b'); - expect(val.bam).to.equal('c'); - writer.child('foo').set({ bar: 'd', baz: 'b', bat: 'e' }); - } else { - expect(val.bar).to.equal('d'); - expect(val.baz).to.equal('b'); - expect(val.bat).to.equal('e'); - expect(val.bam).to.equal(undefined); - done(); - } - }); - }); - }); - it('get at empty node returns null', async () => { const node = getRandomNode() as Reference; const snapshot = await node.get(); @@ -2258,8 +2227,10 @@ describe('Query Tests', () => { it('get while offline is null', async () => { const node = getRandomNode() as Reference; node.database.goOffline(); - let snapshot = await node.get(); + const snapshot = await node.get(); expect(snapshot.val()).to.be.null; + // Required for test isolation. + node.database.goOnline(); }); it('get caches results at path', async () => { @@ -2275,7 +2246,7 @@ describe('Query Tests', () => { }); it('get reads from cache if database is not connected', async () => { - const node = getFreshRepo('db', true); + const node = getFreshRepo('db'); const node2 = getFreshRepo('db'); await node2.set({ foo: 'bar' }); const prom = new Promise((resolve, _) => { From 7ef7e691647db8cabe615cc8a1b7616745ad5219 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 13:02:25 -0700 Subject: [PATCH 19/37] use deep.equal in tests --- packages/database/src/api/Query.ts | 4 ---- packages/database/src/core/Repo.ts | 2 +- packages/database/test/query.test.ts | 4 +--- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 8e647b5779d..f12329dd449 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -55,10 +55,6 @@ export interface SnapshotCallback { (a: DataSnapshot, b?: string | null): unknown; } -export interface FailureCallback { - (a: Error): void; -} - /** * A Query represents a filter to be applied to a firebase location. This object purely represents the * query expression (and exposes our public API to build the query). The actual query logic is in ViewBase.js. diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 842a4ec5733..7f36541c032 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -40,7 +40,7 @@ import { RepoInfo } from './RepoInfo'; import { Database } from '../api/Database'; import { DataSnapshot } from '../api/DataSnapshot'; import { ServerActions } from './ServerActions'; -import { FailureCallback, SnapshotCallback, Query } from '../api/Query'; +import { Query } from '../api/Query'; import { EventRegistration } from './view/EventRegistration'; import { StatsCollection } from './stats/StatsCollection'; import { Event } from './view/Event'; diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index 0357a3dc31c..fc1cd452a67 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -2258,9 +2258,7 @@ describe('Query Tests', () => { node.database.goOffline(); const getSnapshot = await node.get(); node.off(); - expect(JSON.stringify(getSnapshot.val())).to.equal( - JSON.stringify((onSnapshot as DataSnapshot).val()) - ); + expect(getSnapshot.val()).to.deep.equal((onSnapshot as DataSnapshot).val()); }); it('get above path caches data', async () => { From 272587f0fe71f1f274a6aca11c06fc00632929a7 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 13:07:48 -0700 Subject: [PATCH 20/37] Undo package.json changes --- packages/database/package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/database/package.json b/packages/database/package.json index 780e1d3b081..355ff43e77d 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/database", - "version": "0.6.12", + "version": "0.6.13", "description": "", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.node.cjs.js", @@ -19,7 +19,6 @@ "test:all": "run-p lint test:browser test:node", "test:browser": "karma start --single-run", "test:node": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/{,!(browser)/**/}*.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", - "test:queries": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/query.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", "test:emulator": "ts-node --compiler-options='{\"module\":\"commonjs\"}' ../../scripts/emulator-testing/database-test-runner.ts", "prepare": "yarn build" }, @@ -37,7 +36,7 @@ "devDependencies": { "@firebase/app": "0.6.11", "@firebase/app-types": "0.6.1", - "rollup": "2.26.7", + "rollup": "2.28.1", "rollup-plugin-typescript2": "0.27.2", "typescript": "4.0.2" }, From 377a263f7ff4dcae0862c142683f4eeee718579e Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 13:12:19 -0700 Subject: [PATCH 21/37] remove unused imports --- packages/database/.package.json | 59 +++++++++++++++++++ packages/database/src/api/Query.ts | 1 - .../database/src/core/ReadonlyRestClient.ts | 1 - packages/database/src/core/Repo.ts | 2 +- 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 packages/database/.package.json diff --git a/packages/database/.package.json b/packages/database/.package.json new file mode 100644 index 00000000000..780e1d3b081 --- /dev/null +++ b/packages/database/.package.json @@ -0,0 +1,59 @@ +{ + "name": "@firebase/database", + "version": "0.6.12", + "description": "", + "author": "Firebase (https://firebase.google.com/)", + "main": "dist/index.node.cjs.js", + "browser": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "esm2017": "dist/index.esm2017.js", + "files": ["dist"], + "scripts": { + "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", + "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", + "build": "rollup -c", + "build:deps": "lerna run --scope @firebase/'{app,database}' --include-dependencies build", + "dev": "rollup -c -w", + "test": "run-p lint test:emulator", + "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:emulator", + "test:all": "run-p lint test:browser test:node", + "test:browser": "karma start --single-run", + "test:node": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/{,!(browser)/**/}*.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", + "test:queries": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/query.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", + "test:emulator": "ts-node --compiler-options='{\"module\":\"commonjs\"}' ../../scripts/emulator-testing/database-test-runner.ts", + "prepare": "yarn build" + }, + "license": "Apache-2.0", + "peerDependencies": {}, + "dependencies": { + "@firebase/database-types": "0.5.2", + "@firebase/logger": "0.2.6", + "@firebase/util": "0.3.2", + "@firebase/component": "0.1.19", + "@firebase/auth-interop-types": "0.1.5", + "faye-websocket": "0.11.3", + "tslib": "^1.11.1" + }, + "devDependencies": { + "@firebase/app": "0.6.11", + "@firebase/app-types": "0.6.1", + "rollup": "2.26.7", + "rollup-plugin-typescript2": "0.27.2", + "typescript": "4.0.2" + }, + "repository": { + "directory": "packages/database", + "type": "git", + "url": "https://github.com/firebase/firebase-js-sdk.git" + }, + "bugs": { + "url": "https://github.com/firebase/firebase-js-sdk/issues" + }, + "typings": "dist/index.d.ts", + "nyc": { + "extension": [ + ".ts" + ], + "reportDir": "./coverage/node" + } +} diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index f12329dd449..bbb1ae4befc 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -47,7 +47,6 @@ import { Repo } from '../core/Repo'; import { QueryParams } from '../core/view/QueryParams'; import { Reference } from './Reference'; import { DataSnapshot } from './DataSnapshot'; -import { FirebaseApp } from '@firebase/app-types'; let __referenceConstructor: new (repo: Repo, path: Path) => Query; diff --git a/packages/database/src/core/ReadonlyRestClient.ts b/packages/database/src/core/ReadonlyRestClient.ts index 267db975a26..d991c655658 100644 --- a/packages/database/src/core/ReadonlyRestClient.ts +++ b/packages/database/src/core/ReadonlyRestClient.ts @@ -27,7 +27,6 @@ import { logWrapper, warn } from './util/util'; import { ServerActions } from './ServerActions'; import { RepoInfo } from './RepoInfo'; import { AuthTokenProvider } from './AuthTokenProvider'; -import { DataSnapshot } from '../api/DataSnapshot'; import { Query } from '../api/Query'; /** diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 7f36541c032..ca37fc67f9b 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -25,7 +25,7 @@ import { Path } from './util/Path'; import { SparseSnapshotTree } from './SparseSnapshotTree'; import { SyncTree } from './SyncTree'; import { SnapshotHolder } from './SnapshotHolder'; -import { stringify, map, isEmpty, Deferred } from '@firebase/util'; +import { stringify, map, isEmpty } from '@firebase/util'; import { beingCrawled, each, exceptionGuard, warn, log } from './util/util'; import { AuthTokenProvider } from './AuthTokenProvider'; From d40078523011de18f0f8f6cbb8a8ed6649c6843d Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 13:12:58 -0700 Subject: [PATCH 22/37] remove accidental push --- packages/database/.package.json | 59 --------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 packages/database/.package.json diff --git a/packages/database/.package.json b/packages/database/.package.json deleted file mode 100644 index 780e1d3b081..00000000000 --- a/packages/database/.package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "@firebase/database", - "version": "0.6.12", - "description": "", - "author": "Firebase (https://firebase.google.com/)", - "main": "dist/index.node.cjs.js", - "browser": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "esm2017": "dist/index.esm2017.js", - "files": ["dist"], - "scripts": { - "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "build": "rollup -c", - "build:deps": "lerna run --scope @firebase/'{app,database}' --include-dependencies build", - "dev": "rollup -c -w", - "test": "run-p lint test:emulator", - "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:emulator", - "test:all": "run-p lint test:browser test:node", - "test:browser": "karma start --single-run", - "test:node": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/{,!(browser)/**/}*.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", - "test:queries": "TS_NODE_FILES=true TS_NODE_CACHE=NO TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'test/query.test.ts' --file index.node.ts --config ../../config/mocharc.node.js", - "test:emulator": "ts-node --compiler-options='{\"module\":\"commonjs\"}' ../../scripts/emulator-testing/database-test-runner.ts", - "prepare": "yarn build" - }, - "license": "Apache-2.0", - "peerDependencies": {}, - "dependencies": { - "@firebase/database-types": "0.5.2", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.2", - "@firebase/component": "0.1.19", - "@firebase/auth-interop-types": "0.1.5", - "faye-websocket": "0.11.3", - "tslib": "^1.11.1" - }, - "devDependencies": { - "@firebase/app": "0.6.11", - "@firebase/app-types": "0.6.1", - "rollup": "2.26.7", - "rollup-plugin-typescript2": "0.27.2", - "typescript": "4.0.2" - }, - "repository": { - "directory": "packages/database", - "type": "git", - "url": "https://github.com/firebase/firebase-js-sdk.git" - }, - "bugs": { - "url": "https://github.com/firebase/firebase-js-sdk/issues" - }, - "typings": "dist/index.d.ts", - "nyc": { - "extension": [ - ".ts" - ], - "reportDir": "./coverage/node" - } -} From b19f0261087ef3a3cf6c6378aafe2bb8959706d9 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 13:15:28 -0700 Subject: [PATCH 23/37] more unused imports cleanup --- .../database/src/core/PersistentConnection.ts | 16 +++++------ packages/database/src/core/ServerActions.ts | 15 +++++----- packages/database/test/query.test.ts | 28 +++++++++---------- 3 files changed, 28 insertions(+), 31 deletions(-) diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index 72c1c6f10ac..b5b0d0c656d 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -37,8 +37,6 @@ import { OnlineMonitor } from './util/OnlineMonitor'; import { Connection } from '../realtime/Connection'; -import { DataSnapshot } from '../api/DataSnapshot'; - import { ServerActions } from './ServerActions'; import { AuthTokenProvider } from './AuthTokenProvider'; import { RepoInfo } from './RepoInfo'; @@ -218,7 +216,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -307,8 +305,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -326,7 +324,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => {}); + this.sendRequest('unauth', {}, () => { }); } } @@ -390,7 +388,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -648,8 +646,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } diff --git a/packages/database/src/core/ServerActions.ts b/packages/database/src/core/ServerActions.ts index 894aa64d1d7..e3d6962db2a 100644 --- a/packages/database/src/core/ServerActions.ts +++ b/packages/database/src/core/ServerActions.ts @@ -16,7 +16,6 @@ */ import { Query } from '../api/Query'; -import { DataSnapshot } from '../api/DataSnapshot'; /** * Interface defining the set of actions that can be performed against the Firebase server @@ -64,7 +63,7 @@ export abstract class ServerActions { data: unknown, onComplete?: (a: string, b: string) => void, hash?: string - ) {} + ) { } /** * @param {string} pathString @@ -77,13 +76,13 @@ export abstract class ServerActions { data: unknown, onComplete: (a: string, b: string | null) => void, hash?: string - ) {} + ) { } /** * Refreshes the auth token for the current connection. * @param {string} token The authentication token */ - refreshAuthToken(token: string) {} + refreshAuthToken(token: string) { } /** * @param {string} pathString @@ -94,7 +93,7 @@ export abstract class ServerActions { pathString: string, data: unknown, onComplete?: (a: string, b: string) => void - ) {} + ) { } /** * @param {string} pathString @@ -105,7 +104,7 @@ export abstract class ServerActions { pathString: string, data: unknown, onComplete?: (a: string, b: string) => void - ) {} + ) { } /** * @param {string} pathString @@ -114,10 +113,10 @@ export abstract class ServerActions { onDisconnectCancel( pathString: string, onComplete?: (a: string, b: string) => void - ) {} + ) { } /** * @param {Object.} stats */ - reportStats(stats: { [k: string]: unknown }) {} + reportStats(stats: { [k: string]: unknown }) { } } diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index fc1cd452a67..96752be6305 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -1495,7 +1495,7 @@ describe('Query Tests', () => { it('Ensure on() returns callback function.', () => { const node = getRandomNode() as Reference; - const callback = function () {}; + const callback = function () { }; const ret = node.on('value', callback); expect(ret).to.equal(callback); }); @@ -1610,10 +1610,10 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aOn = node.child('a').on('value', () => {}); + const aOn = node.child('a').on('value', () => { }); expect(dumpListens(node)).to.equal('/a:default'); - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1626,10 +1626,10 @@ describe('Query Tests', () => { it('Dedupe listens: listen on grandchild.', () => { const node = getRandomNode() as Reference; - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); - const aaOn = node.child('a/aa').on('value', () => {}); + const aaOn = node.child('a/aa').on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1641,13 +1641,13 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aaOn = node.child('a/aa').on('value', () => {}); + const aaOn = node.child('a/aa').on('value', () => { }); expect(dumpListens(node)).to.equal('/a/aa:default'); - const bbOn = node.child('a/bb').on('value', () => {}); + const bbOn = node.child('a/bb').on('value', () => { }); expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1667,16 +1667,16 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - const rootLim1On = node.limitToLast(1).on('value', () => {}); + const rootLim1On = node.limitToLast(1).on('value', () => { }); expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); const aLim5On = node .child('a') .limitToLast(5) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal( ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' ); @@ -1695,18 +1695,18 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); const bLim1On = node .child('b') .limitToLast(1) - .on('value', () => {}); + .on('value', () => { }); expect(dumpListens(node)).to.equal( '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' ); - const rootOn = node.on('value', () => {}); + const rootOn = node.on('value', () => { }); expect(dumpListens(node)).to.equal(':default'); // remove in slightly random order. From c050c0d88c923869124a479342ecf3658eb8852b Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Mon, 12 Oct 2020 13:21:18 -0700 Subject: [PATCH 24/37] lint stuff --- packages/database/test/query.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index 96752be6305..c2b2e7d48a1 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -2254,7 +2254,7 @@ describe('Query Tests', () => { resolve(snap); }); }); - let onSnapshot = await prom; + const onSnapshot = await prom; node.database.goOffline(); const getSnapshot = await node.get(); node.off(); @@ -2280,7 +2280,7 @@ describe('Query Tests', () => { const snapshot = await reader.child('foo/bar').get(); expect(snapshot.val().data).to.equal('1'); reader.database.goOffline(); - let prom = new Promise((resolve, reject) => { + const prom = new Promise((resolve, reject) => { let done = false; setTimeout(() => { if (done) { From bdc10ca148280b0f5639f0bfb2255732073380da Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Tue, 13 Oct 2020 07:10:29 -0700 Subject: [PATCH 25/37] point CI to emulator v4.6.0 --- scripts/emulator-testing/emulators/database-emulator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/emulator-testing/emulators/database-emulator.ts b/scripts/emulator-testing/emulators/database-emulator.ts index ddd126e7698..b81cab025f4 100644 --- a/scripts/emulator-testing/emulators/database-emulator.ts +++ b/scripts/emulator-testing/emulators/database-emulator.ts @@ -28,7 +28,7 @@ export class DatabaseEmulator extends Emulator { // Use locked version of emulator for test to be deterministic. // The latest version can be found from database emulator doc: // https://firebase.google.com/docs/database/security/test-rules-emulator - 'https://storage.googleapis.com/firebase-preview-drop/emulator/firebase-database-emulator-v4.4.1.jar', + 'https://storage.googleapis.com/firebase-preview-drop/emulator/firebase-database-emulator-v4.6.0.jar', port ); this.namespace = namespace; From 950de5ac271d5691ff3b005fe65de54ba8c91c7a Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 21 Oct 2020 14:03:21 -0700 Subject: [PATCH 26/37] address review feedback --- packages/database/src/api/Query.ts | 1 - .../database/src/core/PersistentConnection.ts | 50 +++--- packages/database/src/core/Repo.ts | 20 ++- packages/database/src/core/ServerActions.ts | 16 +- packages/database/test/query.test.ts | 150 +++++++----------- 5 files changed, 106 insertions(+), 131 deletions(-) diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index bbb1ae4befc..518af8085c9 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -297,7 +297,6 @@ export class Query { /** * Get the server-value for this query, or return a cached value if not connected. - * @return {!firebase.Promise} */ get(): Promise { return this.repo.get(this); diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index b5b0d0c656d..81d52d9cb49 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -190,13 +190,11 @@ export class PersistentConnection extends ServerActions { p: query.path.toString(), q: query.queryObject() }; - const deferred = new Deferred(); if (this.connected_) { - this.sendGet_(req, deferred); + return this.sendGet_(req); } else { - deferred.reject(); + return Promise.reject(new Error('Client is offline')); } - return deferred.promise; } /** @@ -216,7 +214,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -236,20 +234,22 @@ export class PersistentConnection extends ServerActions { } } - private sendGet_(request: object, deferred: Deferred) { - this.sendRequest('g', request, (message: { [k: string]: unknown }) => { - const payload = message['d'] as string; - if (message['s'] === 'ok') { - this.onDataUpdate_( - request['p'], - payload, - /*isMerge*/ false, - /*tag*/ null - ); - deferred.resolve(payload); - } else { - deferred.reject(payload); - } + private sendGet_(request: object): Promise { + return new Promise((resolve, reject) => { + this.sendRequest('g', request, (message: { [k: string]: unknown }) => { + const payload = message['d'] as string; + if (message['s'] === 'ok') { + this.onDataUpdate_( + request['p'], + payload, + /*isMerge*/ false, + /*tag*/ null + ); + resolve(payload); + } else { + reject(payload); + } + }); }); } @@ -305,8 +305,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -324,7 +324,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => { }); + this.sendRequest('unauth', {}, () => {}); } } @@ -388,7 +388,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -646,8 +646,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index ca37fc67f9b..c1e3ed1df91 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -299,17 +299,27 @@ export class Repo { get(query: Query): Promise { return this.server_.get(query).then( - payload => - Promise.resolve( + payload => { + const node = nodeFromJSON(payload as string); + const events = this.serverSyncTree_.applyServerOverwrite( + query.path, + node + ); + this.eventQueue_.raiseEventsAtPath(query.path, events); + return Promise.resolve( new DataSnapshot( - nodeFromJSON(payload as string), + node, query.getRef(), query.getQueryParams().getIndex() ) - ), + ); + }, err => { + this.log_( + 'get for query ' + stringify(query) + ' falling back to cache' + ); const cached = this.serverSyncTree_.calcCompleteEventCache(query.path); - if (cached) { + if (!cached.isEmpty()) { return Promise.resolve( new DataSnapshot( cached, diff --git a/packages/database/src/core/ServerActions.ts b/packages/database/src/core/ServerActions.ts index e3d6962db2a..513fc3210ba 100644 --- a/packages/database/src/core/ServerActions.ts +++ b/packages/database/src/core/ServerActions.ts @@ -47,8 +47,6 @@ export abstract class ServerActions { /** * Get the server value satisfying this query. - * @param query - * @param onComplete */ abstract get(query: Query): Promise; @@ -63,7 +61,7 @@ export abstract class ServerActions { data: unknown, onComplete?: (a: string, b: string) => void, hash?: string - ) { } + ) {} /** * @param {string} pathString @@ -76,13 +74,13 @@ export abstract class ServerActions { data: unknown, onComplete: (a: string, b: string | null) => void, hash?: string - ) { } + ) {} /** * Refreshes the auth token for the current connection. * @param {string} token The authentication token */ - refreshAuthToken(token: string) { } + refreshAuthToken(token: string) {} /** * @param {string} pathString @@ -93,7 +91,7 @@ export abstract class ServerActions { pathString: string, data: unknown, onComplete?: (a: string, b: string) => void - ) { } + ) {} /** * @param {string} pathString @@ -104,7 +102,7 @@ export abstract class ServerActions { pathString: string, data: unknown, onComplete?: (a: string, b: string) => void - ) { } + ) {} /** * @param {string} pathString @@ -113,10 +111,10 @@ export abstract class ServerActions { onDisconnectCancel( pathString: string, onComplete?: (a: string, b: string) => void - ) { } + ) {} /** * @param {Object.} stats */ - reportStats(stats: { [k: string]: unknown }) { } + reportStats(stats: { [k: string]: unknown }) {} } diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index c2b2e7d48a1..f1a13847437 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -1495,7 +1495,7 @@ describe('Query Tests', () => { it('Ensure on() returns callback function.', () => { const node = getRandomNode() as Reference; - const callback = function () { }; + const callback = function () {}; const ret = node.on('value', callback); expect(ret).to.equal(callback); }); @@ -1610,10 +1610,10 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aOn = node.child('a').on('value', () => { }); + const aOn = node.child('a').on('value', () => {}); expect(dumpListens(node)).to.equal('/a:default'); - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1626,10 +1626,10 @@ describe('Query Tests', () => { it('Dedupe listens: listen on grandchild.', () => { const node = getRandomNode() as Reference; - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); - const aaOn = node.child('a/aa').on('value', () => { }); + const aaOn = node.child('a/aa').on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1641,13 +1641,13 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; expect(dumpListens(node)).to.equal(''); - const aaOn = node.child('a/aa').on('value', () => { }); + const aaOn = node.child('a/aa').on('value', () => {}); expect(dumpListens(node)).to.equal('/a/aa:default'); - const bbOn = node.child('a/bb').on('value', () => { }); + const bbOn = node.child('a/bb').on('value', () => {}); expect(dumpListens(node)).to.equal('/a/aa:default;/a/bb:default'); - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); node.off('value', rootOn); @@ -1667,16 +1667,16 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); - const rootLim1On = node.limitToLast(1).on('value', () => { }); + const rootLim1On = node.limitToLast(1).on('value', () => {}); expect(dumpListens(node)).to.equal(':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"}'); const aLim5On = node .child('a') .limitToLast(5) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal( ':{"l":1,"vf":"r"};/a:{"l":1,"vf":"r"},{"l":5,"vf":"r"}' ); @@ -1695,18 +1695,18 @@ describe('Query Tests', () => { const aLim1On = node .child('a') .limitToLast(1) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal('/a:{"l":1,"vf":"r"}'); const bLim1On = node .child('b') .limitToLast(1) - .on('value', () => { }); + .on('value', () => {}); expect(dumpListens(node)).to.equal( '/a:{"l":1,"vf":"r"};/b:{"l":1,"vf":"r"}' ); - const rootOn = node.on('value', () => { }); + const rootOn = node.on('value', () => {}); expect(dumpListens(node)).to.equal(':default'); // remove in slightly random order. @@ -2195,109 +2195,77 @@ describe('Query Tests', () => { }); }); - it('get at empty node returns null', async () => { + it('get at empty node is rejected', async () => { const node = getRandomNode() as Reference; - const snapshot = await node.get(); - const val = snapshot.val(); - expect(val).to.be.null; + expect(node.get()).to.eventually.be.rejected; }); it('get at non-empty root returns correct value', async () => { const node = getRandomNode() as Reference; - await node.set({ foo: 'a', bar: 'b' }); + const expected = { foo: 'a', bar: 'b' }; + await node.set(expected); const snapshot = await node.get(); - const val = snapshot.val(); - expect(val['foo']).to.equal('a'); - expect(val['bar']).to.equal('b'); + expect(snapshot.val()).to.deep.equal(expected); }); it('get for removed node returns correct value', async () => { const node = getRandomNode() as Reference; - await node.set({ foo: 'a', bar: 'b' }); + const expected = { foo: 'a', bar: 'b' }; + await node.set(expected); let snapshot = await node.get(); let val = snapshot.val(); - expect(val['foo']).to.equal('a'); - expect(val['bar']).to.equal('b'); + expect(val).to.deep.equal(expected); await node.remove(); snapshot = await node.get(); - val = snapshot.val(); - expect(val).to.be.null; + expect(snapshot.val()).to.be.null; }); - it('get while offline is null', async () => { + it('get while offline is rejected', async () => { const node = getRandomNode() as Reference; node.database.goOffline(); - const snapshot = await node.get(); - expect(snapshot.val()).to.be.null; - // Required for test isolation. - node.database.goOnline(); - }); - - it('get caches results at path', async () => { - const reader = getFreshRepo('db'); - const writer = getFreshRepo('db'); - - await writer.set({ foo: 'bar' }); - const snapshot = await reader.get(); - reader.database.goOffline(); - reader.once('value', snap => { - expect(snap.val()).to.equal(snapshot.val()); - }); + try { + expect(node.get()).to.eventually.be.rejected; + } finally { + node.database.goOnline(); + } }); it('get reads from cache if database is not connected', async () => { - const node = getFreshRepo('db'); - const node2 = getFreshRepo('db'); - await node2.set({ foo: 'bar' }); - const prom = new Promise((resolve, _) => { - node.on('value', snap => { - resolve(snap); + const node = getRandomNode() as Reference; + const node2 = getFreshRepo((node as Reference).path); + try { + await node2.set({ foo: 'bar' }); + const onSnapshot = await new Promise((resolve, _) => { + node.on('value', snap => { + resolve(snap); + }); }); - }); - const onSnapshot = await prom; - node.database.goOffline(); - const getSnapshot = await node.get(); - node.off(); - expect(getSnapshot.val()).to.deep.equal((onSnapshot as DataSnapshot).val()); - }); - - it('get above path caches data', async () => { - const reader = getFreshRepo('db'); - const writer = getFreshRepo('db'); - - await writer.set({ foo: { bar: 'baz' } }); - const snapshot = await reader.get(); - reader.database.goOffline(); - reader.child('foo/bar').once('value', snap => { - expect(snap.val()).to.equal(snapshot.val()); - }); + node.database.goOffline(); + const getSnapshot = await node.get(); + // node's cache dropped here. + node.off(); + expect(getSnapshot.val()).to.deep.equal( + (onSnapshot as DataSnapshot).val() + ); + } finally { + node.database.goOnline(); + } }); it('get does not cache sibling data', async () => { - const reader = getFreshRepo('db'); - const writer = getFreshRepo('db'); - await writer.set({ foo: { bar: { data: '1' }, baz: { data: '2' } } }); - const snapshot = await reader.child('foo/bar').get(); - expect(snapshot.val().data).to.equal('1'); - reader.database.goOffline(); - const prom = new Promise((resolve, reject) => { - let done = false; - setTimeout(() => { - if (done) { - return; - } - done = true; - reject(); - }, 3000); - reader.child('foo/baz').once('value', snapshot => { - if (done) { - return; - } - done = true; - resolve(snapshot); - }); + const reader = getRandomNode() as Reference; + const writer = getFreshRepo((reader as Reference).path); + await writer.set({ + foo: { cached: { data: '1' }, notCached: { data: '2' } } }); - expect(prom).to.eventually.be.rejected; + const snapshot = await reader.child('foo/cached').get(); + expect(snapshot.val()).to.deep.equal({ data: '1' }); + reader.database.goOffline(); + try { + expect(reader.child('foo/notCached').get()).to.eventually.be.rejected; + } finally { + reader.database.goOnline(); + } }); it('set() at query root raises correct value event', done => { From fdc379d1d6e917d4c1f6689fffdb1c834880b8b2 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 21 Oct 2020 14:05:09 -0700 Subject: [PATCH 27/37] undo package.json change --- packages/database/package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/database/package.json b/packages/database/package.json index 7bcbd3f34f4..599ef6807d9 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -7,9 +7,7 @@ "browser": "dist/index.cjs.js", "module": "dist/index.esm.js", "esm2017": "dist/index.esm2017.js", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", @@ -57,4 +55,4 @@ ], "reportDir": "./coverage/node" } -} \ No newline at end of file +} From b81d8982b8e5a73fac22fc87e86b6a60d0c7653b Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Thu, 22 Oct 2020 10:19:55 -0700 Subject: [PATCH 28/37] review feedback --- packages/database/src/core/Repo.ts | 5 ++++- packages/database/test/query.test.ts | 15 ++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index c1e3ed1df91..221f927aa53 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -316,7 +316,10 @@ export class Repo { }, err => { this.log_( - 'get for query ' + stringify(query) + ' falling back to cache' + 'get for query ' + + stringify(query) + + ' falling back to cache after error ' + + err ); const cached = this.serverSyncTree_.calcCompleteEventCache(query.path); if (!cached.isEmpty()) { diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index f1a13847437..f9daaa38515 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -2195,9 +2195,9 @@ describe('Query Tests', () => { }); }); - it('get at empty node is rejected', async () => { + it('get at empty node is null', async () => { const node = getRandomNode() as Reference; - expect(node.get()).to.eventually.be.rejected; + expect((await node.get()).val()).to.equal(null); }); it('get at non-empty root returns correct value', async () => { @@ -2213,7 +2213,7 @@ describe('Query Tests', () => { const expected = { foo: 'a', bar: 'b' }; await node.set(expected); let snapshot = await node.get(); - let val = snapshot.val(); + const val = snapshot.val(); expect(val).to.deep.equal(expected); await node.remove(); snapshot = await node.get(); @@ -2224,7 +2224,7 @@ describe('Query Tests', () => { const node = getRandomNode() as Reference; node.database.goOffline(); try { - expect(node.get()).to.eventually.be.rejected; + await expect(node.get()).to.eventually.be.rejected; } finally { node.database.goOnline(); } @@ -2232,7 +2232,7 @@ describe('Query Tests', () => { it('get reads from cache if database is not connected', async () => { const node = getRandomNode() as Reference; - const node2 = getFreshRepo((node as Reference).path); + const node2 = getFreshRepo(node.path); try { await node2.set({ foo: 'bar' }); const onSnapshot = await new Promise((resolve, _) => { @@ -2254,7 +2254,7 @@ describe('Query Tests', () => { it('get does not cache sibling data', async () => { const reader = getRandomNode() as Reference; - const writer = getFreshRepo((reader as Reference).path); + const writer = getFreshRepo(reader.path); await writer.set({ foo: { cached: { data: '1' }, notCached: { data: '2' } } }); @@ -2262,7 +2262,8 @@ describe('Query Tests', () => { expect(snapshot.val()).to.deep.equal({ data: '1' }); reader.database.goOffline(); try { - expect(reader.child('foo/notCached').get()).to.eventually.be.rejected; + await expect(reader.child('foo/notCached').get()).to.eventually.be + .rejected; } finally { reader.database.goOnline(); } From 483cedc40f5ba556652d800d31c44a8ae72d284c Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Thu, 22 Oct 2020 10:32:07 -0700 Subject: [PATCH 29/37] update changelog --- packages/database/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/database/CHANGELOG.md b/packages/database/CHANGELOG.md index e3602112654..db2d674b434 100644 --- a/packages/database/CHANGELOG.md +++ b/packages/database/CHANGELOG.md @@ -1,5 +1,7 @@ # Unreleased +- [changed] Added support for query get operation. + ## 0.6.13 ### Patch Changes From a7b0e6724e5eb55fa4fc40bd50d251547e8bf069 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Thu, 22 Oct 2020 13:59:03 -0400 Subject: [PATCH 30/37] Create many-snails-kneel.md --- .changeset/many-snails-kneel.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/many-snails-kneel.md diff --git a/.changeset/many-snails-kneel.md b/.changeset/many-snails-kneel.md new file mode 100644 index 00000000000..f29ddbda7a3 --- /dev/null +++ b/.changeset/many-snails-kneel.md @@ -0,0 +1,5 @@ +--- +"@firebase/database": patch +--- + +Add a `get` method for database queries that returns server result when connected From 2a947f7080214a5b6b8fb53a1c93169141031c7b Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Thu, 22 Oct 2020 12:00:31 -0700 Subject: [PATCH 31/37] import fixes --- packages/database/src/core/Repo.ts | 2 +- packages/database/test/query.test.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 221f927aa53..95acb2070dc 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -318,7 +318,7 @@ export class Repo { this.log_( 'get for query ' + stringify(query) + - ' falling back to cache after error ' + + ' falling back to cache after error: ' + err ); const cached = this.serverSyncTree_.calcCompleteEventCache(query.path); diff --git a/packages/database/test/query.test.ts b/packages/database/test/query.test.ts index f9daaa38515..5d4dbd1c50e 100644 --- a/packages/database/test/query.test.ts +++ b/packages/database/test/query.test.ts @@ -15,10 +15,8 @@ * limitations under the License. */ -import * as chai from 'chai'; -const expect = chai.expect; +import { use, expect } from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; -chai.use(chaiAsPromised); import { Reference } from '../src/api/Reference'; import { DataSnapshot } from '../src/api/DataSnapshot'; import { Query } from '../src/api/Query'; @@ -30,6 +28,8 @@ import { } from './helpers/EventAccumulator'; import * as _ from 'lodash'; +use(chaiAsPromised); + type TaskList = Array<[Query, any]>; describe('Query Tests', () => { From acdd4cacce0225b21589551239e75391ba1094bf Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Tue, 3 Nov 2020 17:52:52 -0800 Subject: [PATCH 32/37] review feedback, queue outstanding gets --- .changeset/many-snails-kneel.md | 2 +- packages/database/CHANGELOG.md | 2 - packages/database/src/api/Query.ts | 2 +- .../database/src/core/PersistentConnection.ts | 108 +++++++++++++----- packages/database/src/core/Repo.ts | 2 +- 5 files changed, 84 insertions(+), 32 deletions(-) diff --git a/.changeset/many-snails-kneel.md b/.changeset/many-snails-kneel.md index f29ddbda7a3..f51f5858fad 100644 --- a/.changeset/many-snails-kneel.md +++ b/.changeset/many-snails-kneel.md @@ -1,5 +1,5 @@ --- -"@firebase/database": patch +"@firebase/database": minor --- Add a `get` method for database queries that returns server result when connected diff --git a/packages/database/CHANGELOG.md b/packages/database/CHANGELOG.md index db2d674b434..e3602112654 100644 --- a/packages/database/CHANGELOG.md +++ b/packages/database/CHANGELOG.md @@ -1,7 +1,5 @@ # Unreleased -- [changed] Added support for query get operation. - ## 0.6.13 ### Patch Changes diff --git a/packages/database/src/api/Query.ts b/packages/database/src/api/Query.ts index 518af8085c9..f4ef30e62a1 100644 --- a/packages/database/src/api/Query.ts +++ b/packages/database/src/api/Query.ts @@ -299,7 +299,7 @@ export class Query { * Get the server-value for this query, or return a cached value if not connected. */ get(): Promise { - return this.repo.get(this); + return this.repo.getValue(this); } /** diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index 81d52d9cb49..3650f3db7d2 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -45,6 +45,7 @@ import { SDK_VERSION } from './version'; const RECONNECT_MIN_DELAY = 1000; const RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858) +const GET_CONNECT_TIMEOUT = 3 * 1000; const RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server) const RECONNECT_DELAY_MULTIPLIER = 1.3; const RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec. @@ -76,6 +77,12 @@ interface OutstandingPut { onComplete: (a: string, b?: string) => void; } +interface OutstandingGet { + action: string; + request: object; + onComplete: (response: { [k: string]: unknown }) => void; +} + /** * Firebase connection. Abstracts wire protocol and handles reconnecting. * @@ -94,7 +101,9 @@ export class PersistentConnection extends ServerActions { Map > = new Map(); private outstandingPuts_: OutstandingPut[] = []; + private outstandingGets_: OutstandingGet[] = []; private outstandingPutCount_ = 0; + private outstandingGetCount_ = 0; private onDisconnectRequestQueue_: OnDisconnectRequest[] = []; private connected_ = false; private reconnectDelay_ = RECONNECT_MIN_DELAY; @@ -186,15 +195,55 @@ export class PersistentConnection extends ServerActions { } get(query: Query): Promise { - const req: { [k: string]: unknown } = { + const deferred = new Deferred(); + const request = { p: query.path.toString(), q: query.queryObject() }; + const outstandingGet = { + action: 'g', + request, + onComplete: (message: { [k: string]: unknown }) => { + const payload = message['d'] as string; + if (message['s'] === 'ok') { + this.onDataUpdate_( + request['p'], + payload, + /*isMerge*/ false, + /*tag*/ null + ); + deferred.resolve(payload); + } else { + deferred.reject(payload); + } + } + }; + this.outstandingGets_.push(outstandingGet); + this.outstandingGetCount_++; + const index = this.outstandingGets_.length - 1; + + if (!this.connected_) { + const self = this; + setTimeout(function () { + const get = self.outstandingGets_[index]; + if (get === undefined || outstandingGet !== get) { + return; + } + delete self.outstandingGets_[index]; + self.outstandingGetCount_--; + if (self.outstandingGetCount_ === 0) { + self.outstandingGets_ = []; + } + self.log_('get ' + index + ' timed out on connection'); + deferred.reject(new Error('Client is offline.')); + }, GET_CONNECT_TIMEOUT); + } + if (this.connected_) { - return this.sendGet_(req); - } else { - return Promise.reject(new Error('Client is offline')); + this.sendGet_(index); } + + return deferred.promise; } /** @@ -214,7 +263,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -234,23 +283,22 @@ export class PersistentConnection extends ServerActions { } } - private sendGet_(request: object): Promise { - return new Promise((resolve, reject) => { - this.sendRequest('g', request, (message: { [k: string]: unknown }) => { - const payload = message['d'] as string; - if (message['s'] === 'ok') { - this.onDataUpdate_( - request['p'], - payload, - /*isMerge*/ false, - /*tag*/ null - ); - resolve(payload); - } else { - reject(payload); + private sendGet_(index: number) { + const get = this.outstandingGets_[index]; + this.sendRequest( + get.action, + get.request, + (message: { [k: string]: unknown }) => { + delete this.outstandingGets_[index]; + this.outstandingGetCount_--; + if (this.outstandingGetCount_ === 0) { + this.outstandingGets_ = []; } - }); - }); + if (get.onComplete) { + get.onComplete(message); + } + } + ); } private sendListen_(listenSpec: ListenSpec) { @@ -305,8 +353,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -324,7 +372,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => {}); + this.sendRequest('unauth', {}, () => { }); } } @@ -388,7 +436,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -646,8 +694,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } @@ -982,6 +1030,12 @@ export class PersistentConnection extends ServerActions { request.onComplete ); } + + for (let i = 0; i < this.outstandingGets_.length; i++) { + if (this.outstandingGets_[i]) { + this.sendGet_(i); + } + } } /** diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 95acb2070dc..e50d498750f 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -297,7 +297,7 @@ export class Repo { return this.nextWriteId_++; } - get(query: Query): Promise { + getValue(query: Query): Promise { return this.server_.get(query).then( payload => { const node = nodeFromJSON(payload as string); From c0f627c0628b6be8988b89a9f6b0e48dceee7a7e Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Tue, 3 Nov 2020 18:01:07 -0800 Subject: [PATCH 33/37] lint --- packages/database/src/core/PersistentConnection.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index 3650f3db7d2..ce484ac8df8 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -224,7 +224,7 @@ export class PersistentConnection extends ServerActions { if (!this.connected_) { const self = this; - setTimeout(function () { + setTimeout(() => { const get = self.outstandingGets_[index]; if (get === undefined || outstandingGet !== get) { return; From f6dcb3824df43cc96cdab918f17b56b24980f333 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 11 Nov 2020 16:38:51 -0800 Subject: [PATCH 34/37] review --- .../database/src/core/PersistentConnection.ts | 55 +++++++++---------- packages/database/src/core/Repo.ts | 26 +++++++++ 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index ce484ac8df8..ccef76e4b62 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -78,7 +78,6 @@ interface OutstandingPut { } interface OutstandingGet { - action: string; request: object; onComplete: (response: { [k: string]: unknown }) => void; } @@ -223,18 +222,22 @@ export class PersistentConnection extends ServerActions { const index = this.outstandingGets_.length - 1; if (!this.connected_) { - const self = this; setTimeout(() => { - const get = self.outstandingGets_[index]; + const get = this.outstandingGets_[index]; if (get === undefined || outstandingGet !== get) { return; } - delete self.outstandingGets_[index]; - self.outstandingGetCount_--; - if (self.outstandingGetCount_ === 0) { - self.outstandingGets_ = []; + delete this.outstandingGets_[index]; + this.outstandingGetCount_--; + if (this.outstandingGetCount_ === 0) { + this.outstandingGets_ = []; } - self.log_('get ' + index + ' timed out on connection'); + this.log_('get ' + index + ' timed out on connection'); + // It's possible that we were once able to reach the server, + // but not anymore. If that's the case, the client could have + // an active listener with cached data for this get. The Repo + // will try to retrieve this cached data if we can't connect + // here. deferred.reject(new Error('Client is offline.')); }, GET_CONNECT_TIMEOUT); } @@ -263,7 +266,7 @@ export class PersistentConnection extends ServerActions { } assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query' ); assert( @@ -285,20 +288,16 @@ export class PersistentConnection extends ServerActions { private sendGet_(index: number) { const get = this.outstandingGets_[index]; - this.sendRequest( - get.action, - get.request, - (message: { [k: string]: unknown }) => { - delete this.outstandingGets_[index]; - this.outstandingGetCount_--; - if (this.outstandingGetCount_ === 0) { - this.outstandingGets_ = []; - } - if (get.onComplete) { - get.onComplete(message); - } + this.sendRequest('g', get.request, (message: { [k: string]: unknown }) => { + delete this.outstandingGets_[index]; + this.outstandingGetCount_--; + if (this.outstandingGetCount_ === 0) { + this.outstandingGets_ = []; } - ); + if (get.onComplete) { + get.onComplete(message); + } + }); } private sendListen_(listenSpec: ListenSpec) { @@ -353,8 +352,8 @@ export class PersistentConnection extends ServerActions { const indexPath = query.path.toString(); warn( `Using an unspecified index. Your data will be downloaded and ` + - `filtered on the client. Consider adding ${indexSpec} at ` + - `${indexPath} to your security rules for better performance.` + `filtered on the client. Consider adding ${indexSpec} at ` + + `${indexPath} to your security rules for better performance.` ); } } @@ -372,7 +371,7 @@ export class PersistentConnection extends ServerActions { //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete //the credential so we dont become authenticated next time we connect. if (this.connected_) { - this.sendRequest('unauth', {}, () => { }); + this.sendRequest('unauth', {}, () => {}); } } @@ -436,7 +435,7 @@ export class PersistentConnection extends ServerActions { assert( query.getQueryParams().isDefault() || - !query.getQueryParams().loadsAllData(), + !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query' ); const listen = this.removeListen_(pathString, queryId); @@ -694,8 +693,8 @@ export class PersistentConnection extends ServerActions { } else { error( 'Unrecognized action received from server: ' + - stringify(action) + - '\nAre you using the latest client?' + stringify(action) + + '\nAre you using the latest client?' ); } } diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index e50d498750f..256869d6ffe 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -297,6 +297,32 @@ export class Repo { return this.nextWriteId_++; } + /** + * The purpose of `getValue` is to return the latest known value + * satisfying `query`. + * + * If the client is connected, this method will send a request + * to the server. If the client is not connected, then either: + * + * 1. The client was once connected, but not anymore. + * 2. The client has never connected, this is the first operation + * this repo is handling. + * + * In case (1), it's possible that the client still has an active + * listener, with cached data. Since this is the latest known + * value satisfying the query, that's what getValue will return. + * If there is no cached data, `getValue` surfaces an "offline" + * error. + * + * In case (2), `getValue` will trigger a time-limited connection + * attempt. If the client is unable to connect to the server, the + * will surface an "offline" error because there cannot be any + * cached data. On the other hand, if the client is able to connect, + * `getValue` will return the server's value for the query, if one + * exists. + * + * @param query - The query to surface a value for. + */ getValue(query: Query): Promise { return this.server_.get(query).then( payload => { From 26703f5f2603d2a7a41a0918dabf233529efa414 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 11 Nov 2020 16:45:19 -0800 Subject: [PATCH 35/37] remove extra comment --- packages/database/src/core/PersistentConnection.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/database/src/core/PersistentConnection.ts b/packages/database/src/core/PersistentConnection.ts index ccef76e4b62..f02e9334dfa 100644 --- a/packages/database/src/core/PersistentConnection.ts +++ b/packages/database/src/core/PersistentConnection.ts @@ -233,11 +233,6 @@ export class PersistentConnection extends ServerActions { this.outstandingGets_ = []; } this.log_('get ' + index + ' timed out on connection'); - // It's possible that we were once able to reach the server, - // but not anymore. If that's the case, the client could have - // an active listener with cached data for this get. The Repo - // will try to retrieve this cached data if we can't connect - // here. deferred.reject(new Error('Client is offline.')); }, GET_CONNECT_TIMEOUT); } From 008e6fb0207185755863054289c19cca14101041 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Tue, 17 Nov 2020 14:54:54 -0500 Subject: [PATCH 36/37] Update .changeset/many-snails-kneel.md Co-authored-by: Feiyang --- .changeset/many-snails-kneel.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/many-snails-kneel.md b/.changeset/many-snails-kneel.md index f51f5858fad..7b3d1bcb94d 100644 --- a/.changeset/many-snails-kneel.md +++ b/.changeset/many-snails-kneel.md @@ -1,5 +1,6 @@ --- "@firebase/database": minor +"firebase": minor --- Add a `get` method for database queries that returns server result when connected From 2643f8a7e526477002839b50b93b689e22fd0426 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Tue, 17 Nov 2020 14:55:03 -0500 Subject: [PATCH 37/37] Update packages/database/src/core/Repo.ts Co-authored-by: Feiyang --- packages/database/src/core/Repo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/core/Repo.ts b/packages/database/src/core/Repo.ts index 256869d6ffe..f51116751c5 100644 --- a/packages/database/src/core/Repo.ts +++ b/packages/database/src/core/Repo.ts @@ -315,7 +315,7 @@ export class Repo { * error. * * In case (2), `getValue` will trigger a time-limited connection - * attempt. If the client is unable to connect to the server, the + * attempt. If the client is unable to connect to the server, it * will surface an "offline" error because there cannot be any * cached data. On the other hand, if the client is able to connect, * `getValue` will return the server's value for the query, if one