frontend/.pnpm-store/v3/files/48/a7a9e7710f7a58422a07ee63654999d3d73aafbbe9a31c0da9275e62a3b4c7e22e8c36f4473c160d79b1bce3052de22e9f3d14d632bd778284d55eedd4eb9a

40 lines
912 B
Plaintext

import { Subject } from './Subject';
import { Subscriber } from './Subscriber';
import { Subscription } from './Subscription';
/**
* A variant of Subject that requires an initial value and emits its current
* value whenever it is subscribed to.
*
* @class BehaviorSubject<T>
*/
export class BehaviorSubject<T> extends Subject<T> {
constructor(private _value: T) {
super();
}
get value(): T {
return this.getValue();
}
/** @internal */
protected _subscribe(subscriber: Subscriber<T>): Subscription {
const subscription = super._subscribe(subscriber);
!subscription.closed && subscriber.next(this._value);
return subscription;
}
getValue(): T {
const { hasError, thrownError, _value } = this;
if (hasError) {
throw thrownError;
}
this._throwIfClosed();
return _value;
}
next(value: T): void {
super.next((this._value = value));
}
}