UNPKG

@orbit/core

Version:

Core library for Orbit - a flexible data access and synchronization layer.

96 lines (95 loc) 2.92 kB
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[]>;