| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 
							- 'use strict';
 
- class EventPubSub {
 
-     constructor( scope ) {
 
-         this._events_ = {};
 
-         this.publish = this.trigger = this.emit;
 
-         this.subscribe = this.on;
 
-         this.unSubscribe = this.off;
 
-     }
 
-     on( type, handler, once ) {
 
-         if ( !handler ) {
 
-             throw new ReferenceError( 'handler not defined.' );
 
-         }
 
-         if ( !this._events_[ type ] ) {
 
-             this._events_[ type ] = [];
 
-         }
 
-          if(once){
 
-             handler._once_ = once;
 
-         }
 
-         this._events_[ type ].push( handler );
 
-         return this;
 
-     }
 
-     once( type, handler ) {
 
-         return this.on( type, handler, true );
 
-     }
 
-     off( type, handler ) {
 
-         if ( !this._events_[ type ] ) {
 
-             return this;
 
-         }
 
-         if ( !handler ) {
 
-             throw new ReferenceError( 'handler not defined. if you wish to remove all handlers from the event please pass "*" as the handler' );
 
-         }
 
-         if ( handler == '*' ) {
 
-             delete this._events_[ type ];
 
-             return this;
 
-         }
 
-         const handlers = this._events_[ type ];
 
-         while ( handlers.includes( handler ) ) {
 
-             handlers.splice(
 
-                 handlers.indexOf( handler ),
 
-                 1
 
-             );
 
-         }
 
-         if ( handlers.length < 1 ) {
 
-             delete this._events_[ type ];
 
-         }
 
-         return this;
 
-     }
 
-     emit( type, ...args ) {
 
-         if ( !this._events_[ type ] ) {
 
-             return this.emit$( type, ...args );
 
-         }
 
-         const handlers = this._events_[ type ];
 
-         const onceHandled=[];
 
-         for ( let handler of handlers ) {
 
-             handler.apply( this, args );
 
-             if(handler._once_){
 
-               onceHandled.push(handler);
 
-             }
 
-         }
 
-         for(let handler of onceHandled){
 
-           this.off(type,handler);
 
-         }
 
-         return this.emit$( type, ...args );
 
-     }
 
-     emit$( type, ...args ) {
 
-         if ( !this._events_[ '*' ] ) {
 
-             return this;
 
-         }
 
-         const catchAll = this._events_[ '*' ];
 
-         for ( let handler of catchAll ) {
 
-             handler.call( this, type, ...args );
 
-         }
 
-         return this;
 
-     }
 
- }
 
- module.exports = EventPubSub;
 
 
  |