effect 3.12.0 → 3.12.2
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/dist/cjs/BigDecimal.js +3 -3
- package/dist/cjs/Effect.js +2957 -928
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/GlobalValue.js +8 -6
- package/dist/cjs/GlobalValue.js.map +1 -1
- package/dist/cjs/HashMap.js +2 -2
- package/dist/cjs/HashMap.js.map +1 -1
- package/dist/cjs/ManagedRuntime.js.map +1 -1
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Request.js +3 -3
- package/dist/cjs/Request.js.map +1 -1
- package/dist/cjs/RequestBlock.js +7 -7
- package/dist/cjs/RequestBlock.js.map +1 -1
- package/dist/cjs/Runtime.js.map +1 -1
- package/dist/cjs/Schema.js +5 -8
- package/dist/cjs/Schema.js.map +1 -1
- package/dist/cjs/Stream.js +5 -5
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/internal/channel.js +3 -3
- package/dist/cjs/internal/channel.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +3 -3
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core.js +19 -33
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/defaultServices.js +2 -2
- package/dist/cjs/internal/defaultServices.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +4 -4
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/fiberRefs/patch.js +5 -5
- package/dist/cjs/internal/fiberRefs/patch.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +40 -37
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/fiberScope.js.map +1 -1
- package/dist/cjs/internal/layer/circular.js +2 -2
- package/dist/cjs/internal/layer/circular.js.map +1 -1
- package/dist/cjs/internal/logSpan.js +10 -3
- package/dist/cjs/internal/logSpan.js.map +1 -1
- package/dist/cjs/internal/logger-circular.js +2 -2
- package/dist/cjs/internal/logger-circular.js.map +1 -1
- package/dist/cjs/internal/logger.js +44 -118
- package/dist/cjs/internal/logger.js.map +1 -1
- package/dist/cjs/internal/metric.js +3 -3
- package/dist/cjs/internal/metric.js.map +1 -1
- package/dist/cjs/internal/reloadable.js +7 -7
- package/dist/cjs/internal/reloadable.js.map +1 -1
- package/dist/cjs/internal/resource.js +2 -2
- package/dist/cjs/internal/resource.js.map +1 -1
- package/dist/cjs/internal/runtime.js +7 -7
- package/dist/cjs/internal/runtime.js.map +1 -1
- package/dist/cjs/internal/scopedCache.js +9 -9
- package/dist/cjs/internal/scopedCache.js.map +1 -1
- package/dist/cjs/internal/stream.js +28 -28
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/subscriptionRef.js +4 -4
- package/dist/cjs/internal/subscriptionRef.js.map +1 -1
- package/dist/cjs/internal/synchronizedRef.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/BigDecimal.d.ts +3 -3
- package/dist/dts/Effect.d.ts +6541 -2072
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/GlobalValue.d.ts.map +1 -1
- package/dist/dts/Layer.d.ts +3 -3
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/ManagedRuntime.d.ts +2 -2
- package/dist/dts/ManagedRuntime.d.ts.map +1 -1
- package/dist/dts/Predicate.d.ts +1 -1
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Runtime.d.ts +2 -2
- package/dist/dts/Runtime.d.ts.map +1 -1
- package/dist/dts/Schema.d.ts.map +1 -1
- package/dist/dts/Utils.d.ts +4 -4
- package/dist/dts/Utils.d.ts.map +1 -1
- package/dist/dts/internal/core-effect.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/fiberScope.d.ts.map +1 -1
- package/dist/dts/internal/logger.d.ts +1 -1
- package/dist/dts/internal/logger.d.ts.map +1 -1
- package/dist/esm/BigDecimal.js +3 -3
- package/dist/esm/Effect.js +2958 -929
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/GlobalValue.js +8 -6
- package/dist/esm/GlobalValue.js.map +1 -1
- package/dist/esm/HashMap.js +2 -2
- package/dist/esm/HashMap.js.map +1 -1
- package/dist/esm/ManagedRuntime.js.map +1 -1
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Request.js +3 -3
- package/dist/esm/Request.js.map +1 -1
- package/dist/esm/RequestBlock.js +7 -7
- package/dist/esm/RequestBlock.js.map +1 -1
- package/dist/esm/Runtime.js.map +1 -1
- package/dist/esm/Schema.js +5 -8
- package/dist/esm/Schema.js.map +1 -1
- package/dist/esm/Stream.js +5 -5
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/internal/channel.js +3 -3
- package/dist/esm/internal/channel.js.map +1 -1
- package/dist/esm/internal/core-effect.js +3 -3
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +16 -28
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/defaultServices.js +2 -2
- package/dist/esm/internal/defaultServices.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +4 -4
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/fiberRefs/patch.js +5 -5
- package/dist/esm/internal/fiberRefs/patch.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +40 -37
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/fiberScope.js.map +1 -1
- package/dist/esm/internal/layer/circular.js +2 -2
- package/dist/esm/internal/layer/circular.js.map +1 -1
- package/dist/esm/internal/logSpan.js +7 -1
- package/dist/esm/internal/logSpan.js.map +1 -1
- package/dist/esm/internal/logger-circular.js +2 -2
- package/dist/esm/internal/logger-circular.js.map +1 -1
- package/dist/esm/internal/logger.js +45 -119
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/metric.js +3 -3
- package/dist/esm/internal/metric.js.map +1 -1
- package/dist/esm/internal/reloadable.js +7 -7
- package/dist/esm/internal/reloadable.js.map +1 -1
- package/dist/esm/internal/resource.js +2 -2
- package/dist/esm/internal/resource.js.map +1 -1
- package/dist/esm/internal/runtime.js +7 -7
- package/dist/esm/internal/runtime.js.map +1 -1
- package/dist/esm/internal/scopedCache.js +9 -9
- package/dist/esm/internal/scopedCache.js.map +1 -1
- package/dist/esm/internal/stream.js +28 -28
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/subscriptionRef.js +4 -4
- package/dist/esm/internal/subscriptionRef.js.map +1 -1
- package/dist/esm/internal/synchronizedRef.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/BigDecimal.ts +3 -3
- package/src/Effect.ts +6587 -2108
- package/src/GlobalValue.ts +8 -6
- package/src/HashMap.ts +2 -2
- package/src/Layer.ts +3 -3
- package/src/ManagedRuntime.ts +3 -2
- package/src/Predicate.ts +2 -2
- package/src/Request.ts +3 -3
- package/src/RequestBlock.ts +7 -7
- package/src/Runtime.ts +2 -5
- package/src/Schema.ts +5 -8
- package/src/Stream.ts +5 -5
- package/src/Utils.ts +4 -4
- package/src/internal/channel.ts +3 -3
- package/src/internal/core-effect.ts +4 -6
- package/src/internal/core.ts +28 -54
- package/src/internal/defaultServices.ts +10 -10
- package/src/internal/effect/circular.ts +54 -49
- package/src/internal/fiberRefs/patch.ts +5 -5
- package/src/internal/fiberRuntime.ts +54 -48
- package/src/internal/fiberScope.ts +0 -1
- package/src/internal/layer/circular.ts +2 -2
- package/src/internal/logSpan.ts +8 -1
- package/src/internal/logger-circular.ts +2 -2
- package/src/internal/logger.ts +54 -145
- package/src/internal/metric.ts +3 -3
- package/src/internal/reloadable.ts +10 -10
- package/src/internal/resource.ts +2 -2
- package/src/internal/runtime.ts +8 -8
- package/src/internal/scopedCache.ts +23 -23
- package/src/internal/stream.ts +30 -30
- package/src/internal/subscriptionRef.ts +4 -4
- package/src/internal/synchronizedRef.ts +0 -1
- package/src/internal/version.ts +1 -1
|
@@ -32,7 +32,7 @@ import * as internalFiber from "../fiber.js"
|
|
|
32
32
|
import * as fiberRuntime from "../fiberRuntime.js"
|
|
33
33
|
import { globalScope } from "../fiberScope.js"
|
|
34
34
|
import * as internalRef from "../ref.js"
|
|
35
|
-
import * as
|
|
35
|
+
import * as schedule_ from "../schedule.js"
|
|
36
36
|
import * as supervisor from "../supervisor.js"
|
|
37
37
|
|
|
38
38
|
/** @internal */
|
|
@@ -480,7 +480,7 @@ export const scheduleForked = dual<
|
|
|
480
480
|
self: Effect.Effect<A, E, R>,
|
|
481
481
|
schedule: Schedule.Schedule<Out, unknown, R2>
|
|
482
482
|
) => Effect.Effect<Fiber.RuntimeFiber<Out, E>, never, R | R2 | Scope.Scope>
|
|
483
|
-
>(2, (self, schedule) => pipe(self,
|
|
483
|
+
>(2, (self, schedule) => pipe(self, schedule_.schedule_Effect(schedule), forkScoped))
|
|
484
484
|
|
|
485
485
|
/** @internal */
|
|
486
486
|
export const supervised = dual<
|
|
@@ -583,58 +583,63 @@ export const timeoutTo = dual<
|
|
|
583
583
|
readonly duration: Duration.DurationInput
|
|
584
584
|
}
|
|
585
585
|
) => Effect.Effect<B | B1, E, R>
|
|
586
|
-
>(
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
core.
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
core.
|
|
594
|
-
|
|
595
|
-
(
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
()
|
|
600
|
-
core.
|
|
586
|
+
>(
|
|
587
|
+
2,
|
|
588
|
+
(self, { duration, onSuccess, onTimeout }) =>
|
|
589
|
+
core.fiberIdWith((parentFiberId) =>
|
|
590
|
+
core.uninterruptibleMask((restore) =>
|
|
591
|
+
fiberRuntime.raceFibersWith(
|
|
592
|
+
restore(self),
|
|
593
|
+
core.interruptible(effect.sleep(duration)),
|
|
594
|
+
{
|
|
595
|
+
onSelfWin: (winner, loser) =>
|
|
596
|
+
core.flatMap(
|
|
597
|
+
winner.await,
|
|
598
|
+
(exit) => {
|
|
599
|
+
if (exit._tag === "Success") {
|
|
600
|
+
return core.flatMap(
|
|
601
|
+
winner.inheritAll,
|
|
602
|
+
() =>
|
|
603
|
+
core.as(
|
|
604
|
+
core.interruptAsFiber(loser, parentFiberId),
|
|
605
|
+
onSuccess(exit.value)
|
|
606
|
+
)
|
|
607
|
+
)
|
|
608
|
+
} else {
|
|
609
|
+
return core.flatMap(
|
|
601
610
|
core.interruptAsFiber(loser, parentFiberId),
|
|
602
|
-
|
|
611
|
+
() => core.exitFailCause(exit.cause)
|
|
603
612
|
)
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
core.
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
),
|
|
616
|
+
onOtherWin: (winner, loser) =>
|
|
617
|
+
core.flatMap(
|
|
618
|
+
winner.await,
|
|
619
|
+
(exit) => {
|
|
620
|
+
if (exit._tag === "Success") {
|
|
621
|
+
return core.flatMap(
|
|
622
|
+
winner.inheritAll,
|
|
623
|
+
() =>
|
|
624
|
+
core.as(
|
|
625
|
+
core.interruptAsFiber(loser, parentFiberId),
|
|
626
|
+
onTimeout()
|
|
627
|
+
)
|
|
628
|
+
)
|
|
629
|
+
} else {
|
|
630
|
+
return core.flatMap(
|
|
622
631
|
core.interruptAsFiber(loser, parentFiberId),
|
|
623
|
-
|
|
632
|
+
() => core.exitFailCause(exit.cause)
|
|
624
633
|
)
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
}
|
|
633
|
-
),
|
|
634
|
-
otherScope: globalScope
|
|
635
|
-
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
),
|
|
637
|
+
otherScope: globalScope
|
|
638
|
+
}
|
|
639
|
+
)
|
|
640
|
+
)
|
|
636
641
|
)
|
|
637
|
-
|
|
642
|
+
)
|
|
638
643
|
|
|
639
644
|
// circular with Synchronized
|
|
640
645
|
|
|
@@ -4,7 +4,7 @@ import type * as FiberId from "../../FiberId.js"
|
|
|
4
4
|
import type * as FiberRefs from "../../FiberRefs.js"
|
|
5
5
|
import type * as FiberRefsPatch from "../../FiberRefsPatch.js"
|
|
6
6
|
import { dual } from "../../Function.js"
|
|
7
|
-
import * as
|
|
7
|
+
import * as fiberRefs_ from "../fiberRefs.js"
|
|
8
8
|
|
|
9
9
|
/** @internal */
|
|
10
10
|
export const OP_EMPTY = "Empty" as const
|
|
@@ -111,7 +111,7 @@ export const patch = dual<
|
|
|
111
111
|
break
|
|
112
112
|
}
|
|
113
113
|
case OP_ADD: {
|
|
114
|
-
fiberRefs =
|
|
114
|
+
fiberRefs = fiberRefs_.updateAs(fiberRefs, {
|
|
115
115
|
fiberId,
|
|
116
116
|
fiberRef: head.fiberRef,
|
|
117
117
|
value: head.value
|
|
@@ -120,13 +120,13 @@ export const patch = dual<
|
|
|
120
120
|
break
|
|
121
121
|
}
|
|
122
122
|
case OP_REMOVE: {
|
|
123
|
-
fiberRefs =
|
|
123
|
+
fiberRefs = fiberRefs_.delete_(fiberRefs, head.fiberRef)
|
|
124
124
|
patches = tail
|
|
125
125
|
break
|
|
126
126
|
}
|
|
127
127
|
case OP_UPDATE: {
|
|
128
|
-
const value =
|
|
129
|
-
fiberRefs =
|
|
128
|
+
const value = fiberRefs_.getOrDefault(fiberRefs, head.fiberRef)
|
|
129
|
+
fiberRefs = fiberRefs_.updateAs(fiberRefs, {
|
|
130
130
|
fiberId,
|
|
131
131
|
fiberRef: head.fiberRef,
|
|
132
132
|
value: head.fiberRef.patch(head.patch)(value)
|
|
@@ -45,7 +45,7 @@ import type * as Supervisor from "../Supervisor.js"
|
|
|
45
45
|
import type * as Tracer from "../Tracer.js"
|
|
46
46
|
import type { Concurrency, NoInfer } from "../Types.js"
|
|
47
47
|
import { internalCall, yieldWrapGet } from "../Utils.js"
|
|
48
|
-
import * as
|
|
48
|
+
import * as RequestBlock_ from "./blockedRequests.js"
|
|
49
49
|
import * as internalCause from "./cause.js"
|
|
50
50
|
import * as clock from "./clock.js"
|
|
51
51
|
import { currentRequestMap } from "./completedRequestMap.js"
|
|
@@ -67,7 +67,7 @@ import * as metricLabel from "./metric/label.js"
|
|
|
67
67
|
import * as OpCodes from "./opCodes/effect.js"
|
|
68
68
|
import { randomTag } from "./random.js"
|
|
69
69
|
import { complete } from "./request.js"
|
|
70
|
-
import * as
|
|
70
|
+
import * as runtimeFlags_ from "./runtimeFlags.js"
|
|
71
71
|
import { OpSupervision } from "./runtimeFlags.js"
|
|
72
72
|
import * as supervisor from "./supervisor.js"
|
|
73
73
|
import * as SupervisorPatch from "./supervisor/patch.js"
|
|
@@ -171,7 +171,7 @@ const contOpSuccess = {
|
|
|
171
171
|
value: unknown
|
|
172
172
|
) => {
|
|
173
173
|
self.patchRuntimeFlags(self.currentRuntimeFlags, cont.patch)
|
|
174
|
-
if (
|
|
174
|
+
if (runtimeFlags_.interruptible(self.currentRuntimeFlags) && self.isInterrupted()) {
|
|
175
175
|
return core.exitFailCause(self.getInterruptedCause())
|
|
176
176
|
} else {
|
|
177
177
|
return core.exitSucceed(value)
|
|
@@ -210,7 +210,7 @@ const drainQueueWhileRunningTable = {
|
|
|
210
210
|
message: FiberMessage.FiberMessage & { _tag: FiberMessage.OP_INTERRUPT_SIGNAL }
|
|
211
211
|
) => {
|
|
212
212
|
self.processNewInterruptSignal(message.cause)
|
|
213
|
-
return
|
|
213
|
+
return runtimeFlags_.interruptible(runtimeFlags) ? core.exitFailCause(message.cause) : cur
|
|
214
214
|
},
|
|
215
215
|
[FiberMessage.OP_RESUME]: (
|
|
216
216
|
_self: FiberRuntime<any, any>,
|
|
@@ -244,10 +244,10 @@ const drainQueueWhileRunningTable = {
|
|
|
244
244
|
*/
|
|
245
245
|
const runBlockedRequests = (self: RequestBlock.RequestBlock) =>
|
|
246
246
|
core.forEachSequentialDiscard(
|
|
247
|
-
|
|
247
|
+
RequestBlock_.flatten(self),
|
|
248
248
|
(requestsByRequestResolver) =>
|
|
249
249
|
forEachConcurrentDiscard(
|
|
250
|
-
|
|
250
|
+
RequestBlock_.sequentialCollectionToChunk(requestsByRequestResolver),
|
|
251
251
|
([dataSource, sequential]) => {
|
|
252
252
|
const map = new Map<Request<any, any>, Entry<any>>()
|
|
253
253
|
const arr: Array<Array<Entry<any>>> = []
|
|
@@ -278,6 +278,8 @@ export interface Snapshot {
|
|
|
278
278
|
flags: RuntimeFlags.RuntimeFlags
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
+
const _version = version.getCurrentVersion()
|
|
282
|
+
|
|
281
283
|
/** @internal */
|
|
282
284
|
export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A, E>
|
|
283
285
|
implements Fiber.RuntimeFiber<A, E>
|
|
@@ -315,7 +317,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
315
317
|
this.currentRuntimeFlags = runtimeFlags0
|
|
316
318
|
this._fiberId = fiberId
|
|
317
319
|
this._fiberRefs = fiberRefs0
|
|
318
|
-
if (
|
|
320
|
+
if (runtimeFlags_.runtimeMetrics(runtimeFlags0)) {
|
|
319
321
|
const tags = this.getFiberRef(core.currentMetricLabels)
|
|
320
322
|
fiberStarted.unsafeUpdate(1, tags)
|
|
321
323
|
fiberActive.unsafeUpdate(1, tags)
|
|
@@ -472,10 +474,10 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
472
474
|
const updatedRuntimeFlags = parentFiber.getFiberRef(currentRuntimeFlags)
|
|
473
475
|
|
|
474
476
|
const patch = pipe(
|
|
475
|
-
|
|
477
|
+
runtimeFlags_.diff(parentRuntimeFlags, updatedRuntimeFlags),
|
|
476
478
|
// Do not inherit WindDown or Interruption!
|
|
477
|
-
RuntimeFlagsPatch.exclude(
|
|
478
|
-
RuntimeFlagsPatch.exclude(
|
|
479
|
+
RuntimeFlagsPatch.exclude(runtimeFlags_.Interruption),
|
|
480
|
+
RuntimeFlagsPatch.exclude(runtimeFlags_.WindDown)
|
|
479
481
|
)
|
|
480
482
|
|
|
481
483
|
return core.updateRuntimeFlags(patch)
|
|
@@ -802,7 +804,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
802
804
|
}
|
|
803
805
|
|
|
804
806
|
reportExitValue(exit: Exit.Exit<A, E>) {
|
|
805
|
-
if (
|
|
807
|
+
if (runtimeFlags_.runtimeMetrics(this.currentRuntimeFlags)) {
|
|
806
808
|
const tags = this.getFiberRef(core.currentMetricLabels)
|
|
807
809
|
const startTimeMillis = this.id().startTimeMillis
|
|
808
810
|
const endTimeMillis = Date.now()
|
|
@@ -926,7 +928,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
926
928
|
this.currentSupervisor.onResume(this)
|
|
927
929
|
try {
|
|
928
930
|
let effect: Effect.Effect<any, any, any> | null =
|
|
929
|
-
|
|
931
|
+
runtimeFlags_.interruptible(this.currentRuntimeFlags) && this.isInterrupted() ?
|
|
930
932
|
core.exitFailCause(this.getInterruptedCause()) :
|
|
931
933
|
effect0
|
|
932
934
|
while (effect !== null) {
|
|
@@ -936,7 +938,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
936
938
|
const op = yieldedOpChannel.currentOp!
|
|
937
939
|
yieldedOpChannel.currentOp = null
|
|
938
940
|
if (op._op === OpCodes.OP_YIELD) {
|
|
939
|
-
if (
|
|
941
|
+
if (runtimeFlags_.cooperativeYielding(this.currentRuntimeFlags)) {
|
|
940
942
|
this.tell(FiberMessage.yieldNow())
|
|
941
943
|
this.tell(FiberMessage.resume(core.exitVoid))
|
|
942
944
|
effect = null
|
|
@@ -948,7 +950,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
948
950
|
effect = null
|
|
949
951
|
}
|
|
950
952
|
} else {
|
|
951
|
-
this.currentRuntimeFlags = pipe(this.currentRuntimeFlags,
|
|
953
|
+
this.currentRuntimeFlags = pipe(this.currentRuntimeFlags, runtimeFlags_.enable(runtimeFlags_.WindDown))
|
|
952
954
|
const interruption = this.interruptAllChildren()
|
|
953
955
|
if (interruption !== null) {
|
|
954
956
|
effect = core.flatMap(interruption, () => exit)
|
|
@@ -1020,7 +1022,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1020
1022
|
* **NOTE**: This method must be invoked by the fiber itself.
|
|
1021
1023
|
*/
|
|
1022
1024
|
patchRuntimeFlags(oldRuntimeFlags: RuntimeFlags.RuntimeFlags, patch: RuntimeFlagsPatch.RuntimeFlagsPatch) {
|
|
1023
|
-
const newRuntimeFlags =
|
|
1025
|
+
const newRuntimeFlags = runtimeFlags_.patch(oldRuntimeFlags, patch)
|
|
1024
1026
|
;(globalThis as any)[internalFiber.currentFiberURI] = this
|
|
1025
1027
|
this.currentRuntimeFlags = newRuntimeFlags
|
|
1026
1028
|
return newRuntimeFlags
|
|
@@ -1044,7 +1046,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1044
1046
|
this.tell(FiberMessage.resume(effect))
|
|
1045
1047
|
}
|
|
1046
1048
|
}
|
|
1047
|
-
if (
|
|
1049
|
+
if (runtimeFlags_.interruptible(runtimeFlags)) {
|
|
1048
1050
|
this._asyncInterruptor = callback
|
|
1049
1051
|
}
|
|
1050
1052
|
try {
|
|
@@ -1180,14 +1182,14 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1180
1182
|
switch (cont._op) {
|
|
1181
1183
|
case OpCodes.OP_ON_FAILURE:
|
|
1182
1184
|
case OpCodes.OP_ON_SUCCESS_AND_FAILURE: {
|
|
1183
|
-
if (!(
|
|
1185
|
+
if (!(runtimeFlags_.interruptible(this.currentRuntimeFlags) && this.isInterrupted())) {
|
|
1184
1186
|
return internalCall(() => cont.effect_instruction_i1(cause))
|
|
1185
1187
|
} else {
|
|
1186
1188
|
return core.exitFailCause(internalCause.stripFailures(cause))
|
|
1187
1189
|
}
|
|
1188
1190
|
}
|
|
1189
1191
|
case "OnStep": {
|
|
1190
|
-
if (!(
|
|
1192
|
+
if (!(runtimeFlags_.interruptible(this.currentRuntimeFlags) && this.isInterrupted())) {
|
|
1191
1193
|
return core.exitSucceed(core.exitFailCause(cause))
|
|
1192
1194
|
} else {
|
|
1193
1195
|
return core.exitFailCause(internalCause.stripFailures(cause))
|
|
@@ -1195,7 +1197,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1195
1197
|
}
|
|
1196
1198
|
case OpCodes.OP_REVERT_FLAGS: {
|
|
1197
1199
|
this.patchRuntimeFlags(this.currentRuntimeFlags, cont.patch)
|
|
1198
|
-
if (
|
|
1200
|
+
if (runtimeFlags_.interruptible(this.currentRuntimeFlags) && this.isInterrupted()) {
|
|
1199
1201
|
return core.exitFailCause(internalCause.sequential(cause, this.getInterruptedCause()))
|
|
1200
1202
|
} else {
|
|
1201
1203
|
return core.exitFailCause(cause)
|
|
@@ -1234,7 +1236,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1234
1236
|
this.setFiberRefs(snap.refs)
|
|
1235
1237
|
this.currentRuntimeFlags = snap.flags
|
|
1236
1238
|
const patchRefs = FiberRefsPatch.diff(snap.refs, refs)
|
|
1237
|
-
const patchFlags =
|
|
1239
|
+
const patchFlags = runtimeFlags_.diff(snap.flags, flags)
|
|
1238
1240
|
return core.exitSucceed(core.blocked(
|
|
1239
1241
|
op.effect_instruction_i0,
|
|
1240
1242
|
core.withFiberRuntime<unknown, unknown>((newFiber) => {
|
|
@@ -1244,7 +1246,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1244
1246
|
newFiber.setFiberRefs(
|
|
1245
1247
|
FiberRefsPatch.patch(newFiber.id(), newFiber.getFiberRefs())(patchRefs)
|
|
1246
1248
|
)
|
|
1247
|
-
newFiber.currentRuntimeFlags =
|
|
1249
|
+
newFiber.currentRuntimeFlags = runtimeFlags_.patch(patchFlags)(newFiber.currentRuntimeFlags)
|
|
1248
1250
|
return op.effect_instruction_i1
|
|
1249
1251
|
})
|
|
1250
1252
|
))
|
|
@@ -1264,19 +1266,19 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1264
1266
|
[OpCodes.OP_UPDATE_RUNTIME_FLAGS](op: core.Primitive & { _op: OpCodes.OP_UPDATE_RUNTIME_FLAGS }) {
|
|
1265
1267
|
const updateFlags = op.effect_instruction_i0
|
|
1266
1268
|
const oldRuntimeFlags = this.currentRuntimeFlags
|
|
1267
|
-
const newRuntimeFlags =
|
|
1269
|
+
const newRuntimeFlags = runtimeFlags_.patch(oldRuntimeFlags, updateFlags)
|
|
1268
1270
|
// One more chance to short circuit: if we're immediately going
|
|
1269
1271
|
// to interrupt. Interruption will cause immediate reversion of
|
|
1270
1272
|
// the flag, so as long as we "peek ahead", there's no need to
|
|
1271
1273
|
// set them to begin with.
|
|
1272
|
-
if (
|
|
1274
|
+
if (runtimeFlags_.interruptible(newRuntimeFlags) && this.isInterrupted()) {
|
|
1273
1275
|
return core.exitFailCause(this.getInterruptedCause())
|
|
1274
1276
|
} else {
|
|
1275
1277
|
// Impossible to short circuit, so record the changes
|
|
1276
1278
|
this.patchRuntimeFlags(this.currentRuntimeFlags, updateFlags)
|
|
1277
1279
|
if (op.effect_instruction_i1) {
|
|
1278
1280
|
// Since we updated the flags, we need to revert them
|
|
1279
|
-
const revertFlags =
|
|
1281
|
+
const revertFlags = runtimeFlags_.diff(newRuntimeFlags, oldRuntimeFlags)
|
|
1280
1282
|
this.pushStack(new core.RevertFlags(revertFlags, op))
|
|
1281
1283
|
return internalCall(() => op.effect_instruction_i1!(oldRuntimeFlags))
|
|
1282
1284
|
} else {
|
|
@@ -1367,7 +1369,7 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1367
1369
|
// @ts-expect-error
|
|
1368
1370
|
cur = this.currentTracer.context(
|
|
1369
1371
|
() => {
|
|
1370
|
-
if (
|
|
1372
|
+
if (_version !== (cur as core.Primitive)[core.EffectTypeId]._V) {
|
|
1371
1373
|
return core.dieMessage(
|
|
1372
1374
|
`Cannot execute an Effect versioned ${
|
|
1373
1375
|
(cur as core.Primitive)[core.EffectTypeId]._V
|
|
@@ -1400,8 +1402,6 @@ export class FiberRuntime<in out A, in out E = never> extends Effectable.Class<A
|
|
|
1400
1402
|
} catch (e) {
|
|
1401
1403
|
if (cur !== YieldedOp && !Predicate.hasProperty(cur, "_op") || !((cur as core.Primitive)._op in this)) {
|
|
1402
1404
|
cur = core.dieMessage(`Not a valid effect: ${Inspectable.toStringUnknown(cur)}`)
|
|
1403
|
-
} else if (core.isEffectError(e)) {
|
|
1404
|
-
cur = core.exitFailCause(e.cause)
|
|
1405
1405
|
} else if (core.isInterruptedException(e)) {
|
|
1406
1406
|
cur = core.exitFailCause(
|
|
1407
1407
|
internalCause.sequential(internalCause.die(e), internalCause.interrupt(FiberId.none))
|
|
@@ -1676,7 +1676,7 @@ export const addFinalizer = <X, R>(
|
|
|
1676
1676
|
const preRefs = runtimeFinalizer.getFiberRefs()
|
|
1677
1677
|
const preFlags = runtimeFinalizer.currentRuntimeFlags
|
|
1678
1678
|
const patchRefs = FiberRefsPatch.diff(preRefs, acquireRefs)
|
|
1679
|
-
const patchFlags =
|
|
1679
|
+
const patchFlags = runtimeFlags_.diff(preFlags, acquireFlags)
|
|
1680
1680
|
const inverseRefs = FiberRefsPatch.diff(acquireRefs, preRefs)
|
|
1681
1681
|
runtimeFinalizer.setFiberRefs(
|
|
1682
1682
|
FiberRefsPatch.patch(patchRefs, runtimeFinalizer.id(), acquireRefs)
|
|
@@ -1847,7 +1847,8 @@ const allValidate = (
|
|
|
1847
1847
|
return core.flatMap(
|
|
1848
1848
|
forEach(eitherEffects, identity, {
|
|
1849
1849
|
concurrency: options?.concurrency,
|
|
1850
|
-
batching: options?.batching
|
|
1850
|
+
batching: options?.batching,
|
|
1851
|
+
concurrentFinalizers: options?.concurrentFinalizers
|
|
1851
1852
|
}),
|
|
1852
1853
|
(eithers) => {
|
|
1853
1854
|
const none = Option.none()
|
|
@@ -1899,14 +1900,16 @@ const allEither = (
|
|
|
1899
1900
|
return forEach(eitherEffects, identity, {
|
|
1900
1901
|
concurrency: options?.concurrency,
|
|
1901
1902
|
batching: options?.batching,
|
|
1902
|
-
discard: true
|
|
1903
|
+
discard: true,
|
|
1904
|
+
concurrentFinalizers: options?.concurrentFinalizers
|
|
1903
1905
|
})
|
|
1904
1906
|
}
|
|
1905
1907
|
|
|
1906
1908
|
return core.map(
|
|
1907
1909
|
forEach(eitherEffects, identity, {
|
|
1908
1910
|
concurrency: options?.concurrency,
|
|
1909
|
-
batching: options?.batching
|
|
1911
|
+
batching: options?.batching,
|
|
1912
|
+
concurrentFinalizers: options?.concurrentFinalizers
|
|
1910
1913
|
}),
|
|
1911
1914
|
(eithers) =>
|
|
1912
1915
|
reconcile._tag === "Some" ?
|
|
@@ -2271,7 +2274,7 @@ export const forEachConcurrentDiscard = <A, X, E, R>(
|
|
|
2271
2274
|
() => core.exitVoid
|
|
2272
2275
|
)))
|
|
2273
2276
|
} else if (residual.length + results.length === target) {
|
|
2274
|
-
const requests = residual.map((blocked) => blocked.effect_instruction_i0).reduce(
|
|
2277
|
+
const requests = residual.map((blocked) => blocked.effect_instruction_i0).reduce(RequestBlock_.par)
|
|
2275
2278
|
resume(core.succeed(core.blocked(
|
|
2276
2279
|
requests,
|
|
2277
2280
|
forEachConcurrentDiscard(
|
|
@@ -2535,7 +2538,7 @@ export const validateAll = dual<
|
|
|
2535
2538
|
readonly discard?: false | undefined
|
|
2536
2539
|
readonly concurrentFinalizers?: boolean | undefined
|
|
2537
2540
|
}
|
|
2538
|
-
): (elements: Iterable<A>) => Effect.Effect<Array<B>,
|
|
2541
|
+
): (elements: Iterable<A>) => Effect.Effect<Array<B>, RA.NonEmptyArray<E>, R>
|
|
2539
2542
|
<A, B, E, R>(
|
|
2540
2543
|
f: (a: A, i: number) => Effect.Effect<B, E, R>,
|
|
2541
2544
|
options: {
|
|
@@ -2544,7 +2547,7 @@ export const validateAll = dual<
|
|
|
2544
2547
|
readonly discard: true
|
|
2545
2548
|
readonly concurrentFinalizers?: boolean | undefined
|
|
2546
2549
|
}
|
|
2547
|
-
): (elements: Iterable<A>) => Effect.Effect<void,
|
|
2550
|
+
): (elements: Iterable<A>) => Effect.Effect<void, RA.NonEmptyArray<E>, R>
|
|
2548
2551
|
},
|
|
2549
2552
|
{
|
|
2550
2553
|
<A, B, E, R>(
|
|
@@ -2556,7 +2559,7 @@ export const validateAll = dual<
|
|
|
2556
2559
|
readonly discard?: false | undefined
|
|
2557
2560
|
readonly concurrentFinalizers?: boolean | undefined
|
|
2558
2561
|
}
|
|
2559
|
-
): Effect.Effect<Array<B>,
|
|
2562
|
+
): Effect.Effect<Array<B>, RA.NonEmptyArray<E>, R>
|
|
2560
2563
|
<A, B, E, R>(
|
|
2561
2564
|
elements: Iterable<A>,
|
|
2562
2565
|
f: (a: A, i: number) => Effect.Effect<B, E, R>,
|
|
@@ -2566,7 +2569,7 @@ export const validateAll = dual<
|
|
|
2566
2569
|
readonly discard: true
|
|
2567
2570
|
readonly concurrentFinalizers?: boolean | undefined
|
|
2568
2571
|
}
|
|
2569
|
-
): Effect.Effect<void,
|
|
2572
|
+
): Effect.Effect<void, RA.NonEmptyArray<E>, R>
|
|
2570
2573
|
}
|
|
2571
2574
|
>(
|
|
2572
2575
|
(args) => Predicate.isIterable(args[0]),
|
|
@@ -2575,16 +2578,19 @@ export const validateAll = dual<
|
|
|
2575
2578
|
readonly batching?: boolean | "inherit" | undefined
|
|
2576
2579
|
readonly discard?: boolean | undefined
|
|
2577
2580
|
readonly concurrentFinalizers?: boolean | undefined
|
|
2578
|
-
}): Effect.Effect<any,
|
|
2581
|
+
}): Effect.Effect<any, RA.NonEmptyArray<E>, R> =>
|
|
2579
2582
|
core.flatMap(
|
|
2580
2583
|
partition(elements, f, {
|
|
2581
2584
|
concurrency: options?.concurrency,
|
|
2582
|
-
batching: options?.batching
|
|
2585
|
+
batching: options?.batching,
|
|
2586
|
+
concurrentFinalizers: options?.concurrentFinalizers
|
|
2583
2587
|
}),
|
|
2584
2588
|
([es, bs]) =>
|
|
2585
|
-
es
|
|
2586
|
-
?
|
|
2587
|
-
:
|
|
2589
|
+
RA.isNonEmptyArray(es)
|
|
2590
|
+
? core.fail(es)
|
|
2591
|
+
: options?.discard
|
|
2592
|
+
? core.void
|
|
2593
|
+
: core.succeed(bs)
|
|
2588
2594
|
)
|
|
2589
2595
|
)
|
|
2590
2596
|
|
|
@@ -3012,16 +3018,16 @@ export const validateFirst = dual<
|
|
|
3012
3018
|
)
|
|
3013
3019
|
|
|
3014
3020
|
/* @internal */
|
|
3015
|
-
export const withClockScoped = <
|
|
3016
|
-
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(clock.clockTag,
|
|
3021
|
+
export const withClockScoped = <C extends Clock.Clock>(c: C) =>
|
|
3022
|
+
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(clock.clockTag, c))
|
|
3017
3023
|
|
|
3018
3024
|
/* @internal */
|
|
3019
3025
|
export const withRandomScoped = <A extends Random.Random>(value: A) =>
|
|
3020
3026
|
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(randomTag, value))
|
|
3021
3027
|
|
|
3022
3028
|
/* @internal */
|
|
3023
|
-
export const withConfigProviderScoped = (
|
|
3024
|
-
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(configProviderTag,
|
|
3029
|
+
export const withConfigProviderScoped = (provider: ConfigProvider) =>
|
|
3030
|
+
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(configProviderTag, provider))
|
|
3025
3031
|
|
|
3026
3032
|
/* @internal */
|
|
3027
3033
|
export const withEarlyRelease = <A, E, R>(
|
|
@@ -3181,8 +3187,8 @@ export const withRuntimeFlagsScoped = (
|
|
|
3181
3187
|
return pipe(
|
|
3182
3188
|
core.runtimeFlags,
|
|
3183
3189
|
core.flatMap((runtimeFlags) => {
|
|
3184
|
-
const updatedRuntimeFlags =
|
|
3185
|
-
const revertRuntimeFlags =
|
|
3190
|
+
const updatedRuntimeFlags = runtimeFlags_.patch(runtimeFlags, update)
|
|
3191
|
+
const revertRuntimeFlags = runtimeFlags_.diff(updatedRuntimeFlags, runtimeFlags)
|
|
3186
3192
|
return pipe(
|
|
3187
3193
|
core.updateRuntimeFlags(update),
|
|
3188
3194
|
core.zipRight(addFinalizer(() => core.updateRuntimeFlags(revertRuntimeFlags))),
|
|
@@ -3407,7 +3413,7 @@ export const fiberRefMakeRuntimeFlags = (
|
|
|
3407
3413
|
|
|
3408
3414
|
/** @internal */
|
|
3409
3415
|
export const currentRuntimeFlags: FiberRef.FiberRef<RuntimeFlags.RuntimeFlags> = core.fiberRefUnsafeMakeRuntimeFlags(
|
|
3410
|
-
|
|
3416
|
+
runtimeFlags_.none
|
|
3411
3417
|
)
|
|
3412
3418
|
|
|
3413
3419
|
/** @internal */
|
|
@@ -3,7 +3,6 @@ import { globalValue } from "../GlobalValue.js"
|
|
|
3
3
|
import type * as RuntimeFlags from "../RuntimeFlags.js"
|
|
4
4
|
import * as FiberMessage from "./fiberMessage.js"
|
|
5
5
|
import type * as FiberRuntime from "./fiberRuntime.js"
|
|
6
|
-
import * as _runtimeFlags from "./runtimeFlags.js"
|
|
7
6
|
|
|
8
7
|
/** @internal */
|
|
9
8
|
const FiberScopeSymbolKey = "effect/FiberScope"
|
|
@@ -15,7 +15,7 @@ import * as fiberRuntime from "../fiberRuntime.js"
|
|
|
15
15
|
import * as layer from "../layer.js"
|
|
16
16
|
import * as runtimeFlags from "../runtimeFlags.js"
|
|
17
17
|
import * as runtimeFlagsPatch from "../runtimeFlagsPatch.js"
|
|
18
|
-
import * as
|
|
18
|
+
import * as supervisor_ from "../supervisor.js"
|
|
19
19
|
import * as tracer from "../tracer.js"
|
|
20
20
|
|
|
21
21
|
// circular with Logger
|
|
@@ -106,7 +106,7 @@ export const addSupervisor = <A>(supervisor: Supervisor.Supervisor<A>): Layer.La
|
|
|
106
106
|
layer.scopedDiscard(
|
|
107
107
|
fiberRuntime.fiberRefLocallyScopedWith(
|
|
108
108
|
fiberRuntime.currentSupervisor,
|
|
109
|
-
(current) => new
|
|
109
|
+
(current) => new supervisor_.Zip(current, supervisor)
|
|
110
110
|
)
|
|
111
111
|
)
|
|
112
112
|
|
package/src/internal/logSpan.ts
CHANGED
|
@@ -6,8 +6,15 @@ export const make = (label: string, startTime: number): LogSpan.LogSpan => ({
|
|
|
6
6
|
startTime
|
|
7
7
|
})
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Sanitize a given string by replacing spaces, equal signs, and double quotes with underscores.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export const formatLabel = (key: string) => key.replace(/[\s="]/g, "_")
|
|
15
|
+
|
|
9
16
|
/** @internal */
|
|
10
17
|
export const render = (now: number) => (self: LogSpan.LogSpan): string => {
|
|
11
|
-
const label = self.label
|
|
18
|
+
const label = formatLabel(self.label)
|
|
12
19
|
return `${label}=${now - self.startTime}ms`
|
|
13
20
|
}
|
|
@@ -4,7 +4,7 @@ import * as HashMap from "../HashMap.js"
|
|
|
4
4
|
import * as List from "../List.js"
|
|
5
5
|
import type * as Logger from "../Logger.js"
|
|
6
6
|
import * as core from "./core.js"
|
|
7
|
-
import * as
|
|
7
|
+
import * as fiberId_ from "./fiberId.js"
|
|
8
8
|
import * as fiberRefs from "./fiberRefs.js"
|
|
9
9
|
|
|
10
10
|
/** @internal */
|
|
@@ -13,7 +13,7 @@ export const test = dual<
|
|
|
13
13
|
<Message, Output>(self: Logger.Logger<Message, Output>, input: Message) => Output
|
|
14
14
|
>(2, (self, input) =>
|
|
15
15
|
self.log({
|
|
16
|
-
fiberId:
|
|
16
|
+
fiberId: fiberId_.none,
|
|
17
17
|
logLevel: core.logLevelInfo,
|
|
18
18
|
message: input,
|
|
19
19
|
cause: Cause.empty,
|