1717
1818import {
1919 JsonProtoSerializer ,
20+ fromTimestamp ,
2021 toName ,
2122 toQueryTarget ,
2223 toTimestamp
@@ -99,24 +100,29 @@ export class BundleBuilder {
99100 ) : void {
100101 const originalDocument = this . documents . get ( docBundleData . documentPath ) ;
101102 const originalQueries = originalDocument ?. metadata . queries ;
103+ const docReadTime : Timestamp | undefined = docBundleData . readTime ;
104+ const origDocReadTime : Timestamp | null = ! ! originalDocument ?. metadata
105+ . readTime
106+ ? fromTimestamp ( originalDocument . metadata . readTime )
107+ : null ;
102108
103- const readTime = docBundleData . readTime ;
104- // Update with document built from `snap` because it is newer.
105- if (
106- ! originalDocument ||
107- ( ! readTime && ! originalDocument . metadata . readTime ) ||
108- ( readTime && originalDocument . metadata . readTime ! < readTime )
109- ) {
109+ const neitherHasReadTime : boolean = ! docReadTime && origDocReadTime == null ;
110+ const docIsNewer : boolean = docReadTime !== undefined && ( origDocReadTime == null || origDocReadTime < docReadTime ) ;
111+ if ( neitherHasReadTime || docIsNewer ) {
112+ // Store document.
110113 this . documents . set ( docBundleData . documentPath , {
111114 document : this . toBundleDocument ( docBundleData ) ,
112115 metadata : {
113116 name : toName ( this . serializer , docBundleData . documentKey ) ,
114- readTime : ! ! readTime
115- ? toTimestamp ( this . serializer , readTime )
117+ readTime : ! ! docReadTime
118+ ? toTimestamp ( this . serializer , docReadTime ) // Convert Timestamp to proto format.
116119 : undefined ,
117120 exists : docBundleData . documentExists
118121 }
119122 } ) ;
123+ }
124+ if ( docReadTime && docReadTime > this . latestReadTime ) {
125+ this . latestReadTime = docReadTime ;
120126 }
121127 // Update `queries` to include both original and `queryName`.
122128 if ( queryName ) {
@@ -126,9 +132,6 @@ export class BundleBuilder {
126132 newDocument . metadata . queries ! . push ( queryName ) ;
127133 }
128134 }
129- if ( readTime && readTime > this . latestReadTime ) {
130- this . latestReadTime = readTime ;
131- }
132135 }
133136
134137 /**
0 commit comments