UNPKG

rsxjs

Version:

Resilience Extensions for JS.

70 lines (69 loc) 2.27 kB
/** * @file src/channel/channel.ts * @description Based on Go's channels to provide CSP-style programming in JS. * @copyright 2018-present Karim Alibhai. All rights reserved. */ interface IChannel<T> { close(): void; select(): TakeResult<T>; take(timeout?: number): Promise<TakeResult<T>>; put(value: T, timeout?: number): Promise<PutResult>; rselect(): TakeResult<T>; rtake(timeout?: number): Promise<TakeResult<T>>; lput(value: T, timeout?: number): Promise<PutResult>; } interface ChannelConfig { bufferSize: number; } interface PutResult { ok: boolean; } interface TakeResult<T> { value?: T; ok: boolean; } export declare class Channel<T> implements IChannel<T> { private readonly config; private isOpen; private readonly buffer; private putters; private takers; private selectSymbol; private static chanMap; [Symbol.toPrimitive](): symbol; static getChannel<T>(sym: symbol): chan<T>; constructor(config?: Partial<ChannelConfig>); close(): void; private _put; put(value: T, timeout?: number): Promise<PutResult>; lput(value: T, timeout?: number): Promise<PutResult>; private _take; take(timeout?: number): Promise<TakeResult<T>>; rtake(timeout?: number): Promise<TakeResult<T>>; private _select; select(): TakeResult<T>; rselect(): TakeResult<T>; [Symbol.asyncIterator](): AsyncIterableIterator<T>; private readOnlyChan?; readOnly(): ReadOnlyChannel<T>; private writeOnlyChan?; writeOnly(): WriteOnlyChannel<T>; } export declare class ReadOnlyChannel<T> { private readonly chan; constructor(chan: Channel<T>); take(): Promise<TakeResult<T>>; select(): TakeResult<T>; [Symbol.asyncIterator](): AsyncIterableIterator<T>; [Symbol.toPrimitive](): symbol; } export declare class WriteOnlyChannel<T> { private readonly chan; constructor(chan: Channel<T>); put(value: T, timeout?: number): Promise<PutResult>; } export declare type readOnlyChan<T> = ReadOnlyChannel<T> & symbol; export declare type writeOnlyChan<T> = WriteOnlyChannel<T> & symbol; export declare type chan<T> = Channel<T> & symbol; export declare function makeChan<T>(opts?: Partial<ChannelConfig>): chan<T>; export {};