@web-deps/event-manager
Version:
A JavaScript library for managing events. It can be used both on the frontend and backend.
11 lines (10 loc) • 1.51 kB
JavaScript
(function(t,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(t=typeof globalThis<"u"?globalThis:t||self,s(t["event-manager"]={}))})(this,function(t){"use strict";var c=Object.defineProperty;var u=(t,s,i)=>s in t?c(t,s,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[s]=i;var n=(t,s,i)=>(u(t,typeof s!="symbol"?s+"":s,i),i);class s{constructor(b,e,r){n(this,"name");n(this,"subject");n(this,"data");this.name=b,this.subject=e,r&&(this.data=r)}}class i{}class f extends i{constructor(e,r){super();n(this,"subject");n(this,"events");n(this,"observers",{});this.subject=e,this.events=r;for(const o of r)this.observers[o]=[]}eventIsRegistered(e){return this.events.includes(e)}addObserver(e,r){if(!this.eventIsRegistered(e))throw new Error(`
Failed to add observer.
Event "${e}" is not registered.
`);this.observers[e].push(r)}removeObserver(e,r){if(!this.eventIsRegistered(e))throw new Error(`
Failed to remove observer.
Event "${e}" is not registered.
`);let o=this.observers[e];const d=o.indexOf(r);d>-1&&o.splice(d,1)}notifyObservers(e,r){const o=this.observers[e];for(const d of o)d(new s(e,this.subject,r))}emit(e,r){if(!this.eventIsRegistered(e))throw new Error(`
Failed to emit event.
Event "${e}" is not registered.
`);this.notifyObservers(e,r)}}t.Event=s,t.EventEmitter=f,Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});