From e4fa1e69e7ebfb627c7198fd1a9881e9327ec4d4 Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Sat, 28 Jun 2025 17:26:46 -0700 Subject: initial commit: scaffolding --- node_modules/rxjs/src/internal/operators/count.ts | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 node_modules/rxjs/src/internal/operators/count.ts (limited to 'node_modules/rxjs/src/internal/operators/count.ts') diff --git a/node_modules/rxjs/src/internal/operators/count.ts b/node_modules/rxjs/src/internal/operators/count.ts new file mode 100644 index 0000000..8b764f8 --- /dev/null +++ b/node_modules/rxjs/src/internal/operators/count.ts @@ -0,0 +1,61 @@ +import { OperatorFunction } from '../types'; +import { reduce } from './reduce'; + +/** + * Counts the number of emissions on the source and emits that number when the + * source completes. + * + * Tells how many values were emitted, when the source + * completes. + * + * ![](count.png) + * + * `count` transforms an Observable that emits values into an Observable that + * emits a single value that represents the number of values emitted by the + * source Observable. If the source Observable terminates with an error, `count` + * will pass this error notification along without emitting a value first. If + * the source Observable does not terminate at all, `count` will neither emit + * a value nor terminate. This operator takes an optional `predicate` function + * as argument, in which case the output emission will represent the number of + * source values that matched `true` with the `predicate`. + * + * ## Examples + * + * Counts how many seconds have passed before the first click happened + * + * ```ts + * import { interval, fromEvent, takeUntil, count } from 'rxjs'; + * + * const seconds = interval(1000); + * const clicks = fromEvent(document, 'click'); + * const secondsBeforeClick = seconds.pipe(takeUntil(clicks)); + * const result = secondsBeforeClick.pipe(count()); + * result.subscribe(x => console.log(x)); + * ``` + * + * Counts how many odd numbers are there between 1 and 7 + * + * ```ts + * import { range, count } from 'rxjs'; + * + * const numbers = range(1, 7); + * const result = numbers.pipe(count(i => i % 2 === 1)); + * result.subscribe(x => console.log(x)); + * // Results in: + * // 4 + * ``` + * + * @see {@link max} + * @see {@link min} + * @see {@link reduce} + * + * @param predicate A function that is used to analyze the value and the index and + * determine whether or not to increment the count. Return `true` to increment the count, + * and return `false` to keep the count the same. + * If the predicate is not provided, every value will be counted. + * @return A function that returns an Observable that emits one number that + * represents the count of emissions. + */ +export function count(predicate?: (value: T, index: number) => boolean): OperatorFunction { + return reduce((total, value, i) => (!predicate || predicate(value, i) ? total + 1 : total), 0); +} -- cgit v1.2.3