Home Reference Source Test

packages/causality-core/src/event.js

import { EventEmitter } from 'events';
/**
 * class Event is the primitive class for composing higher event-based class. 
 * @export {EventEmitter}
 * @class Event
 * @extends {EventEmitter}
 * @example
 * [EXAMPLE ../examples/event.babel.js]
 */
export default class Event extends EventEmitter{
    constructor(){
        super();
    }

    async emit(name, data){
        return new Promise((resolve, reject)=>{
            super.emit(name, data, (msg)=>{
                resolve(msg);
            });
        });
    }

    on(name, handler, bypass=false){
        const Handler = bypass?handler:(data, cb)=>{
            let message = handler(data);
            cb(message);
        };
        super.on(name, Handler);
    }

    pipe(destStream){
        let events = destStream.eventNames();
        for(let event of events){
            this.on(event, async (data, cb)=>{ 
                let message = await destStream.emit(event, data);
                cb(message);
            }, true);
        }
    }
}