@orbit/core
Version:
Core library for Orbit - a flexible data access and synchronization layer.
96 lines (95 loc) • 2.92 kB
TypeScript
import { Listener } from './notifier';
/**
* Has a class been decorated as `@evented`?
*/
export declare function isEvented(obj: unknown): boolean;
/**
* A class decorated as `@evented` should also implement the `Evented`
* interface.
*
* ```ts
* import { evented, Evented } from '@orbit/core';
*
* @evented
* class Source implements Evented {
* // ... Evented implementation
* }
* ```
*/
export interface Evented<Event extends string = string> {
on: (event: Event, listener: Listener) => () => void;
off: (event: Event, listener?: Listener) => void;
one: (event: Event, listener: Listener) => () => void;
emit: (event: Event, ...args: unknown[]) => void;
listeners: (event: Event) => Listener[];
}
/**
* Marks a class as evented.
*
* An evented class should also implement the `Evented` interface.
*
* ```ts
* import { evented, Evented } from '@orbit/core';
*
* @evented
* class Source implements Evented {
* ...
* }
* ```
*
* Listeners can then register themselves for particular events with `on`:
*
* ```ts
* let source = new Source();
*
* function listener1(message: string) {
* console.log('listener1 heard ' + message);
* };
* function listener2(message: string) {
* console.log('listener2 heard ' + message);
* };
*
* source.on('greeting', listener1);
* source.on('greeting', listener2);
*
* evented.emit('greeting', 'hello'); // logs "listener1 heard hello" and
* // "listener2 heard hello"
* ```
*
* Listeners can be unregistered from events at any time with `off`:
*
* ```ts
* source.off('greeting', listener2);
* ```
*/
export declare function evented(Klass: {
prototype: any;
}): void;
/**
* Settle any promises returned by event listeners in series.
*
* Returns an array of results (or `undefined`) returned by listeners.
*
* If any errors are encountered during processing, they will be caught and
* returned with other results. Errors will not interrupt further processing.
*/
export declare function settleInSeries(obj: Evented, eventName: string, ...args: unknown[]): Promise<unknown[]>;
/**
* Fulfills any promises returned by event listeners in series.
*
* Returns an array of results (or `undefined`) returned by listeners.
*
* On error, processing will stop and the returned promise will be rejected with
* the error that was encountered.
*/
export declare function fulfillInSeries(obj: Evented, eventName: string, ...args: unknown[]): Promise<unknown[]>;
/**
* Fulfills any promises returned by event listeners in parallel, using
* `Promise.all`.
*
* Returns an array of results (or `undefined`) returned by listeners.
*
* On error, processing will stop and the returned promise will be rejected with
* the error that was encountered.
*/
export declare function fulfillAll(obj: Evented, eventName: string, ...args: unknown[]): Promise<unknown[]>;