Skip to content

Commit ecd7f68

Browse files
committed
feat(compat): add Observable extension classes with static create()
1 parent 4566001 commit ecd7f68

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+270
-3
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Observable, SchedulerLike, from } from 'rxjs';
2+
3+
export class ArrayLikeObservable<T> extends Observable<T> {
4+
static create<T>(arrayLike: ArrayLike<T>, scheduler?: SchedulerLike): Observable<T> {
5+
return from(arrayLike, scheduler);
6+
}
7+
}

compat/observable/ArrayObservable.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Observable, SchedulerLike, from } from 'rxjs';
2+
3+
export class ArrayObservable<T> extends Observable<T> {
4+
static create<T>(array: T[], scheduler?: SchedulerLike) {
5+
return from(array, scheduler);
6+
}
7+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { Observable, SchedulerLike, bindCallback } from 'rxjs';
2+
3+
export class BoundCallbackObservable<T> extends Observable<T> {
4+
/* tslint:disable:max-line-length */
5+
static create(callbackFunc: (callback: () => any) => any, selector?: void, scheduler?: SchedulerLike): () => Observable<void>;
6+
static create<R>(callbackFunc: (callback: (result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): () => Observable<R>;
7+
static create<T, R>(callbackFunc: (v1: T, callback: (result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T) => Observable<R>;
8+
static create<T, T2, R>(callbackFunc: (v1: T, v2: T2, callback: (result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2) => Observable<R>;
9+
static create<T, T2, T3, R>(callbackFunc: (v1: T, v2: T2, v3: T3, callback: (result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3) => Observable<R>;
10+
static create<T, T2, T3, T4, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, callback: (result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4) => Observable<R>;
11+
static create<T, T2, T3, T4, T5, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, callback: (result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => Observable<R>;
12+
static create<T, T2, T3, T4, T5, T6, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, callback: (result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => Observable<R>;
13+
static create<R>(callbackFunc: (callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: SchedulerLike): () => Observable<R>;
14+
static create<T, R>(callbackFunc: (v1: T, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: SchedulerLike): (v1: T) => Observable<R>;
15+
static create<T, T2, R>(callbackFunc: (v1: T, v2: T2, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: SchedulerLike): (v1: T, v2: T2) => Observable<R>;
16+
static create<T, T2, T3, R>(callbackFunc: (v1: T, v2: T2, v3: T3, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3) => Observable<R>;
17+
static create<T, T2, T3, T4, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4) => Observable<R>;
18+
static create<T, T2, T3, T4, T5, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => Observable<R>;
19+
static create<T, T2, T3, T4, T5, T6, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => R, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => Observable<R>;
20+
static create<T>(callbackFunc: Function, selector?: void, scheduler?: SchedulerLike): (...args: any[]) => Observable<T>;
21+
static create<T>(callbackFunc: Function, selector?: (...args: any[]) => T, scheduler?: SchedulerLike): (...args: any[]) => Observable<T>;
22+
/* tslint:enable:max-line-length */
23+
static create<T>(func: Function,
24+
selector: Function | void = undefined,
25+
scheduler?: SchedulerLike): (...args: any[]) => Observable<T> {
26+
return bindCallback(func, <any>selector, scheduler);
27+
}
28+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Observable, SchedulerLike, bindNodeCallback } from 'rxjs';
2+
3+
export class BoundNodeCallbackObservable<T> extends Observable<T> {
4+
/* tslint:disable:max-line-length */
5+
static create<R>(callbackFunc: (callback: (err: any, result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): () => Observable<R>;
6+
static create<T, R>(callbackFunc: (v1: T, callback: (err: any, result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T) => Observable<R>;
7+
static create<T, T2, R>(callbackFunc: (v1: T, v2: T2, callback: (err: any, result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2) => Observable<R>;
8+
static create<T, T2, T3, R>(callbackFunc: (v1: T, v2: T2, v3: T3, callback: (err: any, result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3) => Observable<R>;
9+
static create<T, T2, T3, T4, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, callback: (err: any, result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4) => Observable<R>;
10+
static create<T, T2, T3, T4, T5, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, callback: (err: any, result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => Observable<R>;
11+
static create<T, T2, T3, T4, T5, T6, R>(callbackFunc: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, callback: (err: any, result: R) => any) => any, selector?: void, scheduler?: SchedulerLike): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => Observable<R>;
12+
static create<T>(callbackFunc: Function, selector?: void, scheduler?: SchedulerLike): (...args: any[]) => Observable<T>;
13+
static create<T>(callbackFunc: Function, selector?: (...args: any[]) => T, scheduler?: SchedulerLike): (...args: any[]) => Observable<T>;
14+
/* tslint:enable:max-line-length */
15+
static create<T>(func: Function,
16+
selector: Function | void = undefined,
17+
scheduler?: SchedulerLike): (...args: any[]) => Observable<T> {
18+
return bindNodeCallback(func, <any>selector, scheduler);
19+
}
20+
}

compat/observable/DeferObservable.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Observable, SubscribableOrPromise, defer } from 'rxjs';
2+
3+
export class DeferObservable<T> extends Observable<T> {
4+
static create<T>(observableFactory: () => SubscribableOrPromise<T> | void): Observable<T> {
5+
return defer(observableFactory);
6+
}
7+
}

compat/observable/EmptyObservable.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Observable, SchedulerLike, empty } from 'rxjs';
2+
3+
export class EmptyObservable<T> extends Observable<T> {
4+
static create<T>(scheduler?: SchedulerLike): Observable<T> {
5+
return empty(scheduler);
6+
}
7+
}

compat/observable/ErrorObservable.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Observable, SchedulerLike, throwError } from 'rxjs';
2+
3+
export class ErrorObservable<T> extends Observable<T> {
4+
static create<T>(error: any, scheduler?: SchedulerLike) {
5+
return throwError(error, scheduler);
6+
}
7+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Observable, SubscribableOrPromise, forkJoin } from 'rxjs';
2+
3+
export class ForkJoinObservable<T> extends Observable<T> {
4+
/* tslint:disable:max-line-length */
5+
static create<T, T2>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>): Observable<[T, T2]>;
6+
static create<T, T2, T3>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>): Observable<[T, T2, T3]>;
7+
static create<T, T2, T3, T4>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>, v4: SubscribableOrPromise<T4>): Observable<[T, T2, T3, T4]>;
8+
static create<T, T2, T3, T4, T5>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>, v4: SubscribableOrPromise<T4>, v5: SubscribableOrPromise<T5>): Observable<[T, T2, T3, T4, T5]>;
9+
static create<T, T2, T3, T4, T5, T6>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>, v4: SubscribableOrPromise<T4>, v5: SubscribableOrPromise<T5>, v6: SubscribableOrPromise<T6>): Observable<[T, T2, T3, T4, T5, T6]>;
10+
static create<T, R>(v1: SubscribableOrPromise<T>, project: (v1: T) => R): Observable<R>;
11+
static create<T, T2, R>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, project: (v1: T, v2: T2) => R): Observable<R>;
12+
static create<T, T2, T3, R>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>, project: (v1: T, v2: T2, v3: T3) => R): Observable<R>;
13+
static create<T, T2, T3, T4, R>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>, v4: SubscribableOrPromise<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable<R>;
14+
static create<T, T2, T3, T4, T5, R>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>, v4: SubscribableOrPromise<T4>, v5: SubscribableOrPromise<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable<R>;
15+
static create<T, T2, T3, T4, T5, T6, R>(v1: SubscribableOrPromise<T>, v2: SubscribableOrPromise<T2>, v3: SubscribableOrPromise<T3>, v4: SubscribableOrPromise<T4>, v5: SubscribableOrPromise<T5>, v6: SubscribableOrPromise<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable<R>;
16+
static create<T>(sources: SubscribableOrPromise<T>[]): Observable<T[]>;
17+
static create<R>(sources: SubscribableOrPromise<any>[]): Observable<R>;
18+
static create<T, R>(sources: SubscribableOrPromise<T>[], project: (...values: Array<T>) => R): Observable<R>;
19+
static create<R>(sources: SubscribableOrPromise<any>[], project: (...values: Array<any>) => R): Observable<R>;
20+
static create<T>(...sources: SubscribableOrPromise<T>[]): Observable<T[]>;
21+
static create<R>(...sources: SubscribableOrPromise<any>[]): Observable<R>;
22+
/* tslint:enable:max-line-length */
23+
24+
static create<T>(...sources: Array<SubscribableOrPromise<any> |
25+
Array<SubscribableOrPromise<any>> |
26+
((...values: Array<any>) => any)>): Observable<T> {
27+
return forkJoin(...sources);
28+
}
29+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Observable, fromEvent } from 'rxjs';
2+
import { EventTargetLike } from 'rxjs/internal-compatibility';
3+
4+
export class FromEventObservable<T> extends Observable<T> {
5+
/* tslint:disable:max-line-length */
6+
static create<T>(target: EventTargetLike, eventName: string): Observable<T>;
7+
static create<T>(target: EventTargetLike, eventName: string, selector: ((...args: any[]) => T)): Observable<T>;
8+
static create<T>(target: EventTargetLike, eventName: string, options: EventListenerOptions): Observable<T>;
9+
static create<T>(target: EventTargetLike, eventName: string, options: EventListenerOptions, selector: ((...args: any[]) => T)): Observable<T>;
10+
/* tslint:enable:max-line-length */
11+
12+
static create<T>(target: EventTargetLike,
13+
eventName: string,
14+
options?: EventListenerOptions | ((...args: any[]) => T),
15+
selector?: ((...args: any[]) => T)): Observable<T> {
16+
return fromEvent(target, eventName, options as EventListenerOptions, selector);
17+
}
18+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Observable, fromEventPattern } from 'rxjs';
2+
3+
export class FromEventPatternObservable<T> extends Observable<T> {
4+
static create<T>(addHandler: (handler: Function) => any,
5+
removeHandler?: (handler: Function, signal?: any) => void,
6+
selector?: (...args: Array<any>) => T) {
7+
return fromEventPattern(addHandler, removeHandler, selector);
8+
}
9+
}

0 commit comments

Comments
 (0)