diff options
Diffstat (limited to 'node_modules/rxjs/dist/esm/internal/ReplaySubject.js')
| -rw-r--r-- | node_modules/rxjs/dist/esm/internal/ReplaySubject.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/node_modules/rxjs/dist/esm/internal/ReplaySubject.js b/node_modules/rxjs/dist/esm/internal/ReplaySubject.js new file mode 100644 index 0000000..630f426 --- /dev/null +++ b/node_modules/rxjs/dist/esm/internal/ReplaySubject.js @@ -0,0 +1,50 @@ +import { Subject } from './Subject'; +import { dateTimestampProvider } from './scheduler/dateTimestampProvider'; +export class ReplaySubject extends Subject { + constructor(_bufferSize = Infinity, _windowTime = Infinity, _timestampProvider = dateTimestampProvider) { + super(); + this._bufferSize = _bufferSize; + this._windowTime = _windowTime; + this._timestampProvider = _timestampProvider; + this._buffer = []; + this._infiniteTimeWindow = true; + this._infiniteTimeWindow = _windowTime === Infinity; + this._bufferSize = Math.max(1, _bufferSize); + this._windowTime = Math.max(1, _windowTime); + } + next(value) { + const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this; + if (!isStopped) { + _buffer.push(value); + !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime); + } + this._trimBuffer(); + super.next(value); + } + _subscribe(subscriber) { + this._throwIfClosed(); + this._trimBuffer(); + const subscription = this._innerSubscribe(subscriber); + const { _infiniteTimeWindow, _buffer } = this; + const copy = _buffer.slice(); + for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) { + subscriber.next(copy[i]); + } + this._checkFinalizedStatuses(subscriber); + return subscription; + } + _trimBuffer() { + const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this; + const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize; + _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize); + if (!_infiniteTimeWindow) { + const now = _timestampProvider.now(); + let last = 0; + for (let i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) { + last = i; + } + last && _buffer.splice(0, last + 1); + } + } +} +//# sourceMappingURL=ReplaySubject.js.map
\ No newline at end of file |
