rsxjs
Version:
Resilience Extensions for JS.
70 lines (69 loc) • 2.27 kB
TypeScript
/**
* @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 {};