···
import { Source, Sink, SignalKind, TalkbackKind, Observer, Subject, TeardownFn } from './types';
2
-
import { push, start, talkbackPlaceholder } from './helpers';
2
+
import { push, start, talkbackPlaceholder, teardownPlaceholder } from './helpers';
3
+
import { share } from './operators';
export function fromArray<T>(array: T[]): Source<T> {
···
export function makeSubject<T>(): Subject<T> {
76
-
let sinks: Sink<T>[] = [];
77
+
let next: Subject<T>['next'] | void;
78
+
let complete: Subject<T>['complete'] | void;
79
-
source(sink: Sink<T>) {
83
-
if (signal === TalkbackKind.Close) {
84
-
const index = sinks.indexOf(sink);
85
-
if (index > -1) (sinks = sinks.slice()).splice(index, 1);
82
+
next = observer.next;
83
+
complete = observer.complete;
84
+
return teardownPlaceholder;
92
-
const signal = push(value);
93
-
for (let i = 0, a = sinks, l = sinks.length; i < l; i++) a[i](signal);
88
+
if (next) next(value);
99
-
for (let i = 0, a = sinks, l = sinks.length; i < l; i++) a[i](SignalKind.End);
91
+
if (complete) complete();
···
export function interval(ms: number): Source<number> {
115
+
return make(observer => {
126
-
const id = setInterval(() => {
131
-
if (signal === TalkbackKind.Close) clearInterval(id);
117
+
const id = setInterval(() => observer.next(i++), ms);
118
+
return () => clearInterval(id);
export function fromDomEvent(element: HTMLElement, event: string): Source<Event> {
139
-
const handler = (payload: Event) => {
140
-
sink(push(payload));
144
-
if (signal === TalkbackKind.Close) element.removeEventListener(event, handler);
147
-
element.addEventListener(event, handler);
123
+
return make(observer => {
124
+
element.addEventListener(event, observer.next);
125
+
return () => element.removeEventListener(event, observer.next);
export function fromPromise<T>(promise: Promise<T>): Source<T> {
130
+
return make(observer => {
157
-
sink(SignalKind.End);
132
+
Promise.resolve(value).then(() => {
133
+
observer.next(value);
134
+
observer.complete();
162
-
if (signal === TalkbackKind.Close) ended = true;
137
+
return teardownPlaceholder;