| 1778 | * @returns A function that resolves the awaited iterable values |
| 1779 | */ |
| 1780 | export function resolvesNext< |
| 1781 | Return, |
| 1782 | // deno-lint-ignore no-explicit-any |
| 1783 | Self = any, |
| 1784 | // deno-lint-ignore no-explicit-any |
| 1785 | Args extends unknown[] = any[], |
| 1786 | >( |
| 1787 | iterable: |
| 1788 | | Iterable<Return | Error | Promise<Return | Error>> |
| 1789 | | AsyncIterable<Return | Error | Promise<Return | Error>>, |
| 1790 | ): (this: Self, ...args: Args) => Promise<Return> { |
| 1791 | const gen = (async function* returnsValue() { |
| 1792 | yield* iterable; |
| 1793 | })(); |
| 1794 | let calls = 0; |
| 1795 | return async function () { |
| 1796 | const next = await gen.next(); |
| 1797 | if (next.done) { |
| 1798 | throw new MockError( |
| 1799 | `Not expected to be called more than ${calls} time(s)`, |
| 1800 | ); |
| 1801 | } |
| 1802 | calls++; |
| 1803 | const { value } = next; |
| 1804 | if (value instanceof Error) throw value; |
| 1805 | return value; |
| 1806 | }; |
| 1807 | } |