import { isPromiseLike } from '../jsutils/isPromise.ts';
/**
* Drain a sync iterator after abrupt completion so later promise rejections
* can be observed before they become unhandled.
*
* @internal
*/
export function collectIteratorPromises(
iterator: Iterator<unknown>,
): Array<unknown> {
const promises = [];
try {
while (true) {
const iteration = iterator.next();
if (iteration.done) {
return promises;
}
if (isPromiseLike(iteration.value)) {
promises.push(iteration.value);
}
}
} catch {
// Ignore errors while draining the remaining items.
return promises;
}
}