@fncts/io 0.0.2 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Channel/UpstreamPullRequest/api.d.ts +1 -1
- package/Channel/api.d.ts +2 -2
- package/Clock/api.d.ts +3 -1
- package/Clock/definition.d.ts +3 -1
- package/Clock/live.d.ts +2 -0
- package/Fiber/api/interruptFork.d.ts +1 -1
- package/FiberRef/constructors.d.ts +0 -53
- package/FiberRef/unsafe.d.ts +53 -0
- package/FiberRef.d.ts +1 -0
- package/Future/constructors.d.ts +3 -3
- package/IO/api/asyncIO.d.ts +6 -0
- package/IO/api/ensuringChildren.d.ts +7 -0
- package/IO/api/sequenceT.d.ts +2 -3
- package/IO/api/sleep.d.ts +3 -1
- package/IO/api/timeout.d.ts +14 -0
- package/IO/api.d.ts +2 -2
- package/IO/definition.d.ts +8 -4
- package/IO.d.ts +3 -0
- package/IOSpec.d.ts +10 -1
- package/InterruptStatus/constructors.d.ts +3 -3
- package/Latch.d.ts +3 -0
- package/Schedule/Decision.d.ts +1 -1
- package/Schedule/api.d.ts +1 -1
- package/Schedule.d.ts +0 -1
- package/Scope/Finalizer/definition.d.ts +1 -1
- package/Scope/ReleaseMap/definition.d.ts +1 -1
- package/Stream/api.d.ts +5 -22
- package/Stream/internal/DebounceState.d.ts +3 -3
- package/Stream/internal/Handoff.d.ts +9 -9
- package/Stream/internal/SinkEndReason.d.ts +6 -18
- package/TFuture/definition.d.ts +1 -1
- package/TSemaphore/definition.d.ts +1 -1
- package/_cjs/Cached.cjs +3 -3
- package/_cjs/Channel/ChildExecutorDecision.cjs +2 -2
- package/_cjs/Channel/UpstreamPullRequest/api.cjs +3 -3
- package/_cjs/Channel/UpstreamPullRequest/api.cjs.map +1 -1
- package/_cjs/Channel/UpstreamPullRequest.cjs +2 -2
- package/_cjs/Channel/UpstreamPullStrategy.cjs +1 -1
- package/_cjs/Channel/api/interruptWhen.cjs +1 -1
- package/_cjs/Channel/api/interruptWhen.cjs.map +1 -1
- package/_cjs/Channel/api/mapOutIOC.cjs +1 -1
- package/_cjs/Channel/api/mapOutIOC.cjs.map +1 -1
- package/_cjs/Channel/api/mergeAllWith.cjs +1 -1
- package/_cjs/Channel/api/mergeAllWith.cjs.map +1 -1
- package/_cjs/Channel/api/mergeWith.cjs +6 -6
- package/_cjs/Channel/api/mergeWith.cjs.map +1 -1
- package/_cjs/Channel/api.cjs +14 -14
- package/_cjs/Channel/api.cjs.map +1 -1
- package/_cjs/Channel/core-api.cjs +1 -1
- package/_cjs/Channel/internal/ChannelExecutor.cjs +2 -2
- package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs +8 -7
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs.map +1 -1
- package/_cjs/Channel.cjs +3 -3
- package/_cjs/Clock/api.cjs.map +1 -1
- package/_cjs/Clock/live.cjs +1 -1
- package/_cjs/Clock/live.cjs.map +1 -1
- package/_cjs/Clock.cjs +3 -3
- package/_cjs/Console.cjs +3 -3
- package/_cjs/Fiber/FiberContext.cjs +58 -57
- package/_cjs/Fiber/FiberContext.cjs.map +1 -1
- package/_cjs/Fiber/api/interruptFork.cjs +1 -1
- package/_cjs/Fiber/api/interruptFork.cjs.map +1 -1
- package/_cjs/Fiber/constructors.cjs +2 -2
- package/_cjs/Fiber/constructors.cjs.map +1 -1
- package/_cjs/Fiber.cjs +23 -23
- package/_cjs/FiberRef/constructors.cjs +3 -84
- package/_cjs/FiberRef/constructors.cjs.map +1 -1
- package/_cjs/FiberRef/unsafe.cjs +94 -0
- package/_cjs/FiberRef/unsafe.cjs.map +1 -0
- package/_cjs/FiberRef.cjs +18 -5
- package/_cjs/FiberRef.cjs.map +1 -1
- package/_cjs/FiberRefs/join.cjs +2 -2
- package/_cjs/FiberRefs/join.cjs.map +1 -1
- package/_cjs/FiberRefs.cjs +3 -3
- package/_cjs/FiberScope.cjs +2 -2
- package/_cjs/FiberState/constructors.cjs +1 -1
- package/_cjs/FiberState.cjs +3 -3
- package/_cjs/FiberStatus/constructors.cjs +1 -1
- package/_cjs/FiberStatus.cjs +2 -2
- package/_cjs/Future/constructors.cjs +2 -4
- package/_cjs/Future/constructors.cjs.map +1 -1
- package/_cjs/Future.cjs +3 -3
- package/_cjs/Hub.cjs +2 -2
- package/_cjs/IO/api/asyncIO.cjs +37 -0
- package/_cjs/IO/api/asyncIO.cjs.map +1 -0
- package/_cjs/IO/api/concurrency.cjs +1 -1
- package/_cjs/IO/api/core-scope.cjs +1 -1
- package/_cjs/IO/api/ensuringChildren.cjs +24 -0
- package/_cjs/IO/api/ensuringChildren.cjs.map +1 -0
- package/_cjs/IO/api/environment.cjs +1 -1
- package/_cjs/IO/api/interrupt.cjs +5 -5
- package/_cjs/IO/api/interrupt.cjs.map +1 -1
- package/_cjs/IO/api/sleep.cjs.map +1 -1
- package/_cjs/IO/api/timeout.cjs +42 -0
- package/_cjs/IO/api/timeout.cjs.map +1 -0
- package/_cjs/IO/api.cjs +41 -40
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO/definition.cjs +9 -6
- package/_cjs/IO/definition.cjs.map +1 -1
- package/_cjs/IO/runtime.cjs +2 -2
- package/_cjs/IO/runtime.cjs.map +1 -1
- package/_cjs/IO.cjs +86 -47
- package/_cjs/IO.cjs.map +1 -1
- package/_cjs/IOEnv/services.cjs +1 -1
- package/_cjs/IOEnv.cjs +3 -3
- package/_cjs/InterruptStatus/constructors.cjs +3 -7
- package/_cjs/InterruptStatus/constructors.cjs.map +1 -1
- package/_cjs/InterruptStatus.cjs +2 -2
- package/_cjs/Layer/api.cjs +5 -3
- package/_cjs/Layer/api.cjs.map +1 -1
- package/_cjs/Layer.cjs +3 -3
- package/_cjs/Logger.cjs +3 -3
- package/_cjs/Queue/api.cjs +7 -7
- package/_cjs/Queue.cjs +5 -5
- package/_cjs/Random.cjs +3 -3
- package/_cjs/Ref/Atomic/Atomic.cjs +3 -3
- package/_cjs/Ref/Atomic/api.cjs +10 -6
- package/_cjs/Ref/Atomic/api.cjs.map +1 -1
- package/_cjs/Ref/Atomic.cjs +2 -2
- package/_cjs/Ref/Derived.cjs +2 -2
- package/_cjs/Ref/DerivedAll.cjs +1 -1
- package/_cjs/Ref/Synchronized/api.cjs +1 -1
- package/_cjs/Ref/Synchronized/constructors.cjs +1 -1
- package/_cjs/Ref/Synchronized/definition.cjs +1 -1
- package/_cjs/Ref/api/get.cjs +1 -1
- package/_cjs/Ref/api/match.cjs +1 -1
- package/_cjs/Ref/api/matchAll.cjs +1 -1
- package/_cjs/Ref/api/modify.cjs +1 -1
- package/_cjs/Ref/api/set.cjs +1 -1
- package/_cjs/Ref/api.cjs +8 -8
- package/_cjs/Ref/constructors.cjs +1 -1
- package/_cjs/Ref.cjs +9 -9
- package/_cjs/STM/api/core-api.cjs +1 -1
- package/_cjs/STM/api/core-constructors.cjs +1 -1
- package/_cjs/STM/api.cjs +2 -2
- package/_cjs/STM/driver.cjs +1 -1
- package/_cjs/STM/internal/Entry.cjs +1 -1
- package/_cjs/STM/internal/Journal.cjs +2 -2
- package/_cjs/STM.cjs +5 -5
- package/_cjs/Schedule/Decision.cjs.map +1 -1
- package/_cjs/Schedule/api/driver.cjs +11 -9
- package/_cjs/Schedule/api/driver.cjs.map +1 -1
- package/_cjs/Schedule/api.cjs +49 -49
- package/_cjs/Schedule/api.cjs.map +1 -1
- package/_cjs/Schedule.cjs +4 -17
- package/_cjs/Schedule.cjs.map +1 -1
- package/_cjs/Scope/Finalizer/definition.cjs +6 -4
- package/_cjs/Scope/Finalizer/definition.cjs.map +1 -1
- package/_cjs/Scope/Finalizer.cjs +1 -1
- package/_cjs/Scope/ReleaseMap/api/releaseAll.cjs +1 -1
- package/_cjs/Scope/ReleaseMap/api.cjs +1 -1
- package/_cjs/Scope/ReleaseMap/constructors.cjs +1 -1
- package/_cjs/Scope/ReleaseMap/definition.cjs +4 -2
- package/_cjs/Scope/ReleaseMap/definition.cjs.map +1 -1
- package/_cjs/Scope/ReleaseMap.cjs +3 -3
- package/_cjs/Scope/api.cjs +1 -1
- package/_cjs/Scope.cjs +2 -2
- package/_cjs/ScopedRef.cjs +2 -2
- package/_cjs/Sink/api.cjs +1 -1
- package/_cjs/Sink/api.cjs.map +1 -1
- package/_cjs/Sink.cjs +2 -2
- package/_cjs/State/api.cjs +2 -2
- package/_cjs/State/definition.cjs +1 -1
- package/_cjs/State.cjs +2 -2
- package/_cjs/Stream/api/zipAllWith.cjs +1 -1
- package/_cjs/Stream/api/zipWith.cjs +1 -1
- package/_cjs/Stream/api.cjs +308 -308
- package/_cjs/Stream/api.cjs.map +1 -1
- package/_cjs/Stream/internal/DebounceState.cjs.map +1 -1
- package/_cjs/Stream/internal/Handoff.cjs.map +1 -1
- package/_cjs/Stream/internal/SinkEndReason.cjs +2 -37
- package/_cjs/Stream/internal/SinkEndReason.cjs.map +1 -1
- package/_cjs/Stream.cjs +2 -2
- package/_cjs/Supervisor/constructors.cjs +1 -1
- package/_cjs/Supervisor.cjs +3 -3
- package/_cjs/TExit/constructors.cjs +1 -1
- package/_cjs/TExit.cjs +2 -2
- package/_cjs/TFuture/definition.cjs +4 -2
- package/_cjs/TFuture/definition.cjs.map +1 -1
- package/_cjs/TFuture.cjs +3 -3
- package/_cjs/TRef/api.cjs +2 -2
- package/_cjs/TRef/constructors.cjs +3 -3
- package/_cjs/TRef.cjs +3 -3
- package/_cjs/TSemaphore/api.cjs +1 -1
- package/_cjs/TSemaphore/definition.cjs +4 -2
- package/_cjs/TSemaphore/definition.cjs.map +1 -1
- package/_cjs/TSemaphore.cjs +3 -3
- package/_cjs/collection/immutable/Conc.cjs +3 -3
- package/_mjs/Channel/UpstreamPullRequest/api.mjs +1 -2
- package/_mjs/Channel/UpstreamPullRequest/api.mjs.map +1 -1
- package/_mjs/Channel/api/interruptWhen.mjs +1 -1
- package/_mjs/Channel/api/interruptWhen.mjs.map +1 -1
- package/_mjs/Channel/api/mapOutIOC.mjs +1 -1
- package/_mjs/Channel/api/mapOutIOC.mjs.map +1 -1
- package/_mjs/Channel/api/mergeAllWith.mjs +1 -1
- package/_mjs/Channel/api/mergeAllWith.mjs.map +1 -1
- package/_mjs/Channel/api/mergeWith.mjs +6 -6
- package/_mjs/Channel/api/mergeWith.mjs.map +1 -1
- package/_mjs/Channel/api.mjs +14 -14
- package/_mjs/Channel/api.mjs.map +1 -1
- package/_mjs/Channel/internal/ChannelExecutor.mjs +2 -2
- package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs +8 -7
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs.map +1 -1
- package/_mjs/Clock/api.mjs.map +1 -1
- package/_mjs/Clock/live.mjs +1 -1
- package/_mjs/Clock/live.mjs.map +1 -1
- package/_mjs/Fiber/FiberContext.mjs +58 -57
- package/_mjs/Fiber/FiberContext.mjs.map +1 -1
- package/_mjs/Fiber/api/interruptFork.mjs +1 -1
- package/_mjs/Fiber/api/interruptFork.mjs.map +1 -1
- package/_mjs/Fiber/constructors.mjs +1 -1
- package/_mjs/Fiber/constructors.mjs.map +1 -1
- package/_mjs/FiberRef/constructors.mjs +3 -66
- package/_mjs/FiberRef/constructors.mjs.map +1 -1
- package/_mjs/FiberRef/unsafe.mjs +66 -0
- package/_mjs/FiberRef/unsafe.mjs.map +1 -0
- package/_mjs/FiberRef.mjs +2 -1
- package/_mjs/FiberRef.mjs.map +1 -1
- package/_mjs/FiberRefs/join.mjs +2 -2
- package/_mjs/FiberRefs/join.mjs.map +1 -1
- package/_mjs/Future/constructors.mjs +3 -4
- package/_mjs/Future/constructors.mjs.map +1 -1
- package/_mjs/IO/api/asyncIO.mjs +20 -0
- package/_mjs/IO/api/asyncIO.mjs.map +1 -0
- package/_mjs/IO/api/concurrency.mjs +1 -1
- package/_mjs/IO/api/ensuringChildren.mjs +11 -0
- package/_mjs/IO/api/ensuringChildren.mjs.map +1 -0
- package/_mjs/IO/api/environment.mjs +1 -1
- package/_mjs/IO/api/interrupt.mjs +4 -4
- package/_mjs/IO/api/interrupt.mjs.map +1 -1
- package/_mjs/IO/api/sleep.mjs.map +1 -1
- package/_mjs/IO/api/timeout.mjs +23 -0
- package/_mjs/IO/api/timeout.mjs.map +1 -0
- package/_mjs/IO/api.mjs +41 -40
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO/definition.mjs +6 -4
- package/_mjs/IO/definition.mjs.map +1 -1
- package/_mjs/IO/runtime.mjs +2 -2
- package/_mjs/IO/runtime.mjs.map +1 -1
- package/_mjs/IO.mjs +3 -0
- package/_mjs/IO.mjs.map +1 -1
- package/_mjs/IOEnv/services.mjs +1 -1
- package/_mjs/InterruptStatus/constructors.mjs +3 -3
- package/_mjs/InterruptStatus/constructors.mjs.map +1 -1
- package/_mjs/Layer/api.mjs +4 -3
- package/_mjs/Layer/api.mjs.map +1 -1
- package/_mjs/Ref/Atomic/api.mjs +10 -6
- package/_mjs/Ref/Atomic/api.mjs.map +1 -1
- package/_mjs/Schedule/Decision.mjs.map +1 -1
- package/_mjs/Schedule/api/driver.mjs +10 -9
- package/_mjs/Schedule/api/driver.mjs.map +1 -1
- package/_mjs/Schedule/api.mjs +49 -49
- package/_mjs/Schedule/api.mjs.map +1 -1
- package/_mjs/Schedule.mjs +0 -1
- package/_mjs/Schedule.mjs.map +1 -1
- package/_mjs/Scope/Finalizer/definition.mjs +5 -4
- package/_mjs/Scope/Finalizer/definition.mjs.map +1 -1
- package/_mjs/Scope/ReleaseMap/definition.mjs +3 -2
- package/_mjs/Scope/ReleaseMap/definition.mjs.map +1 -1
- package/_mjs/Sink/api.mjs +1 -1
- package/_mjs/Sink/api.mjs.map +1 -1
- package/_mjs/Stream/api.mjs +308 -302
- package/_mjs/Stream/api.mjs.map +1 -1
- package/_mjs/Stream/internal/DebounceState.mjs.map +1 -1
- package/_mjs/Stream/internal/Handoff.mjs.map +1 -1
- package/_mjs/Stream/internal/SinkEndReason.mjs +1 -30
- package/_mjs/Stream/internal/SinkEndReason.mjs.map +1 -1
- package/_mjs/TFuture/definition.mjs +3 -2
- package/_mjs/TFuture/definition.mjs.map +1 -1
- package/_mjs/TSemaphore/definition.mjs +3 -2
- package/_mjs/TSemaphore/definition.mjs.map +1 -1
- package/_src/Channel/UpstreamPullRequest/api.ts +2 -3
- package/_src/Channel/api.ts +3 -3
- package/_src/Channel/internal/ChannelExecutor.ts +2 -2
- package/_src/Channel/internal/SingleProducerAsyncInput.ts +1 -0
- package/_src/Clock/api.ts +1 -1
- package/_src/Clock/definition.ts +1 -1
- package/_src/Clock/live.ts +2 -2
- package/_src/Fiber/FiberContext.ts +3 -2
- package/_src/Fiber/api/interruptFork.ts +1 -1
- package/_src/Fiber/constructors.ts +1 -1
- package/_src/FiberRef/constructors.ts +1 -78
- package/_src/FiberRef/unsafe.ts +79 -0
- package/_src/FiberRef.ts +1 -0
- package/_src/FiberRefs/join.ts +2 -2
- package/_src/Future/constructors.ts +1 -1
- package/_src/IO/api/asyncIO.ts +16 -0
- package/_src/IO/api/ensuringChildren.ts +11 -0
- package/_src/IO/api/interrupt.ts +2 -1
- package/_src/IO/api/sequenceT.ts +1 -1
- package/_src/IO/api/sleep.ts +1 -1
- package/_src/IO/api/timeout.ts +19 -0
- package/_src/IO/api.ts +6 -4
- package/_src/IO/definition.ts +8 -4
- package/_src/IO.ts +3 -0
- package/_src/InterruptStatus/constructors.ts +2 -0
- package/_src/Layer/api.ts +1 -1
- package/_src/Ref/Atomic/api.ts +4 -0
- package/_src/Schedule/Decision.ts +0 -2
- package/_src/Schedule/api/driver.ts +1 -1
- package/_src/Schedule/api.ts +0 -3
- package/_src/Schedule.ts +0 -1
- package/_src/Scope/Finalizer/definition.ts +1 -1
- package/_src/Scope/ReleaseMap/definition.ts +1 -1
- package/_src/Stream/api.ts +199 -134
- package/_src/Stream/internal/DebounceState.ts +2 -2
- package/_src/Stream/internal/Handoff.ts +9 -9
- package/_src/Stream/internal/SinkEndReason.ts +7 -25
- package/_src/TFuture/definition.ts +2 -2
- package/_src/TSemaphore/definition.ts +1 -1
- package/package.json +3 -3
- package/runTests.d.ts +1 -0
- package/Schedule/Interval.d.ts +0 -71
- package/_cjs/Schedule/Interval.cjs +0 -154
- package/_cjs/Schedule/Interval.cjs.map +0 -1
- package/_mjs/Schedule/Interval.mjs +0 -114
- package/_mjs/Schedule/Interval.mjs.map +0 -1
- package/_src/Schedule/Interval.ts +0 -103
package/_src/Stream/api.ts
CHANGED
@@ -12,7 +12,8 @@ import { DEFAULT_CHUNK_SIZE, Stream } from "./definition.js";
|
|
12
12
|
import { DebounceState } from "./internal/DebounceState.js";
|
13
13
|
import { Handoff, HandoffSignal } from "./internal/Handoff.js";
|
14
14
|
import { Pull } from "./internal/Pull.js";
|
15
|
-
import {
|
15
|
+
import { SinkEndReasonTag } from "./internal/SinkEndReason.js";
|
16
|
+
import { ScheduleEnd, UpstreamEnd } from "./internal/SinkEndReason.js";
|
16
17
|
import { Take } from "./internal/Take.js";
|
17
18
|
|
18
19
|
/**
|
@@ -77,17 +78,17 @@ export function aggregateAsyncWithinEither_<R, E, A extends A1, R1, E1, A1, B, R
|
|
77
78
|
sink: Sink<R1, E1, A1, A1, B>,
|
78
79
|
schedule: Schedule<R2, Maybe<B>, C>,
|
79
80
|
): Stream<R & R1 & R2, E | E1, Either<C, B>> {
|
80
|
-
type LocalHandoffSignal = HandoffSignal<
|
81
|
-
type LocalSinkEndReason = SinkEndReason<C>;
|
81
|
+
type LocalHandoffSignal = HandoffSignal<E | E1, A1>;
|
82
82
|
|
83
83
|
const deps = IO.sequenceT(
|
84
84
|
Handoff<LocalHandoffSignal>(),
|
85
|
-
Ref.make<
|
85
|
+
Ref.make<SinkEndReason>(new ScheduleEnd()),
|
86
86
|
Ref.make(Conc.empty<A1>()),
|
87
87
|
schedule.driver,
|
88
|
+
Ref.make(false),
|
88
89
|
);
|
89
90
|
|
90
|
-
return Stream.fromIO(deps).flatMap(([handoff, sinkEndReason, sinkLeftovers, scheduleDriver]) => {
|
91
|
+
return Stream.fromIO(deps).flatMap(([handoff, sinkEndReason, sinkLeftovers, scheduleDriver, consumed]) => {
|
91
92
|
const handoffProducer: Channel<unknown, E | E1, Conc<A1>, unknown, never, never, any> = Channel.readWithCause(
|
92
93
|
(_in: Conc<A1>) => Channel.fromIO(handoff.offer(HandoffSignal.Emit(_in))).apSecond(handoffProducer),
|
93
94
|
(cause: Cause<E | E1>) => Channel.fromIO(handoff.offer(HandoffSignal.Halt(cause))),
|
@@ -96,62 +97,102 @@ export function aggregateAsyncWithinEither_<R, E, A extends A1, R1, E1, A1, B, R
|
|
96
97
|
|
97
98
|
const handoffConsumer: Channel<unknown, unknown, unknown, unknown, E | E1, Conc<A1>, void> = Channel.unwrap(
|
98
99
|
sinkLeftovers.getAndSet(Conc.empty<A>()).flatMap((leftovers) => {
|
99
|
-
if (leftovers.
|
100
|
-
return IO.succeedNow(Channel.writeNow(leftovers)
|
100
|
+
if (leftovers.isNonEmpty) {
|
101
|
+
return consumed.set(true) > IO.succeedNow(Channel.writeNow(leftovers) > handoffConsumer);
|
101
102
|
} else {
|
102
103
|
return handoff.take.map((signal) =>
|
103
104
|
signal.match({
|
104
|
-
Emit: ({ els }) => Channel.writeNow(els)
|
105
|
+
Emit: ({ els }) => Channel.fromIO(consumed.set(true)) > Channel.writeNow(els) > handoffConsumer,
|
105
106
|
Halt: ({ error }) => Channel.failCause(error),
|
106
|
-
End: ({ reason }) =>
|
107
|
+
End: ({ reason }) => {
|
108
|
+
if (reason._tag === SinkEndReasonTag.ScheduleEnd) {
|
109
|
+
return Channel.unwrap(
|
110
|
+
consumed.get.map((p) =>
|
111
|
+
p
|
112
|
+
? Channel.fromIO(sinkEndReason.set(new ScheduleEnd()))
|
113
|
+
: Channel.fromIO(sinkEndReason.set(new ScheduleEnd())) > handoffConsumer,
|
114
|
+
),
|
115
|
+
);
|
116
|
+
} else {
|
117
|
+
return Channel.fromIO(sinkEndReason.set(reason));
|
118
|
+
}
|
119
|
+
},
|
107
120
|
}),
|
108
121
|
);
|
109
122
|
}
|
110
123
|
}),
|
111
124
|
);
|
112
125
|
|
126
|
+
function timeout(lastB: Maybe<B>): IO<R2, Nothing, C> {
|
127
|
+
return scheduleDriver.next(lastB);
|
128
|
+
}
|
129
|
+
|
113
130
|
const scheduledAggregator = (
|
114
|
-
|
131
|
+
sinkFiber: Fiber.Runtime<E | E1, readonly [Conc<Conc<A1>>, B]>,
|
132
|
+
scheduleFiber: Fiber.Runtime<Nothing, C>,
|
115
133
|
): Channel<R1 & R2, unknown, unknown, unknown, E | E1, Conc<Either<C, B>>, any> => {
|
116
|
-
const
|
117
|
-
(
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
)
|
122
|
-
|
123
|
-
|
134
|
+
const forkSink =
|
135
|
+
consumed.set(false) > handoffConsumer.pipeToOrFail(sink.channel).doneCollect.runScoped.forkScoped;
|
136
|
+
|
137
|
+
function handleSide(leftovers: Conc<Conc<A1>>, b: B, c: Maybe<C>) {
|
138
|
+
return Channel.unwrap(
|
139
|
+
sinkLeftovers.set(leftovers.flatten) >
|
140
|
+
sinkEndReason.get.map((reason) =>
|
141
|
+
reason.match({
|
142
|
+
ScheduleEnd: () =>
|
143
|
+
Channel.unwrapScoped(
|
144
|
+
Do((Δ) => {
|
145
|
+
const consumed_ = Δ(consumed.get);
|
146
|
+
const sinkFiber = Δ(forkSink);
|
147
|
+
const scheduleFiber = Δ(timeout(Just(b)).forkScoped);
|
148
|
+
const toWrite = c.match(
|
149
|
+
() => Conc(Either.right(b)),
|
150
|
+
(c) => Conc(Either.right(b), Either.left(c)),
|
151
|
+
);
|
152
|
+
return consumed_
|
153
|
+
? Channel.write(toWrite) > scheduledAggregator(sinkFiber, scheduleFiber)
|
154
|
+
: scheduledAggregator(sinkFiber, scheduleFiber);
|
155
|
+
}),
|
156
|
+
),
|
157
|
+
UpstreamEnd: () =>
|
158
|
+
Channel.unwrap(consumed.get.map((p) => (p ? Channel.write(Conc(Either.right(b))) : Channel.unit))),
|
159
|
+
}),
|
160
|
+
),
|
161
|
+
);
|
162
|
+
}
|
124
163
|
|
125
|
-
return Channel.
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
164
|
+
return Channel.unwrap(
|
165
|
+
sinkFiber.join.raceWith(
|
166
|
+
scheduleFiber.join,
|
167
|
+
(sinkExit, scheduleFiber) =>
|
168
|
+
scheduleFiber.interrupt >
|
169
|
+
IO.fromExit(sinkExit).map(([leftovers, b]) => handleSide(leftovers, b, Nothing())),
|
170
|
+
(scheduleExit, sinkFiber) =>
|
171
|
+
IO.fromExit(scheduleExit).matchCauseIO(
|
172
|
+
(cause) =>
|
173
|
+
cause.failureOrCause.match(
|
174
|
+
() =>
|
175
|
+
handoff.offer(HandoffSignal.End(new ScheduleEnd())).forkDaemon >
|
176
|
+
sinkFiber.join.map(([leftovers, b]) => handleSide(leftovers, b, Nothing())),
|
177
|
+
(cause) =>
|
178
|
+
handoff.offer(HandoffSignal.Halt(cause)).forkDaemon >
|
179
|
+
sinkFiber.join.map(([leftovers, b]) => handleSide(leftovers, b, Nothing())),
|
140
180
|
),
|
141
|
-
)
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
).flatMap((_) =>
|
146
|
-
_.match(
|
147
|
-
() => Channel.unit,
|
148
|
-
() => scheduledAggregator(_),
|
181
|
+
(c) =>
|
182
|
+
handoff.offer(HandoffSignal.End(new ScheduleEnd())).forkDaemon >
|
183
|
+
sinkFiber.join.map(([leftovers, b]) => handleSide(leftovers, b, Just(c))),
|
184
|
+
),
|
149
185
|
),
|
150
186
|
);
|
151
187
|
};
|
152
188
|
|
153
|
-
return Stream.
|
154
|
-
|
189
|
+
return Stream.unwrapScoped(
|
190
|
+
Do((Δ) => {
|
191
|
+
Δ(stream.channel.pipeTo(handoffProducer).runScoped.forkScoped);
|
192
|
+
const sinkFiber = Δ(handoffConsumer.pipeToOrFail(sink.channel).doneCollect.runScoped.forkScoped);
|
193
|
+
const scheduleFiber = Δ(timeout(Nothing()).forkScoped);
|
194
|
+
return new Stream(scheduledAggregator(sinkFiber, scheduleFiber));
|
195
|
+
}),
|
155
196
|
);
|
156
197
|
});
|
157
198
|
}
|
@@ -669,23 +710,28 @@ export function collectWhileIO_<R, E, A, R1, E1, B>(
|
|
669
710
|
stream: Stream<R, E, A>,
|
670
711
|
pf: (a: A) => Maybe<IO<R1, E1, B>>,
|
671
712
|
): Stream<R & R1, E | E1, B> {
|
672
|
-
return stream.
|
673
|
-
|
674
|
-
pf(a).match(
|
675
|
-
() => IO.succeedNow(false),
|
676
|
-
(effect) => effect.flatMap(emit).as(true),
|
677
|
-
);
|
678
|
-
|
679
|
-
const loop = (chunk: Conc<A>): IO<R1, E1, boolean> => {
|
680
|
-
if (chunk.isEmpty) {
|
681
|
-
return IO.succeedNow(true);
|
682
|
-
} else {
|
683
|
-
return pfJust(chunk.unsafeHead).flatMap((cont) => (cont ? loop(chunk.unsafeTail) : IO.succeedNow(false)));
|
684
|
-
}
|
685
|
-
};
|
713
|
+
return new Stream(stream.channel.pipeTo(collectWhileIOLoop(Iterable.empty<A>()[Symbol.iterator](), pf)));
|
714
|
+
}
|
686
715
|
|
687
|
-
|
688
|
-
|
716
|
+
function collectWhileIOLoop<R, E, A, R1, E1, B>(
|
717
|
+
iterator: Iterator<A>,
|
718
|
+
pf: (a: A) => Maybe<IO<R1, E1, B>>,
|
719
|
+
): Channel<R & R1, E, Conc<A>, unknown, E | E1, Conc<B>, unknown> {
|
720
|
+
const next = iterator.next();
|
721
|
+
if (next.done) {
|
722
|
+
return Channel.readWithCause(
|
723
|
+
(elem) => collectWhileIOLoop(elem[Symbol.iterator](), pf),
|
724
|
+
Channel.failCauseNow,
|
725
|
+
Channel.succeedNow,
|
726
|
+
);
|
727
|
+
} else {
|
728
|
+
return Channel.unwrap(
|
729
|
+
pf(next.value).match(
|
730
|
+
() => IO.succeedNow(Channel.unit),
|
731
|
+
(b) => b.map((b) => Channel.writeNow(Conc.single(b)) > collectWhileIOLoop<R, E, A, R1, E1, B>(iterator, pf)),
|
732
|
+
),
|
733
|
+
);
|
734
|
+
}
|
689
735
|
}
|
690
736
|
|
691
737
|
function combineProducer<Err, Elem>(
|
@@ -857,11 +903,11 @@ export function contramapEnvironment_<R, E, A, R0>(
|
|
857
903
|
/**
|
858
904
|
* @tsplus fluent fncts.io.Stream debounce
|
859
905
|
*/
|
860
|
-
export function debounce_<R, E, A>(stream: Stream<R, E, A>, duration:
|
906
|
+
export function debounce_<R, E, A>(stream: Stream<R, E, A>, duration: Lazy<Duration>): Stream<R, E, A> {
|
861
907
|
return Stream.unwrap(
|
862
908
|
IO.transplant((grafter) =>
|
863
909
|
Do((Δ) => {
|
864
|
-
const handoff = Δ(Handoff<HandoffSignal<
|
910
|
+
const handoff = Δ(Handoff<HandoffSignal<E, A>>());
|
865
911
|
function enqueue(last: Conc<A>) {
|
866
912
|
return grafter(Clock.sleep(duration).as(last).fork).map((f) => consumer(DebounceState.Previous(f)));
|
867
913
|
}
|
@@ -1274,7 +1320,29 @@ export function filterIO_<R, E, A, R1, E1>(
|
|
1274
1320
|
fa: Stream<R, E, A>,
|
1275
1321
|
f: (a: A) => IO<R1, E1, boolean>,
|
1276
1322
|
): Stream<R & R1, E | E1, A> {
|
1277
|
-
return fa.
|
1323
|
+
return new Stream(fa.channel.pipeTo(filterIOLoop(Iterable.empty<A>()[Symbol.iterator](), f)));
|
1324
|
+
}
|
1325
|
+
|
1326
|
+
function filterIOLoop<R, E, A, R1, E1>(
|
1327
|
+
iterator: Iterator<A>,
|
1328
|
+
f: (a: A) => IO<R1, E1, boolean>,
|
1329
|
+
): Channel<R & R1, E, Conc<A>, unknown, E | E1, Conc<A>, unknown> {
|
1330
|
+
const next = iterator.next();
|
1331
|
+
if (next.done) {
|
1332
|
+
return Channel.readWithCause(
|
1333
|
+
(elem) => filterIOLoop(elem[Symbol.iterator](), f),
|
1334
|
+
Channel.failCauseNow,
|
1335
|
+
Channel.succeedNow,
|
1336
|
+
);
|
1337
|
+
} else {
|
1338
|
+
return Channel.unwrap(
|
1339
|
+
f(next.value).map((b) =>
|
1340
|
+
b
|
1341
|
+
? Channel.writeNow(Conc.single(next.value)) > filterIOLoop<R, E, A, R1, E1>(iterator, f)
|
1342
|
+
: filterIOLoop<R, E, A, R1, E1>(iterator, f),
|
1343
|
+
),
|
1344
|
+
);
|
1345
|
+
}
|
1278
1346
|
}
|
1279
1347
|
|
1280
1348
|
/**
|
@@ -1291,7 +1359,30 @@ export function filterMapIO_<R, E, A, R1, E1, B>(
|
|
1291
1359
|
fa: Stream<R, E, A>,
|
1292
1360
|
f: (a: A) => IO<R1, E1, Maybe<B>>,
|
1293
1361
|
): Stream<R & R1, E | E1, B> {
|
1294
|
-
return fa.
|
1362
|
+
return new Stream(fa.channel.pipeTo(filterMapIOLoop<R, E, A, R1, E1, B>(Iterable.empty<A>()[Symbol.iterator](), f)));
|
1363
|
+
}
|
1364
|
+
|
1365
|
+
function filterMapIOLoop<R, E, A, R1, E1, B>(
|
1366
|
+
iterator: Iterator<A>,
|
1367
|
+
f: (a: A) => IO<R1, E1, Maybe<B>>,
|
1368
|
+
): Channel<R & R1, E, Conc<A>, unknown, E | E1, Conc<B>, unknown> {
|
1369
|
+
const next = iterator.next();
|
1370
|
+
if (next.done) {
|
1371
|
+
return Channel.readWithCause(
|
1372
|
+
(elem) => filterMapIOLoop(elem[Symbol.iterator](), f),
|
1373
|
+
Channel.failCauseNow,
|
1374
|
+
Channel.succeedNow,
|
1375
|
+
);
|
1376
|
+
} else {
|
1377
|
+
return Channel.unwrap(
|
1378
|
+
f(next.value).map((b) =>
|
1379
|
+
b.match(
|
1380
|
+
() => filterMapIOLoop(iterator, f),
|
1381
|
+
(b) => Channel.writeNow(Conc.single(b)) > filterMapIOLoop<R, E, A, R1, E1, B>(iterator, f),
|
1382
|
+
),
|
1383
|
+
),
|
1384
|
+
);
|
1385
|
+
}
|
1295
1386
|
}
|
1296
1387
|
|
1297
1388
|
/**
|
@@ -1788,68 +1879,6 @@ export function interruptWhenFuture_<R, E, A, E1>(
|
|
1788
1879
|
return new Stream(fa.channel.interruptWhen(future));
|
1789
1880
|
}
|
1790
1881
|
|
1791
|
-
/**
|
1792
|
-
* Loops over the stream chunks concatenating the result of f
|
1793
|
-
*
|
1794
|
-
* @tsplus fluent fncts.io.Stream loopOnChunks
|
1795
|
-
*/
|
1796
|
-
export function loopOnChunks_<R, E, A, R1, E1, A1>(
|
1797
|
-
stream: Stream<R, E, A>,
|
1798
|
-
f: (a: Conc<A>) => Channel<R1, E | E1, Conc<A>, unknown, E | E1, Conc<A1>, boolean>,
|
1799
|
-
): Stream<R & R1, E | E1, A1> {
|
1800
|
-
const loop: Channel<R1, E | E1, Conc<A>, unknown, E | E1, Conc<A1>, boolean> = Channel.readWithCause(
|
1801
|
-
(chunk) => f(chunk).flatMap((cont) => (cont ? loop : Channel.endNow(false))),
|
1802
|
-
Channel.failCauseNow,
|
1803
|
-
(_) => Channel.succeedNow(false),
|
1804
|
-
);
|
1805
|
-
return new Stream(stream.channel.pipeTo(loop));
|
1806
|
-
}
|
1807
|
-
|
1808
|
-
/**
|
1809
|
-
* Loops on chunks emitting partially
|
1810
|
-
*
|
1811
|
-
* @tsplus fluent fncts.io.Stream loopOnPartialChunks
|
1812
|
-
*/
|
1813
|
-
export function loopOnPartialChunks_<R, E, A, R1, E1, A1>(
|
1814
|
-
stream: Stream<R, E, A>,
|
1815
|
-
f: (a: Conc<A>, emit: (a: A1) => UIO<void>) => IO<R1, E1, boolean>,
|
1816
|
-
): Stream<R & R1, E | E1, A1> {
|
1817
|
-
return stream.loopOnChunks((chunk) =>
|
1818
|
-
Channel.unwrap(
|
1819
|
-
IO.defer(() => {
|
1820
|
-
let outputChunk = Conc.empty<A1>();
|
1821
|
-
return f(chunk, (a) =>
|
1822
|
-
IO.succeed(() => {
|
1823
|
-
outputChunk = outputChunk.append(a);
|
1824
|
-
}),
|
1825
|
-
)
|
1826
|
-
.map((cont) => Channel.write(outputChunk).apSecond(Channel.endNow(cont)))
|
1827
|
-
.catchAll((failure) =>
|
1828
|
-
IO.succeed(() => {
|
1829
|
-
if (outputChunk.isEmpty) {
|
1830
|
-
return Channel.failNow(failure);
|
1831
|
-
} else {
|
1832
|
-
return Channel.writeNow(outputChunk).apSecond(Channel.failNow(failure));
|
1833
|
-
}
|
1834
|
-
}),
|
1835
|
-
);
|
1836
|
-
}),
|
1837
|
-
),
|
1838
|
-
);
|
1839
|
-
}
|
1840
|
-
|
1841
|
-
/**
|
1842
|
-
* Loops on chunks elements emitting partially
|
1843
|
-
*
|
1844
|
-
* @tsplus fluent fncts.io.Stream loopOnPartialChunksElements
|
1845
|
-
*/
|
1846
|
-
export function loopOnPartialChunksElements_<R, E, A, R1, E1, A1>(
|
1847
|
-
stream: Stream<R, E, A>,
|
1848
|
-
f: (a: A, emit: (a: A1) => UIO<void>) => IO<R1, E1, void>,
|
1849
|
-
): Stream<R & R1, E | E1, A1> {
|
1850
|
-
return stream.loopOnPartialChunks((as, emit) => as.mapIO((a) => f(a, emit)).as(true));
|
1851
|
-
}
|
1852
|
-
|
1853
1882
|
/**
|
1854
1883
|
* Transforms the elements of this stream using the supplied function.
|
1855
1884
|
*
|
@@ -1861,11 +1890,11 @@ export function map_<R, E, A, B>(stream: Stream<R, E, A>, f: (o: A) => B): Strea
|
|
1861
1890
|
|
1862
1891
|
function mapAccumAccumulator<S, E = never, A = never, B = never>(
|
1863
1892
|
currS: S,
|
1864
|
-
f: (s: S, a: A) => readonly [
|
1893
|
+
f: (s: S, a: A) => readonly [S, B],
|
1865
1894
|
): Channel<unknown, E, Conc<A>, unknown, E, Conc<B>, void> {
|
1866
1895
|
return Channel.readWith(
|
1867
1896
|
(inp: Conc<A>) => {
|
1868
|
-
const [
|
1897
|
+
const [nextS, bs] = inp.mapAccum(currS, f);
|
1869
1898
|
return Channel.writeNow(bs).apSecond(mapAccumAccumulator(nextS, f));
|
1870
1899
|
},
|
1871
1900
|
Channel.failNow,
|
@@ -1881,7 +1910,7 @@ function mapAccumAccumulator<S, E = never, A = never, B = never>(
|
|
1881
1910
|
export function mapAccum_<R, E, A, S, B>(
|
1882
1911
|
stream: Stream<R, E, A>,
|
1883
1912
|
s: S,
|
1884
|
-
f: (s: S, a: A) => readonly [
|
1913
|
+
f: (s: S, a: A) => readonly [S, B],
|
1885
1914
|
): Stream<R, E, B> {
|
1886
1915
|
return new Stream(stream.channel.pipeTo(mapAccumAccumulator(s, f)));
|
1887
1916
|
}
|
@@ -2023,7 +2052,25 @@ export function mapIO_<R, E, A, R1, E1, B>(
|
|
2023
2052
|
stream: Stream<R, E, A>,
|
2024
2053
|
f: (a: A) => IO<R1, E1, B>,
|
2025
2054
|
): Stream<R & R1, E | E1, B> {
|
2026
|
-
return stream.
|
2055
|
+
return new Stream(stream.channel.pipeTo(mapIOLoop(Iterable.empty<A>()[Symbol.iterator](), f)));
|
2056
|
+
}
|
2057
|
+
|
2058
|
+
function mapIOLoop<R, E, A, R1, E1, B>(
|
2059
|
+
iterator: Iterator<A>,
|
2060
|
+
f: (a: A) => IO<R1, E1, B>,
|
2061
|
+
): Channel<R & R1, E, Conc<A>, unknown, E | E1, Conc<B>, unknown> {
|
2062
|
+
const next = iterator.next();
|
2063
|
+
if (next.done) {
|
2064
|
+
return Channel.readWithCause(
|
2065
|
+
(elem) => mapIOLoop(elem[Symbol.iterator](), f),
|
2066
|
+
Channel.failCauseNow,
|
2067
|
+
Channel.succeedNow,
|
2068
|
+
);
|
2069
|
+
} else {
|
2070
|
+
return Channel.unwrap(
|
2071
|
+
f(next.value).map((b) => Channel.writeNow(Conc.single(b)) > mapIOLoop<R, E, A, R1, E1, B>(iterator, f)),
|
2072
|
+
);
|
2073
|
+
}
|
2027
2074
|
}
|
2028
2075
|
|
2029
2076
|
/**
|
@@ -2582,11 +2629,29 @@ export function takeUntilIO_<R, E, A, R1, E1>(
|
|
2582
2629
|
ma: Stream<R, E, A>,
|
2583
2630
|
f: (a: A) => IO<R1, E1, boolean>,
|
2584
2631
|
): Stream<R & R1, E | E1, A> {
|
2585
|
-
return ma.
|
2586
|
-
|
2587
|
-
|
2588
|
-
|
2589
|
-
|
2632
|
+
return new Stream(ma.channel.pipeTo(takeUntilIOLoop(Iterable.empty<A>()[Symbol.iterator](), f)));
|
2633
|
+
}
|
2634
|
+
|
2635
|
+
function takeUntilIOLoop<R, E, A, R1, E1>(
|
2636
|
+
iterator: Iterator<A>,
|
2637
|
+
f: (a: A) => IO<R1, E1, boolean>,
|
2638
|
+
): Channel<R & R1, E, Conc<A>, unknown, E | E1, Conc<A>, unknown> {
|
2639
|
+
const next = iterator.next();
|
2640
|
+
if (next.done) {
|
2641
|
+
return Channel.readWithCause(
|
2642
|
+
(elem) => takeUntilIOLoop(elem[Symbol.iterator](), f),
|
2643
|
+
Channel.failCauseNow,
|
2644
|
+
Channel.succeedNow,
|
2645
|
+
);
|
2646
|
+
} else {
|
2647
|
+
return Channel.unwrap(
|
2648
|
+
f(next.value).map((b) =>
|
2649
|
+
b
|
2650
|
+
? Channel.writeNow(Conc.single(next.value))
|
2651
|
+
: Channel.writeNow(Conc.single(next.value)) > takeUntilIOLoop<R, E, A, R1, E1>(iterator, f),
|
2652
|
+
),
|
2653
|
+
);
|
2654
|
+
}
|
2590
2655
|
}
|
2591
2656
|
|
2592
2657
|
function takeUntilLoop<R, E, A>(p: Predicate<A>): Channel<R, E, Conc<A>, unknown, E, Conc<A>, unknown> {
|
@@ -23,7 +23,7 @@ export const CurrentTag = Symbol();
|
|
23
23
|
export type CurrentTag = typeof CurrentTag;
|
24
24
|
export class Current<E, A> {
|
25
25
|
readonly _tag = DebounceStateTag.Current;
|
26
|
-
constructor(readonly fiber: Fiber<E, HandoffSignal<
|
26
|
+
constructor(readonly fiber: Fiber<E, HandoffSignal<E, A>>) {}
|
27
27
|
}
|
28
28
|
|
29
29
|
/**
|
@@ -53,7 +53,7 @@ export function previous<A>(fiber: Fiber<never, Conc<A>>): DebounceState<never,
|
|
53
53
|
/**
|
54
54
|
* @tsplus static fncts.io.Stream.DebounceStateOps Current
|
55
55
|
*/
|
56
|
-
export function current<E, A>(fiber: Fiber<E, HandoffSignal<
|
56
|
+
export function current<E, A>(fiber: Fiber<E, HandoffSignal<E, A>>): DebounceState<E, A> {
|
57
57
|
return new Current(fiber);
|
58
58
|
}
|
59
59
|
|
@@ -112,17 +112,17 @@ export class Halt<E> {
|
|
112
112
|
|
113
113
|
export const EndTypeId = Symbol("fncts.io.Stream.HandoffSignal.End");
|
114
114
|
export type EndTypeId = typeof EndTypeId;
|
115
|
-
export class End
|
115
|
+
export class End {
|
116
116
|
readonly _typeId: typeof HandoffSignalTypeId = HandoffSignalTypeId;
|
117
117
|
readonly _tag: typeof EndTypeId = EndTypeId;
|
118
118
|
|
119
|
-
constructor(readonly reason: SinkEndReason
|
119
|
+
constructor(readonly reason: SinkEndReason) {}
|
120
120
|
}
|
121
121
|
|
122
122
|
/**
|
123
123
|
* @tsplus type fncts.io.Stream.HandoffSignal
|
124
124
|
*/
|
125
|
-
export type HandoffSignal<
|
125
|
+
export type HandoffSignal<E, A> = Emit<A> | Halt<E> | End;
|
126
126
|
|
127
127
|
/**
|
128
128
|
* @tsplus type fncts.io.Stream.HandoffSignalOps
|
@@ -134,33 +134,33 @@ export const HandoffSignal: HandoffSignalOps = {};
|
|
134
134
|
/**
|
135
135
|
* @tsplus static fncts.io.Stream.HandoffSignalOps Emit
|
136
136
|
*/
|
137
|
-
export function emit<A>(els: Conc<A>): HandoffSignal<never,
|
137
|
+
export function emit<A>(els: Conc<A>): HandoffSignal<never, A> {
|
138
138
|
return new Emit(els);
|
139
139
|
}
|
140
140
|
|
141
141
|
/**
|
142
142
|
* @tsplus static fncts.io.Stream.HandoffSignalOps Halt
|
143
143
|
*/
|
144
|
-
export function halt<E>(error: Cause<E>): HandoffSignal<
|
144
|
+
export function halt<E>(error: Cause<E>): HandoffSignal<E, never> {
|
145
145
|
return new Halt(error);
|
146
146
|
}
|
147
147
|
|
148
148
|
/**
|
149
149
|
* @tsplus static fncts.io.Stream.HandoffSignalOps End
|
150
150
|
*/
|
151
|
-
export function end<C>(reason: SinkEndReason
|
151
|
+
export function end<C>(reason: SinkEndReason): HandoffSignal<never, never> {
|
152
152
|
return new End(reason);
|
153
153
|
}
|
154
154
|
|
155
155
|
/**
|
156
156
|
* @tsplus fluent fncts.io.Stream.HandoffSignal match
|
157
157
|
*/
|
158
|
-
export function matchSignal_<
|
159
|
-
signal: HandoffSignal<
|
158
|
+
export function matchSignal_<E, A, B, D, F>(
|
159
|
+
signal: HandoffSignal<E, A>,
|
160
160
|
cases: {
|
161
161
|
Emit: (_: Emit<A>) => B;
|
162
162
|
Halt: (_: Halt<E>) => D;
|
163
|
-
End: (_: End
|
163
|
+
End: (_: End) => F;
|
164
164
|
},
|
165
165
|
): B | D | F {
|
166
166
|
switch (signal._tag) {
|
@@ -7,21 +7,9 @@ export const enum SinkEndReasonTag {
|
|
7
7
|
|
8
8
|
export const SinkEndReasonTypeId = Symbol.for("fncts.io.Stream.SinkEndReason");
|
9
9
|
|
10
|
-
export class
|
11
|
-
readonly _typeId: typeof SinkEndReasonTypeId = SinkEndReasonTypeId;
|
12
|
-
readonly _tag = SinkEndReasonTag.SinkEnd;
|
13
|
-
}
|
14
|
-
|
15
|
-
export class ScheduleTimeout {
|
16
|
-
readonly _typeId: typeof SinkEndReasonTypeId = SinkEndReasonTypeId;
|
17
|
-
readonly _tag = SinkEndReasonTag.ScheduleTimeout;
|
18
|
-
}
|
19
|
-
|
20
|
-
export class ScheduleEnd<C> {
|
10
|
+
export class ScheduleEnd {
|
21
11
|
readonly _typeId: typeof SinkEndReasonTypeId = SinkEndReasonTypeId;
|
22
12
|
readonly _tag = SinkEndReasonTag.ScheduleEnd;
|
23
|
-
|
24
|
-
constructor(readonly c: C) {}
|
25
13
|
}
|
26
14
|
|
27
15
|
export class UpstreamEnd {
|
@@ -32,25 +20,19 @@ export class UpstreamEnd {
|
|
32
20
|
/**
|
33
21
|
* @tsplus type fncts.io.Stream.SinkEndReason
|
34
22
|
*/
|
35
|
-
export type SinkEndReason
|
23
|
+
export type SinkEndReason = ScheduleEnd | UpstreamEnd;
|
36
24
|
|
37
25
|
/**
|
38
26
|
* @tsplus fluent fncts.io.Stream.SinkEndReason match
|
39
27
|
*/
|
40
|
-
export function matchSinkEndReason_<A, B
|
41
|
-
self: SinkEndReason
|
28
|
+
export function matchSinkEndReason_<A, B>(
|
29
|
+
self: SinkEndReason,
|
42
30
|
cases: {
|
43
|
-
|
44
|
-
|
45
|
-
ScheduleEnd: (_: ScheduleEnd<A>) => D;
|
46
|
-
UpstreamEnd: (_: UpstreamEnd) => E;
|
31
|
+
ScheduleEnd: (_: ScheduleEnd) => A;
|
32
|
+
UpstreamEnd: (_: UpstreamEnd) => B;
|
47
33
|
},
|
48
|
-
):
|
34
|
+
): A | B {
|
49
35
|
switch (self._tag) {
|
50
|
-
case SinkEndReasonTag.SinkEnd:
|
51
|
-
return cases.SinkEnd(self);
|
52
|
-
case SinkEndReasonTag.ScheduleTimeout:
|
53
|
-
return cases.ScheduleTimeout(self);
|
54
36
|
case SinkEndReasonTag.ScheduleEnd:
|
55
37
|
return cases.ScheduleEnd(self);
|
56
38
|
case SinkEndReasonTag.UpstreamEnd:
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { UTRef } from "../TRef.js";
|
2
2
|
|
3
3
|
interface TFutureN extends HKT {
|
4
|
-
readonly
|
4
|
+
readonly [HKT.T]: TFuture<HKT._E<this>, HKT._A<this>>;
|
5
5
|
}
|
6
6
|
|
7
7
|
/**
|
@@ -20,4 +20,4 @@ export interface TFuture<E, A>
|
|
20
20
|
*/
|
21
21
|
export interface TFutureOps extends NewtypeIso<TFutureN> {}
|
22
22
|
|
23
|
-
export const TFuture: TFutureOps = Newtype<TFutureN>();
|
23
|
+
export const TFuture: TFutureOps = Newtype<TFutureN>();
|
package/package.json
CHANGED
package/runTests.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|