Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 1x 62x | import { IStorageProvider } from './IStorageProvider';
import { IAgedValue } from '../queue/IAgedQueue';
/**
* A function to execute when a IStorageProvider key/value changes. Used with subscribe/unsubscribe
* @param key The key that was set/delete
* @param value The value that was set or undefined if it was a delete
*/
export type StorageProviderUpdateHandler<TKey, TValue> = (
key: TKey,
value?: IAgedValue<TValue>
) => void;
/**
* A storage provider that can propogate changes through the cluster. In a distributed system where
* data is partially stored at the node level, some systems require a mechanism to sychronize writes.
*/
export interface ISubscribableStorageProvider<TKey, TValue> extends IStorageProvider<TKey, TValue> {
/**
* Whenever a key/value changes, the storage provider can notify observers, so that
* they can react accordingly. This will add the observer until an unsubscribe() is called
* @param handler The function that will execute when a key/value changes
* @return If subscribing to changes was successful
*/
subscribe(handler: StorageProviderUpdateHandler<TKey, TValue>): boolean;
/**
* @param handler The function to remove
* @return If unsubscribing to changes was successful
*/
unsubscribe(handler: StorageProviderUpdateHandler<TKey, TValue>): boolean;
}
export function isISubscribableStorageProvider<TKey, TValue>(
provider: IStorageProvider<TKey, TValue>
): provider is ISubscribableStorageProvider<TKey, TValue> {
return (provider as ISubscribableStorageProvider<TKey, TValue>).subscribe !== undefined;
}
|