1717
1818import { firestoreClientTransaction } from '../core/firestore_client' ;
1919import { Transaction as InternalTransaction } from '../core/transaction' ;
20+ import {
21+ TransactionOptions as TranasactionOptionsInternal ,
22+ DEFAULT_TRANSACTION_OPTIONS ,
23+ validateTransactionOptions
24+ } from '../core/transaction_options' ;
2025import { DocumentReference } from '../lite-api/reference' ;
2126import { Transaction as LiteTransaction } from '../lite-api/transaction' ;
2227import { validateReference } from '../lite-api/write_batch' ;
@@ -25,6 +30,7 @@ import { cast } from '../util/input_validation';
2530import { ensureFirestoreConfigured , Firestore } from './database' ;
2631import { ExpUserDataWriter } from './reference_impl' ;
2732import { DocumentSnapshot , SnapshotMetadata } from './snapshot' ;
33+ import { TransactionOptions } from './transaction_options' ;
2834
2935/**
3036 * A reference to a transaction.
@@ -92,11 +98,20 @@ export class Transaction extends LiteTransaction {
9298 */
9399export function runTransaction < T > (
94100 firestore : Firestore ,
95- updateFunction : ( transaction : Transaction ) => Promise < T >
101+ updateFunction : ( transaction : Transaction ) => Promise < T > ,
102+ options ?: TransactionOptions
96103) : Promise < T > {
97104 firestore = cast ( firestore , Firestore ) ;
105+ const optionsWithDefaults : TranasactionOptionsInternal = {
106+ ...DEFAULT_TRANSACTION_OPTIONS ,
107+ ...options
108+ } ;
109+ validateTransactionOptions ( optionsWithDefaults ) ;
98110 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
101116 ) ;
102117}
0 commit comments