@@ -99,6 +99,30 @@ export const mapOptionEffect: {
|
|||||||
onNone: () => Effect.succeed(Option.none()),
|
onNone: () => Effect.succeed(Option.none()),
|
||||||
})))
|
})))
|
||||||
|
|
||||||
|
/** Converts typed failures from both channels into `Result` values. */
|
||||||
|
export const result = <A, E, R>(
|
||||||
|
self: View<A, E, R>,
|
||||||
|
): View<Result.Result<A, E>, never, R> => make({
|
||||||
|
get get() { return Effect.result(self.get) },
|
||||||
|
get changes() { return Stream.result(self.changes) },
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combines the current values and streams of changes from multiple `View` values.
|
||||||
|
*/
|
||||||
|
export const zipLatestAll = <const T extends readonly View<any, any, any>[]>(
|
||||||
|
...elements: T
|
||||||
|
): View<
|
||||||
|
[T[number]] extends [never]
|
||||||
|
? never
|
||||||
|
: { [K in keyof T]: T[K] extends View<infer A, infer _E, infer _R> ? A : never },
|
||||||
|
[T[number]] extends [never] ? never : T[number] extends View<infer _A, infer E, infer _R> ? E : never,
|
||||||
|
[T[number]] extends [never] ? never : T[number] extends View<infer _A, infer _E, infer R> ? R : never
|
||||||
|
> => make({
|
||||||
|
get: Effect.all(elements.map(view => view.get)),
|
||||||
|
changes: Stream.zipLatestAll(...elements.map(view => view.changes)),
|
||||||
|
}) as any
|
||||||
|
|
||||||
|
|
||||||
/** Maps errors from both the current value and the stream of changes. */
|
/** Maps errors from both the current value and the stream of changes. */
|
||||||
export const mapError: {
|
export const mapError: {
|
||||||
@@ -192,14 +216,6 @@ export const retry: {
|
|||||||
get changes() { return Stream.retry(self.changes, policy) },
|
get changes() { return Stream.retry(self.changes, policy) },
|
||||||
}))
|
}))
|
||||||
|
|
||||||
/** Converts typed failures from both channels into `Result` values. */
|
|
||||||
export const result = <A, E, R>(
|
|
||||||
self: View<A, E, R>,
|
|
||||||
): View<Result.Result<A, E>, never, R> => make({
|
|
||||||
get get() { return Effect.result(self.get) },
|
|
||||||
get changes() { return Stream.result(self.changes) },
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
/** Narrows the focus to a field of an object. */
|
/** Narrows the focus to a field of an object. */
|
||||||
export const focusObjectOn: {
|
export const focusObjectOn: {
|
||||||
|
|||||||
@@ -40,6 +40,22 @@ export const mapOptionEffect: {
|
|||||||
onNone: () => Effect.succeed(Option.none()),
|
onNone: () => Effect.succeed(Option.none()),
|
||||||
})))
|
})))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combines the current values and streams of changes from multiple `Subscribable` values.
|
||||||
|
*/
|
||||||
|
export const zipLatestAll = <const T extends readonly Subscribable.Subscribable<any, any, any>[]>(
|
||||||
|
...elements: T
|
||||||
|
): Subscribable.Subscribable<
|
||||||
|
[T[number]] extends [never]
|
||||||
|
? never
|
||||||
|
: { [K in keyof T]: T[K] extends Subscribable.Subscribable<infer A, infer _E, infer _R> ? A : never },
|
||||||
|
[T[number]] extends [never] ? never : T[number] extends Subscribable.Subscribable<infer _A, infer E, infer _R> ? E : never,
|
||||||
|
[T[number]] extends [never] ? never : T[number] extends Subscribable.Subscribable<infer _A, infer _E, infer R> ? R : never
|
||||||
|
> => Subscribable.make({
|
||||||
|
get: Effect.all(elements.map(view => view.get)),
|
||||||
|
changes: Stream.zipLatestAll(...elements.map(view => view.changes)),
|
||||||
|
}) as any
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps errors from both the current value and the stream of changes.
|
* Maps errors from both the current value and the stream of changes.
|
||||||
|
|||||||
Reference in New Issue
Block a user