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/operators/publishReplay.ts | |
initial commit: scaffolding
Diffstat (limited to 'node_modules/rxjs/src/internal/operators/publishReplay.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/operators/publishReplay.ts | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/operators/publishReplay.ts b/node_modules/rxjs/src/internal/operators/publishReplay.ts new file mode 100644 index 0000000..47494e2 --- /dev/null +++ b/node_modules/rxjs/src/internal/operators/publishReplay.ts @@ -0,0 +1,96 @@ +import { Observable } from '../Observable'; +import { ReplaySubject } from '../ReplaySubject'; +import { multicast } from './multicast'; +import { MonoTypeOperatorFunction, OperatorFunction, TimestampProvider, ObservableInput, ObservedValueOf } from '../types'; +import { isFunction } from '../util/isFunction'; + +/** + * Creates a {@link ConnectableObservable} that uses a {@link ReplaySubject} + * internally. + * + * @param bufferSize The buffer size for the underlying {@link ReplaySubject}. + * @param windowTime The window time for the underlying {@link ReplaySubject}. + * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}. + * @deprecated Will be removed in v8. To create a connectable observable that uses a + * {@link ReplaySubject} under the hood, use {@link connectable}. + * `source.pipe(publishReplay(size, time, scheduler))` is equivalent to + * `connectable(source, { connector: () => new ReplaySubject(size, time, scheduler), resetOnDisconnect: false })`. + * If you're using {@link refCount} after `publishReplay`, use the {@link share} operator instead. + * `publishReplay(size, time, scheduler), refCount()` is equivalent to + * `share({ connector: () => new ReplaySubject(size, time, scheduler), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`. + * Details: https://rxjs.dev/deprecations/multicasting + */ +export function publishReplay<T>( + bufferSize?: number, + windowTime?: number, + timestampProvider?: TimestampProvider +): MonoTypeOperatorFunction<T>; + +/** + * Creates an observable, that when subscribed to, will create a {@link ReplaySubject}, + * and pass an observable from it (using [asObservable](api/index/class/Subject#asObservable)) to + * the `selector` function, which then returns an observable that is subscribed to before + * "connecting" the source to the internal `ReplaySubject`. + * + * Since this is deprecated, for additional details see the documentation for {@link connect}. + * + * @param bufferSize The buffer size for the underlying {@link ReplaySubject}. + * @param windowTime The window time for the underlying {@link ReplaySubject}. + * @param selector A function used to setup the multicast. + * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}. + * @deprecated Will be removed in v8. Use the {@link connect} operator instead. + * `source.pipe(publishReplay(size, window, selector, scheduler))` is equivalent to + * `source.pipe(connect(selector, { connector: () => new ReplaySubject(size, window, scheduler) }))`. + * Details: https://rxjs.dev/deprecations/multicasting + */ +export function publishReplay<T, O extends ObservableInput<any>>( + bufferSize: number | undefined, + windowTime: number | undefined, + selector: (shared: Observable<T>) => O, + timestampProvider?: TimestampProvider +): OperatorFunction<T, ObservedValueOf<O>>; + +/** + * Creates a {@link ConnectableObservable} that uses a {@link ReplaySubject} + * internally. + * + * @param bufferSize The buffer size for the underlying {@link ReplaySubject}. + * @param windowTime The window time for the underlying {@link ReplaySubject}. + * @param selector Passing `undefined` here determines that this operator will return a {@link ConnectableObservable}. + * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}. + * @deprecated Will be removed in v8. To create a connectable observable that uses a + * {@link ReplaySubject} under the hood, use {@link connectable}. + * `source.pipe(publishReplay(size, time, scheduler))` is equivalent to + * `connectable(source, { connector: () => new ReplaySubject(size, time, scheduler), resetOnDisconnect: false })`. + * If you're using {@link refCount} after `publishReplay`, use the {@link share} operator instead. + * `publishReplay(size, time, scheduler), refCount()` is equivalent to + * `share({ connector: () => new ReplaySubject(size, time, scheduler), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`. + * Details: https://rxjs.dev/deprecations/multicasting + */ +export function publishReplay<T, O extends ObservableInput<any>>( + bufferSize: number | undefined, + windowTime: number | undefined, + selector: undefined, + timestampProvider: TimestampProvider +): OperatorFunction<T, ObservedValueOf<O>>; + +/** + * @deprecated Will be removed in v8. Use the {@link connectable} observable, the {@link connect} operator or the + * {@link share} operator instead. See the overloads below for equivalent replacement examples of this operator's + * behaviors. + * Details: https://rxjs.dev/deprecations/multicasting + */ +export function publishReplay<T, R>( + bufferSize?: number, + windowTime?: number, + selectorOrScheduler?: TimestampProvider | OperatorFunction<T, R>, + timestampProvider?: TimestampProvider +) { + if (selectorOrScheduler && !isFunction(selectorOrScheduler)) { + timestampProvider = selectorOrScheduler; + } + const selector = isFunction(selectorOrScheduler) ? selectorOrScheduler : undefined; + // Note, we're passing `selector!` here, because at runtime, `undefined` is an acceptable argument + // but it makes our TypeScript signature for `multicast` unhappy (as it should, because it's gross). + return (source: Observable<T>) => multicast(new ReplaySubject<T>(bufferSize, windowTime, timestampProvider), selector!)(source); +} |
