{"version":3,"file":"events.mjs","names":[],"sources":["../../../../@mongez/events/src/events.ts"],"sourcesContent":["import EventsListeners from \"./EventsListeners\";\r\nimport { EventSubscription, EventTriggerResponse } from \"./types\";\r\n\r\nclass Events {\r\n  /**\r\n   * Events listeners\r\n   */\r\n  private events = new EventsListeners();\r\n\r\n  /**\r\n   * Add new callback to the given event\r\n   *\r\n   * @alias subscribe\r\n   */\r\n  public on(event: string, callback: Function) {\r\n    return this.addEventListener(event, callback);\r\n  }\r\n\r\n  /**\r\n   * @alias subscribe\r\n   */\r\n  public addEventListener(event: string, callback: Function) {\r\n    return this.subscribe(event, callback);\r\n  }\r\n\r\n  /**\r\n   * Subscribe to the given event\r\n   */\r\n  public subscribe(event: string, callback: Function) {\r\n    const eventHandler = this.events.get(event) || [];\r\n    let subscription: EventSubscription = {\r\n      callback,\r\n      event,\r\n      dispatch(...args) {\r\n        return callback(...args);\r\n      },\r\n      unsubscribe: () => {\r\n        let index = eventHandler.indexOf(subscription);\r\n        if (index !== -1) {\r\n          eventHandler.splice(index, 1);\r\n        }\r\n      },\r\n    };\r\n\r\n    eventHandler.push(subscription);\r\n\r\n    this.events.set(event, eventHandler);\r\n\r\n    return subscription;\r\n  }\r\n\r\n  /**\r\n   * Trigger the given event\r\n   */\r\n  public trigger(event: string, ...args: any[]) {\r\n    const callbacks = this.events.get(event);\r\n\r\n    if (callbacks.length === 0) return;\r\n\r\n    let returnValue;\r\n\r\n    for (let callback of callbacks) {\r\n      let callbackReturn = callback.dispatch(...args);\r\n\r\n      if (callbackReturn === false) {\r\n        return false;\r\n      } else if (callbackReturn !== undefined) {\r\n        returnValue = callbackReturn;\r\n      }\r\n    }\r\n\r\n    return returnValue;\r\n  }\r\n\r\n  /**\r\n   * @alias trigger\r\n   */\r\n  public emit(event: string, ...args: any[]) {\r\n    return this.trigger(event, ...args);\r\n  }\r\n\r\n  /**\r\n   * Trigger the event and do not stop on event callback returning false\r\n   */\r\n  public triggerAll(event: string, ...args: any[]) {\r\n    const callbacks = this.events.get(event);\r\n\r\n    let returnedOutput: EventTriggerResponse = {\r\n      event,\r\n      length: 0,\r\n      results: [],\r\n    };\r\n\r\n    if (callbacks.length === 0) {\r\n      return returnedOutput;\r\n    }\r\n\r\n    for (let callback of callbacks) {\r\n      let callbackReturn = callback.dispatch(...args);\r\n\r\n      returnedOutput.length++;\r\n\r\n      if (callbackReturn !== undefined) {\r\n        returnedOutput.results.push(callbackReturn);\r\n      }\r\n    }\r\n\r\n    return returnedOutput;\r\n  }\r\n\r\n  /**\r\n   * Trigger all callbacks asynchronously\r\n   */\r\n  public async triggerAsync(event: string, ...args: any[]) {\r\n    const callbacks = this.events.get(event);\r\n\r\n    if (callbacks.length === 0) return;\r\n\r\n    let returnValue;\r\n\r\n    for (let callback of callbacks) {\r\n      let callbackReturn = await callback.dispatch(...args);\r\n\r\n      if (callbackReturn === false) {\r\n        return false;\r\n      } else if (callbackReturn !== undefined) {\r\n        returnValue = callbackReturn;\r\n      }\r\n    }\r\n\r\n    return returnValue;\r\n  }\r\n\r\n  /**\r\n   * Trigger all callbacks asynchronously and do not stop on event callback returning false\r\n   */\r\n  public async triggerAllAsync(event: string, ...args: any[]) {\r\n    const callbacks = this.events.get(event);\r\n\r\n    let returnedOutput: EventTriggerResponse = {\r\n      event,\r\n      length: 0,\r\n      results: [],\r\n    };\r\n\r\n    if (callbacks.length === 0) {\r\n      return returnedOutput;\r\n    }\r\n\r\n    for (let callback of callbacks) {\r\n      let callbackReturn = await callback.dispatch(...args);\r\n\r\n      returnedOutput.length++;\r\n\r\n      if (callbackReturn !== undefined) {\r\n        returnedOutput.results.push(callbackReturn);\r\n      }\r\n    }\r\n\r\n    return returnedOutput;\r\n  }\r\n\r\n  /**\r\n   * Remove all events subscriptions\r\n   */\r\n  public unsubscribe(event?: string) {\r\n    if (!event) {\r\n      this.events.clear();\r\n      return this;\r\n    }\r\n\r\n    this.events.delete(event);\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * @alias unsubscribe\r\n   */\r\n  public off(events?: string) {\r\n    return this.unsubscribe(events);\r\n  }\r\n\r\n  /**\r\n   * Remove all events that belongs to the given namespace\r\n   */\r\n  public unsubscribeNamespace(namespace: string) {\r\n    this.events.deleteByNamespace(namespace);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * List all events by namespace\r\n   */\r\n  public getByNamespace(namespace: string) {\r\n    return this.events.getByNamespace(namespace);\r\n  }\r\n\r\n  /**\r\n   * Get all events listeners by namespace\r\n   */\r\n  public getByNamespaceArray(namespace: string) {\r\n    return this.events.getByNamespaceArray(namespace);\r\n  }\r\n\r\n  /**\r\n   * Get all event subscriptions for the given event\r\n   */\r\n  public subscriptions(event: string) {\r\n    return this.events.get(event);\r\n  }\r\n}\r\n\r\nconst events = new Events();\r\n\r\nexport default events;\r\n"],"mappings":"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"}