firmament-yargs
Version:
Typescript classes for building CLI node applications
76 lines (75 loc) • 2.64 kB
TypeScript
export interface IConfiguration {
SYSTEM_CHANNEL: string;
DEFAULT_CHANNEL: string;
resolver: IResolver;
}
export interface IResolver {
compare(binding: string, topic: string, headerOptions: {}): boolean;
reset(): void;
purge(options?: {
topic?: string;
binding?: string;
compact?: boolean;
}): void;
}
export interface ICallback<T> {
(data: T, envelope: IEnvelope<T>): void;
}
export interface ISubscriptionDefinition<T> {
channel: string;
topic: string;
callback: ICallback<T>;
constraint(predicateFn: (data: T, envelope: IEnvelope<T>) => boolean): ISubscriptionDefinition<T>;
constraints(predicateFns: ((data: T, envelope: IEnvelope<T>) => boolean)[]): ISubscriptionDefinition<T>;
context(theContext: any): ISubscriptionDefinition<T>;
debounce(interval: number): ISubscriptionDefinition<T>;
defer(): ISubscriptionDefinition<T>;
delay(waitTime: number): ISubscriptionDefinition<T>;
disposeAfter(maxCalls: number): ISubscriptionDefinition<T>;
distinct(): ISubscriptionDefinition<T>;
distinctUntilChanged(): ISubscriptionDefinition<T>;
logError(): ISubscriptionDefinition<T>;
once(): ISubscriptionDefinition<T>;
throttle(interval: number): ISubscriptionDefinition<T>;
subscribe(callback: ICallback<T>): ISubscriptionDefinition<T>;
unsubscribe(): void;
}
export interface IEnvelope<T> {
topic: string;
data?: T;
channel?: string;
timeStamp?: string;
}
export interface IChannelDefinition<T> {
subscribe(topic: string, callback: ICallback<T>): ISubscriptionDefinition<T>;
publish(topic: string, data?: T): void;
channel: string;
}
export interface IPostal {
subscriptions: {};
wireTaps: ICallback<any>[];
addWireTap(callback: ICallback<any>): () => void;
channel<T>(name?: string): IChannelDefinition<T>;
getSubscribersFor(): ISubscriptionDefinition<any>[];
getSubscribersFor(options: {
channel?: string;
topic?: string;
context?: any;
}): ISubscriptionDefinition<any>[];
getSubscribersFor(predicateFn: (sub: ISubscriptionDefinition<any>) => boolean): ISubscriptionDefinition<any>[];
publish(envelope: IEnvelope<any>): void;
reset(): void;
subscribe(options: {
channel?: string;
topic: string;
callback: ICallback<any>;
}): ISubscriptionDefinition<any>;
unsubscribe(sub: ISubscriptionDefinition<any>): void;
unsubscribeFor(): void;
unsubscribeFor(options: {
channel?: string;
topic?: string;
context?: any;
}): void;
configuration: IConfiguration;
}