| 40 | export function firstOrFail<TElement>(iterable: Promise<Iterable<TElement>>, predicate: (element: TElement) => true | undefined, message: string | Error): Promise<TElement> | never; |
| 41 | |
| 42 | export function firstOrFail<TElement>(iterable: Iterable<TElement> | undefined | Promise<Iterable<TElement> | undefined>, predicateOrMessage: string | Error | ((element: TElement) => true | undefined) = (e) => e as any, message?: string | Error): TElement | Promise<TElement> | never { |
| 43 | let result: any; |
| 44 | if (message === undefined) { |
| 45 | message = predicateOrMessage as string | Error; |
| 46 | predicateOrMessage = (e) => e as any; |
| 47 | result = first(iterable as Iterable<TElement>, predicateOrMessage); |
| 48 | } else { |
| 49 | result = first(iterable as any, predicateOrMessage as any); |
| 50 | } |
| 51 | if (is.promise(result)) { |
| 52 | return result.then(r => r !== undefined ? r : fail(message)); |
| 53 | } |
| 54 | return result !== undefined ? result as TElement : fail(message); |
| 55 | } |
| 56 | |