1010 * - Event watcher (based on addEventListener)
1111 */
1212import { DOMProxy , DOMProxyOptions } from './Proxy.js'
13- import { Emitter , EventListener } from '@servie/events'
13+ import type { EventListener } from '@servie/events'
1414import type { LiveSelector } from './LiveSelector.js'
1515
1616import { Deadline , requestIdleCallback } from '../util/requestIdleCallback.js'
1717import { isNil , uniqWith , intersectionWith , differenceWith } from 'lodash-es'
1818import { timeout } from '../util/timeout.js'
19+ import { createEventTarget } from '../util/EventTarget.js'
1920
2021/**
2122 * Use LiveSelector to watch dom change
2223 */
2324export abstract class Watcher < T , Before extends Element , After extends Element , SingleMode extends boolean >
2425 implements PromiseLike < ResultOf < SingleMode , T > >
2526{
26- private eventEmitter : Emitter < WatcherEvents < T > > = new Emitter ( )
27- private removeListenerWeakMap = new Map < string , WeakMap < Function , Function > > ( )
27+ private events = createEventTarget < WatcherEvents < T > > ( )
2828 /**
2929 * The liveSelector that this object holds.
3030 */
@@ -320,28 +320,28 @@ export abstract class Watcher<T, Before extends Element, After extends Element,
320320 this . lastKeyList = thisKeyList
321321 this . lastNodeList = currentIteration
322322
323- if ( this . eventEmitter . $ . onIteration . size !== 0 && changedNodes . length + goneKeys . length + newKeys . length > 0 ) {
323+ if ( this . events . has ( ' onIteration' ) && changedNodes . length + goneKeys . length + newKeys . length > 0 ) {
324324 // Make a copy to prevent modifications
325325 const newMap = new Map < unknown , T > ( newKeys . map ( ( key ) => [ key , findFromNew ( key ) ! ] ) )
326326 const removedMap = new Map < unknown , T > ( goneKeys . map ( ( key ) => [ key , findFromLast ( key ) ! ] ) )
327327 const currentMap = new Map < unknown , T > ( thisKeyList . map ( ( key ) => [ key , findFromNew ( key ) ! ] ) )
328- this . eventEmitter . emit ( 'onIteration' , {
328+ this . events . emit ( 'onIteration' , {
329329 new : newMap ,
330330 removed : removedMap ,
331331 current : currentMap ,
332332 } )
333333 }
334- if ( this . eventEmitter . $ . onChange . size !== 0 )
334+ if ( this . events . has ( ' onChange' ) )
335335 for ( const [ oldNode , newNode , oldKey , newKey ] of changedNodes ) {
336- this . eventEmitter . emit ( 'onChange' , { oldValue : oldNode , newValue : newNode , oldKey, newKey } )
336+ this . events . emit ( 'onChange' , { oldValue : oldNode , newValue : newNode , oldKey, newKey } )
337337 }
338- if ( this . eventEmitter . $ . onRemove . size !== 0 )
338+ if ( this . events . has ( ' onRemove' ) )
339339 for ( const key of goneKeys ) {
340- this . eventEmitter . emit ( 'onRemove' , { key, value : findFromLast ( key ) ! } )
340+ this . events . emit ( 'onRemove' , { key, value : findFromLast ( key ) ! } )
341341 }
342- if ( this . eventEmitter . $ . onAdd . size !== 0 )
342+ if ( this . events . has ( ' onAdd' ) )
343343 for ( const key of newKeys ) {
344- this . eventEmitter . emit ( 'onAdd' , { key, value : findFromNew ( key ) ! } )
344+ this . events . emit ( 'onAdd' , { key, value : findFromNew ( key ) ! } )
345345 }
346346 // For firstDOMProxy
347347 const first = currentIteration [ 0 ]
@@ -392,7 +392,7 @@ export abstract class Watcher<T, Before extends Element, After extends Element,
392392 if ( this . singleModeLastValue instanceof Node ) {
393393 this . _firstDOMProxy . realCurrent = null
394394 }
395- this . eventEmitter . emit ( 'onRemove' , { key : undefined , value : this . singleModeLastValue ! } )
395+ this . events . emit ( 'onRemove' , { key : undefined , value : this . singleModeLastValue ! } )
396396 this . singleModeLastValue = undefined
397397 this . singleModeHasLastValue = false
398398 }
@@ -410,14 +410,14 @@ export abstract class Watcher<T, Before extends Element, After extends Element,
410410 applyUseForeachCallback ( this . singleModeCallback ) ( 'warn mutation' ) ( this . _warning_mutation_ )
411411 }
412412 }
413- this . eventEmitter . emit ( 'onAdd' , { key : undefined , value : firstValue } )
413+ this . events . emit ( 'onAdd' , { key : undefined , value : firstValue } )
414414 this . singleModeLastValue = firstValue
415415 this . singleModeHasLastValue = true
416416 }
417417 // ? Case: value has changed
418418 else if ( this . singleModeHasLastValue && ! this . valueComparer ( this . singleModeLastValue ! , firstValue ) ) {
419419 applyUseForeachCallback ( this . singleModeCallback ) ( 'target change' ) ( firstValue , this . singleModeLastValue ! )
420- this . eventEmitter . emit ( 'onChange' , {
420+ this . events . emit ( 'onChange' , {
421421 newKey : undefined ,
422422 oldKey : undefined ,
423423 newValue : firstValue ,
@@ -471,13 +471,16 @@ export abstract class Watcher<T, Before extends Element, After extends Element,
471471 //#endregion
472472 //#region events
473473
474- addListener < K extends keyof WatcherEvents < T > > ( type : K , callback : EventListener < WatcherEvents < T > , K > ) : this {
475- if ( ! this . removeListenerWeakMap . has ( type ) ) this . removeListenerWeakMap . set ( type , new WeakMap ( ) )
476- this . removeListenerWeakMap . get ( type ) ! . set ( callback , this . eventEmitter . on ( type , callback ) )
474+ addListener < K extends keyof WatcherEvents < T > > (
475+ type : K ,
476+ callback : EventListener < WatcherEvents < T > , K > ,
477+ options ?: AddEventListenerOptions ,
478+ ) : this {
479+ this . events . add ( type , callback , options )
477480 return this
478481 }
479482 removeListener < K extends keyof WatcherEvents < T > > ( type : K , callback : EventListener < WatcherEvents < T > , K > ) : this {
480- this . removeListenerWeakMap . get ( type ) ?. get ( callback ) ?. ( )
483+ this . events . remove ( type , callback )
481484 return this
482485 }
483486 //#endregion
0 commit comments