diff options
| author | Pinapelz <yukais@pinapelz.com> | 2025-06-28 17:26:46 -0700 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2025-06-28 17:43:56 -0700 |
| commit | e4fa1e69e7ebfb627c7198fd1a9881e9327ec4d4 (patch) | |
| tree | 06284a538a6008eca75051399e47db4e5d50301c /node_modules/rxjs/src/internal/AsyncSubject.ts | |
initial commit: scaffolding
Diffstat (limited to 'node_modules/rxjs/src/internal/AsyncSubject.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/AsyncSubject.ts | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/AsyncSubject.ts b/node_modules/rxjs/src/internal/AsyncSubject.ts new file mode 100644 index 0000000..abb086c --- /dev/null +++ b/node_modules/rxjs/src/internal/AsyncSubject.ts @@ -0,0 +1,39 @@ +import { Subject } from './Subject'; +import { Subscriber } from './Subscriber'; + +/** + * A variant of Subject that only emits a value when it completes. It will emit + * its latest value to all its observers on completion. + */ +export class AsyncSubject<T> extends Subject<T> { + private _value: T | null = null; + private _hasValue = false; + private _isComplete = false; + + /** @internal */ + protected _checkFinalizedStatuses(subscriber: Subscriber<T>) { + const { hasError, _hasValue, _value, thrownError, isStopped, _isComplete } = this; + if (hasError) { + subscriber.error(thrownError); + } else if (isStopped || _isComplete) { + _hasValue && subscriber.next(_value!); + subscriber.complete(); + } + } + + next(value: T): void { + if (!this.isStopped) { + this._value = value; + this._hasValue = true; + } + } + + complete(): void { + const { _hasValue, _value, _isComplete } = this; + if (!_isComplete) { + this._isComplete = true; + _hasValue && super.next(_value!); + super.complete(); + } + } +} |
