Add Subscribable utils
All checks were successful
Lint / lint (push) Successful in 12s

This commit is contained in:
Julien Valverdé
2026-03-30 13:27:54 +02:00
parent c6313cd27d
commit 1e068af09c

View File

@@ -1,9 +1,44 @@
import { Array, Chunk, Function, Subscribable } from "effect"
import { Array, Chunk, Effect, Function, Option, Subscribable } from "effect"
import type { NoSuchElementException } from "effect/Cause"
export * from "effect/Subscribable"
/**
* Maps over an `Option` value in the `Subscribable`.
*/
export const mapOption: {
<A, B, E, R>(
self: Subscribable.Subscribable<Option.Option<A>, E, R>,
f: (a: A) => B,
): Subscribable.Subscribable<Option.Option<B>, E, R>
<A, B>(
f: (a: A) => B,
): <E, R>(self: Subscribable.Subscribable<Option.Option<A>, E, R>) => Subscribable.Subscribable<Option.Option<B>, E, R>
} = Function.dual(2, <A, B, E, R>(
self: Subscribable.Subscribable<Option.Option<A>, E, R>,
f: (a: A) => B,
): Subscribable.Subscribable<Option.Option<B>, E, R> => Subscribable.map(self, Option.map(f)))
/**
* Maps over an `Option` value in the `Subscribable` with an Effect.
*/
export const mapOptionEffect: {
<A, B, E, E2, R>(
self: Subscribable.Subscribable<Option.Option<A>, E, R>,
f: (a: A) => Effect.Effect<B, E2, R>,
): Subscribable.Subscribable<Option.Option<B>, E | E2, R>
<A, B, E2>(
f: (a: A) => Effect.Effect<B, E2>,
): <E, R>(self: Subscribable.Subscribable<Option.Option<A>, E, R>) => Subscribable.Subscribable<Option.Option<B>, E | E2, R>
} = Function.dual(2, <A, B, E, E2, R>(
self: Subscribable.Subscribable<Option.Option<A>, E, R>,
f: (a: A) => Effect.Effect<B, E2, R>,
): Subscribable.Subscribable<Option.Option<B>, E | E2, R> => Subscribable.mapEffect(self, Option.match({
onSome: a => Effect.map(f(a), Option.some),
onNone: () => Effect.succeed(Option.none()),
})))
/**
* Narrows the focus to a field of an object.
*/