rx-synchronizer
Version:
Commonly-used synchronizer bases that can be composed into more specific purposes.
32 lines (31 loc) • 1.2 kB
TypeScript
import { Omit, Undefined } from 'javascriptutilities';
import { NextObserver, Observable, SchedulerLike } from 'rxjs';
import * as TriggerSync from './trigger';
export declare type Depn<Query> = Omit<TriggerSync.Depn<Query>, 'triggerReceiver' | 'triggerStream'> & Readonly<{
/**
* Only accept the query if the current url matches this pathname.
*/
acceptableUrlPathName: string;
/**
* State may mutate repeatedly, which may rapidly change the displayed url
* making for ugly UI. This debounce time takes only the last query that
* is not followed by anything else after a certain time.
*/
queryDebounceTime?: number;
asyncOperatorScheduler?: SchedulerLike;
queryStream: Observable<Query>;
urlQueryReceiver: NextObserver<Query>;
currentUrlPathName: () => Undefined<string>;
}>;
/**
* Synchronize url query based on current state.
*/
export declare type Type = Readonly<{
synchronize: <Query>(dependency: Depn<Query>) => void;
}>;
export declare class Impl implements Type {
private readonly triggerSync;
constructor();
constructor(triggerSync: TriggerSync.Type);
synchronize<Query>(dependency: Depn<Query>): void;
}