@@ -36,12 +36,12 @@ interface OnUpdateContext {
3636}
3737
3838class ListenerManager {
39- private readonly listeners = new Set < DataEngineListener > ( ) ;
39+ private readonly unindexed = new Set < DataEngineListener > ( ) ;
4040 private readonly indexed = new Map < string , Set < DataEngineListener > > ( ) ;
4141
4242 add ( listener : DataEngineListener ) {
4343 if ( ! listener . field ) {
44- this . listeners . add ( listener ) ;
44+ this . unindexed . add ( listener ) ;
4545 return ;
4646 }
4747 const key = stringifyFieldKey ( listener . field ) ;
@@ -52,35 +52,36 @@ class ListenerManager {
5252
5353 remove ( listener : DataEngineListener ) {
5454 if ( ! listener . field ) {
55- this . listeners . delete ( listener ) ;
55+ this . unindexed . delete ( listener ) ;
5656 } else {
5757 this . indexed . get ( stringifyFieldKey ( listener . field ) ) ?. delete ( listener ) ;
5858 }
5959 }
6060
6161 onUpdate ( field : FieldKey , ctx : OnUpdateContext ) {
62- for ( const v of this . listeners ) v . onUpdate ?.( field , ctx ) ;
62+ for ( const v of this . unindexed ) v . onUpdate ?.( field , ctx ) ;
6363 const updatedKey = stringifyFieldKey ( field ) ;
6464
6565 if ( ctx . swallow ) {
6666 const set = this . indexed . get ( updatedKey ) ;
6767 if ( set ) for ( const v of set ) v . onUpdate ?.( field , ctx ) ;
6868 } else {
6969 for ( const [ k , listeners ] of this . indexed . entries ( ) ) {
70- if ( k !== updatedKey && ! k . startsWith ( updatedKey + '.' ) ) continue ;
70+ if ( updatedKey . length !== 0 && k !== updatedKey && ! k . startsWith ( updatedKey + '.' ) )
71+ continue ;
7172 for ( const v of listeners ) v . onUpdate ?.( field , ctx ) ;
7273 }
7374 }
7475 }
7576
7677 onInit ( field : FieldKey ) {
77- for ( const v of this . listeners ) v . onInit ?.( field ) ;
78+ for ( const v of this . unindexed ) v . onInit ?.( field ) ;
7879 const set = this . indexed . get ( stringifyFieldKey ( field ) ) ;
7980 if ( set ) for ( const v of set ) v . onInit ?.( field ) ;
8081 }
8182
8283 onDelete ( field : FieldKey ) {
83- for ( const v of this . listeners ) v . onDelete ?.( field ) ;
84+ for ( const v of this . unindexed ) v . onDelete ?.( field ) ;
8485 const set = this . indexed . get ( stringifyFieldKey ( field ) ) ;
8586 if ( set ) for ( const v of set ) v . onDelete ?.( field ) ;
8687 }
0 commit comments