in packages/shared/src/event.ts [168:203]
addEventListener(type: any, listener: any, options: any) {
const target = this.eventTarget(type)
if (isOnlyMode(options?.mode)) {
target[EVENTS_ONCE_SYMBOL] = target[EVENTS_ONCE_SYMBOL] || {}
const constructor = this['constructor']
constructor[EVENTS_ONCE_SYMBOL] = constructor[EVENTS_ONCE_SYMBOL] || {}
const handler = target[EVENTS_ONCE_SYMBOL][type]
const container = constructor[EVENTS_ONCE_SYMBOL][type]
if (!handler) {
if (container) {
if (options.mode === 'onlyChild') {
if (container.contains(target)) {
container.removeEventListener(
type,
container[EVENTS_ONCE_SYMBOL][type],
options
)
delete container[EVENTS_ONCE_SYMBOL][type]
}
} else if (options.mode === 'onlyParent') {
if (container.contains(target)) return
}
}
target.addEventListener(type, listener, options)
target[EVENTS_ONCE_SYMBOL][type] = listener
constructor[EVENTS_ONCE_SYMBOL][type] = target
}
} else {
target[EVENTS_SYMBOL] = target[EVENTS_SYMBOL] || {}
target[EVENTS_SYMBOL][type] = target[EVENTS_SYMBOL][type] || new Map()
if (!target[EVENTS_SYMBOL][type]?.get?.(listener)) {
target.addEventListener(type, listener, options)
target[EVENTS_SYMBOL][type]?.set?.(listener, true)
}
}
}