import { Observable } from '../Observable'; import { Falsy, OperatorFunction } from '../types'; import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; export function every(predicate: BooleanConstructor): OperatorFunction extends never ? false : boolean>; /** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */ export function every( predicate: BooleanConstructor, thisArg: any ): OperatorFunction extends never ? false : boolean>; /** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */ export function every( predicate: (this: A, value: T, index: number, source: Observable) => boolean, thisArg: A ): OperatorFunction; export function every(predicate: (value: T, index: number, source: Observable) => boolean): OperatorFunction; /** * Returns an Observable that emits whether or not every item of the source satisfies the condition specified. * * If all values pass predicate before the source completes, emits true before completion, * otherwise emit false, then complete. * * ![](every.png) * * ## Example * * A simple example emitting true if all elements are less than 5, false otherwise * * ```ts * import { of, every } from 'rxjs'; * * of(1, 2, 3, 4, 5, 6) * .pipe(every(x => x < 5)) * .subscribe(x => console.log(x)); // -> false * ``` * * @param {function} predicate A function for determining if an item meets a specified condition. * @param {any} [thisArg] Optional object to use for `this` in the callback. * @return A function that returns an Observable of booleans that determines if * all items of the source Observable meet the condition specified. */ export function every( predicate: (value: T, index: number, source: Observable) => boolean, thisArg?: any ): OperatorFunction { return operate((source, subscriber) => { let index = 0; source.subscribe( createOperatorSubscriber( subscriber, (value) => { if (!predicate.call(thisArg, value, index++, source)) { subscriber.next(false); subscriber.complete(); } }, () => { subscriber.next(true); subscriber.complete(); } ) ); }); }