import { Scope, ScopedObservable } from "./abstractions" import { isObservableSeed, Observable, ObservableSeed } from "./index" import { constant } from "./index" /** @hidden */ export function argumentsToObservables< V, P extends ObservableSeed, ScopedObservable> >(args: (P | P[] | V)[]): P[] { args = Array.prototype.slice.call(args) return args.flatMap(singleToObservables) } function singleToObservables( x: ObservableSeed | ObservableSeed[] | T ): Observable[] { if (isObservableSeed(x)) { return [x.consume()] } else if (x instanceof Array) { return argumentsToObservables(x) as any } else { return [constant(x)] } } /** @hidden */ export function argumentsToObservablesAndFunction< V, P extends ObservableSeed >(args: any[]): [P[], (...args: any[]) => V] { if (args[0] instanceof Function) { return [ argumentsToObservables(Array.prototype.slice.call(args, 1)), args[0], ] } else { return [ argumentsToObservables( Array.prototype.slice.call(args, 0, args.length - 1) ), args[args.length - 1], ] } }