UNPKG

@fedify/fedify

Version:

An ActivityPub server framework

41 lines (40 loc) 1.08 kB
import "@js-temporal/polyfill"; import "urlpattern-polyfill"; globalThis.addEventListener = () => {}; import { Activity } from "@fedify/vocab"; //#region src/federation/activity-listener.ts var ActivityListenerSet = class { #listeners; constructor() { this.#listeners = /* @__PURE__ */ new Map(); } clone() { const Clone = this.constructor; const clone = new Clone(); clone.#listeners = new Map(this.#listeners); return clone; } add(type, listener) { if (this.#listeners.has(type)) throw new TypeError("Listener already set for this type."); this.#listeners.set(type, listener); } dispatchWithClass(activity) { let cls = activity.constructor; while (cls != null) { if (this.#listeners.has(cls)) break; if (cls === Activity) return null; cls = globalThis.Object.getPrototypeOf(cls); } if (cls == null) return null; const listener = this.#listeners.get(cls); return { class: cls, listener }; } dispatch(activity) { return this.dispatchWithClass(activity)?.listener ?? null; } }; //#endregion export { ActivityListenerSet as t };