effect 3.7.3 → 3.8.1
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/encoding/base64.js +13 -9
- package/dist/cjs/internal/encoding/base64.js.map +1 -1
- package/dist/cjs/internal/encoding/base64Url.js +6 -5
- package/dist/cjs/internal/encoding/base64Url.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/schedule.js +6 -7
- package/dist/cjs/internal/schedule.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/encoding/base64.js +11 -8
- package/dist/esm/internal/encoding/base64.js.map +1 -1
- package/dist/esm/internal/encoding/base64Url.js +6 -5
- package/dist/esm/internal/encoding/base64Url.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/schedule.js +6 -7
- package/dist/esm/internal/schedule.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/encoding/base64.ts +15 -11
- package/src/internal/encoding/base64Url.ts +6 -5
- 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/schedule.ts +10 -7
- package/src/internal/stream.ts +53 -0
- package/src/internal/subscriptionRef.ts +7 -8
- package/src/internal/version.ts +1 -1
|
@@ -4,7 +4,7 @@ import * as Boolean from "../Boolean.js";
|
|
|
4
4
|
import * as Chunk from "../Chunk.js";
|
|
5
5
|
import * as Context from "../Context.js";
|
|
6
6
|
import * as Deferred from "../Deferred.js";
|
|
7
|
-
import
|
|
7
|
+
import * as Effectable from "../Effectable.js";
|
|
8
8
|
import * as ExecutionStrategy from "../ExecutionStrategy.js";
|
|
9
9
|
import * as FiberId from "../FiberId.js";
|
|
10
10
|
import * as FiberRefs from "../FiberRefs.js";
|
|
@@ -102,8 +102,8 @@ const contOpSuccess = {
|
|
|
102
102
|
return internalCall(() => cont.effect_instruction_i2(value));
|
|
103
103
|
},
|
|
104
104
|
[OpCodes.OP_REVERT_FLAGS]: (self, cont, value) => {
|
|
105
|
-
self.patchRuntimeFlags(self.
|
|
106
|
-
if (_runtimeFlags.interruptible(self.
|
|
105
|
+
self.patchRuntimeFlags(self.currentRuntimeFlags, cont.patch);
|
|
106
|
+
if (_runtimeFlags.interruptible(self.currentRuntimeFlags) && self.isInterrupted()) {
|
|
107
107
|
return core.exitFailCause(self.getInterruptedCause());
|
|
108
108
|
} else {
|
|
109
109
|
return core.exitSucceed(value);
|
|
@@ -153,15 +153,11 @@ const runBlockedRequests = self => core.forEachSequentialDiscard(_RequestBlock.f
|
|
|
153
153
|
})), currentRequestMap, map);
|
|
154
154
|
}, false, false));
|
|
155
155
|
/** @internal */
|
|
156
|
-
export class FiberRuntime {
|
|
156
|
+
export class FiberRuntime extends Effectable.Class {
|
|
157
157
|
[internalFiber.FiberTypeId] = internalFiber.fiberVariance;
|
|
158
158
|
[internalFiber.RuntimeFiberTypeId] = runtimeFiberVariance;
|
|
159
|
-
pipe() {
|
|
160
|
-
return pipeArguments(this, arguments);
|
|
161
|
-
}
|
|
162
159
|
_fiberRefs;
|
|
163
160
|
_fiberId;
|
|
164
|
-
_runtimeFlags;
|
|
165
161
|
_queue = /*#__PURE__*/new Array();
|
|
166
162
|
_children = null;
|
|
167
163
|
_observers = /*#__PURE__*/new Array();
|
|
@@ -171,23 +167,29 @@ export class FiberRuntime {
|
|
|
171
167
|
_asyncBlockingOn = null;
|
|
172
168
|
_exitValue = null;
|
|
173
169
|
_steps = [];
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
_tracer;
|
|
170
|
+
_isYielding = false;
|
|
171
|
+
currentRuntimeFlags;
|
|
177
172
|
currentOpCount = 0;
|
|
178
|
-
|
|
173
|
+
currentSupervisor;
|
|
174
|
+
currentScheduler;
|
|
175
|
+
currentTracer;
|
|
176
|
+
currentSpan;
|
|
177
|
+
currentContext;
|
|
178
|
+
currentDefaultServices;
|
|
179
179
|
constructor(fiberId, fiberRefs0, runtimeFlags0) {
|
|
180
|
-
|
|
180
|
+
super();
|
|
181
|
+
this.currentRuntimeFlags = runtimeFlags0;
|
|
181
182
|
this._fiberId = fiberId;
|
|
182
183
|
this._fiberRefs = fiberRefs0;
|
|
183
|
-
this._supervisor = this.getFiberRef(currentSupervisor);
|
|
184
|
-
this._scheduler = this.getFiberRef(currentScheduler);
|
|
185
184
|
if (_runtimeFlags.runtimeMetrics(runtimeFlags0)) {
|
|
186
185
|
const tags = this.getFiberRef(core.currentMetricLabels);
|
|
187
186
|
fiberStarted.unsafeUpdate(1, tags);
|
|
188
187
|
fiberActive.unsafeUpdate(1, tags);
|
|
189
188
|
}
|
|
190
|
-
this.
|
|
189
|
+
this.refreshRefCache();
|
|
190
|
+
}
|
|
191
|
+
commit() {
|
|
192
|
+
return internalFiber.join(this);
|
|
191
193
|
}
|
|
192
194
|
/**
|
|
193
195
|
* The identity of the fiber.
|
|
@@ -215,7 +217,7 @@ export class FiberRuntime {
|
|
|
215
217
|
get runtimeFlags() {
|
|
216
218
|
return this.ask((state, status) => {
|
|
217
219
|
if (FiberStatus.isDone(status)) {
|
|
218
|
-
return state.
|
|
220
|
+
return state.currentRuntimeFlags;
|
|
219
221
|
}
|
|
220
222
|
return status.runtimeFlags;
|
|
221
223
|
});
|
|
@@ -369,7 +371,7 @@ export class FiberRuntime {
|
|
|
369
371
|
* log annotations and log level) may not be up-to-date.
|
|
370
372
|
*/
|
|
371
373
|
getFiberRefs() {
|
|
372
|
-
this.setFiberRef(currentRuntimeFlags, this.
|
|
374
|
+
this.setFiberRef(currentRuntimeFlags, this.currentRuntimeFlags);
|
|
373
375
|
return this._fiberRefs;
|
|
374
376
|
}
|
|
375
377
|
/**
|
|
@@ -407,9 +409,12 @@ export class FiberRuntime {
|
|
|
407
409
|
this.refreshRefCache();
|
|
408
410
|
}
|
|
409
411
|
refreshRefCache() {
|
|
410
|
-
this.
|
|
411
|
-
this.
|
|
412
|
-
this.
|
|
412
|
+
this.currentDefaultServices = this.getFiberRef(defaultServices.currentServices);
|
|
413
|
+
this.currentTracer = this.currentDefaultServices.unsafeMap.get(tracer.tracerTag.key);
|
|
414
|
+
this.currentSupervisor = this.getFiberRef(currentSupervisor);
|
|
415
|
+
this.currentScheduler = this.getFiberRef(currentScheduler);
|
|
416
|
+
this.currentContext = this.getFiberRef(core.currentContext);
|
|
417
|
+
this.currentSpan = this.currentContext.unsafeMap.get(tracer.spanTag.key);
|
|
413
418
|
}
|
|
414
419
|
/**
|
|
415
420
|
* Wholesale replaces all fiber refs of this fiber.
|
|
@@ -483,7 +488,7 @@ export class FiberRuntime {
|
|
|
483
488
|
* **NOTE**: This method must be invoked by the fiber itself.
|
|
484
489
|
*/
|
|
485
490
|
drainQueueLaterOnExecutor() {
|
|
486
|
-
this.
|
|
491
|
+
this.currentScheduler.scheduleTask(this.run, this.getFiberRef(core.currentSchedulingPriority));
|
|
487
492
|
}
|
|
488
493
|
/**
|
|
489
494
|
* Drains the fiber's message queue while the fiber is actively running,
|
|
@@ -581,7 +586,7 @@ export class FiberRuntime {
|
|
|
581
586
|
return null;
|
|
582
587
|
}
|
|
583
588
|
reportExitValue(exit) {
|
|
584
|
-
if (_runtimeFlags.runtimeMetrics(this.
|
|
589
|
+
if (_runtimeFlags.runtimeMetrics(this.currentRuntimeFlags)) {
|
|
585
590
|
const tags = this.getFiberRef(core.currentMetricLabels);
|
|
586
591
|
const startTimeMillis = this.id().startTimeMillis;
|
|
587
592
|
const endTimeMillis = Date.now();
|
|
@@ -675,7 +680,7 @@ export class FiberRuntime {
|
|
|
675
680
|
}
|
|
676
681
|
case FiberMessage.OP_STATEFUL:
|
|
677
682
|
{
|
|
678
|
-
message.onFiber(this, this._exitValue !== null ? FiberStatus.done : FiberStatus.suspended(this.
|
|
683
|
+
message.onFiber(this, this._exitValue !== null ? FiberStatus.done : FiberStatus.suspended(this.currentRuntimeFlags, this._asyncBlockingOn));
|
|
679
684
|
return EvaluationSignalContinue;
|
|
680
685
|
}
|
|
681
686
|
default:
|
|
@@ -690,9 +695,9 @@ export class FiberRuntime {
|
|
|
690
695
|
* **NOTE**: This method must be invoked by the fiber itself.
|
|
691
696
|
*/
|
|
692
697
|
evaluateEffect(effect0) {
|
|
693
|
-
this.
|
|
698
|
+
this.currentSupervisor.onResume(this);
|
|
694
699
|
try {
|
|
695
|
-
let effect = _runtimeFlags.interruptible(this.
|
|
700
|
+
let effect = _runtimeFlags.interruptible(this.currentRuntimeFlags) && this.isInterrupted() ? core.exitFailCause(this.getInterruptedCause()) : effect0;
|
|
696
701
|
while (effect !== null) {
|
|
697
702
|
const eff = effect;
|
|
698
703
|
const exit = this.runLoop(eff);
|
|
@@ -700,7 +705,7 @@ export class FiberRuntime {
|
|
|
700
705
|
const op = yieldedOpChannel.currentOp;
|
|
701
706
|
yieldedOpChannel.currentOp = null;
|
|
702
707
|
if (op._op === OpCodes.OP_YIELD) {
|
|
703
|
-
if (_runtimeFlags.cooperativeYielding(this.
|
|
708
|
+
if (_runtimeFlags.cooperativeYielding(this.currentRuntimeFlags)) {
|
|
704
709
|
this.tell(FiberMessage.yieldNow());
|
|
705
710
|
this.tell(FiberMessage.resume(core.exitVoid));
|
|
706
711
|
effect = null;
|
|
@@ -712,7 +717,7 @@ export class FiberRuntime {
|
|
|
712
717
|
effect = null;
|
|
713
718
|
}
|
|
714
719
|
} else {
|
|
715
|
-
this.
|
|
720
|
+
this.currentRuntimeFlags = pipe(this.currentRuntimeFlags, _runtimeFlags.enable(_runtimeFlags.WindDown));
|
|
716
721
|
const interruption = this.interruptAllChildren();
|
|
717
722
|
if (interruption !== null) {
|
|
718
723
|
effect = core.flatMap(interruption, () => exit);
|
|
@@ -731,7 +736,7 @@ export class FiberRuntime {
|
|
|
731
736
|
}
|
|
732
737
|
}
|
|
733
738
|
} finally {
|
|
734
|
-
this.
|
|
739
|
+
this.currentSupervisor.onSuspend(this);
|
|
735
740
|
}
|
|
736
741
|
}
|
|
737
742
|
/**
|
|
@@ -783,7 +788,7 @@ export class FiberRuntime {
|
|
|
783
788
|
patchRuntimeFlags(oldRuntimeFlags, patch) {
|
|
784
789
|
const newRuntimeFlags = _runtimeFlags.patch(oldRuntimeFlags, patch);
|
|
785
790
|
globalThis[internalFiber.currentFiberURI] = this;
|
|
786
|
-
this.
|
|
791
|
+
this.currentRuntimeFlags = newRuntimeFlags;
|
|
787
792
|
return newRuntimeFlags;
|
|
788
793
|
}
|
|
789
794
|
/**
|
|
@@ -815,7 +820,7 @@ export class FiberRuntime {
|
|
|
815
820
|
if (cont._op === "OnStep") {
|
|
816
821
|
this._steps.push({
|
|
817
822
|
refs: this.getFiberRefs(),
|
|
818
|
-
flags: this.
|
|
823
|
+
flags: this.currentRuntimeFlags
|
|
819
824
|
});
|
|
820
825
|
}
|
|
821
826
|
}
|
|
@@ -848,7 +853,7 @@ export class FiberRuntime {
|
|
|
848
853
|
}
|
|
849
854
|
}
|
|
850
855
|
[OpCodes.OP_TAG](op) {
|
|
851
|
-
return core.
|
|
856
|
+
return core.sync(() => Context.unsafeGet(this.currentContext, op));
|
|
852
857
|
}
|
|
853
858
|
["Left"](op) {
|
|
854
859
|
return core.fail(op.left);
|
|
@@ -931,7 +936,7 @@ export class FiberRuntime {
|
|
|
931
936
|
case OpCodes.OP_ON_FAILURE:
|
|
932
937
|
case OpCodes.OP_ON_SUCCESS_AND_FAILURE:
|
|
933
938
|
{
|
|
934
|
-
if (!(_runtimeFlags.interruptible(this.
|
|
939
|
+
if (!(_runtimeFlags.interruptible(this.currentRuntimeFlags) && this.isInterrupted())) {
|
|
935
940
|
return internalCall(() => cont.effect_instruction_i1(cause));
|
|
936
941
|
} else {
|
|
937
942
|
return core.exitFailCause(internalCause.stripFailures(cause));
|
|
@@ -939,7 +944,7 @@ export class FiberRuntime {
|
|
|
939
944
|
}
|
|
940
945
|
case "OnStep":
|
|
941
946
|
{
|
|
942
|
-
if (!(_runtimeFlags.interruptible(this.
|
|
947
|
+
if (!(_runtimeFlags.interruptible(this.currentRuntimeFlags) && this.isInterrupted())) {
|
|
943
948
|
return core.exitSucceed(core.exitFailCause(cause));
|
|
944
949
|
} else {
|
|
945
950
|
return core.exitFailCause(internalCause.stripFailures(cause));
|
|
@@ -947,8 +952,8 @@ export class FiberRuntime {
|
|
|
947
952
|
}
|
|
948
953
|
case OpCodes.OP_REVERT_FLAGS:
|
|
949
954
|
{
|
|
950
|
-
this.patchRuntimeFlags(this.
|
|
951
|
-
if (_runtimeFlags.interruptible(this.
|
|
955
|
+
this.patchRuntimeFlags(this.currentRuntimeFlags, cont.patch);
|
|
956
|
+
if (_runtimeFlags.interruptible(this.currentRuntimeFlags) && this.isInterrupted()) {
|
|
952
957
|
return core.exitFailCause(internalCause.sequential(cause, this.getInterruptedCause()));
|
|
953
958
|
} else {
|
|
954
959
|
return core.exitFailCause(cause);
|
|
@@ -965,11 +970,11 @@ export class FiberRuntime {
|
|
|
965
970
|
}
|
|
966
971
|
}
|
|
967
972
|
[OpCodes.OP_WITH_RUNTIME](op) {
|
|
968
|
-
return internalCall(() => op.effect_instruction_i0(this, FiberStatus.running(this.
|
|
973
|
+
return internalCall(() => op.effect_instruction_i0(this, FiberStatus.running(this.currentRuntimeFlags)));
|
|
969
974
|
}
|
|
970
975
|
["Blocked"](op) {
|
|
971
976
|
const refs = this.getFiberRefs();
|
|
972
|
-
const flags = this.
|
|
977
|
+
const flags = this.currentRuntimeFlags;
|
|
973
978
|
if (this._steps.length > 0) {
|
|
974
979
|
const frames = [];
|
|
975
980
|
const snap = this._steps[this._steps.length - 1];
|
|
@@ -979,7 +984,7 @@ export class FiberRuntime {
|
|
|
979
984
|
frame = this.popStack();
|
|
980
985
|
}
|
|
981
986
|
this.setFiberRefs(snap.refs);
|
|
982
|
-
this.
|
|
987
|
+
this.currentRuntimeFlags = snap.flags;
|
|
983
988
|
const patchRefs = FiberRefsPatch.diff(snap.refs, refs);
|
|
984
989
|
const patchFlags = _runtimeFlags.diff(snap.flags, flags);
|
|
985
990
|
return core.exitSucceed(core.blocked(op.effect_instruction_i0, core.withFiberRuntime(newFiber => {
|
|
@@ -987,7 +992,7 @@ export class FiberRuntime {
|
|
|
987
992
|
newFiber.pushStack(frames.pop());
|
|
988
993
|
}
|
|
989
994
|
newFiber.setFiberRefs(FiberRefsPatch.patch(newFiber.id(), newFiber.getFiberRefs())(patchRefs));
|
|
990
|
-
newFiber.
|
|
995
|
+
newFiber.currentRuntimeFlags = _runtimeFlags.patch(patchFlags)(newFiber.currentRuntimeFlags);
|
|
991
996
|
return op.effect_instruction_i1;
|
|
992
997
|
})));
|
|
993
998
|
}
|
|
@@ -998,7 +1003,7 @@ export class FiberRuntime {
|
|
|
998
1003
|
}
|
|
999
1004
|
[OpCodes.OP_UPDATE_RUNTIME_FLAGS](op) {
|
|
1000
1005
|
const updateFlags = op.effect_instruction_i0;
|
|
1001
|
-
const oldRuntimeFlags = this.
|
|
1006
|
+
const oldRuntimeFlags = this.currentRuntimeFlags;
|
|
1002
1007
|
const newRuntimeFlags = _runtimeFlags.patch(oldRuntimeFlags, updateFlags);
|
|
1003
1008
|
// One more chance to short circuit: if we're immediately going
|
|
1004
1009
|
// to interrupt. Interruption will cause immediate reversion of
|
|
@@ -1008,7 +1013,7 @@ export class FiberRuntime {
|
|
|
1008
1013
|
return core.exitFailCause(this.getInterruptedCause());
|
|
1009
1014
|
} else {
|
|
1010
1015
|
// Impossible to short circuit, so record the changes
|
|
1011
|
-
this.patchRuntimeFlags(this.
|
|
1016
|
+
this.patchRuntimeFlags(this.currentRuntimeFlags, updateFlags);
|
|
1012
1017
|
if (op.effect_instruction_i1) {
|
|
1013
1018
|
// Since we updated the flags, we need to revert them
|
|
1014
1019
|
const revertFlags = _runtimeFlags.diff(newRuntimeFlags, oldRuntimeFlags);
|
|
@@ -1037,12 +1042,12 @@ export class FiberRuntime {
|
|
|
1037
1042
|
}
|
|
1038
1043
|
[OpCodes.OP_ASYNC](op) {
|
|
1039
1044
|
this._asyncBlockingOn = op.effect_instruction_i1;
|
|
1040
|
-
this.initiateAsync(this.
|
|
1045
|
+
this.initiateAsync(this.currentRuntimeFlags, op.effect_instruction_i0);
|
|
1041
1046
|
yieldedOpChannel.currentOp = op;
|
|
1042
1047
|
return YieldedOp;
|
|
1043
1048
|
}
|
|
1044
1049
|
[OpCodes.OP_YIELD](op) {
|
|
1045
|
-
this.
|
|
1050
|
+
this._isYielding = false;
|
|
1046
1051
|
yieldedOpChannel.currentOp = op;
|
|
1047
1052
|
return YieldedOp;
|
|
1048
1053
|
}
|
|
@@ -1068,17 +1073,17 @@ export class FiberRuntime {
|
|
|
1068
1073
|
let cur = effect0;
|
|
1069
1074
|
this.currentOpCount = 0;
|
|
1070
1075
|
while (true) {
|
|
1071
|
-
if ((this.
|
|
1072
|
-
this.
|
|
1076
|
+
if ((this.currentRuntimeFlags & OpSupervision) !== 0) {
|
|
1077
|
+
this.currentSupervisor.onEffect(this, cur);
|
|
1073
1078
|
}
|
|
1074
1079
|
if (this._queue.length > 0) {
|
|
1075
|
-
cur = this.drainQueueWhileRunning(this.
|
|
1080
|
+
cur = this.drainQueueWhileRunning(this.currentRuntimeFlags, cur);
|
|
1076
1081
|
}
|
|
1077
|
-
if (!this.
|
|
1082
|
+
if (!this._isYielding) {
|
|
1078
1083
|
this.currentOpCount += 1;
|
|
1079
|
-
const shouldYield = this.
|
|
1084
|
+
const shouldYield = this.currentScheduler.shouldYield(this);
|
|
1080
1085
|
if (shouldYield !== false) {
|
|
1081
|
-
this.
|
|
1086
|
+
this._isYielding = true;
|
|
1082
1087
|
this.currentOpCount = 0;
|
|
1083
1088
|
const oldCur = cur;
|
|
1084
1089
|
cur = core.flatMap(core.yieldNow({
|
|
@@ -1092,9 +1097,9 @@ export class FiberRuntime {
|
|
|
1092
1097
|
absurd(cur);
|
|
1093
1098
|
}
|
|
1094
1099
|
// @ts-expect-error
|
|
1095
|
-
cur = this.
|
|
1096
|
-
if (version.getCurrentVersion() !== cur[EffectTypeId]._V) {
|
|
1097
|
-
return core.dieMessage(`Cannot execute an Effect versioned ${cur[EffectTypeId]._V} with a Runtime of version ${version.getCurrentVersion()}`);
|
|
1100
|
+
cur = this.currentTracer.context(() => {
|
|
1101
|
+
if (version.getCurrentVersion() !== cur[core.EffectTypeId]._V) {
|
|
1102
|
+
return core.dieMessage(`Cannot execute an Effect versioned ${cur[core.EffectTypeId]._V} with a Runtime of version ${version.getCurrentVersion()}`);
|
|
1098
1103
|
}
|
|
1099
1104
|
// @ts-expect-error
|
|
1100
1105
|
return this[cur._op](cur);
|
|
@@ -1131,6 +1136,26 @@ export const loggerWithConsoleLog = self => internalLogger.makeLogger(opts => {
|
|
|
1131
1136
|
Context.get(services, consoleTag).unsafe.log(self.log(opts));
|
|
1132
1137
|
});
|
|
1133
1138
|
/** @internal */
|
|
1139
|
+
export const loggerWithLeveledLog = self => internalLogger.makeLogger(opts => {
|
|
1140
|
+
const services = FiberRefs.getOrDefault(opts.context, defaultServices.currentServices);
|
|
1141
|
+
const unsafeLogger = Context.get(services, consoleTag).unsafe;
|
|
1142
|
+
switch (opts.logLevel._tag) {
|
|
1143
|
+
case "Debug":
|
|
1144
|
+
return unsafeLogger.debug(self.log(opts));
|
|
1145
|
+
case "Info":
|
|
1146
|
+
return unsafeLogger.info(self.log(opts));
|
|
1147
|
+
case "Trace":
|
|
1148
|
+
return unsafeLogger.trace(self.log(opts));
|
|
1149
|
+
case "Warning":
|
|
1150
|
+
return unsafeLogger.warn(self.log(opts));
|
|
1151
|
+
case "Error":
|
|
1152
|
+
case "Fatal":
|
|
1153
|
+
return unsafeLogger.error(self.log(opts));
|
|
1154
|
+
default:
|
|
1155
|
+
return unsafeLogger.log(self.log(opts));
|
|
1156
|
+
}
|
|
1157
|
+
});
|
|
1158
|
+
/** @internal */
|
|
1134
1159
|
export const loggerWithConsoleError = self => internalLogger.makeLogger(opts => {
|
|
1135
1160
|
const services = FiberRefs.getOrDefault(opts.context, defaultServices.currentServices);
|
|
1136
1161
|
Context.get(services, consoleTag).unsafe.error(self.log(opts));
|
|
@@ -1142,7 +1167,7 @@ export const jsonLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("eff
|
|
|
1142
1167
|
/** @internal */
|
|
1143
1168
|
export const logFmtLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/logFmtLogger"), () => loggerWithConsoleLog(internalLogger.logfmtLogger));
|
|
1144
1169
|
/** @internal */
|
|
1145
|
-
export const prettyLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/prettyLogger"), () => internalLogger.
|
|
1170
|
+
export const prettyLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/prettyLogger"), () => internalLogger.prettyLoggerDefault);
|
|
1146
1171
|
/** @internal */
|
|
1147
1172
|
export const structuredLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/structuredLogger"), () => loggerWithConsoleLog(internalLogger.structuredLogger));
|
|
1148
1173
|
/** @internal */
|
|
@@ -1216,10 +1241,10 @@ export const acquireReleaseInterruptible = /*#__PURE__*/dual(args => core.isEffe
|
|
|
1216
1241
|
/* @internal */
|
|
1217
1242
|
export const addFinalizer = finalizer => core.withFiberRuntime(runtime => {
|
|
1218
1243
|
const acquireRefs = runtime.getFiberRefs();
|
|
1219
|
-
const acquireFlags = runtime.
|
|
1244
|
+
const acquireFlags = runtime.currentRuntimeFlags;
|
|
1220
1245
|
return core.flatMap(scope, scope => core.scopeAddFinalizerExit(scope, exit => core.withFiberRuntime(runtimeFinalizer => {
|
|
1221
1246
|
const preRefs = runtimeFinalizer.getFiberRefs();
|
|
1222
|
-
const preFlags = runtimeFinalizer.
|
|
1247
|
+
const preFlags = runtimeFinalizer.currentRuntimeFlags;
|
|
1223
1248
|
const patchRefs = FiberRefsPatch.diff(preRefs, acquireRefs);
|
|
1224
1249
|
const patchFlags = _runtimeFlags.diff(preFlags, acquireFlags);
|
|
1225
1250
|
const inverseRefs = FiberRefsPatch.diff(acquireRefs, preRefs);
|
|
@@ -1369,7 +1394,7 @@ export const forEachConcurrentDiscard = (self, f, batching, processAll, n) => co
|
|
|
1369
1394
|
const fibers = new Set();
|
|
1370
1395
|
const results = new Array();
|
|
1371
1396
|
const interruptAll = () => fibers.forEach(fiber => {
|
|
1372
|
-
fiber.
|
|
1397
|
+
fiber.currentScheduler.scheduleTask(() => {
|
|
1373
1398
|
fiber.unsafeInterruptAsFork(parent.id());
|
|
1374
1399
|
}, 0);
|
|
1375
1400
|
});
|
|
@@ -1389,8 +1414,8 @@ export const forEachConcurrentDiscard = (self, f, batching, processAll, n) => co
|
|
|
1389
1414
|
};
|
|
1390
1415
|
const runFiber = (eff, interruptImmediately = false) => {
|
|
1391
1416
|
const runnable = core.uninterruptible(graft(eff));
|
|
1392
|
-
const fiber = unsafeForkUnstarted(runnable, parent, parent.
|
|
1393
|
-
parent.
|
|
1417
|
+
const fiber = unsafeForkUnstarted(runnable, parent, parent.currentRuntimeFlags, fiberScope.globalScope);
|
|
1418
|
+
parent.currentScheduler.scheduleTask(() => {
|
|
1394
1419
|
if (interruptImmediately) {
|
|
1395
1420
|
fiber.unsafeInterruptAsFork(parent.id());
|
|
1396
1421
|
}
|
|
@@ -1444,7 +1469,7 @@ export const forEachConcurrentDiscard = (self, f, batching, processAll, n) => co
|
|
|
1444
1469
|
startOrder.push(fiber);
|
|
1445
1470
|
fibers.add(fiber);
|
|
1446
1471
|
if (interrupted) {
|
|
1447
|
-
fiber.
|
|
1472
|
+
fiber.currentScheduler.scheduleTask(() => {
|
|
1448
1473
|
fiber.unsafeInterruptAsFork(parent.id());
|
|
1449
1474
|
}, 0);
|
|
1450
1475
|
}
|
|
@@ -1552,7 +1577,7 @@ export const unsafeMakeChildFiber = (effect, parentFiber, parentRuntimeFlags, ov
|
|
|
1552
1577
|
const childFiberRefs = fiberRefs.forkAs(parentFiberRefs, childId);
|
|
1553
1578
|
const childFiber = new FiberRuntime(childId, childFiberRefs, parentRuntimeFlags);
|
|
1554
1579
|
const childContext = fiberRefs.getOrDefault(childFiberRefs, core.currentContext);
|
|
1555
|
-
const supervisor = childFiber.
|
|
1580
|
+
const supervisor = childFiber.currentSupervisor;
|
|
1556
1581
|
supervisor.onStart(childContext, effect, Option.some(parentFiber), childFiber);
|
|
1557
1582
|
childFiber.addObserver(exit => supervisor.onEnd(exit, childFiber));
|
|
1558
1583
|
const parentScope = overrideScope !== null ? overrideScope : pipe(parentFiber.getFiberRef(core.currentForkScopeOverride), Option.getOrElse(() => parentFiber.scope()));
|
|
@@ -1837,41 +1862,45 @@ export const currentSupervisor = /*#__PURE__*/fiberRefUnsafeMakeSupervisor(super
|
|
|
1837
1862
|
/* @internal */
|
|
1838
1863
|
export const fiberAwaitAll = fibers => forEach(fibers, internalFiber._await);
|
|
1839
1864
|
/** @internal */
|
|
1840
|
-
export const fiberAll = fibers =>
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
{
|
|
1857
|
-
return Option.none();
|
|
1858
|
-
}
|
|
1859
|
-
case "Some":
|
|
1860
|
-
{
|
|
1861
|
-
return Option.some(core.exitZipWith(optionA.value, optionB.value, {
|
|
1862
|
-
onSuccess: (a, chunk) => [a, ...chunk],
|
|
1863
|
-
onFailure: internalCause.parallel
|
|
1864
|
-
}));
|
|
1865
|
-
}
|
|
1865
|
+
export const fiberAll = fibers => {
|
|
1866
|
+
const _fiberAll = {
|
|
1867
|
+
...Effectable.CommitPrototype,
|
|
1868
|
+
commit() {
|
|
1869
|
+
return internalFiber.join(this);
|
|
1870
|
+
},
|
|
1871
|
+
[internalFiber.FiberTypeId]: internalFiber.fiberVariance,
|
|
1872
|
+
id: () => RA.fromIterable(fibers).reduce((id, fiber) => FiberId.combine(id, fiber.id()), FiberId.none),
|
|
1873
|
+
await: core.exit(forEachParUnbounded(fibers, fiber => core.flatten(fiber.await), false)),
|
|
1874
|
+
children: core.map(forEachParUnbounded(fibers, fiber => fiber.children, false), RA.flatten),
|
|
1875
|
+
inheritAll: core.forEachSequentialDiscard(fibers, fiber => fiber.inheritAll),
|
|
1876
|
+
poll: core.map(core.forEachSequential(fibers, fiber => fiber.poll), RA.reduceRight(Option.some(core.exitSucceed(new Array())), (optionB, optionA) => {
|
|
1877
|
+
switch (optionA._tag) {
|
|
1878
|
+
case "None":
|
|
1879
|
+
{
|
|
1880
|
+
return Option.none();
|
|
1866
1881
|
}
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1882
|
+
case "Some":
|
|
1883
|
+
{
|
|
1884
|
+
switch (optionB._tag) {
|
|
1885
|
+
case "None":
|
|
1886
|
+
{
|
|
1887
|
+
return Option.none();
|
|
1888
|
+
}
|
|
1889
|
+
case "Some":
|
|
1890
|
+
{
|
|
1891
|
+
return Option.some(core.exitZipWith(optionA.value, optionB.value, {
|
|
1892
|
+
onSuccess: (a, chunk) => [a, ...chunk],
|
|
1893
|
+
onFailure: internalCause.parallel
|
|
1894
|
+
}));
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1899
|
+
})),
|
|
1900
|
+
interruptAsFork: fiberId => core.forEachSequentialDiscard(fibers, fiber => fiber.interruptAsFork(fiberId))
|
|
1901
|
+
};
|
|
1902
|
+
return _fiberAll;
|
|
1903
|
+
};
|
|
1875
1904
|
/* @internal */
|
|
1876
1905
|
export const fiberInterruptFork = self => core.asVoid(forkDaemon(core.interruptFiber(self)));
|
|
1877
1906
|
/* @internal */
|