export function subject()

in packages/sdk/src/observing.ts [25:38]


export function subject<T>(observable: Subscribe<T>): Subscribe<T> {
  const observers: Set<Observer<T>> = new Set();
  const toggle = multicast(observers, observable);
  return (observer: Observer<T>) => {
    if (observers.has(observer)) throw new Error('Observer already subscribed.');
    observers.add(observer);
    if (observers.size === 1) {
      toggle();
    }
    return () => {
      if (observers.delete(observer) && observers.size === 0) toggle();
    };
  };
}