1- import { AbstractPowerSyncDatabase , CompilableQuery } from '@powersync/common' ;
1+ import { AbstractPowerSyncDatabase , BaseListener , BaseObserver , CompilableQuery } from '@powersync/common' ;
22import { AdditionalOptions } from './hooks/useQuery' ;
33
44export class Query < T > {
@@ -7,9 +7,11 @@ export class Query<T> {
77 queryParameters : any [ ] ;
88}
99
10- export class WatchedQuery {
11- listeners = new Set < ( ) => void > ( ) ;
10+ export interface WatchedQueryListener extends BaseListener {
11+ onUpdate : ( ) => void ;
12+ }
1213
14+ export class WatchedQuery extends BaseObserver < WatchedQueryListener > {
1315 readyPromise : Promise < void > ;
1416 isReady : boolean = false ;
1517 currentData : any [ ] | undefined ;
@@ -27,6 +29,7 @@ export class WatchedQuery {
2729 private disposer : ( ) => void ;
2830
2931 constructor ( db : AbstractPowerSyncDatabase , query : Query < unknown > , options : AdditionalOptions , disposer : ( ) => void ) {
32+ super ( ) ;
3033 this . db = db ;
3134 this . query = query ;
3235 this . options = options ;
@@ -65,12 +68,12 @@ export class WatchedQuery {
6568 return release ;
6669 }
6770
68- addListener ( l : ( ) => void ) {
69- this . listeners . add ( l ) ;
71+ registerListener ( listener : Partial < WatchedQueryListener > ) : ( ) => void {
72+ const disposer = super . registerListener ( listener ) ;
7073
7174 this . maybeListen ( ) ;
7275 return ( ) => {
73- this . listeners . delete ( l ) ;
76+ disposer ( ) ;
7477 this . maybeDispose ( ) ;
7578 } ;
7679 }
@@ -142,9 +145,7 @@ export class WatchedQuery {
142145 this . currentError = undefined ;
143146 this . resolveReady ?.( ) ;
144147
145- for ( let listener of this . listeners ) {
146- listener ( ) ;
147- }
148+ this . iterateListeners ( ( l ) => l ?. onUpdate ( ) ) ;
148149 }
149150
150151 private setError ( error : any ) {
@@ -153,9 +154,7 @@ export class WatchedQuery {
153154 this . currentError = error ;
154155 this . resolveReady ?.( ) ;
155156
156- for ( let listener of this . listeners ) {
157- listener ( ) ;
158- }
157+ this . iterateListeners ( ( l ) => l ?. onUpdate ( ) ) ;
159158 }
160159
161160 private maybeDispose ( ) {
0 commit comments