import asyncForEachStrict from './forEach_strict.js'; function asyncFilterStrict( arr: T[], fn: (cur: T, idx: number, arr: T[]) => Promise, ): Promise; function asyncFilterStrict( arr: T[], fn: (cur: T, idx: number, arr: T[]) => Promise, ): Promise; function asyncFilterStrict( arr: T[], fn: (cur: T, idx: number, arr: T[]) => Promise, ): Promise { const result: T[] = []; return asyncForEachStrict( arr, (cur, idx, arr2) => new Promise((resolve, reject) => { fn(cur, idx, arr2) .then((cond) => { if (cond) { result[idx] = cur; } resolve(); }) .catch(reject); }), ).then(() => result.filter((_cur, idx) => idx in result)); } export default asyncFilterStrict;