UNPKG

1.38 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const observable_fns_1 = require("observable-fns");
4exports.Observable = observable_fns_1.Observable;
5const $observers = Symbol("observers");
6/**
7 * Observable subject. Implements the Observable interface, but also exposes
8 * the `next()`, `error()`, `complete()` methods to initiate observable
9 * updates "from the outside".
10 *
11 * Use `Observable.from(subject)` to derive an observable that proxies all
12 * values, errors and the completion raised on this subject, but does not
13 * expose the `next()`, `error()`, `complete()` methods.
14 */
15class Subject extends observable_fns_1.Observable {
16 constructor() {
17 super(observer => {
18 this[$observers] = [
19 ...(this[$observers] || []),
20 observer
21 ];
22 const unsubscribe = () => {
23 this[$observers] = this[$observers].filter(someObserver => someObserver !== observer);
24 };
25 return unsubscribe;
26 });
27 this[$observers] = [];
28 }
29 complete() {
30 this[$observers].forEach(observer => observer.complete());
31 }
32 error(error) {
33 this[$observers].forEach(observer => observer.error(error));
34 }
35 next(value) {
36 this[$observers].forEach(observer => observer.next(value));
37 }
38}
39exports.Subject = Subject;