import { IterableX } from '../iterablex.js'; import { MonoTypeOperatorFunction } from '../../interfaces.js'; /** @ignore */ export class DefaultIfEmptyIterable extends IterableX { private _source: Iterable; private _defaultValue: TSource; constructor(source: Iterable, defaultValue: TSource) { super(); this._source = source; this._defaultValue = defaultValue; } *[Symbol.iterator]() { let state = 1; for (const item of this._source) { state = 2; yield item; } if (state === 1) { yield this._defaultValue; } } } /** * Returns the elements of the specified sequence or the default value in a singleton sequence * if the sequence is empty. * * @template T The type of elements in the source sequence. * @param {T} defaultValue The value to return if the sequence is empty. * @returns {MonoTypeOperatorFunction} An operator which returns the elements of the source sequence or the default value as a singleton. */ export function defaultIfEmpty(defaultValue: T): MonoTypeOperatorFunction { return function defaultIfEmptyOperatorFunction(source: Iterable): IterableX { return new DefaultIfEmptyIterable(source, defaultValue); }; }