UNPKG

@pkerschbaum/code-oss-file-service

Version:

VS Code ([microsoft/vscode](https://github.com/microsoft/vscode)) includes a rich "`FileService`" and "`DiskFileSystemProvider`" abstraction built on top of Node.js core modules (`fs`, `path`) and Electron's `shell` module. This package allows to use that

243 lines (239 loc) 9.57 kB
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<T> { (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable; } export declare namespace Event { const None: Event<any>; /** * Given an event, returns another event which only fires once. */ function once<T>(event: Event<T>): Event<T>; /** * @deprecated DO NOT use, this leaks memory */ function map<I, O>(event: Event<I>, map: (i: I) => O): Event<O>; /** * @deprecated DO NOT use, this leaks memory */ function forEach<I>(event: Event<I>, each: (i: I) => void): Event<I>; /** * @deprecated DO NOT use, this leaks memory */ function filter<T, U>(event: Event<T | U>, filter: (e: T | U) => e is T): Event<T>; function filter<T>(event: Event<T>, filter: (e: T) => boolean): Event<T>; function filter<T, R>(event: Event<T | R>, filter: (e: T | R) => e is R): Event<R>; /** * Given an event, returns the same event but typed as `Event<void>`. */ function signal<T>(event: Event<T>): Event<void>; /** * Given a collection of events, returns a single event which emits * whenever any of the provided events emit. */ function any<T>(...events: Event<T>[]): Event<T>; function any(...events: Event<any>[]): Event<void>; /** * @deprecated DO NOT use, this leaks memory */ function reduce<I, O>(event: Event<I>, merge: (last: O | undefined, event: I) => O, initial?: O): Event<O>; function debouncedListener<T, O = T>(event: Event<T>, listener: (data: O) => any, merge: (last: O | undefined, event: T) => O, delay?: number, leading?: boolean): IDisposable; /** * @deprecated this leaks memory, {@link debouncedListener} or {@link DebounceEmitter} instead */ function debounce<T>(event: Event<T>, merge: (last: T | undefined, event: T) => T, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event<T>; /** * @deprecated this leaks memory, {@link debouncedListener} or {@link DebounceEmitter} instead */ function debounce<I, O>(event: Event<I>, merge: (last: O | undefined, event: I) => O, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event<O>; /** * @deprecated DO NOT use, this leaks memory */ function latch<T>(event: Event<T>, equals?: (a: T, b: T) => boolean): Event<T>; /** * @deprecated DO NOT use, this leaks memory */ function split<T, U>(event: Event<T | U>, isT: (e: T | U) => e is T): [Event<T>, Event<U>]; /** * @deprecated DO NOT use, this leaks memory */ function buffer<T>(event: Event<T>, flushAfterTimeout?: boolean, _buffer?: T[]): Event<T>; interface IChainableEvent<T> { event: Event<T>; map<O>(fn: (i: T) => O): IChainableEvent<O>; forEach(fn: (i: T) => void): IChainableEvent<T>; filter(fn: (e: T) => boolean): IChainableEvent<T>; filter<R>(fn: (e: T | R) => e is R): IChainableEvent<R>; reduce<R>(merge: (last: R | undefined, event: T) => R, initial?: R): IChainableEvent<R>; latch(): IChainableEvent<T>; debounce(merge: (last: T | undefined, event: T) => T, delay?: number, leading?: boolean, leakWarningThreshold?: number): IChainableEvent<T>; debounce<R>(merge: (last: R | undefined, event: T) => R, delay?: number, leading?: boolean, leakWarningThreshold?: number): IChainableEvent<R>; 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<T>(event: Event<T>): IChainableEvent<T>; interface NodeEventEmitter { on(event: string | symbol, listener: Function): unknown; removeListener(event: string | symbol, listener: Function): unknown; } function fromNodeEventEmitter<T>(emitter: NodeEventEmitter, eventName: string, map?: (...args: any[]) => T): Event<T>; interface DOMEventEmitter { addEventListener(event: string | symbol, listener: Function): void; removeEventListener(event: string | symbol, listener: Function): void; } function fromDOMEventEmitter<T>(emitter: DOMEventEmitter, eventName: string, map?: (...args: any[]) => T): Event<T>; function toPromise<T>(event: Event<T>): Promise<T>; function runAndSubscribe<T>(event: Event<T>, handler: (e: T | undefined) => any): IDisposable; } export declare type Listener<T> = [(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<T> { private readonly _options?; private readonly _leakageMon?; private readonly _perfMon?; private _disposed; private _event?; private _deliveryQueue?; protected _listeners?: LinkedList<Listener<T>>; constructor(options?: EmitterOptions); /** * For the public to allow to subscribe * to events from this Emitter */ get event(): Event<T>; /** * To be kept private to fire an event to * subscribers */ fire(event: T): void; dispose(): void; } export interface IWaitUntil { token: CancellationToken; waitUntil(thenable: Promise<unknown>): void; } export declare type IWaitUntilData<T> = Omit<Omit<T, 'waitUntil'>, 'token'>; export declare class AsyncEmitter<T extends IWaitUntil> extends Emitter<T> { private _asyncDeliveryQueue?; fireAsync(data: IWaitUntilData<T>, token: CancellationToken, promiseJoin?: (p: Promise<unknown>, listener: Function) => Promise<unknown>): Promise<void>; } export declare class PauseableEmitter<T> extends Emitter<T> { private _isPaused; protected _eventQueue: LinkedList<T>; private _mergeFn?; constructor(options?: EmitterOptions & { merge?: (input: T[]) => T; }); pause(): void; resume(): void; fire(event: T): void; } export declare class DebounceEmitter<T> extends PauseableEmitter<T> { 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<T> extends Emitter<T> { private _queuedEvents; private _mergeFn?; constructor(options?: EmitterOptions & { merge?: (input: T[]) => T; }); fire(event: T): void; } export declare class EventMultiplexer<T> implements IDisposable { private readonly emitter; private hasListeners; private events; constructor(); get event(): Event<T>; add(event: Event<T>): 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<T>(event: Event<T>): Event<T>; bufferEvents<R = void>(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<T> implements IDisposable { private listening; private inputEvent; private inputEventListener; private readonly emitter; readonly event: Event<T>; set input(event: Event<T>); dispose(): void; } //# sourceMappingURL=event.d.ts.map