Skip to content

Commit 9fd4cd4

Browse files
committed
feat(asyncAllOnce): add asyncAllOnce function
1 parent c3e9020 commit 9fd4cd4

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

index.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type {ExecutionContext} from "ava";
22
import test from "ava";
33
import {
4+
asyncAllOnce,
45
asyncAndOnce,
56
asyncAnyOnce,
67
asyncAverageOnce,
@@ -504,3 +505,8 @@ test("asyncAnyOnce", async t => {
504505
t.true(await asyncAnyOnce(asyncIterator([1, 2, 3]), e => e > 2));
505506
t.false(await asyncAnyOnce(asyncIterator([1, 2, 3]), e => e > 4));
506507
});
508+
509+
test("asyncAllOnce", async t => {
510+
t.true(await asyncAllOnce(asyncIterator([1, 2, 3]), e => e < 4));
511+
t.false(await asyncAllOnce(asyncIterator([1, 2, 3]), e => e > 2));
512+
});

index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,3 +975,21 @@ export function asyncAnyOnceFn<T>(
975975
): (iterator: AsyncIteratorLike<T>) => Promise<boolean> {
976976
return async iterator => asyncAnyOnce(iterator, predicate);
977977
}
978+
979+
export async function asyncAllOnce<T>(
980+
iterator: AsyncIteratorLike<T>,
981+
predicate: (element: T, index: number) => boolean | Promise<boolean>
982+
): Promise<boolean> {
983+
return (
984+
(await asyncFindIndexOnce(
985+
iterator,
986+
async (element, index) => !(await predicate(element, index))
987+
)) == null
988+
);
989+
}
990+
991+
export function asyncAllOnceFn<T>(
992+
predicate: (element: T, index: number) => boolean | Promise<boolean>
993+
): (iterator: AsyncIteratorLike<T>) => Promise<boolean> {
994+
return async iterator => asyncAllOnce(iterator, predicate);
995+
}

0 commit comments

Comments
 (0)