/** * Convert Iterator into Promise, resolve with the last value from Iterator */ export async function awaitIterator(generator: Iterator): Promise { let lastValue: any = {}; do { const itr: IteratorResult = generator.next(lastValue); if (itr.done) { return itr.value || lastValue; } if (itr.value[Symbol.iterator]) { lastValue = await awaitIterator(itr.value); } else if (itr.value.then) { lastValue = await itr.value; } else { lastValue = itr.value; } } while (true); }