import { CancellationToken } from '../../base/common/cancellation'; import { DisposableStore, IDisposable } from '../../base/common/lifecycle'; import { LinkedList } from '../../base/common/linkedList'; /** * To an event a function with one or zero parameters * can be subscribed. The event is the subscriber function itself. */ export interface Event { (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable; } export declare namespace Event { const None: Event; /** * Given an event, returns another event which only fires once. */ function once(event: Event): Event; /** * @deprecated DO NOT use, this leaks memory */ function map(event: Event, map: (i: I) => O): Event; /** * @deprecated DO NOT use, this leaks memory */ function forEach(event: Event, each: (i: I) => void): Event; /** * @deprecated DO NOT use, this leaks memory */ function filter(event: Event, filter: (e: T | U) => e is T): Event; function filter(event: Event, filter: (e: T) => boolean): Event; function filter(event: Event, filter: (e: T | R) => e is R): Event; /** * Given an event, returns the same event but typed as `Event`. */ function signal(event: Event): Event; /** * Given a collection of events, returns a single event which emits * whenever any of the provided events emit. */ function any(...events: Event[]): Event; function any(...events: Event[]): Event; /** * @deprecated DO NOT use, this leaks memory */ function reduce(event: Event, merge: (last: O | undefined, event: I) => O, initial?: O): Event; /** * @deprecated DO NOT use, this leaks memory */ function debounce(event: Event, merge: (last: T | undefined, event: T) => T, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event; /** * @deprecated DO NOT use, this leaks memory */ function debounce(event: Event, merge: (last: O | undefined, event: I) => O, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event; /** * @deprecated DO NOT use, this leaks memory */ function latch(event: Event, equals?: (a: T, b: T) => boolean): Event; /** * @deprecated DO NOT use, this leaks memory */ function split(event: Event, isT: (e: T | U) => e is T): [Event, Event]; /** * @deprecated DO NOT use, this leaks memory */ function buffer(event: Event, nextTick?: boolean, _buffer?: T[]): Event; interface IChainableEvent { event: Event; map(fn: (i: T) => O): IChainableEvent; forEach(fn: (i: T) => void): IChainableEvent; filter(fn: (e: T) => boolean): IChainableEvent; filter(fn: (e: T | R) => e is R): IChainableEvent; reduce(merge: (last: R | undefined, event: T) => R, initial?: R): IChainableEvent; latch(): IChainableEvent; debounce(merge: (last: T | undefined, event: T) => T, delay?: number, leading?: boolean, leakWarningThreshold?: number): IChainableEvent; debounce(merge: (last: R | undefined, event: T) => R, delay?: number, leading?: boolean, leakWarningThreshold?: number): IChainableEvent; on(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable; once(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[]): IDisposable; } /** * @deprecated DO NOT use, this leaks memory */ function chain(event: Event): IChainableEvent; interface NodeEventEmitter { on(event: string | symbol, listener: Function): unknown; removeListener(event: string | symbol, listener: Function): unknown; } function fromNodeEventEmitter(emitter: NodeEventEmitter, eventName: string, map?: (...args: any[]) => T): Event; interface DOMEventEmitter { addEventListener(event: string | symbol, listener: Function): void; removeEventListener(event: string | symbol, listener: Function): void; } function fromDOMEventEmitter(emitter: DOMEventEmitter, eventName: string, map?: (...args: any[]) => T): Event; function toPromise(event: Event): Promise; } export declare type Listener = [(e: T) => void, any] | ((e: T) => void); export interface EmitterOptions { onFirstListenerAdd?: Function; onFirstListenerDidAdd?: Function; onListenerDidAdd?: Function; onLastListenerRemove?: Function; leakWarningThreshold?: number; /** ONLY enable this during development */ _profName?: string; } export declare function setGlobalLeakWarningThreshold(n: number): IDisposable; /** * The Emitter can be used to expose an Event to the public * to fire it from the insides. * Sample: class Document { private readonly _onDidChange = new Emitter<(value:string)=>any>(); public onDidChange = this._onDidChange.event; // getter-style // get onDidChange(): Event<(value:string)=>any> { // return this._onDidChange.event; // } private _doIt() { //... this._onDidChange.fire(value); } } */ export declare class Emitter { private readonly _options?; private readonly _leakageMon?; private readonly _perfMon?; private _disposed; private _event?; private _deliveryQueue?; protected _listeners?: LinkedList>; constructor(options?: EmitterOptions); /** * For the public to allow to subscribe * to events from this Emitter */ get event(): Event; /** * To be kept private to fire an event to * subscribers */ fire(event: T): void; dispose(): void; } export interface IWaitUntil { waitUntil(thenable: Promise): void; } export declare class AsyncEmitter extends Emitter { private _asyncDeliveryQueue?; fireAsync(data: Omit, token: CancellationToken, promiseJoin?: (p: Promise, listener: Function) => Promise): Promise; } export declare class PauseableEmitter extends Emitter { private _isPaused; protected _eventQueue: LinkedList; private _mergeFn?; constructor(options?: EmitterOptions & { merge?: (input: T[]) => T; }); pause(): void; resume(): void; fire(event: T): void; } export declare class DebounceEmitter extends PauseableEmitter { private readonly _delay; private _handle; constructor(options: EmitterOptions & { merge: (input: T[]) => T; delay?: number; }); fire(event: T): void; } /** * An emitter which queue all events and then process them at the * end of the event loop. */ export declare class MicrotaskEmitter extends Emitter { private _queuedEvents; private _mergeFn?; constructor(options?: EmitterOptions & { merge?: (input: T[]) => T; }); fire(event: T): void; } export declare class EventMultiplexer implements IDisposable { private readonly emitter; private hasListeners; private events; constructor(); get event(): Event; add(event: Event): IDisposable; private onFirstListenerAdd; private onLastListenerRemove; private hook; private unhook; dispose(): void; } /** * The EventBufferer is useful in situations in which you want * to delay firing your events during some code. * You can wrap that code and be sure that the event will not * be fired during that wrap. * * ``` * const emitter: Emitter; * const delayer = new EventDelayer(); * const delayedEvent = delayer.wrapEvent(emitter.event); * * delayedEvent(console.log); * * delayer.bufferEvents(() => { * emitter.fire(); // event will not be fired yet * }); * * // event will only be fired at this point * ``` */ export declare class EventBufferer { private buffers; wrapEvent(event: Event): Event; bufferEvents(fn: () => R): R; } /** * A Relay is an event forwarder which functions as a replugabble event pipe. * Once created, you can connect an input event to it and it will simply forward * events from that input event through its own `event` property. The `input` * can be changed at any point in time. */ export declare class Relay implements IDisposable { private listening; private inputEvent; private inputEventListener; private readonly emitter; readonly event: Event; set input(event: Event); dispose(): void; } //# sourceMappingURL=event.d.ts.map