@fedify/fedify
Version:
An ActivityPub server framework
41 lines (40 loc) • 1.08 kB
JavaScript
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 };