17
17
18
18
import { firestoreClientTransaction } from '../core/firestore_client' ;
19
19
import { Transaction as InternalTransaction } from '../core/transaction' ;
20
+ import {
21
+ TransactionOptions as TranasactionOptionsInternal ,
22
+ DEFAULT_TRANSACTION_OPTIONS ,
23
+ validateTransactionOptions
24
+ } from '../core/transaction_options' ;
20
25
import { DocumentReference } from '../lite-api/reference' ;
21
26
import { Transaction as LiteTransaction } from '../lite-api/transaction' ;
22
27
import { validateReference } from '../lite-api/write_batch' ;
@@ -25,6 +30,7 @@ import { cast } from '../util/input_validation';
25
30
import { ensureFirestoreConfigured , Firestore } from './database' ;
26
31
import { ExpUserDataWriter } from './reference_impl' ;
27
32
import { DocumentSnapshot , SnapshotMetadata } from './snapshot' ;
33
+ import { TransactionOptions } from './transaction_options' ;
28
34
29
35
/**
30
36
* A reference to a transaction.
@@ -92,11 +98,20 @@ export class Transaction extends LiteTransaction {
92
98
*/
93
99
export function runTransaction < T > (
94
100
firestore : Firestore ,
95
- updateFunction : ( transaction : Transaction ) => Promise < T >
101
+ updateFunction : ( transaction : Transaction ) => Promise < T > ,
102
+ options ?: TransactionOptions
96
103
) : Promise < T > {
97
104
firestore = cast ( firestore , Firestore ) ;
105
+ const optionsWithDefaults : TranasactionOptionsInternal = {
106
+ ...DEFAULT_TRANSACTION_OPTIONS ,
107
+ ...options
108
+ } ;
109
+ validateTransactionOptions ( optionsWithDefaults ) ;
98
110
const client = ensureFirestoreConfigured ( firestore ) ;
99
- return firestoreClientTransaction ( client , internalTransaction =>
100
- updateFunction ( new Transaction ( firestore , internalTransaction ) )
111
+ return firestoreClientTransaction (
112
+ client ,
113
+ internalTransaction =>
114
+ updateFunction ( new Transaction ( firestore , internalTransaction ) ) ,
115
+ optionsWithDefaults
101
116
) ;
102
117
}
0 commit comments