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/util/lift.ts | |
initial commit: scaffolding
Diffstat (limited to 'node_modules/rxjs/src/internal/util/lift.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/util/lift.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/util/lift.ts b/node_modules/rxjs/src/internal/util/lift.ts new file mode 100644 index 0000000..e841ec3 --- /dev/null +++ b/node_modules/rxjs/src/internal/util/lift.ts @@ -0,0 +1,32 @@ +import { Observable } from '../Observable'; +import { Subscriber } from '../Subscriber'; +import { OperatorFunction } from '../types'; +import { isFunction } from './isFunction'; + +/** + * Used to determine if an object is an Observable with a lift function. + */ +export function hasLift(source: any): source is { lift: InstanceType<typeof Observable>['lift'] } { + return isFunction(source?.lift); +} + +/** + * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way. + * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription. + */ +export function operate<T, R>( + init: (liftedSource: Observable<T>, subscriber: Subscriber<R>) => (() => void) | void +): OperatorFunction<T, R> { + return (source: Observable<T>) => { + if (hasLift(source)) { + return source.lift(function (this: Subscriber<R>, liftedSource: Observable<T>) { + try { + return init(liftedSource, this); + } catch (err) { + this.error(err); + } + }); + } + throw new TypeError('Unable to lift unknown Observable type'); + }; +} |
