{"version":3,"file":"event-target.cjs","sources":["../src/event-target.ts"],"sourcesContent":["// EVENT PHASE CONSTANTS\n// https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase\nconst NONE = 0;\nconst CAPTURING_PHASE = 1;\nconst AT_TARGET = 2;\nconst BUBBLING_PHASE = 3;\n\nexport function isEventTarget(value: any): value is EventTarget {\n\treturn (\n\t\tvalue != null &&\n\t\ttypeof value.addEventListener === \"function\" &&\n\t\ttypeof value.removeEventListener === \"function\" &&\n\t\ttypeof value.dispatchEvent === \"function\"\n\t);\n}\n\nfunction setEventProperty<T extends keyof Event>(\n\tev: Event,\n\tkey: T,\n\tvalue: Event[T],\n): void {\n\tObject.defineProperty(ev, key, {value, writable: false, configurable: true});\n}\n\nfunction isListenerOrListenerObject(\n\tvalue: unknown,\n): value is EventListenerOrEventListenerObject {\n\treturn (\n\t\ttypeof value === \"function\" ||\n\t\t(value !== null &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\ttypeof (value as any).handleEvent === \"function\")\n\t);\n}\n\nfunction normalizeListenerOptions(\n\toptions: AddEventListenerOptions | boolean | null | undefined,\n): AddEventListenerOptions {\n\tif (typeof options === \"boolean\") {\n\t\treturn {capture: options};\n\t} else if (options == null) {\n\t\treturn {};\n\t}\n\n\treturn options;\n}\n\nconst _parent = Symbol.for(\"CustomEventTarget.parent\");\nconst _listeners = Symbol.for(\"CustomEventTarget.listeners\");\nconst _delegates = Symbol.for(\"CustomEventTarget.delegates\");\nconst _dispatchEventOnSelf = Symbol.for(\"CustomEventTarget.dispatchSelf\");\n\ninterface EventListenerRecord {\n\ttype: string;\n\t// listener is the original value passed to addEventListener, callback is the\n\t// actual function we call\n\tlistener: EventListenerOrEventListenerObject;\n\tcallback: EventListener;\n\toptions: AddEventListenerOptions;\n}\n\nexport class CustomEventTarget<\n\tTParent extends CustomEventTarget<TParent> = any,\n> implements EventTarget {\n\tdeclare static dispatchEventOnSelf: typeof _dispatchEventOnSelf;\n\tdeclare [_parent]: TParent | null;\n\tdeclare [_listeners]: Array<EventListenerRecord>;\n\tdeclare [_delegates]: Set<EventTarget>;\n\tconstructor(parent: TParent | null = null) {\n\t\tthis[_parent] = parent;\n\t\tthis[_listeners] = [];\n\t\tthis[_delegates] = new Set<EventTarget>();\n\t}\n\n\taddEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject | null,\n\t\toptions?: boolean | AddEventListenerOptions,\n\t): void {\n\t\tif (!isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst listeners = this[_listeners];\n\t\toptions = normalizeListenerOptions(options);\n\t\tlet callback: EventListener;\n\t\tif (typeof listener === \"function\") {\n\t\t\tcallback = listener;\n\t\t} else {\n\t\t\tcallback = (ev: Event) => listener.handleEvent(ev);\n\t\t}\n\t\tconst record: EventListenerRecord = {type, listener, callback, options};\n\n\t\tif (options.once) {\n\t\t\trecord.callback = function (this: any) {\n\t\t\t\tconst i = listeners.indexOf(record);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlisteners.splice(i, 1);\n\t\t\t\t}\n\n\t\t\t\treturn callback.apply(this, arguments as any);\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tlisteners.some(\n\t\t\t\t(record1) =>\n\t\t\t\t\trecord.type === record1.type &&\n\t\t\t\t\trecord.listener === record1.listener &&\n\t\t\t\t\t!record.options.capture === !record1.options.capture,\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tlisteners.push(record);\n\n\t\tfor (const delegate of this[_delegates]) {\n\t\t\tdelegate.addEventListener(type, record.callback, record.options);\n\t\t}\n\t}\n\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject | null,\n\t\toptions?: EventListenerOptions | boolean,\n\t): void {\n\t\tconst listeners = this[_listeners];\n\t\tif (listeners == null || !isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options1 = normalizeListenerOptions(options);\n\t\tconst i = listeners.findIndex(\n\t\t\t(record) =>\n\t\t\t\trecord.type === type &&\n\t\t\t\trecord.listener === listener &&\n\t\t\t\t!record.options.capture === !options1.capture,\n\t\t);\n\n\t\tif (i === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = listeners[i];\n\t\tlisteners.splice(i, 1);\n\n\t\tfor (const delegate of this[_delegates]) {\n\t\t\tdelegate.removeEventListener(\n\t\t\t\trecord.type,\n\t\t\t\trecord.callback,\n\t\t\t\trecord.options,\n\t\t\t);\n\t\t}\n\t}\n\n\tdispatchEvent(ev: Event): boolean {\n\t\tconst path: Array<CustomEventTarget> = [];\n\t\tfor (let parent = this[_parent]; parent; parent = parent[_parent]) {\n\t\t\tpath.push(parent);\n\t\t}\n\n\t\tlet cancelBubble = false;\n\t\tlet immediateCancelBubble = false;\n\t\tconst stopPropagation = ev.stopPropagation;\n\t\tsetEventProperty(ev, \"stopPropagation\", () => {\n\t\t\tcancelBubble = true;\n\t\t\treturn stopPropagation.call(ev);\n\t\t});\n\n\t\tconst stopImmediatePropagation = ev.stopImmediatePropagation;\n\t\tsetEventProperty(ev, \"stopImmediatePropagation\", () => {\n\t\t\timmediateCancelBubble = true;\n\t\t\treturn stopImmediatePropagation.call(ev);\n\t\t});\n\t\tsetEventProperty(ev, \"target\", this);\n\n\t\t// The only possible errors in this block are errors thrown by callbacks,\n\t\t// and dispatchEvent will only log these errors rather than throwing them.\n\t\t// Therefore, we place all code in a try block, log errors in the catch\n\t\t// block, and use an unsafe return statement in the finally block.\n\t\t//\n\t\t// Each early return within the try block returns true because while the\n\t\t// return value is overridden in the finally block, TypeScript\n\t\t// (justifiably) does not recognize the unsafe return statement.\n\t\ttry {\n\t\t\tsetEventProperty(ev, \"eventPhase\", CAPTURING_PHASE);\n\t\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\t\tconst target = path[i];\n\t\t\t\tconst listeners = target[_listeners];\n\t\t\t\tsetEventProperty(ev, \"currentTarget\", target);\n\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\tif (record.type === ev.type && record.options.capture) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trecord.callback.call(target, ev);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tsetEventProperty(ev, \"eventPhase\", AT_TARGET);\n\t\t\t\tsetEventProperty(ev, \"currentTarget\", this);\n\n\t\t\t\tthis[_dispatchEventOnSelf](ev);\n\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tconst listeners = this[_listeners];\n\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\tif (record.type === ev.type) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trecord.callback.call(this, ev);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ev.bubbles) {\n\t\t\t\tsetEventProperty(ev, \"eventPhase\", BUBBLING_PHASE);\n\t\t\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\t\t\tconst target = path[i];\n\t\t\t\t\tsetEventProperty(ev, \"currentTarget\", target);\n\t\t\t\t\tconst listeners = target[_listeners];\n\t\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\t\tif (record.type === ev.type && !record.options.capture) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trecord.callback.call(target, ev);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cancelBubble) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tsetEventProperty(ev, \"eventPhase\", NONE);\n\t\t\tsetEventProperty(ev, \"currentTarget\", null);\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn !ev.defaultPrevented;\n\t\t}\n\t}\n\n\t[_dispatchEventOnSelf](_ev: Event): void {}\n}\n\nCustomEventTarget.dispatchEventOnSelf = _dispatchEventOnSelf;\n\nexport function addEventTargetDelegates<T extends CustomEventTarget>(\n\ttarget: T,\n\tdelegates: Array<unknown>,\n\tinclude: (target1: T) => boolean = (target1) => target === target1,\n): void {\n\tfor (\n\t\tlet target1: T | null = target;\n\t\ttarget1 && include(target1);\n\t\ttarget1 = target1[_parent]\n\t) {\n\t\tfor (let i = 0; i < delegates.length; i++) {\n\t\t\tconst delegate = delegates[i];\n\t\t\tif (!isEventTarget(delegate) || target1[_delegates].has(delegate)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttarget1[_delegates].add(delegate);\n\t\t\tfor (const record of target1[_listeners]) {\n\t\t\t\tdelegate.addEventListener(record.type, record.callback, record.options);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function removeEventTargetDelegates<T extends CustomEventTarget>(\n\ttarget: T,\n\tdelegates: Array<unknown>,\n\tinclude: (target1: T) => boolean = (target1) => target === target1,\n): void {\n\tfor (\n\t\tlet target1: T | null = target;\n\t\ttarget1 && include(target1);\n\t\ttarget1 = target1[_parent]\n\t) {\n\t\tfor (let i = 0; i < delegates.length; i++) {\n\t\t\tconst delegate = delegates[i];\n\t\t\tif (!isEventTarget(delegate) || !target1[_delegates].has(delegate)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttarget1[_delegates].delete(delegate);\n\t\t\tfor (const record of target1[_listeners]) {\n\t\t\t\tdelegate.removeEventListener(\n\t\t\t\t\trecord.type,\n\t\t\t\t\trecord.callback,\n\t\t\t\t\trecord.options,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function clearEventListeners(target: CustomEventTarget): void {\n\tconst listeners = target[_listeners];\n\tconst delegates = target[_delegates];\n\tfor (let i = 0; i < listeners.length; i++) {\n\t\tconst record = listeners[i];\n\t\tfor (const delegate of delegates) {\n\t\t\tdelegate.removeEventListener(\n\t\t\t\trecord.type,\n\t\t\t\trecord.callback,\n\t\t\t\trecord.options,\n\t\t\t);\n\t\t}\n\t}\n\n\tlisteners.length = 0;\n\tdelegates.clear();\n}\n"],"names":[],"mappings":"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"}