diff options
Diffstat (limited to 'node_modules/rxjs/src/internal/operators/dematerialize.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/operators/dematerialize.ts | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/operators/dematerialize.ts b/node_modules/rxjs/src/internal/operators/dematerialize.ts new file mode 100644 index 0000000..3a4e17f --- /dev/null +++ b/node_modules/rxjs/src/internal/operators/dematerialize.ts @@ -0,0 +1,58 @@ +import { observeNotification } from '../Notification'; +import { OperatorFunction, ObservableNotification, ValueFromNotification } from '../types'; +import { operate } from '../util/lift'; +import { createOperatorSubscriber } from './OperatorSubscriber'; + +/** + * Converts an Observable of {@link ObservableNotification} objects into the emissions + * that they represent. + * + * <span class="informal">Unwraps {@link ObservableNotification} objects as actual `next`, + * `error` and `complete` emissions. The opposite of {@link materialize}.</span> + * + *  + * + * `dematerialize` is assumed to operate an Observable that only emits + * {@link ObservableNotification} objects as `next` emissions, and does not emit any + * `error`. Such Observable is the output of a `materialize` operation. Those + * notifications are then unwrapped using the metadata they contain, and emitted + * as `next`, `error`, and `complete` on the output Observable. + * + * Use this operator in conjunction with {@link materialize}. + * + * ## Example + * + * Convert an Observable of Notifications to an actual Observable + * + * ```ts + * import { NextNotification, ErrorNotification, of, dematerialize } from 'rxjs'; + * + * const notifA: NextNotification<string> = { kind: 'N', value: 'A' }; + * const notifB: NextNotification<string> = { kind: 'N', value: 'B' }; + * const notifE: ErrorNotification = { kind: 'E', error: new TypeError('x.toUpperCase is not a function') }; + * + * const materialized = of(notifA, notifB, notifE); + * + * const upperCase = materialized.pipe(dematerialize()); + * upperCase.subscribe({ + * next: x => console.log(x), + * error: e => console.error(e) + * }); + * + * // Results in: + * // A + * // B + * // TypeError: x.toUpperCase is not a function + * ``` + * + * @see {@link materialize} + * + * @return A function that returns an Observable that emits items and + * notifications embedded in Notification objects emitted by the source + * Observable. + */ +export function dematerialize<N extends ObservableNotification<any>>(): OperatorFunction<N, ValueFromNotification<N>> { + return operate((source, subscriber) => { + source.subscribe(createOperatorSubscriber(subscriber, (notification) => observeNotification(notification, subscriber))); + }); +} |
