···
import { Source, Sink, SignalKind, TalkbackKind, Observer, Subject, TeardownFn } from './types';
-
import { push, start, talkbackPlaceholder } from './helpers';
export function fromArray<T>(array: T[]): Source<T> {
···
export function makeSubject<T>(): Subject<T> {
-
let sinks: Sink<T>[] = [];
-
source(sink: Sink<T>) {
-
if (signal === TalkbackKind.Close) {
-
const index = sinks.indexOf(sink);
-
if (index > -1) (sinks = sinks.slice()).splice(index, 1);
-
const signal = push(value);
-
for (let i = 0, a = sinks, l = sinks.length; i < l; i++) a[i](signal);
-
for (let i = 0, a = sinks, l = sinks.length; i < l; i++) a[i](SignalKind.End);
···
export function interval(ms: number): Source<number> {
-
const id = setInterval(() => {
-
if (signal === TalkbackKind.Close) clearInterval(id);
export function fromDomEvent(element: HTMLElement, event: string): Source<Event> {
-
const handler = (payload: Event) => {
-
if (signal === TalkbackKind.Close) element.removeEventListener(event, handler);
-
element.addEventListener(event, handler);
export function fromPromise<T>(promise: Promise<T>): Source<T> {
-
if (signal === TalkbackKind.Close) ended = true;
···
import { Source, Sink, SignalKind, TalkbackKind, Observer, Subject, TeardownFn } from './types';
+
import { push, start, talkbackPlaceholder, teardownPlaceholder } from './helpers';
+
import { share } from './operators';
export function fromArray<T>(array: T[]): Source<T> {
···
export function makeSubject<T>(): Subject<T> {
+
let next: Subject<T>['next'] | void;
+
let complete: Subject<T>['complete'] | void;
+
complete = observer.complete;
+
return teardownPlaceholder;
+
if (complete) complete();
···
export function interval(ms: number): Source<number> {
+
return make(observer => {
+
const id = setInterval(() => observer.next(i++), ms);
+
return () => clearInterval(id);
export function fromDomEvent(element: HTMLElement, event: string): Source<Event> {
+
return make(observer => {
+
element.addEventListener(event, observer.next);
+
return () => element.removeEventListener(event, observer.next);
export function fromPromise<T>(promise: Promise<T>): Source<T> {
+
return make(observer => {
+
Promise.resolve(value).then(() => {
+
return teardownPlaceholder;