@trpc/server
Version:
39 lines (36 loc) • 1.03 kB
JavaScript
import { observable } from './observable.mjs';
/**
* @internal
* An observable that maintains and provides a "current value" to subscribers
* @see https://www.learnrxjs.io/learn-rxjs/subjects/behaviorsubject
*/ function behaviorSubject(initialValue) {
let value = initialValue;
const observerList = [];
const addObserver = (observer)=>{
if (value !== undefined) {
observer.next(value);
}
observerList.push(observer);
};
const removeObserver = (observer)=>{
observerList.splice(observerList.indexOf(observer), 1);
};
const obs = observable((observer)=>{
addObserver(observer);
return ()=>{
removeObserver(observer);
};
});
obs.next = (nextValue)=>{
if (value === nextValue) {
return;
}
value = nextValue;
for (const observer of observerList){
observer.next(nextValue);
}
};
obs.get = ()=>value;
return obs;
}
export { behaviorSubject };