@fncts/io 0.0.17 → 0.0.19
Sign up to get free protection for your applications and to get access to all the features.
- package/Cached/internal.d.ts +1 -1
- package/CancellerState.d.ts +1 -1
- package/Channel/ChildExecutorDecision/definition.d.ts +1 -1
- package/Channel/UpstreamPullRequest/definition.d.ts +1 -1
- package/Channel/UpstreamPullStrategy/definition.d.ts +1 -1
- package/Channel/api/mergeAllWith.d.ts +1 -1
- package/Channel/internal/ChannelExecutor.d.ts +1 -1
- package/Channel/internal/ChannelState.d.ts +2 -2
- package/Channel/internal/MergeDecision.d.ts +1 -1
- package/Channel/internal/MergeState.d.ts +1 -1
- package/Channel/internal/SingleProducerAsyncInput.d.ts +1 -1
- package/Clock/definition.d.ts +1 -0
- package/Fiber/FiberContext.d.ts +22 -19
- package/Fiber/api/interruptAll.d.ts +1 -1
- package/Fiber/api/interruptAsFork.d.ts +8 -0
- package/Fiber/definition.d.ts +6 -8
- package/FiberRef/api.d.ts +7 -2
- package/FiberRef/definition.d.ts +4 -3
- package/FiberRef/unsafe.d.ts +18 -1
- package/FiberRefs/api.d.ts +5 -0
- package/FiberRefs/definition.d.ts +1 -1
- package/FiberState/definition.d.ts +2 -2
- package/FiberStatus/definition.d.ts +1 -1
- package/Future/definition.d.ts +1 -1
- package/Hub/definition.d.ts +1 -1
- package/IO/api/core-scope.d.ts +4 -3
- package/IO/api/interrupt.d.ts +2 -2
- package/IO/api/supervised.d.ts +10 -0
- package/IO/api.d.ts +7 -10
- package/IO/definition.d.ts +16 -139
- package/IO.d.ts +1 -0
- package/IOEnv/definition.d.ts +1 -1
- package/Layer/definition.d.ts +2 -2
- package/Ref/definition.d.ts +3 -3
- package/Reloadable/api.d.ts +21 -0
- package/Reloadable/constructors.d.ts +23 -0
- package/Reloadable/definition.d.ts +20 -0
- package/Reloadable.d.ts +3 -0
- package/RuntimeConfig.d.ts +1 -1
- package/STM/definition.d.ts +5 -5
- package/STM/internal/CommitState.d.ts +1 -1
- package/STM/internal/Entry.d.ts +2 -2
- package/STM/internal/Journal.d.ts +6 -6
- package/STM/internal/TryCommit.d.ts +2 -2
- package/STM/internal/Versioned.d.ts +1 -1
- package/Schedule/Decision.d.ts +1 -1
- package/Scope/ReleaseMap/definition.d.ts +1 -1
- package/Scope/definition.d.ts +2 -2
- package/ScopedRef/definition.d.ts +1 -1
- package/State/internal.d.ts +1 -1
- package/Stream/api.d.ts +1 -1
- package/Stream/definition.d.ts +1 -1
- package/Stream/internal/DebounceState.d.ts +4 -4
- package/Stream/internal/Handoff.d.ts +5 -5
- package/Stream/internal/Pull.d.ts +1 -1
- package/Stream/internal/SinkEndReason.d.ts +1 -1
- package/TExit/definition.d.ts +3 -3
- package/TReentrantLock/definition.d.ts +1 -1
- package/TRef/definition.d.ts +1 -1
- package/TxnId.d.ts +1 -1
- package/_cjs/Clock/definition.cjs +2 -1
- package/_cjs/Clock/definition.cjs.map +1 -1
- package/_cjs/Console/definition.cjs +1 -1
- package/_cjs/Console/definition.cjs.map +1 -1
- package/_cjs/Fiber/FiberContext.cjs +180 -310
- package/_cjs/Fiber/FiberContext.cjs.map +1 -1
- package/_cjs/Fiber/api/collectAll.cjs +2 -2
- package/_cjs/Fiber/api/collectAll.cjs.map +1 -1
- package/_cjs/Fiber/api/interrupt.cjs +4 -2
- package/_cjs/Fiber/api/interrupt.cjs.map +1 -1
- package/_cjs/Fiber/api/interruptAll.cjs +8 -8
- package/_cjs/Fiber/api/interruptAll.cjs.map +1 -1
- package/_cjs/Fiber/api/interruptAs.cjs +7 -1
- package/_cjs/Fiber/api/interruptAs.cjs.map +1 -1
- package/_cjs/Fiber/api/interruptAsFork.cjs +15 -0
- package/_cjs/Fiber/api/interruptAsFork.cjs.map +1 -0
- package/_cjs/Fiber/api/interruptFork.cjs +5 -5
- package/_cjs/Fiber/api/interruptFork.cjs.map +1 -1
- package/_cjs/Fiber/definition.cjs +2 -2
- package/_cjs/Fiber/definition.cjs.map +1 -1
- package/_cjs/FiberRef/api.cjs +29 -10
- package/_cjs/FiberRef/api.cjs.map +1 -1
- package/_cjs/FiberRef/definition.cjs +2 -1
- package/_cjs/FiberRef/definition.cjs.map +1 -1
- package/_cjs/FiberRef/unsafe.cjs +29 -5
- package/_cjs/FiberRef/unsafe.cjs.map +1 -1
- package/_cjs/FiberRefs/api.cjs +28 -2
- package/_cjs/FiberRefs/api.cjs.map +1 -1
- package/_cjs/FiberRefs/join.cjs +1 -1
- package/_cjs/FiberRefs/join.cjs.map +1 -1
- package/_cjs/IO/api/core-scope.cjs +23 -15
- package/_cjs/IO/api/core-scope.cjs.map +1 -1
- package/_cjs/IO/api/ensuringChildren.cjs +4 -2
- package/_cjs/IO/api/ensuringChildren.cjs.map +1 -1
- package/_cjs/IO/api/interrupt.cjs +21 -11
- package/_cjs/IO/api/interrupt.cjs.map +1 -1
- package/_cjs/IO/api/supervised.cjs +26 -0
- package/_cjs/IO/api/supervised.cjs.map +1 -0
- package/_cjs/IO/api/withChildren.cjs +4 -2
- package/_cjs/IO/api/withChildren.cjs.map +1 -1
- package/_cjs/IO/api/zipC.cjs +10 -8
- package/_cjs/IO/api/zipC.cjs.map +1 -1
- package/_cjs/IO/api.cjs +67 -63
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO/definition.cjs +8 -226
- package/_cjs/IO/definition.cjs.map +1 -1
- package/_cjs/IO/runtime.cjs +7 -9
- package/_cjs/IO/runtime.cjs.map +1 -1
- package/_cjs/IO.cjs +13 -0
- package/_cjs/IO.cjs.map +1 -1
- package/_cjs/Layer/api.cjs +1 -1
- package/_cjs/Layer/api.cjs.map +1 -1
- package/_cjs/Random/definition.cjs +1 -1
- package/_cjs/Random/definition.cjs.map +1 -1
- package/_cjs/Reloadable/api.cjs +46 -0
- package/_cjs/Reloadable/api.cjs.map +1 -0
- package/_cjs/Reloadable/constructors.cjs +82 -0
- package/_cjs/Reloadable/constructors.cjs.map +1 -0
- package/_cjs/Reloadable/definition.cjs +58 -0
- package/_cjs/Reloadable/definition.cjs.map +1 -0
- package/_cjs/Reloadable.cjs +45 -0
- package/_cjs/Reloadable.cjs.map +1 -0
- package/_cjs/Scope/definition.cjs +1 -1
- package/_cjs/Scope/definition.cjs.map +1 -1
- package/_cjs/internal/IsFatal.cjs +129 -0
- package/_cjs/internal/IsFatal.cjs.map +1 -0
- package/_mjs/Clock/definition.mjs +2 -1
- package/_mjs/Clock/definition.mjs.map +1 -1
- package/_mjs/Console/definition.mjs +1 -1
- package/_mjs/Console/definition.mjs.map +1 -1
- package/_mjs/Fiber/FiberContext.mjs +180 -309
- package/_mjs/Fiber/FiberContext.mjs.map +1 -1
- package/_mjs/Fiber/api/collectAll.mjs +2 -2
- package/_mjs/Fiber/api/collectAll.mjs.map +1 -1
- package/_mjs/Fiber/api/interrupt.mjs +3 -2
- package/_mjs/Fiber/api/interrupt.mjs.map +1 -1
- package/_mjs/Fiber/api/interruptAll.mjs +6 -6
- package/_mjs/Fiber/api/interruptAll.mjs.map +1 -1
- package/_mjs/Fiber/api/interruptAs.mjs +3 -1
- package/_mjs/Fiber/api/interruptAs.mjs.map +1 -1
- package/_mjs/Fiber/api/interruptAsFork.mjs +8 -0
- package/_mjs/Fiber/api/interruptAsFork.mjs.map +1 -0
- package/_mjs/Fiber/api/interruptFork.mjs +5 -4
- package/_mjs/Fiber/api/interruptFork.mjs.map +1 -1
- package/_mjs/Fiber/definition.mjs +2 -2
- package/_mjs/Fiber/definition.mjs.map +1 -1
- package/_mjs/FiberRef/api.mjs +26 -9
- package/_mjs/FiberRef/api.mjs.map +1 -1
- package/_mjs/FiberRef/definition.mjs +2 -1
- package/_mjs/FiberRef/definition.mjs.map +1 -1
- package/_mjs/FiberRef/unsafe.mjs +23 -4
- package/_mjs/FiberRef/unsafe.mjs.map +1 -1
- package/_mjs/FiberRefs/api.mjs +22 -1
- package/_mjs/FiberRefs/api.mjs.map +1 -1
- package/_mjs/FiberRefs/join.mjs +1 -1
- package/_mjs/FiberRefs/join.mjs.map +1 -1
- package/_mjs/IO/api/core-scope.mjs +21 -16
- package/_mjs/IO/api/core-scope.mjs.map +1 -1
- package/_mjs/IO/api/ensuringChildren.mjs +3 -2
- package/_mjs/IO/api/ensuringChildren.mjs.map +1 -1
- package/_mjs/IO/api/interrupt.mjs +18 -9
- package/_mjs/IO/api/interrupt.mjs.map +1 -1
- package/_mjs/IO/api/supervised.mjs +14 -0
- package/_mjs/IO/api/supervised.mjs.map +1 -0
- package/_mjs/IO/api/withChildren.mjs +3 -2
- package/_mjs/IO/api/withChildren.mjs.map +1 -1
- package/_mjs/IO/api/zipC.mjs +9 -8
- package/_mjs/IO/api/zipC.mjs.map +1 -1
- package/_mjs/IO/api.mjs +66 -60
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO/definition.mjs +5 -184
- package/_mjs/IO/definition.mjs.map +1 -1
- package/_mjs/IO/runtime.mjs +7 -8
- package/_mjs/IO/runtime.mjs.map +1 -1
- package/_mjs/IO.mjs +1 -0
- package/_mjs/IO.mjs.map +1 -1
- package/_mjs/Layer/api.mjs +1 -1
- package/_mjs/Layer/api.mjs.map +1 -1
- package/_mjs/Random/definition.mjs +1 -1
- package/_mjs/Random/definition.mjs.map +1 -1
- package/_mjs/Reloadable/api.mjs +30 -0
- package/_mjs/Reloadable/api.mjs.map +1 -0
- package/_mjs/Reloadable/constructors.mjs +55 -0
- package/_mjs/Reloadable/constructors.mjs.map +1 -0
- package/_mjs/Reloadable/definition.mjs +40 -0
- package/_mjs/Reloadable/definition.mjs.map +1 -0
- package/_mjs/Reloadable.mjs +5 -0
- package/_mjs/Reloadable.mjs.map +1 -0
- package/_mjs/Scope/definition.mjs +1 -1
- package/_mjs/Scope/definition.mjs.map +1 -1
- package/_mjs/internal/IsFatal.mjs +104 -0
- package/_mjs/internal/IsFatal.mjs.map +1 -0
- package/_src/Clock/definition.ts +1 -0
- package/_src/Fiber/FiberContext.ts +50 -135
- package/_src/Fiber/api/collectAll.ts +1 -4
- package/_src/Fiber/api/interruptAll.ts +2 -2
- package/_src/Fiber/api/interruptAs.ts +1 -1
- package/_src/Fiber/api/interruptAsFork.ts +7 -0
- package/_src/Fiber/api/interruptFork.ts +1 -1
- package/_src/Fiber/definition.ts +3 -5
- package/_src/FiberRef/api.ts +30 -7
- package/_src/FiberRef/definition.ts +1 -0
- package/_src/FiberRef/unsafe.ts +27 -3
- package/_src/FiberRefs/api.ts +16 -0
- package/_src/FiberRefs/join.ts +1 -1
- package/_src/IO/api/core-scope.ts +12 -10
- package/_src/IO/api/interrupt.ts +8 -3
- package/_src/IO/api/supervised.ts +14 -0
- package/_src/IO/api.ts +25 -26
- package/_src/IO/definition.ts +8 -158
- package/_src/IO/runtime.ts +7 -11
- package/_src/IO.ts +1 -0
- package/_src/Reloadable/api.ts +28 -0
- package/_src/Reloadable/constructors.ts +60 -0
- package/_src/Reloadable/definition.ts +34 -0
- package/_src/Reloadable.ts +5 -0
- package/_src/internal/IsFatal.ts +79 -0
- package/internal/IsFatal.d.ts +47 -0
- package/package.json +4 -4
package/_src/FiberRef/unsafe.ts
CHANGED
@@ -5,6 +5,7 @@ import { identity } from "@fncts/base/data/function";
|
|
5
5
|
import { Patch } from "@fncts/base/data/Patch";
|
6
6
|
import { defaultScheduler } from "@fncts/io/internal/Scheduler";
|
7
7
|
|
8
|
+
import { IsFatal } from "../internal/IsFatal.js";
|
8
9
|
import { FiberRefInternal } from "./definition.js";
|
9
10
|
|
10
11
|
/**
|
@@ -16,8 +17,9 @@ export function unsafeMakePatch<Value, Patch>(
|
|
16
17
|
combine: (first: Patch, second: Patch) => Patch,
|
17
18
|
patch: (patch: Patch) => (oldValue: Value) => Value,
|
18
19
|
fork: Patch,
|
20
|
+
join: (oldValue: Value, newValue: Value) => Value = (_, newValue) => newValue,
|
19
21
|
): FiberRef.WithPatch<Value, Patch> {
|
20
|
-
return new FiberRefInternal(initial, diff, combine, patch, fork);
|
22
|
+
return new FiberRefInternal(initial, diff, combine, patch, fork, join);
|
21
23
|
}
|
22
24
|
|
23
25
|
/**
|
@@ -45,15 +47,20 @@ export function unsafeMake<A>(
|
|
45
47
|
initial,
|
46
48
|
(_, newValue) => () => newValue,
|
47
49
|
(first, second) => (value) => second(first(value)),
|
48
|
-
(patch) => (value) =>
|
50
|
+
(patch) => (value) => patch(value),
|
49
51
|
fork,
|
52
|
+
join,
|
50
53
|
);
|
51
54
|
}
|
52
55
|
|
53
56
|
/**
|
54
57
|
* @tsplus static fncts.io.FiberRefOps forkScopeOverride
|
55
58
|
*/
|
56
|
-
export const forkScopeOverride = FiberRef.unsafeMake<Maybe<FiberScope>>(
|
59
|
+
export const forkScopeOverride = FiberRef.unsafeMake<Maybe<FiberScope>>(
|
60
|
+
Nothing(),
|
61
|
+
() => Nothing(),
|
62
|
+
(parent, _) => parent,
|
63
|
+
);
|
57
64
|
|
58
65
|
/**
|
59
66
|
* @tsplus static fncts.io.FiberRefOps currentEnvironment
|
@@ -84,3 +91,20 @@ export const currentLogAnnotations = FiberRef.unsafeMake<HashMap<string, string>
|
|
84
91
|
* @tsplus static fncts.io.FiberRefOps currentScheduler
|
85
92
|
*/
|
86
93
|
export const currentScheduler = FiberRef.unsafeMake<Scheduler>(defaultScheduler);
|
94
|
+
|
95
|
+
/**
|
96
|
+
* @tsplus static fncts.io.FiberRefOps currentSupervisor
|
97
|
+
*/
|
98
|
+
export const currentSupervisor = FiberRef.unsafeMake<Supervisor<any>>(Supervisor.none);
|
99
|
+
|
100
|
+
/**
|
101
|
+
* @tsplus static fncts.io.FiberRefOps currentIsFatal
|
102
|
+
*/
|
103
|
+
export const currentIsFatal = FiberRef.unsafeMake<IsFatal>(IsFatal.empty);
|
104
|
+
|
105
|
+
/**
|
106
|
+
* @tsplus static fncts.io.FiberRefOps currentReportFatal
|
107
|
+
*/
|
108
|
+
export const currentReportFatal = FiberRef.unsafeMake<(t: unknown) => never>((t) => {
|
109
|
+
throw t;
|
110
|
+
});
|
package/_src/FiberRefs/api.ts
CHANGED
@@ -13,3 +13,19 @@ export function fiberRefs(self: FiberRefs): HashSet<FiberRef<unknown>> {
|
|
13
13
|
export function make(fiberRefLocals: HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>>): FiberRefs {
|
14
14
|
return new FiberRefs(fiberRefLocals);
|
15
15
|
}
|
16
|
+
|
17
|
+
/**
|
18
|
+
* @tsplus fluent fncts.io.FiberRefs forkAs
|
19
|
+
*/
|
20
|
+
export function forkAs(self: FiberRefs, childId: FiberId.Runtime): FiberRefs {
|
21
|
+
const childFiberRefLocals = self.fiberRefLocals.mapWithIndex((fiberRef, stack) => {
|
22
|
+
const oldValue = stack.head[1];
|
23
|
+
const newValue = fiberRef.patch(fiberRef.fork)(oldValue);
|
24
|
+
if (oldValue === newValue) {
|
25
|
+
return stack;
|
26
|
+
} else {
|
27
|
+
return Cons([childId, newValue], stack);
|
28
|
+
}
|
29
|
+
});
|
30
|
+
return FiberRefs(childFiberRefLocals);
|
31
|
+
}
|
package/_src/FiberRefs/join.ts
CHANGED
@@ -25,7 +25,7 @@ export function join(self: FiberRefs, fiberId: FiberId.Runtime, that: FiberRefs)
|
|
25
25
|
const patch = ref.diff(ancestor, childValue);
|
26
26
|
|
27
27
|
const oldValue = parentStack.head[1];
|
28
|
-
const newValue = ref.patch(patch)(oldValue);
|
28
|
+
const newValue = ref.join(oldValue, ref.patch(patch)(oldValue));
|
29
29
|
|
30
30
|
if (oldValue === newValue) return parentFiberRefs;
|
31
31
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
import { ExitTag } from "@fncts/base/data/Exit";
|
2
2
|
|
3
3
|
import { FiberScope } from "../../FiberScope.js";
|
4
|
-
import { Fork,
|
4
|
+
import { Fork, IO, Race } from "../definition.js";
|
5
5
|
|
6
6
|
/**
|
7
7
|
* @tsplus getter fncts.io.IO daemonChildren
|
8
8
|
*/
|
9
9
|
export function daemonChildren<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
10
|
-
return IO.defer(
|
10
|
+
return IO.defer(FiberRef.forkScopeOverride.locally(Just(FiberScope.global))(self));
|
11
11
|
}
|
12
12
|
|
13
13
|
/**
|
@@ -15,7 +15,9 @@ export function daemonChildren<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: strin
|
|
15
15
|
*
|
16
16
|
* @tsplus static fncts.io.IOOps forkScope
|
17
17
|
*/
|
18
|
-
export const forkScope: UIO<FiberScope> =
|
18
|
+
export const forkScope: UIO<FiberScope> = IO.withFiberContext((fiber) =>
|
19
|
+
IO(fiber.unsafeGetRef(FiberRef.forkScopeOverride).getOrElse(fiber.scope)),
|
20
|
+
);
|
19
21
|
|
20
22
|
/**
|
21
23
|
* Retrieves the scope that will be used to supervise forked effects.
|
@@ -23,14 +25,14 @@ export const forkScope: UIO<FiberScope> = new GetForkScope(IO.succeedNow);
|
|
23
25
|
* @tsplus static fncts.io.IOOps forkScopeWith
|
24
26
|
*/
|
25
27
|
export function forkScopeWith<R, E, A>(f: (_: FiberScope) => IO<R, E, A>, __tsplusTrace?: string) {
|
26
|
-
return
|
28
|
+
return forkScope.flatMap(f);
|
27
29
|
}
|
28
30
|
|
29
31
|
export class ForkScopeRestore {
|
30
32
|
constructor(private scope: FiberScope) {}
|
31
33
|
|
32
34
|
readonly restore = <R, E, A>(ma: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> =>
|
33
|
-
|
35
|
+
FiberRef.forkScopeOverride.locally(Just(this.scope))(ma);
|
34
36
|
}
|
35
37
|
|
36
38
|
/**
|
@@ -45,8 +47,8 @@ export function forkScopeMask_<R, E, A>(
|
|
45
47
|
f: (restore: ForkScopeRestore) => IO<R, E, A>,
|
46
48
|
__tsplusTrace?: string,
|
47
49
|
): IO<R, E, A> {
|
48
|
-
return IO.forkScopeWith(
|
49
|
-
(
|
50
|
+
return IO.forkScopeWith((scope) =>
|
51
|
+
FiberRef.forkScopeOverride.locally(Just(newScope))(f(new ForkScopeRestore(scope))),
|
50
52
|
);
|
51
53
|
}
|
52
54
|
|
@@ -103,7 +105,7 @@ export type Grafter = <R, E, A>(effect: IO<R, E, A>) => IO<R, E, A>;
|
|
103
105
|
* @tsplus static fncts.io.IOOps transplant
|
104
106
|
*/
|
105
107
|
export function transplant<R, E, A>(f: (_: Grafter) => IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
106
|
-
return forkScopeWith((scope) => f((e) =>
|
108
|
+
return forkScopeWith((scope) => f((e) => FiberRef.forkScopeOverride.locally(Just(scope))(e)));
|
107
109
|
}
|
108
110
|
|
109
111
|
/**
|
@@ -124,7 +126,7 @@ export function forkDaemon<R, E, A>(ma: IO<R, E, A>, __tsplusTrace?: string): UR
|
|
124
126
|
* @tsplus fluent fncts.io.IO overrideForkScope
|
125
127
|
*/
|
126
128
|
export function overrideForkScope_<R, E, A>(ma: IO<R, E, A>, scope: FiberScope, __tsplusTrace?: string): IO<R, E, A> {
|
127
|
-
return
|
129
|
+
return FiberRef.forkScopeOverride.locally(Just(scope))(ma);
|
128
130
|
}
|
129
131
|
|
130
132
|
/**
|
@@ -134,5 +136,5 @@ export function overrideForkScope_<R, E, A>(ma: IO<R, E, A>, scope: FiberScope,
|
|
134
136
|
* @tsplus getter fncts.io.IO defaultForkScope
|
135
137
|
*/
|
136
138
|
export function defaultForkScope<R, E, A>(ma: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
137
|
-
return
|
139
|
+
return FiberRef.forkScopeOverride.locally(Nothing())(ma);
|
138
140
|
}
|
package/_src/IO/api/interrupt.ts
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
import { SetInterrupt } from "../definition.js";
|
2
|
-
|
3
1
|
/**
|
4
2
|
* Returns an effect that is interrupted as if by the specified fiber.
|
5
3
|
*
|
@@ -30,7 +28,14 @@ export function setInterruptStatus_<R, E, A>(
|
|
30
28
|
flag: InterruptStatus,
|
31
29
|
__tsplusTrace?: string,
|
32
30
|
): IO<R, E, A> {
|
33
|
-
return
|
31
|
+
return IO.withFiberContext((fiber) => {
|
32
|
+
const b = flag.toBoolean;
|
33
|
+
if (fiber.unsafeIsInterruptible !== b) {
|
34
|
+
fiber.interruptStatus.push(b);
|
35
|
+
fiber.unsafeRestoreInterruptStatus();
|
36
|
+
}
|
37
|
+
return self;
|
38
|
+
});
|
34
39
|
}
|
35
40
|
|
36
41
|
/**
|
@@ -0,0 +1,14 @@
|
|
1
|
+
/**
|
2
|
+
*
|
3
|
+
* Returns an IO with the behavior of this one, but where all child
|
4
|
+
* fibers forked in the effect are reported to the specified supervisor.
|
5
|
+
*
|
6
|
+
* @tsplus fluent fncts.io.IO supervised
|
7
|
+
*/
|
8
|
+
export function supervised_<R, E, A>(
|
9
|
+
fa: IO<R, E, A>,
|
10
|
+
supervisor: Supervisor<any>,
|
11
|
+
__tsplusTrace?: string,
|
12
|
+
): IO<R, E, A> {
|
13
|
+
return FiberRef.currentSupervisor.locally(supervisor)(fa);
|
14
|
+
}
|
package/_src/IO/api.ts
CHANGED
@@ -1,28 +1,24 @@
|
|
1
|
+
import type { FiberStatus } from "../FiberStatus.js";
|
1
2
|
import type * as P from "@fncts/base/typeclass";
|
2
3
|
import type { _E, _R } from "@fncts/base/types";
|
3
4
|
import type { FiberContext } from "@fncts/io/Fiber/FiberContext";
|
4
5
|
import type { Canceler } from "@fncts/io/IO/definition";
|
5
6
|
|
6
7
|
import { identity, pipe, tuple } from "@fncts/base/data/function";
|
8
|
+
import { Stateful } from "@fncts/io/IO/definition";
|
7
9
|
import {
|
8
10
|
Async,
|
9
11
|
Chain,
|
10
12
|
Defer,
|
11
13
|
DeferWith,
|
12
|
-
Ensuring,
|
13
14
|
Fail,
|
14
|
-
FiberRefModifyAll,
|
15
15
|
Fork,
|
16
|
-
GetDescriptor,
|
17
|
-
GetInterrupt,
|
18
16
|
IO,
|
19
17
|
IOError,
|
20
18
|
Logged,
|
21
19
|
Match,
|
22
|
-
SetRuntimeConfig,
|
23
20
|
Succeed,
|
24
21
|
SucceedNow,
|
25
|
-
Supervise,
|
26
22
|
Yield,
|
27
23
|
} from "@fncts/io/IO/definition";
|
28
24
|
|
@@ -358,7 +354,7 @@ export function checkInterruptible<R, E, A>(
|
|
358
354
|
f: (i: InterruptStatus) => IO<R, E, A>,
|
359
355
|
__tsplusTrace?: string,
|
360
356
|
): IO<R, E, A> {
|
361
|
-
return
|
357
|
+
return IO.withFiberContext((fiber) => f(InterruptStatus.fromBoolean(fiber.unsafeIsInterruptible)));
|
362
358
|
}
|
363
359
|
|
364
360
|
/**
|
@@ -515,7 +511,7 @@ export const descriptor = descriptorWith(IO.succeedNow);
|
|
515
511
|
* @tsplus static fncts.io.IOOps descriptorWith
|
516
512
|
*/
|
517
513
|
export function descriptorWith<R, E, A>(f: (d: FiberDescriptor) => IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
518
|
-
return
|
514
|
+
return IO.withFiberContext((fiber) => f(fiber.unsafeGetDescriptor()));
|
519
515
|
}
|
520
516
|
|
521
517
|
/**
|
@@ -535,7 +531,10 @@ export function ensuring_<R, E, A, R1>(
|
|
535
531
|
finalizer: IO<R1, never, any>,
|
536
532
|
__tsplusTrace?: string,
|
537
533
|
): IO<R | R1, E, A> {
|
538
|
-
return
|
534
|
+
return IO.withFiberContext((fiber) => {
|
535
|
+
fiber.unsafeAddFinalizer(finalizer);
|
536
|
+
return self;
|
537
|
+
});
|
539
538
|
}
|
540
539
|
|
541
540
|
/**
|
@@ -1801,7 +1800,7 @@ export function sandboxWith_<R, E, A, E1>(
|
|
1801
1800
|
* @tsplus static fncts.io.IOOps setRuntimeConfig
|
1802
1801
|
*/
|
1803
1802
|
export function setRuntimeConfig(runtimeConfig: Lazy<RuntimeConfig>, __tsplusTrace?: string): UIO<void> {
|
1804
|
-
return IO.
|
1803
|
+
return IO.withFiberContext((fiber) => IO((fiber.runtimeConfig = runtimeConfig())));
|
1805
1804
|
}
|
1806
1805
|
|
1807
1806
|
/**
|
@@ -1839,21 +1838,6 @@ export function succeed<A>(effect: Lazy<A>, __tsplusTrace?: string): UIO<A> {
|
|
1839
1838
|
return new Succeed(effect, __tsplusTrace);
|
1840
1839
|
}
|
1841
1840
|
|
1842
|
-
/**
|
1843
|
-
*
|
1844
|
-
* Returns an IO with the behavior of this one, but where all child
|
1845
|
-
* fibers forked in the effect are reported to the specified supervisor.
|
1846
|
-
*
|
1847
|
-
* @tsplus fluent fncts.io.IO supervised
|
1848
|
-
*/
|
1849
|
-
export function supervised_<R, E, A>(
|
1850
|
-
fa: IO<R, E, A>,
|
1851
|
-
supervisor: Supervisor<any>,
|
1852
|
-
__tsplusTrace?: string,
|
1853
|
-
): IO<R, E, A> {
|
1854
|
-
return new Supervise(fa, supervisor);
|
1855
|
-
}
|
1856
|
-
|
1857
1841
|
/**
|
1858
1842
|
* @tsplus fluent fncts.io.IO summarized
|
1859
1843
|
*/
|
@@ -2051,7 +2035,22 @@ export function updateFiberRefs(
|
|
2051
2035
|
f: (fiberId: FiberId.Runtime, fiberRefs: FiberRefs) => FiberRefs,
|
2052
2036
|
__tsplusTrace?: string,
|
2053
2037
|
): UIO<void> {
|
2054
|
-
return
|
2038
|
+
return IO.withFiberContext((fiber) =>
|
2039
|
+
IO(() => {
|
2040
|
+
const newFiberRefs = f(fiber.fiberId, fiber.fiberRefs);
|
2041
|
+
fiber.fiberRefLocals = newFiberRefs.fiberRefLocals;
|
2042
|
+
}),
|
2043
|
+
);
|
2044
|
+
}
|
2045
|
+
|
2046
|
+
/**
|
2047
|
+
* @tsplus static fncts.io.IOOps withFiberContext
|
2048
|
+
*/
|
2049
|
+
export function withFiberContext<R, E, A>(
|
2050
|
+
onState: (fiber: FiberContext<E, A>, status: FiberStatus) => IO<R, E, A>,
|
2051
|
+
__tsplusTrace?: string,
|
2052
|
+
): IO<R, E, A> {
|
2053
|
+
return new Stateful(onState, __tsplusTrace);
|
2055
2054
|
}
|
2056
2055
|
|
2057
2056
|
/**
|
package/_src/IO/definition.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import type { FiberStatus } from "../FiberStatus.js";
|
1
2
|
import type { Trace as Trace_ } from "@fncts/base/data/Trace";
|
2
3
|
import type { FiberContext } from "@fncts/io/Fiber/FiberContext";
|
3
4
|
|
@@ -7,7 +8,7 @@ export type IOTypeId = typeof IOTypeId;
|
|
7
8
|
export interface IOF extends HKT {
|
8
9
|
type: IO<this["R"], this["E"], this["A"]>;
|
9
10
|
variance: {
|
10
|
-
R: "
|
11
|
+
R: "+";
|
11
12
|
E: "+";
|
12
13
|
A: "+";
|
13
14
|
};
|
@@ -66,22 +67,9 @@ export const enum IOTag {
|
|
66
67
|
Fail = "Fail",
|
67
68
|
Yield = "Yield",
|
68
69
|
Race = "Race",
|
69
|
-
SetInterrupt = "SetInterrupt",
|
70
|
-
GetInterrupt = "GetInterrupt",
|
71
|
-
GetDescriptor = "GetDescriptor",
|
72
|
-
Supervise = "Supervise",
|
73
|
-
FiberRefModify = "FiberRefModify",
|
74
|
-
FiberRefLocally = "FiberRefLocally",
|
75
|
-
FiberRefDelete = "FiberRefDelete",
|
76
|
-
FiberRefWith = "FiberRefWith",
|
77
|
-
FiberRefModifyAll = "FiberRefModifyAll",
|
78
|
-
GetForkScope = "GetForkScope",
|
79
|
-
OverrideForkScope = "OverrideForkScope",
|
80
70
|
Trace = "Trace",
|
81
|
-
GetRuntimeConfig = "GetRuntimeConfig",
|
82
|
-
Ensuring = "Ensuring",
|
83
71
|
Logged = "Logged",
|
84
|
-
|
72
|
+
Stateful = "Stateful",
|
85
73
|
}
|
86
74
|
|
87
75
|
export function isIO(u: unknown): u is IO<any, any, any> {
|
@@ -236,134 +224,16 @@ export class Race<R, E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3> extends IO<R | R1
|
|
236
224
|
}
|
237
225
|
}
|
238
226
|
|
239
|
-
|
240
|
-
|
241
|
-
*/
|
242
|
-
export class SetInterrupt<R, E, A> extends IO<R, E, A> {
|
243
|
-
readonly _tag = IOTag.SetInterrupt;
|
244
|
-
|
245
|
-
constructor(readonly io: IO<R, E, A>, readonly flag: InterruptStatus, readonly trace?: string) {
|
246
|
-
super();
|
247
|
-
}
|
248
|
-
}
|
249
|
-
|
250
|
-
/**
|
251
|
-
* @internal
|
252
|
-
*/
|
253
|
-
export class GetInterrupt<R, E, A> extends IO<R, E, A> {
|
254
|
-
readonly _tag = IOTag.GetInterrupt;
|
255
|
-
|
256
|
-
constructor(readonly f: (_: InterruptStatus) => IO<R, E, A>, readonly trace?: string) {
|
257
|
-
super();
|
258
|
-
}
|
259
|
-
}
|
260
|
-
|
261
|
-
/**
|
262
|
-
* @internal
|
263
|
-
*/
|
264
|
-
export class GetDescriptor<R, E, A> extends IO<R, E, A> {
|
265
|
-
readonly _tag = IOTag.GetDescriptor;
|
266
|
-
|
267
|
-
constructor(readonly f: (_: FiberDescriptor) => IO<R, E, A>, readonly trace?: string) {
|
268
|
-
super();
|
269
|
-
}
|
270
|
-
}
|
271
|
-
|
272
|
-
/**
|
273
|
-
* @internal
|
274
|
-
*/
|
275
|
-
export class Supervise<R, E, A> extends IO<R, E, A> {
|
276
|
-
readonly _tag = IOTag.Supervise;
|
277
|
-
|
278
|
-
constructor(readonly io: IO<R, E, A>, readonly supervisor: Supervisor<any>, readonly trace?: string) {
|
279
|
-
super();
|
280
|
-
}
|
281
|
-
}
|
282
|
-
|
283
|
-
/**
|
284
|
-
* @internal
|
285
|
-
*/
|
286
|
-
export class FiberRefModify<A, B> extends IO<never, never, B> {
|
287
|
-
readonly _tag = IOTag.FiberRefModify;
|
288
|
-
|
289
|
-
constructor(readonly fiberRef: FiberRef<unknown>, readonly f: (a: A) => readonly [B, A], readonly trace?: string) {
|
290
|
-
super();
|
291
|
-
}
|
292
|
-
}
|
293
|
-
|
294
|
-
export class FiberRefLocally<V, R, E, A> extends IO<R, E, A> {
|
295
|
-
readonly _tag = IOTag.FiberRefLocally;
|
227
|
+
export class Stateful<R, E, A> extends IO<R, E, A> {
|
228
|
+
readonly _tag = IOTag.Stateful;
|
296
229
|
constructor(
|
297
|
-
readonly
|
298
|
-
readonly fiberRef: FiberRef<V>,
|
299
|
-
readonly io: IO<R, E, A>,
|
230
|
+
readonly onState: (fiber: FiberContext<E, A>, status: FiberStatus) => IO<R, E, A>,
|
300
231
|
readonly trace?: string,
|
301
232
|
) {
|
302
233
|
super();
|
303
234
|
}
|
304
235
|
}
|
305
236
|
|
306
|
-
export class FiberRefDelete extends IO<never, never, void> {
|
307
|
-
readonly _tag = IOTag.FiberRefDelete;
|
308
|
-
constructor(readonly fiberRef: FiberRef<unknown>, readonly trace?: string) {
|
309
|
-
super();
|
310
|
-
}
|
311
|
-
}
|
312
|
-
|
313
|
-
export class FiberRefWith<A, P, R, E, B> extends IO<R, E, B> {
|
314
|
-
readonly _tag = IOTag.FiberRefWith;
|
315
|
-
constructor(readonly fiberRef: FiberRef<A>, readonly f: (a: A) => IO<R, E, B>, readonly trace?: string) {
|
316
|
-
super();
|
317
|
-
}
|
318
|
-
}
|
319
|
-
|
320
|
-
export class FiberRefModifyAll<A> extends IO<never, never, A> {
|
321
|
-
readonly _tag = IOTag.FiberRefModifyAll;
|
322
|
-
constructor(
|
323
|
-
readonly f: (fiberId: FiberId.Runtime, fiberRefs: FiberRefs) => readonly [A, FiberRefs],
|
324
|
-
readonly trace?: string,
|
325
|
-
) {
|
326
|
-
super();
|
327
|
-
}
|
328
|
-
}
|
329
|
-
|
330
|
-
/**
|
331
|
-
* @internal
|
332
|
-
*/
|
333
|
-
export class GetForkScope<R, E, A> extends IO<R, E, A> {
|
334
|
-
readonly _tag = IOTag.GetForkScope;
|
335
|
-
|
336
|
-
constructor(readonly f: (_: FiberScope) => IO<R, E, A>, readonly trace?: string) {
|
337
|
-
super();
|
338
|
-
}
|
339
|
-
}
|
340
|
-
|
341
|
-
/**
|
342
|
-
* @internal
|
343
|
-
*/
|
344
|
-
export class OverrideForkScope<R, E, A> extends IO<R, E, A> {
|
345
|
-
readonly _tag = IOTag.OverrideForkScope;
|
346
|
-
|
347
|
-
constructor(readonly io: IO<R, E, A>, readonly forkScope: Maybe<FiberScope>, readonly trace?: string) {
|
348
|
-
super();
|
349
|
-
}
|
350
|
-
}
|
351
|
-
|
352
|
-
export class GetRuntimeConfig<R, E, A> extends IO<R, E, A> {
|
353
|
-
readonly _tag = IOTag.GetRuntimeConfig;
|
354
|
-
|
355
|
-
constructor(readonly f: (_: RuntimeConfig) => IO<R, E, A>, readonly trace?: string) {
|
356
|
-
super();
|
357
|
-
}
|
358
|
-
}
|
359
|
-
|
360
|
-
export class Ensuring<R, E, A, R1> extends IO<R | R1, E, A> {
|
361
|
-
readonly _tag = IOTag.Ensuring;
|
362
|
-
constructor(readonly io: IO<R, E, A>, readonly finalizer: IO<R1, never, any>, readonly trace?: string) {
|
363
|
-
super();
|
364
|
-
}
|
365
|
-
}
|
366
|
-
|
367
237
|
export class Logged extends IO<never, never, void> {
|
368
238
|
readonly _tag = IOTag.Logged;
|
369
239
|
constructor(
|
@@ -378,13 +248,6 @@ export class Logged extends IO<never, never, void> {
|
|
378
248
|
}
|
379
249
|
}
|
380
250
|
|
381
|
-
export class SetRuntimeConfig extends IO<never, never, void> {
|
382
|
-
readonly _tag = IOTag.SetRuntimeConfig;
|
383
|
-
constructor(readonly runtimeConfig: RuntimeConfig, readonly trace?: string) {
|
384
|
-
super();
|
385
|
-
}
|
386
|
-
}
|
387
|
-
|
388
251
|
export type Instruction =
|
389
252
|
| Chain<any, any, any, any, any, any>
|
390
253
|
| SucceedNow<any>
|
@@ -393,27 +256,14 @@ export type Instruction =
|
|
393
256
|
| Async<any, any, any, any>
|
394
257
|
| Match<any, any, any, any, any, any, any, any, any>
|
395
258
|
| Fork<any, any, any>
|
396
|
-
| SetInterrupt<any, any, any>
|
397
|
-
| GetInterrupt<any, any, any>
|
398
259
|
| Fail<any>
|
399
|
-
| GetDescriptor<any, any, any>
|
400
260
|
| Yield
|
401
261
|
| Defer<any, any, any>
|
402
262
|
| DeferWith<any, any, any>
|
403
|
-
|
|
404
|
-
| FiberRefLocally<any, any, any, any>
|
405
|
-
| FiberRefDelete
|
406
|
-
| FiberRefWith<any, any, any, any, any>
|
407
|
-
| FiberRefModifyAll<any>
|
263
|
+
| Stateful<any, any, any>
|
408
264
|
| Race<any, any, any, any, any, any, any, any, any, any, any, any>
|
409
|
-
| Supervise<any, any, any>
|
410
|
-
| GetForkScope<any, any, any>
|
411
|
-
| OverrideForkScope<any, any, any>
|
412
265
|
| Trace
|
413
|
-
|
|
414
|
-
| Ensuring<any, any, any, any>
|
415
|
-
| Logged
|
416
|
-
| SetRuntimeConfig;
|
266
|
+
| Logged;
|
417
267
|
|
418
268
|
/**
|
419
269
|
* @tsplus macro identity
|
package/_src/IO/runtime.ts
CHANGED
@@ -17,11 +17,9 @@ export class Runtime<R> {
|
|
17
17
|
fiberId,
|
18
18
|
this.runtimeConfig,
|
19
19
|
Stack.single(InterruptStatus.interruptible.toBoolean),
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
[IOEnv.services, Cons([fiberId, IOEnv.environment])],
|
24
|
-
),
|
20
|
+
HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>>(
|
21
|
+
[FiberRef.currentEnvironment, Cons([fiberId, this.environment])],
|
22
|
+
[IOEnv.services, Cons([fiberId, IOEnv.environment])],
|
25
23
|
),
|
26
24
|
children,
|
27
25
|
);
|
@@ -71,12 +69,10 @@ export class Runtime<R> {
|
|
71
69
|
fiberId,
|
72
70
|
this.runtimeConfig,
|
73
71
|
Stack.single(InterruptStatus.interruptible.toBoolean),
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
[FiberRef.currentScheduler, Cons([fiberId, scheduler])],
|
79
|
-
),
|
72
|
+
HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>>(
|
73
|
+
[FiberRef.currentEnvironment, Cons([fiberId, this.environment])],
|
74
|
+
[IOEnv.services, Cons([fiberId, IOEnv.environment])],
|
75
|
+
[FiberRef.currentScheduler, Cons([fiberId, scheduler])],
|
80
76
|
),
|
81
77
|
children,
|
82
78
|
);
|
package/_src/IO.ts
CHANGED
@@ -46,6 +46,7 @@ export * from "./IO/api/scopeWith.js";
|
|
46
46
|
export * from "./IO/api/sequenceT.js";
|
47
47
|
export * from "./IO/api/sleep.js";
|
48
48
|
export * from "./IO/api/stateful.js";
|
49
|
+
export * from "./IO/api/supervised.js";
|
49
50
|
export * from "./IO/api/timeout.js";
|
50
51
|
export * from "./IO/api/withChildren.js";
|
51
52
|
export * from "./IO/api/withEarlyRelease.js";
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import type { Reloadable } from "./definition.js";
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @tsplus static fncts.io.ReloadableOps get
|
5
|
+
*/
|
6
|
+
export function get<Service>(
|
7
|
+
/** @tsplus auto */ tag: Tag<Reloadable<Service>>,
|
8
|
+
): IO<Reloadable<Service>, unknown, Service> {
|
9
|
+
return IO.serviceWithIO((service) => service.get, tag);
|
10
|
+
}
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @tsplus static fncts.io.ReloadableOps reload
|
14
|
+
*/
|
15
|
+
export function reload<Service>(
|
16
|
+
/** @tsplua auto */ tag: Tag<Reloadable<Service>>,
|
17
|
+
): IO<Reloadable<Service>, unknown, void> {
|
18
|
+
return IO.serviceWithIO((service) => service.reload, tag);
|
19
|
+
}
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @tsplus static fncts.io.ReloadableOps reloadFork
|
23
|
+
*/
|
24
|
+
export function reloadFork<Service>(
|
25
|
+
/** @tsplus auto */ tag: Tag<Reloadable<Service>>,
|
26
|
+
): IO<Reloadable<Service>, never, void> {
|
27
|
+
return IO.serviceWithIO((service) => service.reloadFork, tag);
|
28
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
import { Reloadable } from "./definition.js";
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @tsplus static fncts.io.ReloadableOps auto
|
5
|
+
*/
|
6
|
+
export function auto<In, E, Out, Env>(
|
7
|
+
layer: Layer<In, E, Out>,
|
8
|
+
tag: Tag<Out>,
|
9
|
+
schedule: Schedule<Env, any, any>,
|
10
|
+
/** @tsplus auto */ reloadableTag: Tag<Reloadable<Out>>
|
11
|
+
): Layer<In | Env, E, Reloadable<Out>> {
|
12
|
+
return Layer.scoped(
|
13
|
+
Do((Δ) => {
|
14
|
+
const env = Δ(Reloadable.manual(layer, tag, reloadableTag).build);
|
15
|
+
const reloadable = env.unsafeGet(reloadableTag);
|
16
|
+
Δ(IO.acquireRelease(reloadable.reload.schedule(schedule).forkDaemon, (fiber) => fiber.interrupt));
|
17
|
+
return reloadable;
|
18
|
+
}),
|
19
|
+
reloadableTag,
|
20
|
+
);
|
21
|
+
}
|
22
|
+
|
23
|
+
/**
|
24
|
+
* @tsplus static fncts.io.ReloadableOps autoFromConfig
|
25
|
+
*/
|
26
|
+
export function autoFromConfig<In, E, Out, Env>(
|
27
|
+
layer: Layer<In, E, Out>,
|
28
|
+
tag: Tag<Out>,
|
29
|
+
scheduleFromConfig: (env: Environment<In>) => Schedule<Env, any, any>,
|
30
|
+
/** @tsplus auto */ reloadableTag: Tag<Reloadable<Out>>
|
31
|
+
): Layer<In | Env, E, Reloadable<Out>> {
|
32
|
+
return Layer.scoped(
|
33
|
+
Do((Δ) => {
|
34
|
+
const inp = Δ(IO.environment<In>());
|
35
|
+
const schedule = scheduleFromConfig(inp);
|
36
|
+
const env = Δ(Reloadable.auto(layer, tag, schedule).build);
|
37
|
+
return env.unsafeGet(reloadableTag);
|
38
|
+
}),
|
39
|
+
reloadableTag,
|
40
|
+
);
|
41
|
+
}
|
42
|
+
|
43
|
+
/**
|
44
|
+
* @tsplus static fncts.io.ReloadableOps manual
|
45
|
+
*/
|
46
|
+
export function manual<In, E, Out>(
|
47
|
+
layer: Layer<In, E, Out>,
|
48
|
+
tag: Tag<Out>,
|
49
|
+
/** @tsplus auto */ reloadableTag: Tag<Reloadable<Out>>,
|
50
|
+
): Layer<In, E, Reloadable<Out>> {
|
51
|
+
return Layer.scoped(
|
52
|
+
Do((Δ) => {
|
53
|
+
const inp = Δ(IO.environment<In>());
|
54
|
+
const ref = Δ(ScopedRef.fromAcquire(layer.build.map((env) => env.unsafeGet(tag))));
|
55
|
+
const reload = ref.set(layer.build.map((env) => env.unsafeGet(tag))).provideEnvironment(inp);
|
56
|
+
return new Reloadable(ref, reload);
|
57
|
+
}),
|
58
|
+
reloadableTag,
|
59
|
+
);
|
60
|
+
}
|