From ec132af5a451a7eb531e42ed49dabe96320447ad Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Fri, 26 Jun 2020 21:56:35 -0700 Subject: [PATCH 1/5] Add terminate() and snapshotEqual() --- packages/firestore/exp/index.node.ts | 9 +++-- packages/firestore/exp/src/api/database.ts | 18 ++++++++-- packages/firestore/exp/src/api/snapshot.ts | 38 ++++++++++++++++++++-- 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/packages/firestore/exp/index.node.ts b/packages/firestore/exp/index.node.ts index c27c4756092..065de1b2911 100644 --- a/packages/firestore/exp/index.node.ts +++ b/packages/firestore/exp/index.node.ts @@ -25,10 +25,15 @@ export { FieldPath, documentId } from '../lite/src/api/field_path'; export { Firestore, initializeFirestore, - getFirestore + getFirestore, + terminate } from './src/api/database'; -export { DocumentSnapshot, QueryDocumentSnapshot } from './src/api/snapshot'; +export { + DocumentSnapshot, + QueryDocumentSnapshot, + snapshotEqual +} from './src/api/snapshot'; export { SnapshotMetadata } from '../src/api/database'; diff --git a/packages/firestore/exp/src/api/database.ts b/packages/firestore/exp/src/api/database.ts index 998f489a443..715f0b69c05 100644 --- a/packages/firestore/exp/src/api/database.ts +++ b/packages/firestore/exp/src/api/database.ts @@ -17,7 +17,7 @@ import * as firestore from '../../index'; -import { _getProvider } from '@firebase/app-exp'; +import { _getProvider, _removeServiceInstance } from '@firebase/app-exp'; import { FirebaseApp, _FirebaseService } from '@firebase/app-types-exp'; import { Provider } from '@firebase/component'; @@ -30,6 +30,8 @@ import { } from '../../../src/core/component_provider'; import { Firestore as LiteFirestore } from '../../../lite/src/api/database'; +import { cast } from '../../../lite/src/api/util'; +import { terminateDatastore } from '../../../src/remote/datastore'; /** * The root reference to the Firestore database and the entry point for the @@ -86,8 +88,8 @@ export class Firestore extends LiteFirestore return this._firestoreClientPromise; } - async delete(): Promise { - // TODO(firestoreexp): Call terminate() once implemented + delete(): Promise { + return terminate(this); } } @@ -106,3 +108,13 @@ export function initializeFirestore( export function getFirestore(app: FirebaseApp): Firestore { return _getProvider(app, 'firestore-exp').getImmediate() as Firestore; } + +export function terminate( + firestore: firestore.FirebaseFirestore +): Promise { + _removeServiceInstance(firestore.app, 'firestore/lite'); + const firestoreClient = cast(firestore, Firestore); + return firestoreClient + ._getFirestoreClient() + .then(firestoreClient => firestoreClient.terminate()); +} diff --git a/packages/firestore/exp/src/api/snapshot.ts b/packages/firestore/exp/src/api/snapshot.ts index 2fd93102811..c5640d9539a 100644 --- a/packages/firestore/exp/src/api/snapshot.ts +++ b/packages/firestore/exp/src/api/snapshot.ts @@ -29,13 +29,18 @@ import { } from '../../../lite/src/api/snapshot'; import { Firestore } from './database'; import { cast } from '../../../lite/src/api/util'; -import { DocumentReference, Query } from '../../../lite/src/api/reference'; +import { + DocumentReference, + Query, + queryEqual +} from '../../../lite/src/api/reference'; import { changesFromSnapshot, SnapshotMetadata } from '../../../src/api/database'; import { Code, FirestoreError } from '../../../src/util/error'; import { ViewSnapshot } from '../../../src/core/view_snapshot'; +import { arrayEquals } from '../../../src/util/misc'; const DEFAULT_SERVER_TIMESTAMP_BEHAVIOR: ServerTimestampBehavior = 'none'; @@ -121,9 +126,9 @@ export class QuerySnapshot private _cachedChangesIncludeMetadataChanges?: boolean; constructor( - private readonly _firestore: Firestore, + readonly _firestore: Firestore, readonly query: Query, - private readonly _snapshot: ViewSnapshot, + readonly _snapshot: ViewSnapshot, readonly metadata: SnapshotMetadata ) {} @@ -199,3 +204,30 @@ export class QuerySnapshot ); } } + +// TODO(firestoreexp): Add tests for snapshotEqual with different snapshot +// metadata +export function snapshotEqual( + left: firestore.DocumentSnapshot | firestore.QuerySnapshot, + right: firestore.DocumentSnapshot | firestore.QuerySnapshot +): boolean { + if (left instanceof DocumentSnapshot && right instanceof DocumentSnapshot) { + return ( + left._firestore === right._firestore && + left._key.isEqual(right._key) && + (left._document === null + ? right._document === null + : left._document.isEqual(right._document)) && + left._converter === right._converter + ); + } else if (left instanceof QuerySnapshot && right instanceof QuerySnapshot) { + return ( + left._firestore === right._firestore && + queryEqual(left.query, right.query) && + left.metadata.isEqual(right.metadata) && + left._snapshot.isEqual(right._snapshot) + ); + } + + return false; +} From e5d59945738cc8076f0b2ea476fbff1f7beb2e6e Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Fri, 26 Jun 2020 21:59:26 -0700 Subject: [PATCH 2/5] Create many-lamps-bake.md --- .changeset/many-lamps-bake.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .changeset/many-lamps-bake.md diff --git a/.changeset/many-lamps-bake.md b/.changeset/many-lamps-bake.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/many-lamps-bake.md @@ -0,0 +1,2 @@ +--- +--- From e293d58b5e234aec71c5a82b86b1cad9162778ad Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Fri, 26 Jun 2020 22:00:35 -0700 Subject: [PATCH 3/5] Rename --- packages/firestore/exp/src/api/database.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firestore/exp/src/api/database.ts b/packages/firestore/exp/src/api/database.ts index 715f0b69c05..f77b3a2b93b 100644 --- a/packages/firestore/exp/src/api/database.ts +++ b/packages/firestore/exp/src/api/database.ts @@ -113,8 +113,8 @@ export function terminate( firestore: firestore.FirebaseFirestore ): Promise { _removeServiceInstance(firestore.app, 'firestore/lite'); - const firestoreClient = cast(firestore, Firestore); - return firestoreClient + const firestoreImpl = cast(firestore, Firestore); + return firestoreImpl ._getFirestoreClient() .then(firestoreClient => firestoreClient.terminate()); } From a22ce03cac51d695d6377657f7d305c9b267b1e7 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Mon, 29 Jun 2020 10:50:52 -0700 Subject: [PATCH 4/5] Update database.ts --- packages/firestore/exp/src/api/database.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/firestore/exp/src/api/database.ts b/packages/firestore/exp/src/api/database.ts index f77b3a2b93b..e3cfba1ae1d 100644 --- a/packages/firestore/exp/src/api/database.ts +++ b/packages/firestore/exp/src/api/database.ts @@ -31,7 +31,6 @@ import { import { Firestore as LiteFirestore } from '../../../lite/src/api/database'; import { cast } from '../../../lite/src/api/util'; -import { terminateDatastore } from '../../../src/remote/datastore'; /** * The root reference to the Firestore database and the entry point for the From f251dd6e0c68b36304898e97959ebafa2ea76689 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Mon, 29 Jun 2020 10:51:40 -0700 Subject: [PATCH 5/5] Update snapshot.ts --- packages/firestore/exp/src/api/snapshot.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/firestore/exp/src/api/snapshot.ts b/packages/firestore/exp/src/api/snapshot.ts index c5640d9539a..9e7ce22ad67 100644 --- a/packages/firestore/exp/src/api/snapshot.ts +++ b/packages/firestore/exp/src/api/snapshot.ts @@ -40,7 +40,6 @@ import { } from '../../../src/api/database'; import { Code, FirestoreError } from '../../../src/util/error'; import { ViewSnapshot } from '../../../src/core/view_snapshot'; -import { arrayEquals } from '../../../src/util/misc'; const DEFAULT_SERVER_TIMESTAMP_BEHAVIOR: ServerTimestampBehavior = 'none';