cloudrx
Version:
TypeScript library for streaming cloud provider events using RxJS with automatic persistence and replay capabilities
59 lines • 2.1 kB
TypeScript
import { Observable } from 'rxjs';
import { Logger } from '@util';
import { EventEmitter } from 'stream';
export type Streamed<T, TMarker> = T & {
__marker__?: TMarker;
};
export interface ICloudProvider<TEvent, TMarker> {
get id(): string;
get signal(): AbortSignal;
get logger(): Logger;
init(): Observable<this>;
all(): Observable<TEvent>;
stream(): Observable<TEvent>;
store<T>(item: T): Observable<T>;
unmarshall<T>(event: TEvent): Streamed<T, TMarker>;
}
export type CloudOptions = {
signal?: AbortSignal;
logger?: Logger;
};
export type Matcher<TEvent> = (event: TEvent) => boolean;
export declare class Abort extends AbortController {
constructor(signal?: AbortSignal);
abort(reason?: unknown): void;
}
export declare class StreamEvent extends EventEmitter<{
start: [];
end: [];
}> {
}
export declare abstract class CloudProvider<TEvent, TMarker> implements ICloudProvider<TEvent, TMarker> {
readonly id: string;
private static instances;
private _events;
private _init$?;
private _stream$?;
private _logger;
private _signal;
static from<Options extends CloudOptions, Provider extends ICloudProvider<unknown, unknown>>(this: new (id: string, options?: Options) => Provider, id: string, opts?: Options): Observable<Provider>;
protected constructor(id: string, opts?: CloudOptions);
get logger(): Logger;
get signal(): AbortSignal;
protected abstract _init(): Observable<this>;
protected abstract _stream(all: boolean): Observable<TEvent[]>;
protected abstract _store<T>(item: T): Observable<Matcher<TEvent>>;
protected abstract _unmarshall<T>(event: TEvent): Streamed<T, unknown>;
init(): Observable<this>;
all(): Observable<TEvent>;
stream(): Observable<TEvent>;
store<T>(item: T): Observable<T>;
unmarshall<T>(event: TEvent): Streamed<T, TMarker>;
}
export declare class RetryError extends Error {
constructor(message: string);
}
export declare class FatalError extends Error {
constructor(message: string);
}
//# sourceMappingURL=base.d.ts.map