UNPKG

@codibre/fluent-iterable

Version:

Provides LINQ-like fluent api operations for iterables and async iterables (ES2018+).

27 lines (26 loc) 1.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.filterRecipe = filterRecipe; const types_internal_1 = require("../types-internal"); const prepare_1 = require("../types-internal/prepare"); const utils_1 = require("../utils"); const augment_iterable_recipe_1 = require("./augment-iterable-recipe"); function filterRecipe(filterIterable, takeWhileIterable, resolver) { const baseFilter = (0, augment_iterable_recipe_1.augmentIterableRecipe)(filterIterable); const takeWhile = (0, augment_iterable_recipe_1.augmentIterableRecipe)(takeWhileIterable); return function (basePredicate = utils_1.identity) { const predicate = (0, prepare_1.prepare)(basePredicate); if ((0, types_internal_1.isAnyOrderAssured)(predicate, this)) { let alreadyTrue = false; let lastResult = false; const takeWhilePredicate = (t) => resolver(predicate(t), (result) => { alreadyTrue = alreadyTrue || result; lastResult = result; return !alreadyTrue || lastResult; }); const action = () => lastResult; return (0, types_internal_1.keepOrderAssuring)(baseFilter.call(takeWhile.call(this, takeWhilePredicate), action), this); } return baseFilter.call(this, predicate); }; }