1- import { AbstractPowerSyncDatabase , ArrayComparator , GetAllQuery , WatchedQueryState } from '@powersync/common' ;
1+ import {
2+ AbstractPowerSyncDatabase ,
3+ ArrayComparator ,
4+ GetAllQuery ,
5+ WatchedQueryDifferential ,
6+ WatchedQueryState
7+ } from '@powersync/common' ;
28import { PowerSyncDatabase } from '@powersync/web' ;
39import { v4 as uuid } from 'uuid' ;
410import { afterEach , beforeEach , describe , expect , it , onTestFinished , vi } from 'vitest' ;
@@ -495,6 +501,14 @@ describe('Watch Tests', { sequential: true }, () => {
495501 } )
496502 . differentialWatch ( ) ;
497503
504+ const diffs : WatchedQueryDifferential < { id : string ; make : string } > [ ] = [ ] ;
505+
506+ watch . registerListener ( {
507+ onDiff : ( diff ) => {
508+ diffs . push ( diff ) ;
509+ }
510+ } ) ;
511+
498512 // Create sample data
499513 await powersync . execute (
500514 /* sql */ `
@@ -508,7 +522,7 @@ describe('Watch Tests', { sequential: true }, () => {
508522
509523 await vi . waitFor (
510524 ( ) => {
511- expect ( watch . state . diff . added [ 0 ] ?. make ) . equals ( 'test1' ) ;
525+ expect ( diffs [ 0 ] . added [ 0 ] ?. make ) . equals ( 'test1' ) ;
512526 } ,
513527 { timeout : 1000 }
514528 ) ;
@@ -525,12 +539,13 @@ describe('Watch Tests', { sequential: true }, () => {
525539
526540 await vi . waitFor (
527541 ( ) => {
542+ expect ( diffs ) . toHaveLength ( 2 ) ;
528543 // This should now reflect that we had one change since the last event
529- expect ( watch . state . diff . added ) . toHaveLength ( 1 ) ;
530- expect ( watch . state . diff . added [ 0 ] ?. make ) . equals ( 'test2' ) ;
544+ expect ( diffs [ 1 ] . added ) . toHaveLength ( 1 ) ;
545+ expect ( diffs [ 1 ] . added [ 0 ] ?. make ) . equals ( 'test2' ) ;
531546
532- expect ( watch . state . diff . removed ) . toHaveLength ( 0 ) ;
533- expect ( watch . state . diff . all ) . toHaveLength ( 2 ) ;
547+ expect ( diffs [ 1 ] . removed ) . toHaveLength ( 0 ) ;
548+ expect ( diffs [ 1 ] . all ) . toHaveLength ( 2 ) ;
534549 } ,
535550 { timeout : 1000 }
536551 ) ;
@@ -546,13 +561,14 @@ describe('Watch Tests', { sequential: true }, () => {
546561
547562 await vi . waitFor (
548563 ( ) => {
549- expect ( watch . state . diff . added ) . toHaveLength ( 0 ) ;
550- expect ( watch . state . diff . all ) . toHaveLength ( 1 ) ;
551- expect ( watch . state . diff . unchanged ) . toHaveLength ( 1 ) ;
552- expect ( watch . state . diff . unchanged [ 0 ] ?. make ) . equals ( 'test1' ) ;
553-
554- expect ( watch . state . diff . removed ) . toHaveLength ( 1 ) ;
555- expect ( watch . state . diff . removed [ 0 ] ?. make ) . equals ( 'test2' ) ;
564+ expect ( diffs ) . toHaveLength ( 3 ) ;
565+ expect ( diffs [ 2 ] . added ) . toHaveLength ( 0 ) ;
566+ expect ( diffs [ 2 ] . all ) . toHaveLength ( 1 ) ;
567+ expect ( diffs [ 2 ] . unchanged ) . toHaveLength ( 1 ) ;
568+ expect ( diffs [ 2 ] . unchanged [ 0 ] ?. make ) . equals ( 'test1' ) ;
569+
570+ expect ( diffs [ 2 ] . removed ) . toHaveLength ( 1 ) ;
571+ expect ( diffs [ 2 ] . removed [ 0 ] ?. make ) . equals ( 'test2' ) ;
556572 } ,
557573 { timeout : 1000 }
558574 ) ;
@@ -592,9 +608,18 @@ describe('Watch Tests', { sequential: true }, () => {
592608 [ 'test1' , uuid ( ) ]
593609 ) ;
594610
611+ const diffs : WatchedQueryDifferential < { id : string ; make : string } > [ ] = [ ] ;
612+
613+ watch . registerListener ( {
614+ onDiff : ( diff ) => {
615+ diffs . push ( diff ) ;
616+ }
617+ } ) ;
618+
595619 await vi . waitFor (
596620 ( ) => {
597- expect ( watch . state . diff . added [ 0 ] ?. make ) . equals ( 'test1' ) ;
621+ expect ( diffs ) . toHaveLength ( 1 ) ;
622+ expect ( diffs [ 0 ] . added [ 0 ] ?. make ) . equals ( 'test1' ) ;
598623 } ,
599624 { timeout : 1000 }
600625 ) ;
@@ -611,12 +636,13 @@ describe('Watch Tests', { sequential: true }, () => {
611636
612637 await vi . waitFor (
613638 ( ) => {
639+ expect ( diffs ) . toHaveLength ( 2 ) ;
614640 // This should now reflect that we had one change since the last event
615- expect ( watch . state . diff . added ) . toHaveLength ( 1 ) ;
616- expect ( watch . state . diff . added [ 0 ] ?. make ) . equals ( 'test2' ) ;
641+ expect ( diffs [ 1 ] . added ) . toHaveLength ( 1 ) ;
642+ expect ( diffs [ 1 ] . added [ 0 ] ?. make ) . equals ( 'test2' ) ;
617643
618- expect ( watch . state . diff . removed ) . toHaveLength ( 0 ) ;
619- expect ( watch . state . diff . all ) . toHaveLength ( 2 ) ;
644+ expect ( diffs [ 1 ] . removed ) . toHaveLength ( 0 ) ;
645+ expect ( diffs [ 1 ] . all ) . toHaveLength ( 2 ) ;
620646 } ,
621647 { timeout : 1000 }
622648 ) ;
@@ -741,6 +767,14 @@ describe('Watch Tests', { sequential: true }, () => {
741767 // It should have the initial value
742768 expect ( watch . state . data ) . toHaveLength ( 1 ) ;
743769
770+ const diffs : WatchedQueryDifferential < { id : string ; make : string } > [ ] = [ ] ;
771+
772+ watch . registerListener ( {
773+ onDiff : ( diff ) => {
774+ diffs . push ( diff ) ;
775+ }
776+ } ) ;
777+
744778 await powersync . execute (
745779 /* sql */ `
746780 INSERT INTO
@@ -753,12 +787,13 @@ describe('Watch Tests', { sequential: true }, () => {
753787
754788 await vi . waitFor (
755789 ( ) => {
790+ expect ( diffs ) . toHaveLength ( 1 ) ;
756791 // This should now reflect that we had one change since the last event
757- expect ( watch . state . diff . added ) . toHaveLength ( 1 ) ;
758- expect ( watch . state . diff . added [ 0 ] ?. make ) . equals ( 'test2' ) ;
792+ expect ( diffs [ 0 ] . added ) . toHaveLength ( 1 ) ;
793+ expect ( diffs [ 0 ] . added [ 0 ] ?. make ) . equals ( 'test2' ) ;
759794
760- expect ( watch . state . diff . removed ) . toHaveLength ( 0 ) ;
761- expect ( watch . state . diff . all ) . toHaveLength ( 2 ) ;
795+ expect ( diffs [ 0 ] . removed ) . toHaveLength ( 0 ) ;
796+ expect ( diffs [ 0 ] . all ) . toHaveLength ( 2 ) ;
762797 } ,
763798 { timeout : 1000 }
764799 ) ;
@@ -774,13 +809,14 @@ describe('Watch Tests', { sequential: true }, () => {
774809
775810 await vi . waitFor (
776811 ( ) => {
777- expect ( watch . state . diff . added ) . toHaveLength ( 0 ) ;
778- expect ( watch . state . diff . all ) . toHaveLength ( 1 ) ;
779- expect ( watch . state . diff . unchanged ) . toHaveLength ( 1 ) ;
780- expect ( watch . state . diff . unchanged [ 0 ] ?. make ) . equals ( 'test1' ) ;
781-
782- expect ( watch . state . diff . removed ) . toHaveLength ( 1 ) ;
783- expect ( watch . state . diff . removed [ 0 ] ?. make ) . equals ( 'test2' ) ;
812+ expect ( diffs ) . toHaveLength ( 2 ) ;
813+ expect ( diffs [ 1 ] . added ) . toHaveLength ( 0 ) ;
814+ expect ( diffs [ 1 ] . all ) . toHaveLength ( 1 ) ;
815+ expect ( diffs [ 1 ] . unchanged ) . toHaveLength ( 1 ) ;
816+ expect ( diffs [ 1 ] . unchanged [ 0 ] ?. make ) . equals ( 'test1' ) ;
817+
818+ expect ( diffs [ 1 ] . removed ) . toHaveLength ( 1 ) ;
819+ expect ( diffs [ 1 ] . removed [ 0 ] ?. make ) . equals ( 'test2' ) ;
784820 } ,
785821 { timeout : 1000 }
786822 ) ;
@@ -823,6 +859,14 @@ describe('Watch Tests', { sequential: true }, () => {
823859 { timeout : 1000 , interval : 100 }
824860 ) ;
825861
862+ const diffs : WatchedQueryDifferential < { id : string ; make : string } > [ ] = [ ] ;
863+
864+ watch . registerListener ( {
865+ onDiff : ( diff ) => {
866+ diffs . push ( diff ) ;
867+ }
868+ } ) ;
869+
826870 await powersync . execute (
827871 /* sql */ `
828872 UPDATE assets
@@ -836,16 +880,17 @@ describe('Watch Tests', { sequential: true }, () => {
836880
837881 await vi . waitFor (
838882 ( ) => {
839- expect ( watch . state . diff . added ) . toHaveLength ( 0 ) ;
840- const updated = watch . state . diff . updated [ 0 ] ;
883+ expect ( diffs ) . toHaveLength ( 1 ) ;
884+ expect ( diffs [ 0 ] . added ) . toHaveLength ( 0 ) ;
885+ const updated = diffs [ 0 ] . updated [ 0 ] ;
841886
842887 // The update should contain previous and current values of changed rows
843888 expect ( updated ) . toBeDefined ( ) ;
844889 expect ( updated . previous . make ) . equals ( 'test1' ) ;
845890 expect ( updated . current . make ) . equals ( 'test2' ) ;
846891
847- expect ( watch . state . diff . removed ) . toHaveLength ( 0 ) ;
848- expect ( watch . state . diff . all ) . toHaveLength ( 1 ) ;
892+ expect ( diffs [ 0 ] . removed ) . toHaveLength ( 0 ) ;
893+ expect ( diffs [ 0 ] . all ) . toHaveLength ( 1 ) ;
849894 } ,
850895 { timeout : 1000 }
851896 ) ;
0 commit comments