| 2973 | |
| 2974 | /** @internal */ |
| 2975 | export const fromAsyncIterable = <A, E>( |
| 2976 | iterable: AsyncIterable<A>, |
| 2977 | onError: (e: unknown) => E |
| 2978 | ) => |
| 2979 | pipe( |
| 2980 | Effect.acquireRelease( |
| 2981 | Effect.sync(() => iterable[Symbol.asyncIterator]()), |
| 2982 | (iterator) => iterator.return ? Effect.promise(async () => iterator.return!()) : Effect.void |
| 2983 | ), |
| 2984 | Effect.map((iterator) => |
| 2985 | repeatEffectOption(pipe( |
| 2986 | Effect.tryPromise({ |
| 2987 | try: async () => iterator.next(), |
| 2988 | catch: (reason) => Option.some(onError(reason)) |
| 2989 | }), |
| 2990 | Effect.flatMap((result) => result.done ? Effect.fail(Option.none()) : Effect.succeed(result.value)) |
| 2991 | )) |
| 2992 | ), |
| 2993 | unwrapScoped |
| 2994 | ) |
| 2995 | |
| 2996 | /** @internal */ |
| 2997 | export const fromChannel = <A, E, R>( |