Skip to content

Commit 5c680ec

Browse files
Merge a22ce03 into af0c430
2 parents af0c430 + a22ce03 commit 5c680ec

File tree

4 files changed

+58
-8
lines changed

4 files changed

+58
-8
lines changed

.changeset/many-lamps-bake.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
---

packages/firestore/exp/index.node.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,15 @@ export { FieldPath, documentId } from '../lite/src/api/field_path';
2525
export {
2626
Firestore,
2727
initializeFirestore,
28-
getFirestore
28+
getFirestore,
29+
terminate
2930
} from './src/api/database';
3031

31-
export { DocumentSnapshot, QueryDocumentSnapshot } from './src/api/snapshot';
32+
export {
33+
DocumentSnapshot,
34+
QueryDocumentSnapshot,
35+
snapshotEqual
36+
} from './src/api/snapshot';
3237

3338
export { SnapshotMetadata } from '../src/api/database';
3439

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

+14-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import * as firestore from '../../index';
1919

20-
import { _getProvider } from '@firebase/app-exp';
20+
import { _getProvider, _removeServiceInstance } from '@firebase/app-exp';
2121
import { FirebaseApp, _FirebaseService } from '@firebase/app-types-exp';
2222
import { Provider } from '@firebase/component';
2323

@@ -30,6 +30,7 @@ import {
3030
} from '../../../src/core/component_provider';
3131

3232
import { Firestore as LiteFirestore } from '../../../lite/src/api/database';
33+
import { cast } from '../../../lite/src/api/util';
3334

3435
/**
3536
* The root reference to the Firestore database and the entry point for the
@@ -86,8 +87,8 @@ export class Firestore extends LiteFirestore
8687
return this._firestoreClientPromise;
8788
}
8889

89-
async delete(): Promise<void> {
90-
// TODO(firestoreexp): Call terminate() once implemented
90+
delete(): Promise<void> {
91+
return terminate(this);
9192
}
9293
}
9394

@@ -106,3 +107,13 @@ export function initializeFirestore(
106107
export function getFirestore(app: FirebaseApp): Firestore {
107108
return _getProvider(app, 'firestore-exp').getImmediate() as Firestore;
108109
}
110+
111+
export function terminate(
112+
firestore: firestore.FirebaseFirestore
113+
): Promise<void> {
114+
_removeServiceInstance(firestore.app, 'firestore/lite');
115+
const firestoreImpl = cast(firestore, Firestore);
116+
return firestoreImpl
117+
._getFirestoreClient()
118+
.then(firestoreClient => firestoreClient.terminate());
119+
}

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

+35-3
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,18 @@ import {
2929
} from '../../../lite/src/api/snapshot';
3030
import { Firestore } from './database';
3131
import { cast } from '../../../lite/src/api/util';
32-
import { DocumentReference, Query } from '../../../lite/src/api/reference';
32+
import {
33+
DocumentReference,
34+
Query,
35+
queryEqual
36+
} from '../../../lite/src/api/reference';
3337
import {
3438
changesFromSnapshot,
3539
SnapshotMetadata
3640
} from '../../../src/api/database';
3741
import { Code, FirestoreError } from '../../../src/util/error';
3842
import { ViewSnapshot } from '../../../src/core/view_snapshot';
43+
import { arrayEquals } from '../../../src/util/misc';
3944

4045
const DEFAULT_SERVER_TIMESTAMP_BEHAVIOR: ServerTimestampBehavior = 'none';
4146

@@ -121,9 +126,9 @@ export class QuerySnapshot<T = firestore.DocumentData>
121126
private _cachedChangesIncludeMetadataChanges?: boolean;
122127

123128
constructor(
124-
private readonly _firestore: Firestore,
129+
readonly _firestore: Firestore,
125130
readonly query: Query<T>,
126-
private readonly _snapshot: ViewSnapshot,
131+
readonly _snapshot: ViewSnapshot,
127132
readonly metadata: SnapshotMetadata
128133
) {}
129134

@@ -199,3 +204,30 @@ export class QuerySnapshot<T = firestore.DocumentData>
199204
);
200205
}
201206
}
207+
208+
// TODO(firestoreexp): Add tests for snapshotEqual with different snapshot
209+
// metadata
210+
export function snapshotEqual<T>(
211+
left: firestore.DocumentSnapshot<T> | firestore.QuerySnapshot<T>,
212+
right: firestore.DocumentSnapshot<T> | firestore.QuerySnapshot<T>
213+
): boolean {
214+
if (left instanceof DocumentSnapshot && right instanceof DocumentSnapshot) {
215+
return (
216+
left._firestore === right._firestore &&
217+
left._key.isEqual(right._key) &&
218+
(left._document === null
219+
? right._document === null
220+
: left._document.isEqual(right._document)) &&
221+
left._converter === right._converter
222+
);
223+
} else if (left instanceof QuerySnapshot && right instanceof QuerySnapshot) {
224+
return (
225+
left._firestore === right._firestore &&
226+
queryEqual(left.query, right.query) &&
227+
left.metadata.isEqual(right.metadata) &&
228+
left._snapshot.isEqual(right._snapshot)
229+
);
230+
}
231+
232+
return false;
233+
}

0 commit comments

Comments
 (0)