effect 3.7.3 → 3.8.0
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/Mailbox/package.json +6 -0
- package/dist/cjs/Deferred.js.map +1 -1
- package/dist/cjs/Duration.js +99 -35
- package/dist/cjs/Duration.js.map +1 -1
- package/dist/cjs/Effect.js +30 -3
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/Fiber.js.map +1 -1
- package/dist/cjs/FiberRef.js.map +1 -1
- package/dist/cjs/Logger.js +29 -1
- package/dist/cjs/Logger.js.map +1 -1
- package/dist/cjs/Mailbox.js +95 -0
- package/dist/cjs/Mailbox.js.map +1 -0
- package/dist/cjs/MutableHashMap.js +13 -1
- package/dist/cjs/MutableHashMap.js.map +1 -1
- package/dist/cjs/Number.js +20 -1
- package/dist/cjs/Number.js.map +1 -1
- package/dist/cjs/Queue.js.map +1 -1
- package/dist/cjs/RcMap.js +6 -1
- package/dist/cjs/RcMap.js.map +1 -1
- package/dist/cjs/RcRef.js.map +1 -1
- package/dist/cjs/Ref.js.map +1 -1
- package/dist/cjs/Stream.js +11 -2
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/SubscriptionRef.js.map +1 -1
- package/dist/cjs/SynchronizedRef.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/core.js +32 -25
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/defaultServices.js +8 -5
- package/dist/cjs/internal/defaultServices.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +81 -8
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/fiber.js +51 -26
- package/dist/cjs/internal/fiber.js.map +1 -1
- package/dist/cjs/internal/fiberRefs.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +126 -96
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/groupBy.js +6 -1
- package/dist/cjs/internal/groupBy.js.map +1 -1
- package/dist/cjs/internal/layer.js +3 -3
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/logger.js +4 -1
- package/dist/cjs/internal/logger.js.map +1 -1
- package/dist/cjs/internal/mailbox.js +408 -0
- package/dist/cjs/internal/mailbox.js.map +1 -0
- package/dist/cjs/internal/managedRuntime.js +1 -1
- package/dist/cjs/internal/managedRuntime.js.map +1 -1
- package/dist/cjs/internal/pubsub.js +6 -1
- package/dist/cjs/internal/pubsub.js.map +1 -1
- package/dist/cjs/internal/queue.js +6 -1
- package/dist/cjs/internal/queue.js.map +1 -1
- package/dist/cjs/internal/rcMap.js +7 -1
- package/dist/cjs/internal/rcMap.js.map +1 -1
- package/dist/cjs/internal/rcRef.js +10 -6
- package/dist/cjs/internal/rcRef.js.map +1 -1
- package/dist/cjs/internal/ref.js +7 -7
- package/dist/cjs/internal/ref.js.map +1 -1
- package/dist/cjs/internal/runtime.js +1 -1
- package/dist/cjs/internal/runtime.js.map +1 -1
- package/dist/cjs/internal/stream.js +7 -2
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/subscriptionRef.js +7 -8
- package/dist/cjs/internal/subscriptionRef.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Deferred.d.ts +21 -2
- package/dist/dts/Deferred.d.ts.map +1 -1
- package/dist/dts/Duration.d.ts +38 -1
- package/dist/dts/Duration.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +45 -0
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/Fiber.d.ts +69 -2
- package/dist/dts/Fiber.d.ts.map +1 -1
- package/dist/dts/FiberRef.d.ts +21 -2
- package/dist/dts/FiberRef.d.ts.map +1 -1
- package/dist/dts/Logger.d.ts +28 -0
- package/dist/dts/Logger.d.ts.map +1 -1
- package/dist/dts/Mailbox.d.ts +220 -0
- package/dist/dts/Mailbox.d.ts.map +1 -0
- package/dist/dts/MutableHashMap.d.ts +5 -0
- package/dist/dts/MutableHashMap.d.ts.map +1 -1
- package/dist/dts/Number.d.ts +19 -0
- package/dist/dts/Number.d.ts.map +1 -1
- package/dist/dts/Queue.d.ts +40 -1
- package/dist/dts/Queue.d.ts.map +1 -1
- package/dist/dts/RcMap.d.ts +5 -0
- package/dist/dts/RcMap.d.ts.map +1 -1
- package/dist/dts/RcRef.d.ts +22 -2
- package/dist/dts/RcRef.d.ts.map +1 -1
- package/dist/dts/Ref.d.ts +22 -2
- package/dist/dts/Ref.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +30 -0
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/SubscriptionRef.d.ts +20 -0
- package/dist/dts/SubscriptionRef.d.ts.map +1 -1
- package/dist/dts/SynchronizedRef.d.ts +20 -0
- package/dist/dts/SynchronizedRef.d.ts.map +1 -1
- package/dist/dts/index.d.ts +5 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/fiber.d.ts.map +1 -1
- package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
- package/dist/dts/internal/logger.d.ts.map +1 -1
- package/dist/dts/internal/mailbox.d.ts +2 -0
- package/dist/dts/internal/mailbox.d.ts.map +1 -0
- package/dist/dts/internal/stream.d.ts +22 -0
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/Deferred.js.map +1 -1
- package/dist/esm/Duration.js +92 -33
- package/dist/esm/Duration.js.map +1 -1
- package/dist/esm/Effect.js +27 -0
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/Fiber.js.map +1 -1
- package/dist/esm/FiberRef.js.map +1 -1
- package/dist/esm/Logger.js +28 -0
- package/dist/esm/Logger.js.map +1 -1
- package/dist/esm/Mailbox.js +85 -0
- package/dist/esm/Mailbox.js.map +1 -0
- package/dist/esm/MutableHashMap.js +11 -0
- package/dist/esm/MutableHashMap.js.map +1 -1
- package/dist/esm/Number.js +19 -0
- package/dist/esm/Number.js.map +1 -1
- package/dist/esm/Queue.js.map +1 -1
- package/dist/esm/RcMap.js +5 -0
- package/dist/esm/RcMap.js.map +1 -1
- package/dist/esm/RcRef.js.map +1 -1
- package/dist/esm/Ref.js.map +1 -1
- package/dist/esm/Stream.js +9 -0
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/SubscriptionRef.js.map +1 -1
- package/dist/esm/SynchronizedRef.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/core.js +33 -26
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/defaultServices.js +6 -4
- package/dist/esm/internal/defaultServices.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +77 -6
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/fiber.js +51 -26
- package/dist/esm/internal/fiber.js.map +1 -1
- package/dist/esm/internal/fiberRefs.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +124 -95
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/groupBy.js +6 -1
- package/dist/esm/internal/groupBy.js.map +1 -1
- package/dist/esm/internal/layer.js +3 -3
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/logger.js +3 -0
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/mailbox.js +395 -0
- package/dist/esm/internal/mailbox.js.map +1 -0
- package/dist/esm/internal/managedRuntime.js +1 -1
- package/dist/esm/internal/managedRuntime.js.map +1 -1
- package/dist/esm/internal/pubsub.js +6 -1
- package/dist/esm/internal/pubsub.js.map +1 -1
- package/dist/esm/internal/queue.js +6 -1
- package/dist/esm/internal/queue.js.map +1 -1
- package/dist/esm/internal/rcMap.js +5 -0
- package/dist/esm/internal/rcMap.js.map +1 -1
- package/dist/esm/internal/rcRef.js +10 -6
- package/dist/esm/internal/rcRef.js.map +1 -1
- package/dist/esm/internal/ref.js +7 -7
- package/dist/esm/internal/ref.js.map +1 -1
- package/dist/esm/internal/runtime.js +1 -1
- package/dist/esm/internal/runtime.js.map +1 -1
- package/dist/esm/internal/stream.js +5 -0
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/subscriptionRef.js +7 -8
- package/dist/esm/internal/subscriptionRef.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +9 -1
- package/src/Deferred.ts +21 -2
- package/src/Duration.ts +112 -35
- package/src/Effect.ts +52 -0
- package/src/Fiber.ts +78 -2
- package/src/FiberRef.ts +21 -2
- package/src/Logger.ts +30 -0
- package/src/Mailbox.ts +236 -0
- package/src/MutableHashMap.ts +12 -0
- package/src/Number.ts +23 -0
- package/src/Queue.ts +42 -1
- package/src/RcMap.ts +6 -0
- package/src/RcRef.ts +24 -2
- package/src/Ref.ts +22 -2
- package/src/Stream.ts +36 -0
- package/src/SubscriptionRef.ts +22 -0
- package/src/SynchronizedRef.ts +20 -0
- package/src/index.ts +6 -0
- package/src/internal/core.ts +31 -28
- package/src/internal/defaultServices.ts +9 -10
- package/src/internal/effect/circular.ts +83 -6
- package/src/internal/fiber.ts +56 -29
- package/src/internal/fiberRefs.ts +1 -2
- package/src/internal/fiberRuntime.ts +133 -102
- package/src/internal/groupBy.ts +7 -1
- package/src/internal/layer.ts +3 -3
- package/src/internal/logger.ts +4 -0
- package/src/internal/mailbox.ts +461 -0
- package/src/internal/managedRuntime.ts +1 -1
- package/src/internal/pubsub.ts +9 -2
- package/src/internal/queue.ts +7 -1
- package/src/internal/rcMap.ts +8 -0
- package/src/internal/rcRef.ts +10 -6
- package/src/internal/ref.ts +7 -7
- package/src/internal/runtime.ts +1 -1
- package/src/internal/stream.ts +53 -0
- package/src/internal/subscriptionRef.ts +7 -8
- package/src/internal/version.ts +1 -1
|
@@ -47,9 +47,14 @@ export const sleep = (duration: Duration.DurationInput): Effect.Effect<void> =>
|
|
|
47
47
|
return clockWith((clock) => clock.sleep(decodedDuration))
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/** @internal */
|
|
51
|
+
export const defaultServicesWith = <A, E, R>(
|
|
52
|
+
f: (services: Context.Context<DefaultServices.DefaultServices>) => Effect.Effect<A, E, R>
|
|
53
|
+
) => core.withFiberRuntime<A, E, R>((fiber) => f(fiber.currentDefaultServices))
|
|
54
|
+
|
|
50
55
|
/** @internal */
|
|
51
56
|
export const clockWith = <A, E, R>(f: (clock: Clock.Clock) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
52
|
-
|
|
57
|
+
defaultServicesWith((services) => f(services.unsafeMap.get(clock.clockTag.key)))
|
|
53
58
|
|
|
54
59
|
/** @internal */
|
|
55
60
|
export const currentTimeMillis: Effect.Effect<number> = clockWith((clock) => clock.currentTimeMillis)
|
|
@@ -83,10 +88,7 @@ export const withConfigProvider = dual<
|
|
|
83
88
|
export const configProviderWith = <A, E, R>(
|
|
84
89
|
f: (configProvider: ConfigProvider.ConfigProvider) => Effect.Effect<A, E, R>
|
|
85
90
|
): Effect.Effect<A, E, R> =>
|
|
86
|
-
|
|
87
|
-
currentServices,
|
|
88
|
-
(services) => f(Context.get(services, configProvider.configProviderTag))
|
|
89
|
-
)
|
|
91
|
+
defaultServicesWith((services) => f(services.unsafeMap.get(configProvider.configProviderTag.key)))
|
|
90
92
|
|
|
91
93
|
/** @internal */
|
|
92
94
|
export const config = <A>(config: Config.Config<A>) => configProviderWith((_) => _.load(config))
|
|
@@ -98,10 +100,7 @@ export const configOrDie = <A>(config: Config.Config<A>) => core.orDie(configPro
|
|
|
98
100
|
|
|
99
101
|
/** @internal */
|
|
100
102
|
export const randomWith = <A, E, R>(f: (random: Random.Random) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
101
|
-
|
|
102
|
-
currentServices,
|
|
103
|
-
(services) => f(Context.get(services, random.randomTag))
|
|
104
|
-
)
|
|
103
|
+
defaultServicesWith((services) => f(services.unsafeMap.get(random.randomTag.key)))
|
|
105
104
|
|
|
106
105
|
/** @internal */
|
|
107
106
|
export const withRandom = dual<
|
|
@@ -151,7 +150,7 @@ export const choice = <Self extends Iterable<unknown>>(
|
|
|
151
150
|
|
|
152
151
|
/** @internal */
|
|
153
152
|
export const tracerWith = <A, E, R>(f: (tracer: Tracer.Tracer) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
154
|
-
|
|
153
|
+
defaultServicesWith((services) => f(services.unsafeMap.get(tracer.tracerTag.key)))
|
|
155
154
|
|
|
156
155
|
/** @internal */
|
|
157
156
|
export const withTracer = dual<
|
|
@@ -2,6 +2,7 @@ import type * as Cause from "../../Cause.js"
|
|
|
2
2
|
import type * as Deferred from "../../Deferred.js"
|
|
3
3
|
import * as Duration from "../../Duration.js"
|
|
4
4
|
import type * as Effect from "../../Effect.js"
|
|
5
|
+
import * as Effectable from "../../Effectable.js"
|
|
5
6
|
import * as Equal from "../../Equal.js"
|
|
6
7
|
import type { Equivalence } from "../../Equivalence.js"
|
|
7
8
|
import * as Exit from "../../Exit.js"
|
|
@@ -92,6 +93,17 @@ class Semaphore {
|
|
|
92
93
|
(permits) => fiberRuntime.ensuring(restore(self), this.release(permits))
|
|
93
94
|
)
|
|
94
95
|
)
|
|
96
|
+
|
|
97
|
+
readonly withPermitsIfAvailable = (n: number) => <A, E, R>(self: Effect.Effect<A, E, R>) =>
|
|
98
|
+
core.uninterruptibleMask((restore) =>
|
|
99
|
+
core.suspend(() => {
|
|
100
|
+
if (this.free < n) {
|
|
101
|
+
return effect.succeedNone
|
|
102
|
+
}
|
|
103
|
+
this.taken += n
|
|
104
|
+
return fiberRuntime.ensuring(restore(effect.asSome(self)), this.release(n))
|
|
105
|
+
})
|
|
106
|
+
)
|
|
95
107
|
}
|
|
96
108
|
|
|
97
109
|
/** @internal */
|
|
@@ -100,6 +112,67 @@ export const unsafeMakeSemaphore = (permits: number): Semaphore => new Semaphore
|
|
|
100
112
|
/** @internal */
|
|
101
113
|
export const makeSemaphore = (permits: number) => core.sync(() => unsafeMakeSemaphore(permits))
|
|
102
114
|
|
|
115
|
+
class Latch implements Effect.Latch {
|
|
116
|
+
waiters: Array<(_: Effect.Effect<void>) => void> = []
|
|
117
|
+
scheduled = false
|
|
118
|
+
constructor(private isOpen: boolean) {}
|
|
119
|
+
|
|
120
|
+
private unsafeSchedule(fiber: Fiber.RuntimeFiber<void>) {
|
|
121
|
+
if (this.scheduled || this.waiters.length === 0) {
|
|
122
|
+
return core.void
|
|
123
|
+
}
|
|
124
|
+
this.scheduled = true
|
|
125
|
+
fiber.currentScheduler.scheduleTask(this.flushWaiters, fiber.getFiberRef(core.currentSchedulingPriority))
|
|
126
|
+
return core.void
|
|
127
|
+
}
|
|
128
|
+
private flushWaiters = () => {
|
|
129
|
+
this.scheduled = false
|
|
130
|
+
const waiters = this.waiters
|
|
131
|
+
this.waiters = []
|
|
132
|
+
for (let i = 0; i < waiters.length; i++) {
|
|
133
|
+
waiters[i](core.exitVoid)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
open = core.withFiberRuntime<void>((fiber) => {
|
|
138
|
+
if (this.isOpen) {
|
|
139
|
+
return core.void
|
|
140
|
+
}
|
|
141
|
+
this.isOpen = true
|
|
142
|
+
return this.unsafeSchedule(fiber)
|
|
143
|
+
})
|
|
144
|
+
release = core.withFiberRuntime<void>((fiber) => {
|
|
145
|
+
if (this.isOpen) {
|
|
146
|
+
return core.void
|
|
147
|
+
}
|
|
148
|
+
return this.unsafeSchedule(fiber)
|
|
149
|
+
})
|
|
150
|
+
await = core.unsafeAsync<void>((resume) => {
|
|
151
|
+
if (this.isOpen) {
|
|
152
|
+
return resume(core.void)
|
|
153
|
+
}
|
|
154
|
+
this.waiters.push(resume)
|
|
155
|
+
return core.sync(() => {
|
|
156
|
+
const index = this.waiters.indexOf(resume)
|
|
157
|
+
if (index !== -1) {
|
|
158
|
+
this.waiters.splice(index, 1)
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
close = core.sync(() => {
|
|
163
|
+
this.isOpen = false
|
|
164
|
+
})
|
|
165
|
+
whenOpen = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => {
|
|
166
|
+
return core.zipRight(this.await, self)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** @internal */
|
|
171
|
+
export const unsafeMakeLatch = (open?: boolean | undefined): Effect.Latch => new Latch(open ?? false)
|
|
172
|
+
|
|
173
|
+
/** @internal */
|
|
174
|
+
export const makeLatch = (open?: boolean | undefined) => core.sync(() => unsafeMakeLatch(open))
|
|
175
|
+
|
|
103
176
|
/** @internal */
|
|
104
177
|
export const awaitAllChildren = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
105
178
|
ensuringChildren(self, fiberRuntime.fiberAwaitAll)
|
|
@@ -571,18 +644,21 @@ export const synchronizedVariance = {
|
|
|
571
644
|
}
|
|
572
645
|
|
|
573
646
|
/** @internal */
|
|
574
|
-
class SynchronizedImpl<in out A> implements Synchronized.SynchronizedRef<A> {
|
|
647
|
+
class SynchronizedImpl<in out A> extends Effectable.Class<A> implements Synchronized.SynchronizedRef<A> {
|
|
575
648
|
readonly [SynchronizedTypeId] = synchronizedVariance
|
|
576
649
|
readonly [internalRef.RefTypeId] = internalRef.refVariance
|
|
577
|
-
readonly [Readable.TypeId]: Readable.TypeId
|
|
650
|
+
readonly [Readable.TypeId]: Readable.TypeId = Readable.TypeId
|
|
578
651
|
constructor(
|
|
579
652
|
readonly ref: Ref.Ref<A>,
|
|
580
653
|
readonly withLock: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
|
|
581
654
|
) {
|
|
582
|
-
|
|
655
|
+
super()
|
|
583
656
|
this.get = internalRef.get(this.ref)
|
|
584
657
|
}
|
|
585
658
|
readonly get: Effect.Effect<A>
|
|
659
|
+
commit() {
|
|
660
|
+
return this.get
|
|
661
|
+
}
|
|
586
662
|
modify<B>(f: (a: A) => readonly [B, A]): Effect.Effect<B> {
|
|
587
663
|
return this.modifyEffect((a) => core.succeed(f(a)))
|
|
588
664
|
}
|
|
@@ -594,9 +670,6 @@ class SynchronizedImpl<in out A> implements Synchronized.SynchronizedRef<A> {
|
|
|
594
670
|
)
|
|
595
671
|
)
|
|
596
672
|
}
|
|
597
|
-
pipe() {
|
|
598
|
-
return pipeArguments(this, arguments)
|
|
599
|
-
}
|
|
600
673
|
}
|
|
601
674
|
|
|
602
675
|
/** @internal */
|
|
@@ -664,6 +737,10 @@ export const zipWithFiber = dual<
|
|
|
664
737
|
f: (a: A, b: B) => C
|
|
665
738
|
) => Fiber.Fiber<C, E | E2>
|
|
666
739
|
>(3, (self, that, f) => ({
|
|
740
|
+
...Effectable.CommitPrototype,
|
|
741
|
+
commit() {
|
|
742
|
+
return internalFiber.join(this)
|
|
743
|
+
},
|
|
667
744
|
[internalFiber.FiberTypeId]: internalFiber.fiberVariance,
|
|
668
745
|
id: () => pipe(self.id(), FiberId.getOrElse(that.id())),
|
|
669
746
|
await: pipe(
|
package/src/internal/fiber.ts
CHANGED
|
@@ -14,6 +14,7 @@ import * as order from "../Order.js"
|
|
|
14
14
|
import { pipeArguments } from "../Pipeable.js"
|
|
15
15
|
import { hasProperty } from "../Predicate.js"
|
|
16
16
|
import * as core from "./core.js"
|
|
17
|
+
import * as effectable from "./effectable.js"
|
|
17
18
|
import * as fiberScope from "./fiberScope.js"
|
|
18
19
|
import * as runtimeFlags from "./runtimeFlags.js"
|
|
19
20
|
|
|
@@ -76,15 +77,23 @@ export const children = <A, E>(
|
|
|
76
77
|
): Effect.Effect<Array<Fiber.RuntimeFiber<any, any>>> => self.children
|
|
77
78
|
|
|
78
79
|
/** @internal */
|
|
79
|
-
export const done = <A, E>(exit: Exit.Exit<A, E>): Fiber.Fiber<A, E> =>
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
80
|
+
export const done = <A, E>(exit: Exit.Exit<A, E>): Fiber.Fiber<A, E> => {
|
|
81
|
+
const _fiber = {
|
|
82
|
+
...effectable.CommitPrototype,
|
|
83
|
+
commit() {
|
|
84
|
+
return join(this)
|
|
85
|
+
},
|
|
86
|
+
...fiberProto,
|
|
87
|
+
id: () => FiberId.none,
|
|
88
|
+
await: core.succeed(exit),
|
|
89
|
+
children: core.succeed([]),
|
|
90
|
+
inheritAll: core.void,
|
|
91
|
+
poll: core.succeed(Option.some(exit)),
|
|
92
|
+
interruptAsFork: () => core.void
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return _fiber
|
|
96
|
+
}
|
|
88
97
|
|
|
89
98
|
/** @internal */
|
|
90
99
|
export const dump = <A, E>(self: Fiber.RuntimeFiber<A, E>): Effect.Effect<Fiber.Fiber.Dump> =>
|
|
@@ -148,25 +157,32 @@ export const map = dual<
|
|
|
148
157
|
export const mapEffect = dual<
|
|
149
158
|
<A, A2, E2>(f: (a: A) => Effect.Effect<A2, E2>) => <E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<A2, E | E2>,
|
|
150
159
|
<A, E, A2, E2>(self: Fiber.Fiber<A, E>, f: (a: A) => Effect.Effect<A2, E2>) => Fiber.Fiber<A2, E | E2>
|
|
151
|
-
>(2, (self, f) =>
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
160
|
+
>(2, (self, f) => {
|
|
161
|
+
const _fiber = {
|
|
162
|
+
...effectable.CommitPrototype,
|
|
163
|
+
commit() {
|
|
164
|
+
return join(this)
|
|
165
|
+
},
|
|
166
|
+
...fiberProto,
|
|
167
|
+
id: () => self.id(),
|
|
168
|
+
await: core.flatMap(self.await, Exit.forEachEffect(f)),
|
|
169
|
+
children: self.children,
|
|
170
|
+
inheritAll: self.inheritAll,
|
|
171
|
+
poll: core.flatMap(self.poll, (result) => {
|
|
172
|
+
switch (result._tag) {
|
|
173
|
+
case "None":
|
|
174
|
+
return core.succeed(Option.none())
|
|
175
|
+
case "Some":
|
|
176
|
+
return pipe(
|
|
177
|
+
Exit.forEachEffect(result.value, f),
|
|
178
|
+
core.map(Option.some)
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
}),
|
|
182
|
+
interruptAsFork: (id: FiberId.FiberId) => self.interruptAsFork(id)
|
|
183
|
+
}
|
|
184
|
+
return _fiber
|
|
185
|
+
})
|
|
170
186
|
|
|
171
187
|
/** @internal */
|
|
172
188
|
export const mapFiber = dual<
|
|
@@ -212,7 +228,11 @@ export const match = dual<
|
|
|
212
228
|
})
|
|
213
229
|
|
|
214
230
|
/** @internal */
|
|
215
|
-
|
|
231
|
+
const _never = {
|
|
232
|
+
...effectable.CommitPrototype,
|
|
233
|
+
commit() {
|
|
234
|
+
return join(this)
|
|
235
|
+
},
|
|
216
236
|
...fiberProto,
|
|
217
237
|
id: () => FiberId.none,
|
|
218
238
|
await: core.never,
|
|
@@ -222,11 +242,18 @@ export const never: Fiber.Fiber<never> = {
|
|
|
222
242
|
interruptAsFork: () => core.never
|
|
223
243
|
}
|
|
224
244
|
|
|
245
|
+
/** @internal */
|
|
246
|
+
export const never: Fiber.Fiber<never> = _never
|
|
247
|
+
|
|
225
248
|
/** @internal */
|
|
226
249
|
export const orElse = dual<
|
|
227
250
|
<A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<A | A2, E | E2>,
|
|
228
251
|
<A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<A | A2, E | E2>
|
|
229
252
|
>(2, (self, that) => ({
|
|
253
|
+
...effectable.CommitPrototype,
|
|
254
|
+
commit() {
|
|
255
|
+
return join(this)
|
|
256
|
+
},
|
|
230
257
|
...fiberProto,
|
|
231
258
|
id: () => FiberId.getOrElse(self.id(), that.id()),
|
|
232
259
|
await: core.zipWith(
|