Skip to content

Commit

Permalink
Refactor isArray usage (#5709)
Browse files Browse the repository at this point in the history
* refactor: remove isArray utility

It is no longer needed in these modern times, and it was a bit of overkill

* refactor: centralize common array arg manipulation

- Adds utilities for parsing arguments and passing arguments to result selectors that recur throughout the library.

* chore: update golden files

* chore: address comments
  • Loading branch information
benlesh authored Sep 10, 2020
1 parent c570750 commit 09c5605
Show file tree
Hide file tree
Showing 18 changed files with 499 additions and 190 deletions.
27 changes: 24 additions & 3 deletions api_guard/dist/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,22 +121,43 @@ export declare function combineLatest<O1 extends ObservableInput<any>, O2 extend
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(sources: [O1, O2, O3], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(sources: [O1, O2, O3, O4], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5, O6], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5, O6], scheduler: SchedulerLike): Observable<[
ObservedValueOf<O1>,
ObservedValueOf<O2>,
ObservedValueOf<O3>,
ObservedValueOf<O4>,
ObservedValueOf<O5>,
ObservedValueOf<O6>
]>;
export declare function combineLatest<O extends ObservableInput<any>>(sources: O[], scheduler: SchedulerLike): Observable<ObservedValueOf<O>[]>;
export declare function combineLatest<O1 extends ObservableInput<any>>(sources: [O1]): Observable<[ObservedValueOf<O1>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(sources: [O1, O2]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(sources: [O1, O2, O3]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(sources: [O1, O2, O3, O4]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5, O6]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(sources: [O1, O2, O3, O4, O5, O6]): Observable<[
ObservedValueOf<O1>,
ObservedValueOf<O2>,
ObservedValueOf<O3>,
ObservedValueOf<O4>,
ObservedValueOf<O5>,
ObservedValueOf<O6>
]>;
export declare function combineLatest<O extends ObservableInput<any>>(sources: O[]): Observable<ObservedValueOf<O>[]>;
export declare function combineLatest<O extends readonly ObservableInput<any>[]>(sources: O): Observable<ObservedValueTupleFromArray<O>>;
export declare function combineLatest<O1 extends ObservableInput<any>>(v1: O1, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>>(v1: O1, v2: O2, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>;
export declare function combineLatest<O1 extends ObservableInput<any>, O2 extends ObservableInput<any>, O3 extends ObservableInput<any>, O4 extends ObservableInput<any>, O5 extends ObservableInput<any>, O6 extends ObservableInput<any>>(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, scheduler?: SchedulerLike): Observable<[
ObservedValueOf<O1>,
ObservedValueOf<O2>,
ObservedValueOf<O3>,
ObservedValueOf<O4>,
ObservedValueOf<O5>,
ObservedValueOf<O6>
]>;
export declare function combineLatest<O extends ObservableInput<any>>(...observables: O[]): Observable<any[]>;
export declare function combineLatest<O extends ObservableInput<any>, R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;
export declare function combineLatest<O extends ObservableInput<any>, R>(array: O[], resultSelector: (...values: ObservedValueOf<O>[]) => R, scheduler?: SchedulerLike): Observable<R>;
Expand Down
22 changes: 11 additions & 11 deletions src/internal/observable/bindCallback.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { SchedulerLike } from '../types';
import { Observable } from '../Observable';
import { map } from '../operators/map';
import { isArray } from '../util/isArray';
import { isScheduler } from '../util/isScheduler';
import { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';

// tslint:disable:max-line-length
/** @deprecated resultSelector is no longer supported, use a mapping function. */
Expand Down Expand Up @@ -173,29 +172,30 @@ export function bindCallback(callbackFunc: Function, scheduler?: SchedulerLike):
* Observable that delivers the same values the callback would deliver.
* @name bindCallback
*/
export function bindCallback<T>(
callbackFunc: Function,
resultSelector?: Function|SchedulerLike,
export function bindCallback(
callbackFunc: any,
resultSelector?: any,
scheduler?: SchedulerLike
): (...args: any[]) => Observable<T> {
): (...args: any[]) => Observable<unknown> {
if (resultSelector) {
if (isScheduler(resultSelector)) {
scheduler = resultSelector;
} else {
// DEPRECATED PATH
return (...args: any[]) => bindCallback(callbackFunc, scheduler)(...args).pipe(
map((args) => isArray(args) ? resultSelector(...args) : resultSelector(args)),
// Deprecated path (Returning Observable<R>)
// TODO: Fix these internal typings.
return (...args: any[]) => (bindCallback(callbackFunc, scheduler) as any)(...args).pipe(
mapOneOrManyArgs(resultSelector),
);
}
}


return function (this: any, ...args: any[]): Observable<T> {
return function (this: any, ...args: any[]) {
let results: any;
let hasResults = false;
let hasError = false;
let error: any;
return new Observable<T>((subscriber) => {
return new Observable((subscriber) => {
if (!scheduler) {
let isCurrentlyAsync = false;
let hasCompletedSynchronously = false;
Expand Down
9 changes: 2 additions & 7 deletions src/internal/observable/bindNodeCallback.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
/** @prettier */
import { Observable } from '../Observable';
import { SchedulerLike } from '../types';
import { map } from '../operators/map';
import { isScheduler } from '../util/isScheduler';
import { isArray } from '../util/isArray';
import { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';

/* tslint:disable:max-line-length */
/** @deprecated resultSelector is deprecated, pipe to map instead */
Expand Down Expand Up @@ -265,11 +264,7 @@ export function bindNodeCallback<T>(
scheduler = resultSelector;
} else {
// DEPRECATED PATH
return (...args: any[]) =>
bindNodeCallback(
callbackFunc,
scheduler
)(...args).pipe(map((args) => (isArray(args) ? resultSelector(...args) : resultSelector(args))));
return (...args: any[]) => bindNodeCallback(callbackFunc, scheduler)(...args).pipe(mapOneOrManyArgs(resultSelector as any));
}
}

Expand Down
Loading

0 comments on commit 09c5605

Please sign in to comment.