@@ -107,7 +107,7 @@ export function fieldTransformsAreEqual(
107
107
return true ;
108
108
}
109
109
110
- if ( ! ! left && ! ! right ) {
110
+ if ( left && right ) {
111
111
return arrayEquals ( left , right , ( l , r ) => fieldTransformEquals ( l , r ) ) ;
112
112
}
113
113
@@ -266,16 +266,7 @@ export abstract class Mutation {
266
266
abstract readonly type : MutationType ;
267
267
abstract readonly key : DocumentKey ;
268
268
abstract readonly precondition : Precondition ;
269
- }
270
-
271
- /**
272
- * Used to represent Mutation classes that have a `fieldTransforms` field,
273
- * namely SetMutation and PatchMutation. This intermediate class makes it
274
- * easier to access the `fieldTransforms` field directly from a Mutation
275
- * object.
276
- */
277
- export abstract class MutationWithTransforms extends Mutation {
278
- abstract readonly fieldTransforms ?: FieldTransform [ ] ;
269
+ abstract readonly fieldTransforms : FieldTransform [ ] ;
279
270
}
280
271
281
272
/**
@@ -386,12 +377,9 @@ export function extractMutationBaseValue(
386
377
mutation : Mutation ,
387
378
maybeDoc : MaybeDocument | null
388
379
) : ObjectValue | null {
389
- if (
390
- mutation instanceof MutationWithTransforms &&
391
- ( mutation as MutationWithTransforms ) . fieldTransforms !== undefined
392
- ) {
380
+ if ( mutation . fieldTransforms !== undefined ) {
393
381
return extractTransformMutationBaseValue (
394
- ( mutation as MutationWithTransforms ) . fieldTransforms ! ,
382
+ mutation . fieldTransforms ,
395
383
maybeDoc
396
384
) ;
397
385
}
@@ -441,24 +429,19 @@ export function mutationEquals(left: Mutation, right: Mutation): boolean {
441
429
}
442
430
443
431
if ( left . type === MutationType . Set ) {
444
- const setLeft : SetMutation = left as SetMutation ;
445
- const setRight : SetMutation = right as SetMutation ;
446
432
return (
447
- setLeft . value . isEqual ( setRight . value ) &&
448
- fieldTransformsAreEqual ( setLeft . fieldTransforms , setRight . fieldTransforms )
433
+ ( left as SetMutation ) . value . isEqual ( ( right as SetMutation ) . value ) &&
434
+ fieldTransformsAreEqual ( left . fieldTransforms , right . fieldTransforms )
449
435
) ;
450
436
}
451
437
452
438
if ( left . type === MutationType . Patch ) {
453
- const patchLeft : PatchMutation = left as PatchMutation ;
454
- const patchRight : PatchMutation = right as PatchMutation ;
455
439
return (
456
- patchLeft . data . isEqual ( patchRight . data ) &&
457
- patchLeft . fieldMask . isEqual ( patchRight . fieldMask ) &&
458
- fieldTransformsAreEqual (
459
- patchLeft . fieldTransforms ,
460
- patchRight . fieldTransforms
461
- )
440
+ ( left as PatchMutation ) . data . isEqual ( ( right as PatchMutation ) . data ) &&
441
+ ( left as PatchMutation ) . fieldMask . isEqual (
442
+ ( right as PatchMutation ) . fieldMask
443
+ ) &&
444
+ fieldTransformsAreEqual ( left . fieldTransforms , right . fieldTransforms )
462
445
) ;
463
446
}
464
447
@@ -497,12 +480,12 @@ function getPostMutationVersion(
497
480
* A mutation that creates or replaces the document at the given key with the
498
481
* object value contents.
499
482
*/
500
- export class SetMutation extends MutationWithTransforms {
483
+ export class SetMutation extends Mutation {
501
484
constructor (
502
485
readonly key : DocumentKey ,
503
486
readonly value : ObjectValue ,
504
487
readonly precondition : Precondition ,
505
- readonly fieldTransforms ? : FieldTransform [ ]
488
+ readonly fieldTransforms : FieldTransform [ ] = [ ]
506
489
) {
507
490
super ( ) ;
508
491
}
@@ -581,13 +564,13 @@ function applySetMutationToLocalView(
581
564
* * When a field is not in the mask but is in the values, the values map is
582
565
* ignored.
583
566
*/
584
- export class PatchMutation extends MutationWithTransforms {
567
+ export class PatchMutation extends Mutation {
585
568
constructor (
586
569
readonly key : DocumentKey ,
587
570
readonly data : ObjectValue ,
588
571
readonly fieldMask : FieldMask ,
589
572
readonly precondition : Precondition ,
590
- readonly fieldTransforms ? : FieldTransform [ ]
573
+ readonly fieldTransforms : FieldTransform [ ] = [ ]
591
574
) {
592
575
super ( ) ;
593
576
}
@@ -608,19 +591,14 @@ function applyPatchMutationToRemoteDocument(
608
591
return new UnknownDocument ( mutation . key , mutationResult . version ) ;
609
592
}
610
593
611
- let newData = patchDocument ( mutation , maybeDoc ) ;
612
- if ( mutation . fieldTransforms && mutationResult . transformResults ) {
613
- const transformResults = serverTransformResults (
614
- mutation . fieldTransforms ,
615
- maybeDoc ,
616
- mutationResult . transformResults
617
- ) ;
618
- newData = transformObject (
619
- mutation . fieldTransforms ,
620
- newData ,
621
- transformResults
622
- ) ;
623
- }
594
+ const transformResults = mutationResult . transformResults
595
+ ? serverTransformResults (
596
+ mutation . fieldTransforms ,
597
+ maybeDoc ,
598
+ mutationResult . transformResults
599
+ )
600
+ : [ ] ;
601
+ const newData = patchDocument ( mutation , maybeDoc , transformResults ) ;
624
602
return new Document ( mutation . key , mutationResult . version , newData , {
625
603
hasCommittedMutations : true
626
604
} ) ;
@@ -637,20 +615,13 @@ function applyPatchMutationToLocalView(
637
615
}
638
616
639
617
const version = getPostMutationVersion ( maybeDoc ) ;
640
- let newData = patchDocument ( mutation , maybeDoc ) ;
641
- if ( mutation . fieldTransforms ) {
642
- const transformResults = localTransformResults (
643
- mutation . fieldTransforms ,
644
- localWriteTime ,
645
- maybeDoc ,
646
- baseDoc
647
- ) ;
648
- newData = transformObject (
649
- mutation . fieldTransforms ,
650
- newData ,
651
- transformResults
652
- ) ;
653
- }
618
+ const transformResults = localTransformResults (
619
+ mutation . fieldTransforms ,
620
+ localWriteTime ,
621
+ maybeDoc ,
622
+ baseDoc
623
+ ) ;
624
+ const newData = patchDocument ( mutation , maybeDoc , transformResults ) ;
654
625
return new Document ( mutation . key , version , newData , {
655
626
hasLocalMutations : true
656
627
} ) ;
@@ -663,15 +634,20 @@ function applyPatchMutationToLocalView(
663
634
*/
664
635
function patchDocument (
665
636
mutation : PatchMutation ,
666
- maybeDoc : MaybeDocument | null
637
+ maybeDoc : MaybeDocument | null ,
638
+ transformResults ?: ProtoValue [ ]
667
639
) : ObjectValue {
668
640
let data : ObjectValue ;
669
641
if ( maybeDoc instanceof Document ) {
670
642
data = maybeDoc . data ( ) ;
671
643
} else {
672
644
data = ObjectValue . empty ( ) ;
673
645
}
674
- return patchObject ( mutation , data ) ;
646
+ data = patchObject ( mutation , data ) ;
647
+ if ( transformResults ) {
648
+ data = transformObject ( mutation . fieldTransforms , data , transformResults ) ;
649
+ }
650
+ return data ;
675
651
}
676
652
677
653
function patchObject ( mutation : PatchMutation , data : ObjectValue ) : ObjectValue {
@@ -801,6 +777,7 @@ export class DeleteMutation extends Mutation {
801
777
}
802
778
803
779
readonly type : MutationType = MutationType . Delete ;
780
+ readonly fieldTransforms : FieldTransform [ ] = [ ] ;
804
781
}
805
782
806
783
function applyDeleteMutationToRemoteDocument (
@@ -852,4 +829,5 @@ export class VerifyMutation extends Mutation {
852
829
}
853
830
854
831
readonly type : MutationType = MutationType . Verify ;
832
+ readonly fieldTransforms : FieldTransform [ ] = [ ] ;
855
833
}
0 commit comments