val
7/26/2019 - 7:04 AM

Rx-handler

A simple function for handling events with streams

/**
 * @link https://github.com/johnlindquist/rx-handler
 */

import { observable, Subject } from 'rxjs';
import { share } from 'rxjs/operators';
import { OperatorFunction } from 'rxjs/interfaces';

export function handler(...operators: OperatorFunction<any, any>[]) {
  const subject$: Subject<any> = new Subject();
  const source$ = subject$.pipe.apply(subject$, [...operators, share()]);
  const next = (...args): void => subject$.next.apply(subject$, args);
  next[observable] = () => source$;

  return next;
}