"use strict";
var __webpack_require__ = {};
(()=>{
    __webpack_require__.d = (exports1, definition)=>{
        for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
            enumerable: true,
            get: definition[key]
        });
    };
})();
(()=>{
    __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
    __webpack_require__.r = (exports1)=>{
        if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
            value: 'Module'
        });
        Object.defineProperty(exports1, '__esModule', {
            value: true
        });
    };
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
    EventBus: ()=>EventBus
});
class EventBus {
    handlers = new Map();
    interceptors = new Map();
    subscribe(event, handler) {
        if (!this.handlers.has(event)) this.handlers.set(event, []);
        this.handlers.get(event).push({
            handler
        });
        return ()=>{
            const handlers = this.handlers.get(event);
            const index = handlers.findIndex((h)=>h.handler === handler);
            if (index > -1) handlers.splice(index, 1);
        };
    }
    async publish(event, data) {
        const handlers = this.handlers.get(event);
        const interceptors = this.interceptors.get(event);
        let hijacked = false;
        if (interceptors) {
            const results = await Promise.all(interceptors.map((interceptor)=>interceptor.interceptor(data)));
            hijacked = results.some((result)=>true === result);
        }
        if (handlers) handlers.forEach((handler)=>{
            handler.handler(hijacked ? {
                ...data,
                hijacked: true
            } : data);
        });
    }
    intercept(event, interceptor) {
        if (!this.interceptors.has(event)) this.interceptors.set(event, []);
        this.interceptors.get(event).push({
            interceptor
        });
        return ()=>{
            const interceptors = this.interceptors.get(event);
            const index = interceptors.findIndex((i)=>i.interceptor === interceptor);
            if (index > -1) interceptors.splice(index, 1);
        };
    }
    clear(event) {
        if (event) {
            this.handlers.delete(event);
            this.interceptors.delete(event);
        } else {
            this.handlers.clear();
            this.interceptors.clear();
        }
    }
}
exports.EventBus = __webpack_exports__.EventBus;
for(var __rspack_i in __webpack_exports__)if (-1 === [
    "EventBus"
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
Object.defineProperty(exports, '__esModule', {
    value: true
});
