( results: Arg )
| 671 | * @since 4.0.0 |
| 672 | */ |
| 673 | export const all = <const Arg extends Iterable<any> | Record<string, any>>( |
| 674 | results: Arg |
| 675 | ): AsyncResult< |
| 676 | [Arg] extends [ReadonlyArray<any>] ? { |
| 677 | -readonly [K in keyof Arg]: [Arg[K]] extends [AsyncResult<infer _A, infer _E>] ? _A : Arg[K] |
| 678 | } |
| 679 | : [Arg] extends [Iterable<infer _A>] ? _A extends AsyncResult<infer _AA, infer _E> ? _AA : _A |
| 680 | : [Arg] extends [Record<string, any>] ? { |
| 681 | -readonly [K in keyof Arg]: [Arg[K]] extends [AsyncResult<infer _A, infer _E>] ? _A : Arg[K] |
| 682 | } |
| 683 | : never, |
| 684 | [Arg] extends [ReadonlyArray<any>] ? AsyncResult.Failure<Arg[number]> |
| 685 | : [Arg] extends [Iterable<infer _A>] ? AsyncResult.Failure<_A> |
| 686 | : [Arg] extends [Record<string, any>] ? AsyncResult.Failure<Arg[keyof Arg]> |
| 687 | : never |
| 688 | > => { |
| 689 | const isIter = isIterable(results) |
| 690 | const entries = isIter |
| 691 | ? Array.from(results, (result, i) => [i, result] as const) |
| 692 | : Object.entries(results) |
| 693 | const successes: any = isIter ? [] : {} |
| 694 | let waiting = false |
| 695 | for (let i = 0; i < entries.length; i++) { |
| 696 | const [key, result] = entries[i] |
| 697 | if (!isAsyncResult(result)) { |
| 698 | InternalRecord.assignProperty(successes, key, result) |
| 699 | continue |
| 700 | } else if (!isSuccess(result)) { |
| 701 | return result as any |
| 702 | } |
| 703 | InternalRecord.assignProperty(successes, key, result.value) |
| 704 | if (result.waiting) { |
| 705 | waiting = true |
| 706 | } |
| 707 | } |
| 708 | return success(successes, { waiting }) as any |
| 709 | } |
| 710 | |
| 711 | /** |
| 712 | * Creates a typed builder for rendering an `AsyncResult` by handling waiting, initial, success, error, defect, interrupt, and failure cases. |
nothing calls this directly
no test coverage detected