Skip to content

Commit 769db12

Browse files
Merge d073329 into 487f8e1
2 parents 487f8e1 + d073329 commit 769db12

File tree

7 files changed

+56
-16
lines changed

7 files changed

+56
-16
lines changed

common/api-review/firestore-exp.api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,9 @@ export function updateDoc(reference: DocumentReference<unknown>, data: UpdateDat
520520
// @public
521521
export function updateDoc(reference: DocumentReference<unknown>, field: string | FieldPath, value: unknown, ...moreFieldsAndValues: unknown[]): Promise<void>;
522522

523+
// @public
524+
export function useFirestoreEmulator(firestore: FirebaseFirestore_2, host: string, port: number): void;
525+
523526
// @public
524527
export function waitForPendingWrites(firestore: FirebaseFirestore): Promise<void>;
525528

common/api-review/firestore-lite.api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,9 @@ export function updateDoc(reference: DocumentReference<unknown>, data: UpdateDat
426426
// @public
427427
export function updateDoc(reference: DocumentReference<unknown>, field: string | FieldPath, value: unknown, ...moreFieldsAndValues: unknown[]): Promise<void>;
428428

429+
// @public
430+
export function useFirestoreEmulator(firestore: FirebaseFirestore, host: string, port: number): void;
431+
429432
// @public
430433
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryConstraint;
431434

packages/firestore/exp/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ export {
3131
waitForPendingWrites,
3232
disableNetwork,
3333
enableNetwork,
34-
terminate
34+
terminate,
35+
useFirestoreEmulator
3536
} from '../src/exp/database';
3637

3738
export { Settings, PersistenceSettings } from '../src/exp/settings';

packages/firestore/lite/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export {
2424
FirebaseFirestore,
2525
initializeFirestore,
2626
getFirestore,
27-
terminate
27+
terminate,
28+
useFirestoreEmulator
2829
} from '../src/lite/database';
2930

3031
export {

packages/firestore/src/api/database.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import {
5555
enableNetwork,
5656
ensureFirestoreConfigured,
5757
FirebaseFirestore as ExpFirebaseFirestore,
58+
useFirestoreEmulator,
5859
waitForPendingWrites
5960
} from '../exp/database';
6061
import { FieldPath as ExpFieldPath } from '../exp/field_path';
@@ -95,7 +96,6 @@ import {
9596
updateDoc,
9697
Unsubscribe
9798
} from '../exp/reference_impl';
98-
import { DEFAULT_HOST } from '../exp/settings';
9999
import {
100100
DocumentChange as ExpDocumentChange,
101101
DocumentSnapshot as ExpDocumentSnapshot,
@@ -118,7 +118,7 @@ import {
118118
validateIsNotUsedTogether,
119119
validateSetOptions
120120
} from '../util/input_validation';
121-
import { logWarn, setLogLevel as setClientLogLevel } from '../util/log';
121+
import { setLogLevel as setClientLogLevel } from '../util/log';
122122

123123
import { Blob } from './blob';
124124
import { LoadBundleTask } from './bundle';
@@ -236,17 +236,7 @@ export class Firestore
236236
}
237237

238238
useEmulator(host: string, port: number): void {
239-
if (this._delegate._getSettings().host !== DEFAULT_HOST) {
240-
logWarn(
241-
'Host has been set in both settings() and useEmulator(), emulator host will be used'
242-
);
243-
}
244-
245-
this.settings({
246-
host: `${host}:${port}`,
247-
ssl: false,
248-
merge: true
249-
});
239+
useFirestoreEmulator(this._delegate, host, port);
250240
}
251241

252242
enableNetwork(): Promise<void> {

packages/firestore/src/exp/database.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ import { Deferred } from '../util/promise';
5353

5454
import { PersistenceSettings, Settings } from './settings';
5555

56+
export { useFirestoreEmulator } from '../lite/database';
57+
5658
/** DOMException error code constants. */
5759
const DOM_EXCEPTION_INVALID_STATE = 11;
5860
const DOM_EXCEPTION_ABORTED = 20;

packages/firestore/src/lite/database.ts

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ import {
3030
import { DatabaseId } from '../core/database_info';
3131
import { Code, FirestoreError } from '../util/error';
3232
import { cast } from '../util/input_validation';
33+
import { logWarn } from '../util/log';
3334

3435
import { FirestoreService, removeComponents } from './components';
35-
import { FirestoreSettings, PrivateSettings, Settings } from './settings';
36+
import {
37+
DEFAULT_HOST,
38+
FirestoreSettings,
39+
PrivateSettings,
40+
Settings
41+
} from './settings';
3642

3743
declare module '@firebase/component' {
3844
interface NameServiceMapping {
@@ -191,6 +197,39 @@ export function getFirestore(app: FirebaseApp): FirebaseFirestore {
191197
).getImmediate() as FirebaseFirestore;
192198
}
193199

200+
/**
201+
* Modify this instance to communicate with the Cloud Firestore emulator.
202+
*
203+
* Note: This must be called before this instance has been used to do any
204+
* operations.
205+
*
206+
* @param firestore - The Firestore instance to configure to connect to the
207+
* emulator.
208+
* @param host - the emulator host (ex: localhost).
209+
* @param port - the emulator port (ex: 9000).
210+
*/
211+
export function useFirestoreEmulator(
212+
firestore: FirebaseFirestore,
213+
host: string,
214+
port: number
215+
): void {
216+
firestore = cast(firestore, FirebaseFirestore);
217+
const settings = firestore._getSettings();
218+
219+
if (settings.host !== DEFAULT_HOST && settings.host !== host) {
220+
logWarn(
221+
'Host has been set in both settings() and useEmulator(), emulator host ' +
222+
'will be used'
223+
);
224+
}
225+
226+
firestore._setSettings({
227+
...settings,
228+
host: `${host}:${port}`,
229+
ssl: false
230+
});
231+
}
232+
194233
/**
195234
* Terminates the provided Firestore instance.
196235
*
@@ -207,6 +246,7 @@ export function getFirestore(app: FirebaseApp): FirebaseFirestore {
207246
* its resources or in combination with {@link clearIndexedDbPersistence} to
208247
* ensure that all local state is destroyed between test runs.
209248
*
249+
* @param firestore - The Firestore instance to terminate.
210250
* @returns A promise that is resolved when the instance has been successfully
211251
* terminated.
212252
*/

0 commit comments

Comments
 (0)