Type alias Events

Events: {
    emit: (<EventName>(event, payload) => void);
    on: (<EventName>(eventName, listener) => (() => boolean));
    once: (<EventName>(eventName, listener) => (() => boolean));
    reduce: (<EventName>(event, target, payload) => Promise<JimpexReducerEventTarget<EventName>>);
    reduceSync: (<EventName>(event, target, payload) => JimpexReducerEventTarget<EventName>);
}

The events service Jimpex uses. This is an alternative declaration of the EventsHub class that uses the interfaces and types from this project.

Type declaration

  • emit: (<EventName>(event, payload) => void)

    Emits an event and call all its listeners.

    Example

    // Extend the interface to type the payload.
    interface JimpexEvents {
    myEvent: { message: string };
    }
    // Add the listener.
    events.on('myEvent', ({ message }) => {
    console.log('Event received:', message);
    });
    // Trigger the event.
    events.emit('myEvent', { message: 'Hello' });
    // prints "Event received: Hello"
  • on: (<EventName>(eventName, listener) => (() => boolean))

    Adds a new event listener.

    Returns

    An unsubscribe function to remove the listener.

    Example

    const unsubscribe = events.on('afterStart', ({ app }) => {
    app.getLogger().info('Hello world!');
    unsubscribe();
    });
  • once: (<EventName>(eventName, listener) => (() => boolean))

    Adds an event listener that will only be executed once.

    Returns

    An unsubscribe function to remove the listener.

    Example

    events.once('afterStart', ({ app }) => {
    app.getLogger().info('Hello world!');
    unsubscribe();
    });
  • reduce: (<EventName>(event, target, payload) => Promise<JimpexReducerEventTarget<EventName>>)

    Asynchronously reduces a target using an event. It's like emit, but the event listeners return a modified (or not) version of the target.

    Returns

    A version of the target processed by the listeners.

    Example

    // Extend the interface to type the target.
    interface JimpexReducerEventTargets {
    myReducer: unknown[];
    }
    // Extend the interface to type the payload.
    interface JimpexReducerEventPayloads {
    myReducer: {
    message: string;
    };
    }
    // Add the reducer.
    events.on('myReducer', async (target, { message }) => {
    const data = await fetch('https://api.example.com/' + message);
    target.push(data);
    return target;
    });
    // Trigger the event.
    const result = await events.reduce('myReducer', [], { message: 'Hello' });
    // result would be a list of data fetched from the API.
  • reduceSync: (<EventName>(event, target, payload) => JimpexReducerEventTarget<EventName>)

    Synchronously reduces a target using an event. It's like emit, but the events listener return a modified (or not) version of the target.

    Returns

    A version of the target processed by the listeners.

    Example

    // Extend the interface to type the target.
    interface JimpexReducerEventTargets {
    myReducer: string[];
    }
    // Extend the interface to type the payload.
    interface JimpexReducerEventPayloads {
    myReducer: {
    message: string;
    };
    }
    // Add the reducer.
    events.on('myReducer', (target, { message }) => {
    target.push(message);
    return target;
    });
    // Trigger the event.
    events.reduce('event', [], 'Hello');
    // returns ['Hello']

Generated using TypeDoc