@@ -39,6 +39,7 @@ import { hardAssert } from '../../../src/util/assert';
39
39
import { DeleteMutation , Precondition } from '../../../src/model/mutation' ;
40
40
import { PlatformSupport } from '../../../src/platform/platform' ;
41
41
import { applyFirestoreDataConverter } from '../../../src/api/database' ;
42
+ import { DatabaseId } from '../../../src/core/database_info' ;
42
43
43
44
/**
44
45
* A reference to a particular document in a collection in the database.
@@ -312,21 +313,27 @@ export function setDoc<T>(
312
313
options ?: firestore . SetOptions
313
314
) : Promise < void > {
314
315
const ref = tryCast ( reference , DocumentReference ) ;
315
- return ref . firestore . _ensureClientConfigured ( ) . then ( firestore => {
316
- const dataReader = newUserDataReader ( firestore ) ;
317
316
318
- const [ convertedValue ] = applyFirestoreDataConverter (
319
- ref . _converter ,
320
- data ,
321
- 'setDoc'
322
- ) ;
317
+ const [ convertedValue ] = applyFirestoreDataConverter (
318
+ ref . _converter ,
319
+ data ,
320
+ 'setDoc'
321
+ ) ;
323
322
324
- const parsed = isMerge ( options )
325
- ? dataReader . parseMergeData ( 'setDoc' , convertedValue )
326
- : isMergeFields ( options )
327
- ? dataReader . parseMergeData ( 'setDoc' , convertedValue , options . mergeFields )
328
- : dataReader . parseSetData ( 'setDoc' , convertedValue ) ;
323
+ // Kick off configuring the client, which freezes the settings.
324
+ const configureClient = ref . firestore . _ensureClientConfigured ( ) ;
325
+ const dataReader = newUserDataReader (
326
+ ref . firestore . _databaseId ,
327
+ ref . firestore . _settings !
328
+ ) ;
329
329
330
+ const parsed = isMerge ( options )
331
+ ? dataReader . parseMergeData ( 'setDoc' , convertedValue )
332
+ : isMergeFields ( options )
333
+ ? dataReader . parseMergeData ( 'setDoc' , convertedValue , options . mergeFields )
334
+ : dataReader . parseSetData ( 'setDoc' , convertedValue ) ;
335
+
336
+ return configureClient . then ( firestore => {
330
337
return invokeCommitRpc (
331
338
firestore . _datastore ,
332
339
parsed . toMutations ( ref . _key , Precondition . none ( ) )
@@ -363,13 +370,14 @@ function isMergeFields(
363
370
) ;
364
371
}
365
372
366
- function newUserDataReader ( firestore : Required < Firestore > ) : UserDataReader {
367
- const serializer = PlatformSupport . getPlatform ( ) . newSerializer (
368
- firestore . _databaseId
369
- ) ;
373
+ function newUserDataReader (
374
+ databaseId : DatabaseId ,
375
+ settings : firestore . Settings
376
+ ) : UserDataReader {
377
+ const serializer = PlatformSupport . getPlatform ( ) . newSerializer ( databaseId ) ;
370
378
return new UserDataReader (
371
- firestore . _databaseId ,
372
- ! ! firestore . _settings . ignoreUndefinedProperties ,
379
+ databaseId ,
380
+ ! ! settings . ignoreUndefinedProperties ,
373
381
serializer
374
382
) ;
375
383
}
0 commit comments