Skip to content

Commit 24c0a97

Browse files
Add terminate() and snashotEqual()
1 parent 5d6b749 commit 24c0a97

File tree

3 files changed

+57
-8
lines changed

3 files changed

+57
-8
lines changed

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

+15-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,8 @@ 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';
34+
import { terminateDatastore } from '../../../src/remote/datastore';
3335

3436
/**
3537
* The root reference to the Firestore database and the entry point for the
@@ -86,8 +88,8 @@ export class Firestore extends LiteFirestore
8688
return this._firestoreClientPromise;
8789
}
8890

89-
async delete(): Promise<void> {
90-
// TODO(firestoreexp): Call terminate() once implemented
91+
delete(): Promise<void> {
92+
return terminate(this);
9193
}
9294
}
9395

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

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)