@fncts/io 0.0.17 → 0.0.19
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/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
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export const IsFatalTypeId = /*#__PURE__*/Symbol.for("fncts.io.IsFatal");
|
|
2
|
+
/**
|
|
3
|
+
* @tsplus type fncts.io.IsFatal
|
|
4
|
+
* @tsplus companion fncts.io.IsFatalOps
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export class IsFatal {
|
|
8
|
+
constructor() {
|
|
9
|
+
this._typeId = IsFatalTypeId;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
apply(t) {
|
|
13
|
+
concrete(this);
|
|
14
|
+
|
|
15
|
+
switch (this._tag) {
|
|
16
|
+
case 0
|
|
17
|
+
/* IsFatalTag.Single */
|
|
18
|
+
:
|
|
19
|
+
return this.predicate(t);
|
|
20
|
+
|
|
21
|
+
case 1
|
|
22
|
+
/* IsFatalTag.Empty */
|
|
23
|
+
:
|
|
24
|
+
return false;
|
|
25
|
+
|
|
26
|
+
case 2
|
|
27
|
+
/* IsFatalTag.Both */
|
|
28
|
+
:
|
|
29
|
+
return this.left.apply(t) || this.right.apply(t);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
export class Single extends IsFatal {
|
|
35
|
+
constructor(predicate) {
|
|
36
|
+
super();
|
|
37
|
+
this.predicate = predicate;
|
|
38
|
+
this._tag = 0
|
|
39
|
+
/* IsFatalTag.Single */
|
|
40
|
+
;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
export class Empty extends IsFatal {
|
|
45
|
+
constructor() {
|
|
46
|
+
super(...arguments);
|
|
47
|
+
this._tag = 1
|
|
48
|
+
/* IsFatalTag.Empty */
|
|
49
|
+
;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
export class Both extends IsFatal {
|
|
54
|
+
constructor(left, right) {
|
|
55
|
+
super();
|
|
56
|
+
this.left = left;
|
|
57
|
+
this.right = right;
|
|
58
|
+
this._tag = 2
|
|
59
|
+
/* IsFatalTag.Both */
|
|
60
|
+
;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function concrete(u) {//
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @tsplus static fncts.io.IsFatalOps empty
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
export const empty = /*#__PURE__*/new Empty();
|
|
73
|
+
/**
|
|
74
|
+
* @tsplus static fncts.io.IsFatalOps __call
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
export function makeIsFatal(predicate) {
|
|
78
|
+
return new Single(predicate);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @tsplus static fncts.io.IsFatalOps both
|
|
82
|
+
* @tsplus fluent fncts.io.IsFatal both
|
|
83
|
+
* @tsplus operator fncts.io.IsFatal |
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
export function both(left, right) {
|
|
87
|
+
concrete(left);
|
|
88
|
+
concrete(right);
|
|
89
|
+
|
|
90
|
+
if (left._tag === 1
|
|
91
|
+
/* IsFatalTag.Empty */
|
|
92
|
+
) {
|
|
93
|
+
return right;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (right._tag === 1
|
|
97
|
+
/* IsFatalTag.Empty */
|
|
98
|
+
) {
|
|
99
|
+
return left;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return new Both(left, right);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=IsFatal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsFatal.mjs","mappings":"AAMA,OAAO,MAAMA,aAAa,gBAAGC,MAAM,CAACC,GAAP,CAAW,kBAAX,CAAtB;AAGP;;;;;AAIA,OAAM,MAAgBC,OAAhB,CAAuB;EAA7BC;IACW,eAAyBJ,aAAzB;EAaV;;EAXCK,KAAK,CAACC,CAAD,EAAW;IACdC,QAAQ,CAAC,IAAD,CAAR;;IACA,QAAQ,KAAKC,IAAb;MACE;MAAA;MAAA;QACE,OAAO,KAAKC,SAAL,CAAeH,CAAf,CAAP;;MACF;MAAA;MAAA;QACE,OAAO,KAAP;;MACF;MAAA;MAAA;QACE,OAAO,KAAKI,IAAL,CAAUL,KAAV,CAAgBC,CAAhB,KAAsB,KAAKK,KAAL,CAAWN,KAAX,CAAiBC,CAAjB,CAA7B;IANJ;EAQD;;AAb0B;AAgB7B,OAAM,MAAOM,MAAP,SAAsBT,OAAtB,CAA6B;EAEjCC,YAAqBK,SAArB,EAAkD;IAChD;IADmB;IADZ,YAAI;IAAA;IAAJ;EAGR;;AAJgC;AAOnC,OAAM,MAAOI,KAAP,SAAqBV,OAArB,CAA4B;EAAlCC;;IACW,YAAI;IAAA;IAAJ;EACV;;AAFiC;AAIlC,OAAM,MAAOU,IAAP,SAAoBX,OAApB,CAA2B;EAE/BC,YAAqBM,IAArB,EAA6CC,KAA7C,EAA2D;IACzD;IADmB;IAAwB;IADpC,YAAI;IAAA;IAAJ;EAGR;;AAJ8B;;AAOjC,SAASJ,QAAT,CAAkBQ,CAAlB,EAA4B,CAC1B;AACD;AAED;;;;;AAGA,OAAO,MAAMC,KAAK,gBAAY,IAAIH,KAAJ,EAAvB;AAEP;;;;AAGA,OAAM,SAAUI,WAAV,CAAsBR,SAAtB,EAAmD;EACvD,OAAO,IAAIG,MAAJ,CAAWH,SAAX,CAAP;AACD;AAED;;;;;;AAKA,OAAM,SAAUS,IAAV,CAAeR,IAAf,EAA8BC,KAA9B,EAA4C;EAChDJ,QAAQ,CAACG,IAAD,CAAR;EACAH,QAAQ,CAACI,KAAD,CAAR;;EACA,IAAID,IAAI,CAACF,IAAL,KAAS;EAAA;EAAb,EAAoC;IAClC,OAAOG,KAAP;EACD;;EACD,IAAIA,KAAK,CAACH,IAAN,KAAU;EAAA;EAAd,EAAqC;IACnC,OAAOE,IAAP;EACD;;EACD,OAAO,IAAII,IAAJ,CAASJ,IAAT,EAAeC,KAAf,CAAP;AACD","names":["IsFatalTypeId","Symbol","for","IsFatal","constructor","apply","t","concrete","_tag","predicate","left","right","Single","Empty","Both","u","empty","makeIsFatal","both"],"sourceRoot":"","sources":["../../_src/internal/IsFatal.ts"],"sourcesContent":[null]}
|
package/_src/Clock/definition.ts
CHANGED
|
@@ -8,11 +8,10 @@ import { CancellerState } from "@fncts/io/CancellerState";
|
|
|
8
8
|
import { FiberTypeId, isFiber } from "@fncts/io/Fiber/definition";
|
|
9
9
|
import { FiberState } from "@fncts/io/FiberState";
|
|
10
10
|
import { FiberStatus, FiberStatusTag } from "@fncts/io/FiberStatus";
|
|
11
|
-
import { defaultScheduler } from "@fncts/io/internal/Scheduler";
|
|
12
11
|
import { StackTraceBuilder } from "@fncts/io/internal/StackTraceBuilder";
|
|
13
12
|
import { concrete, IOTag, isIOError } from "@fncts/io/IO/definition";
|
|
14
13
|
|
|
15
|
-
export type FiberRefLocals =
|
|
14
|
+
export type FiberRefLocals = HashMap<FiberRef<unknown>, Cons<readonly [FiberId.Runtime, unknown]>>;
|
|
16
15
|
|
|
17
16
|
type Erased = IO<any, any, any>;
|
|
18
17
|
type ErasedCont = (a: any) => Erased;
|
|
@@ -73,16 +72,15 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
73
72
|
private asyncEpoch = 0 | 0;
|
|
74
73
|
private stack = Stack<Frame>();
|
|
75
74
|
nextIO: Instruction | null = null;
|
|
76
|
-
private currentSupervisor: Supervisor<any>;
|
|
77
75
|
|
|
78
76
|
constructor(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
readonly fiberId: FiberId.Runtime,
|
|
78
|
+
public runtimeConfig: RuntimeConfig,
|
|
79
|
+
public interruptStatus: Stack<boolean>,
|
|
80
|
+
public fiberRefLocals: FiberRefLocals,
|
|
83
81
|
private readonly _children: Set<FiberContext<unknown, unknown>>,
|
|
84
82
|
) {
|
|
85
|
-
this.currentSupervisor
|
|
83
|
+
this.unsafeSetRef(FiberRef.currentSupervisor, this.runtimeConfig.supervisor);
|
|
86
84
|
}
|
|
87
85
|
|
|
88
86
|
get poll() {
|
|
@@ -91,7 +89,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
91
89
|
|
|
92
90
|
get inheritRefs(): UIO<void> {
|
|
93
91
|
return IO.defer(() => {
|
|
94
|
-
const childFiberRefLocals = this.fiberRefLocals
|
|
92
|
+
const childFiberRefLocals = this.fiberRefLocals;
|
|
95
93
|
if (childFiberRefLocals.isEmpty) {
|
|
96
94
|
return IO.unit;
|
|
97
95
|
} else {
|
|
@@ -142,6 +140,10 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
142
140
|
});
|
|
143
141
|
}
|
|
144
142
|
|
|
143
|
+
get fiberRefs(): FiberRefs {
|
|
144
|
+
return FiberRefs(this.fiberRefLocals);
|
|
145
|
+
}
|
|
146
|
+
|
|
145
147
|
get await(): UIO<Exit<E, A>> {
|
|
146
148
|
return IO.asyncInterrupt((k): Either<UIO<void>, UIO<Exit<E, A>>> => {
|
|
147
149
|
const cb: FiberState.Callback<never, Exit<E, A>> = (x) => k(IO.fromExit(x));
|
|
@@ -171,7 +173,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
171
173
|
}
|
|
172
174
|
|
|
173
175
|
interruptAs(fiberId: FiberId): UIO<Exit<E, A>> {
|
|
174
|
-
return this.
|
|
176
|
+
return this.interruptAsFork(fiberId).apSecond(this.await);
|
|
175
177
|
}
|
|
176
178
|
|
|
177
179
|
evalOn(effect: UIO<any>, orElse: UIO<any>): UIO<void> {
|
|
@@ -310,24 +312,13 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
310
312
|
}
|
|
311
313
|
break;
|
|
312
314
|
}
|
|
315
|
+
|
|
313
316
|
case IOTag.Match: {
|
|
314
317
|
this.stack.push(current);
|
|
315
318
|
current = concrete(current.io);
|
|
316
319
|
break;
|
|
317
320
|
}
|
|
318
|
-
|
|
319
|
-
const boolFlag = current.flag.toBoolean;
|
|
320
|
-
if (this.unsafeIsInterruptible !== boolFlag) {
|
|
321
|
-
this.interruptStatus.push(current.flag.toBoolean);
|
|
322
|
-
this.unsafeRestoreInterruptStatus();
|
|
323
|
-
}
|
|
324
|
-
current = concrete(current.io);
|
|
325
|
-
break;
|
|
326
|
-
}
|
|
327
|
-
case IOTag.GetInterrupt: {
|
|
328
|
-
current = concrete(current.f(InterruptStatus.fromBoolean(this.unsafeIsInterruptible)));
|
|
329
|
-
break;
|
|
330
|
-
}
|
|
321
|
+
|
|
331
322
|
case IOTag.Async: {
|
|
332
323
|
const trace = current.trace;
|
|
333
324
|
|
|
@@ -372,10 +363,6 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
372
363
|
);
|
|
373
364
|
break;
|
|
374
365
|
}
|
|
375
|
-
case IOTag.GetDescriptor: {
|
|
376
|
-
current = concrete(current.f(this.unsafeGetDescriptor()));
|
|
377
|
-
break;
|
|
378
|
-
}
|
|
379
366
|
case IOTag.Yield: {
|
|
380
367
|
current = null;
|
|
381
368
|
this.unsafeRunLater(concrete(IO.unit));
|
|
@@ -390,47 +377,8 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
390
377
|
break;
|
|
391
378
|
}
|
|
392
379
|
|
|
393
|
-
case IOTag.
|
|
394
|
-
|
|
395
|
-
this.fiberRefLocals.set(newValue.fiberRefLocals);
|
|
396
|
-
current = this.unsafeNextEffect(result);
|
|
397
|
-
break;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
case IOTag.FiberRefModify: {
|
|
401
|
-
const c = current;
|
|
402
|
-
const [result, newValue] = current.f(this.unsafeGetRef(current.fiberRef));
|
|
403
|
-
this.unsafeSetRef(c.fiberRef, newValue);
|
|
404
|
-
current = this.unsafeNextEffect(result);
|
|
405
|
-
break;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
case IOTag.FiberRefLocally: {
|
|
409
|
-
const oldValue = this.unsafeGetRef(current.fiberRef);
|
|
410
|
-
const fiberRef = current.fiberRef;
|
|
411
|
-
this.unsafeSetRef(fiberRef, current.localValue);
|
|
412
|
-
this.unsafeAddFinalizer(
|
|
413
|
-
IO.succeed(() => {
|
|
414
|
-
this.unsafeSetRef(fiberRef, oldValue);
|
|
415
|
-
}),
|
|
416
|
-
);
|
|
417
|
-
current = concrete(current.io);
|
|
418
|
-
break;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
case IOTag.FiberRefDelete: {
|
|
422
|
-
this.unsafeDeleteRef(current.fiberRef);
|
|
423
|
-
current = this.unsafeNextEffect(undefined);
|
|
424
|
-
break;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
case IOTag.FiberRefWith: {
|
|
428
|
-
current = concrete(current.f(this.unsafeGetRef(current.fiberRef)));
|
|
429
|
-
break;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
case IOTag.GetRuntimeConfig: {
|
|
433
|
-
current = concrete(current.f(this.runtimeConfig));
|
|
380
|
+
case IOTag.Stateful: {
|
|
381
|
+
current = concrete(current.onState(this, this.state.status));
|
|
434
382
|
break;
|
|
435
383
|
}
|
|
436
384
|
|
|
@@ -439,39 +387,6 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
439
387
|
break;
|
|
440
388
|
}
|
|
441
389
|
|
|
442
|
-
case IOTag.Supervise: {
|
|
443
|
-
const oldSupervisor = this.currentSupervisor;
|
|
444
|
-
this.currentSupervisor = current.supervisor.zip(oldSupervisor);
|
|
445
|
-
this.unsafeAddFinalizer(
|
|
446
|
-
IO.succeed(() => {
|
|
447
|
-
this.currentSupervisor = oldSupervisor;
|
|
448
|
-
}),
|
|
449
|
-
);
|
|
450
|
-
current = concrete(current.io);
|
|
451
|
-
break;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
case IOTag.GetForkScope: {
|
|
455
|
-
current = concrete(current.f(this.unsafeGetRef(FiberRef.forkScopeOverride).getOrElse(this.scope)));
|
|
456
|
-
break;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
case IOTag.OverrideForkScope: {
|
|
460
|
-
const oldForkScopeOverride = this.unsafeGetRef(FiberRef.forkScopeOverride);
|
|
461
|
-
this.unsafeSetRef(FiberRef.forkScopeOverride, current.forkScope);
|
|
462
|
-
this.unsafeAddFinalizer(
|
|
463
|
-
IO.succeed(() => {
|
|
464
|
-
this.unsafeSetRef(FiberRef.forkScopeOverride, oldForkScopeOverride);
|
|
465
|
-
}),
|
|
466
|
-
);
|
|
467
|
-
current = concrete(current.io);
|
|
468
|
-
break;
|
|
469
|
-
}
|
|
470
|
-
case IOTag.Ensuring: {
|
|
471
|
-
this.unsafeAddFinalizer(current.finalizer);
|
|
472
|
-
current = concrete(current.io);
|
|
473
|
-
break;
|
|
474
|
-
}
|
|
475
390
|
case IOTag.Logged: {
|
|
476
391
|
this.unsafeLogWith(
|
|
477
392
|
current.message,
|
|
@@ -485,11 +400,6 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
485
400
|
current = this.unsafeNextEffect(undefined);
|
|
486
401
|
break;
|
|
487
402
|
}
|
|
488
|
-
case IOTag.SetRuntimeConfig: {
|
|
489
|
-
this.runtimeConfig = current.runtimeConfig;
|
|
490
|
-
current = concrete(IO.unit);
|
|
491
|
-
break;
|
|
492
|
-
}
|
|
493
403
|
default: {
|
|
494
404
|
console.log("Unrecognized Instruction", current);
|
|
495
405
|
throw new Error("Unrecognized Instruction");
|
|
@@ -520,6 +430,8 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
520
430
|
current = concrete(IO.failCauseNow(e.exit.cause, trace));
|
|
521
431
|
}
|
|
522
432
|
}
|
|
433
|
+
} else if (this.unsafeIsFatal(e)) {
|
|
434
|
+
this.unsafeHandleFatalError(e);
|
|
523
435
|
} else {
|
|
524
436
|
this.unsafeSetInterrupting(true);
|
|
525
437
|
current = concrete(IO.haltNow(e));
|
|
@@ -528,7 +440,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
528
440
|
}
|
|
529
441
|
} finally {
|
|
530
442
|
currentFiber.set(null);
|
|
531
|
-
this.currentSupervisor
|
|
443
|
+
this.currentSupervisor.unsafeOnSuspend(this);
|
|
532
444
|
}
|
|
533
445
|
}
|
|
534
446
|
|
|
@@ -539,19 +451,19 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
539
451
|
});
|
|
540
452
|
}
|
|
541
453
|
|
|
542
|
-
|
|
543
|
-
return this.fiberRefLocals
|
|
454
|
+
unsafeGetRef<A>(ref: FiberRef<A>): A {
|
|
455
|
+
return this.fiberRefLocals
|
|
544
456
|
.get(ref)
|
|
545
457
|
.map((_) => _.head[1])
|
|
546
458
|
.getOrElse(ref.initial) as A;
|
|
547
459
|
}
|
|
548
460
|
|
|
549
461
|
private unsafeGetRefs(fiberRefLocals: FiberRefLocals): HashMap<FiberRef<unknown>, unknown> {
|
|
550
|
-
return fiberRefLocals.
|
|
462
|
+
return fiberRefLocals.map((stack) => stack.head[1]);
|
|
551
463
|
}
|
|
552
464
|
|
|
553
|
-
|
|
554
|
-
const oldState = this.fiberRefLocals
|
|
465
|
+
unsafeSetRef<A>(ref: FiberRef<A>, value: A): void {
|
|
466
|
+
const oldState = this.fiberRefLocals;
|
|
555
467
|
const oldStack = oldState.get(ref).getOrElse(List.empty<readonly [FiberId.Runtime, unknown]>());
|
|
556
468
|
let newStack: Cons<readonly [FiberId.Runtime, unknown]>;
|
|
557
469
|
if (oldStack.isEmpty()) {
|
|
@@ -561,12 +473,12 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
561
473
|
} else {
|
|
562
474
|
newStack = Cons([this.fiberId, value], oldStack);
|
|
563
475
|
}
|
|
564
|
-
const newState
|
|
565
|
-
this.fiberRefLocals
|
|
476
|
+
const newState = oldState.set(ref, newStack);
|
|
477
|
+
this.fiberRefLocals = newState;
|
|
566
478
|
}
|
|
567
479
|
|
|
568
|
-
|
|
569
|
-
this.fiberRefLocals
|
|
480
|
+
unsafeDeleteRef<A>(ref: FiberRef<A>): void {
|
|
481
|
+
this.fiberRefLocals = this.fiberRefLocals.remove(ref);
|
|
570
482
|
}
|
|
571
483
|
|
|
572
484
|
unsafePoll() {
|
|
@@ -592,7 +504,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
592
504
|
}
|
|
593
505
|
});
|
|
594
506
|
|
|
595
|
-
|
|
507
|
+
unsafeAddFinalizer(finalizer: IO<any, never, any>): void {
|
|
596
508
|
this.stack.push(
|
|
597
509
|
new Finalizer(finalizer, (v) => {
|
|
598
510
|
this.unsafeDisableInterruption();
|
|
@@ -602,7 +514,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
602
514
|
);
|
|
603
515
|
}
|
|
604
516
|
|
|
605
|
-
|
|
517
|
+
get unsafeIsInterruptible() {
|
|
606
518
|
return this.interruptStatus.hasNext ? this.interruptStatus.peek()! : true;
|
|
607
519
|
}
|
|
608
520
|
|
|
@@ -622,7 +534,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
622
534
|
this.interruptStatus.push(false);
|
|
623
535
|
}
|
|
624
536
|
|
|
625
|
-
|
|
537
|
+
unsafeRestoreInterruptStatus(): void {
|
|
626
538
|
this.stack.push(this.interruptExit);
|
|
627
539
|
}
|
|
628
540
|
|
|
@@ -724,9 +636,9 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
724
636
|
}
|
|
725
637
|
}
|
|
726
638
|
|
|
727
|
-
|
|
639
|
+
interruptAsFork(fiberId: FiberId): UIO<void> {
|
|
728
640
|
const interruptedCause = Cause.interrupt(fiberId);
|
|
729
|
-
return IO
|
|
641
|
+
return IO(() => {
|
|
730
642
|
const oldState = this.state;
|
|
731
643
|
if (
|
|
732
644
|
this.state._tag === "Executing" &&
|
|
@@ -745,7 +657,6 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
745
657
|
this.state.interruptors.add(fiberId);
|
|
746
658
|
this.state.suppressed = newCause;
|
|
747
659
|
}
|
|
748
|
-
return this.await;
|
|
749
660
|
});
|
|
750
661
|
}
|
|
751
662
|
|
|
@@ -890,15 +801,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
890
801
|
): FiberContext<any, any> {
|
|
891
802
|
const childId = FiberId.unsafeMake(TraceElement.parse(trace));
|
|
892
803
|
|
|
893
|
-
const childFiberRefLocals = this.
|
|
894
|
-
const oldValue = stack.head[1];
|
|
895
|
-
const newValue = fiberRef.patch(fiberRef.fork)(oldValue);
|
|
896
|
-
if (oldValue === newValue) {
|
|
897
|
-
return stack;
|
|
898
|
-
} else {
|
|
899
|
-
return Cons([childId, newValue], stack);
|
|
900
|
-
}
|
|
901
|
-
});
|
|
804
|
+
const childFiberRefLocals = this.fiberRefs.forkAs(childId).fiberRefLocals;
|
|
902
805
|
|
|
903
806
|
const parentScope: FiberScope = forkScope
|
|
904
807
|
.orElse(this.unsafeGetRef(FiberRef.forkScopeOverride))
|
|
@@ -910,7 +813,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
910
813
|
childId,
|
|
911
814
|
this.runtimeConfig,
|
|
912
815
|
Stack.single(this.unsafeIsInterruptible),
|
|
913
|
-
|
|
816
|
+
childFiberRefLocals,
|
|
914
817
|
grandChildren,
|
|
915
818
|
);
|
|
916
819
|
|
|
@@ -958,7 +861,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
958
861
|
}
|
|
959
862
|
}
|
|
960
863
|
|
|
961
|
-
|
|
864
|
+
unsafeGetDescriptor() {
|
|
962
865
|
return new FiberDescriptor(
|
|
963
866
|
this.fiberId,
|
|
964
867
|
this.state.status,
|
|
@@ -1056,7 +959,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
1056
959
|
logLevel,
|
|
1057
960
|
message,
|
|
1058
961
|
Cause.empty(),
|
|
1059
|
-
this.fiberRefLocals
|
|
962
|
+
this.fiberRefLocals,
|
|
1060
963
|
spans,
|
|
1061
964
|
annotations,
|
|
1062
965
|
);
|
|
@@ -1087,7 +990,7 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
1087
990
|
}
|
|
1088
991
|
contextMap = map;
|
|
1089
992
|
} else {
|
|
1090
|
-
contextMap = this.fiberRefLocals
|
|
993
|
+
contextMap = this.fiberRefLocals;
|
|
1091
994
|
}
|
|
1092
995
|
|
|
1093
996
|
this.runtimeConfig.logger.log(
|
|
@@ -1101,4 +1004,16 @@ export class FiberContext<E, A> implements Fiber.Runtime<E, A>, Hashable, Equata
|
|
|
1101
1004
|
annotations,
|
|
1102
1005
|
);
|
|
1103
1006
|
}
|
|
1007
|
+
|
|
1008
|
+
private unsafeIsFatal(t: unknown): boolean {
|
|
1009
|
+
return this.unsafeGetRef(FiberRef.currentIsFatal).apply(t);
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
private unsafeHandleFatalError(t: unknown): never {
|
|
1013
|
+
return this.unsafeGetRef(FiberRef.currentReportFatal)(t);
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
get currentSupervisor(): Supervisor<any> {
|
|
1017
|
+
return this.unsafeGetRef(FiberRef.currentSupervisor);
|
|
1018
|
+
}
|
|
1104
1019
|
}
|
|
@@ -27,9 +27,6 @@ export function sequenceIterable<E, A>(
|
|
|
27
27
|
),
|
|
28
28
|
),
|
|
29
29
|
),
|
|
30
|
-
(fiberId) =>
|
|
31
|
-
IO.foreach(fibers, (fiber) => fiber.interruptAs(fiberId)).map((exits) =>
|
|
32
|
-
exits.foldRight(Exit.succeed(Conc.empty()), (a, b) => a.zipWithCause(b, (a, b) => b.append(a), Cause.then)),
|
|
33
|
-
),
|
|
30
|
+
(fiberId) => IO.foreachDiscard(fibers, (fiber) => fiber.interruptAsFork(fiberId))
|
|
34
31
|
);
|
|
35
32
|
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @tsplus static fncts.io.FiberOps interruptAllAs
|
|
5
5
|
*/
|
|
6
|
-
export function
|
|
7
|
-
return
|
|
6
|
+
export function interruptAllAs(fs: Iterable<Fiber<any, any>>, id: FiberId, __tsplusTrace?: string): UIO<void> {
|
|
7
|
+
return IO.foreachDiscard(fs, fiber => fiber.interruptAsFork(id)) > IO.foreachDiscard(fs, fiber => fiber.await)
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/**
|
package/_src/Fiber/definition.ts
CHANGED
|
@@ -40,11 +40,9 @@ export interface FiberCommon<E, A> extends Fiber<E, A> {
|
|
|
40
40
|
readonly inheritRefs: UIO<void>;
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
|
-
* Interrupts the fiber as if interrupted from the specified fiber.
|
|
44
|
-
* fiber has already exited, the returned effect will resume immediately.
|
|
45
|
-
* Otherwise, the effect will resume when the fiber exits.
|
|
43
|
+
* Interrupts the fiber as if interrupted from the specified fiber.
|
|
46
44
|
*/
|
|
47
|
-
readonly
|
|
45
|
+
readonly interruptAsFork: (fiberId: FiberId) => UIO<void>;
|
|
48
46
|
|
|
49
47
|
/**
|
|
50
48
|
* Tentatively observes the fiber, but returns immediately if it is not already done.
|
|
@@ -107,7 +105,7 @@ export class SyntheticFiber<E, A> implements FiberCommon<E, A> {
|
|
|
107
105
|
readonly children: UIO<Conc<Fiber.Runtime<any, any>>>,
|
|
108
106
|
readonly inheritRefs: UIO<void>,
|
|
109
107
|
readonly poll: UIO<Maybe<Exit<E, A>>>,
|
|
110
|
-
readonly
|
|
108
|
+
readonly interruptAsFork: (fiberId: FiberId) => UIO<void>,
|
|
111
109
|
) {
|
|
112
110
|
this.await = wait;
|
|
113
111
|
}
|
package/_src/FiberRef/api.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { identity } from "@fncts/base/data/function";
|
|
2
2
|
import { concrete } from "@fncts/io/FiberRef/definition";
|
|
3
|
-
import { FiberRefDelete, FiberRefLocally, FiberRefModify, FiberRefWith } from "@fncts/io/IO/definition";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* @tsplus fluent fncts.io.FiberRef modify
|
|
7
6
|
*/
|
|
8
7
|
export function modify_<A, B>(self: FiberRef<A>, f: (a: A) => readonly [B, A], __tsplusTrace?: string): UIO<B> {
|
|
9
8
|
concrete(self);
|
|
10
|
-
return
|
|
9
|
+
return IO.withFiberContext((fiber) =>
|
|
10
|
+
IO(() => {
|
|
11
|
+
const [result, newValue] = f(fiber.unsafeGetRef(self));
|
|
12
|
+
fiber.unsafeSetRef(self, newValue);
|
|
13
|
+
return result;
|
|
14
|
+
}),
|
|
15
|
+
);
|
|
11
16
|
}
|
|
12
17
|
|
|
13
18
|
/**
|
|
@@ -60,9 +65,19 @@ export function getAndUpdateJust_<A>(fiberRef: FiberRef<A>, f: (a: A) => Maybe<A
|
|
|
60
65
|
* @tsplus fluent fncts.io.FiberRef locally
|
|
61
66
|
*/
|
|
62
67
|
export function locally_<A>(fiberRef: FiberRef<A>, value: A, __tsplusTrace?: string) {
|
|
63
|
-
return <R1, E1, B>(use: IO<R1, E1, B>): IO<R1, E1, B> =>
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
return <R1, E1, B>(use: IO<R1, E1, B>): IO<R1, E1, B> =>
|
|
69
|
+
IO.withFiberContext((fiber) =>
|
|
70
|
+
IO.defer(() => {
|
|
71
|
+
const oldValue = fiber.unsafeGetRef(fiberRef);
|
|
72
|
+
fiber.unsafeSetRef(fiberRef, value);
|
|
73
|
+
fiber.unsafeAddFinalizer(
|
|
74
|
+
IO(() => {
|
|
75
|
+
fiber.unsafeSetRef(fiberRef, oldValue);
|
|
76
|
+
}),
|
|
77
|
+
);
|
|
78
|
+
return use;
|
|
79
|
+
}),
|
|
80
|
+
);
|
|
66
81
|
}
|
|
67
82
|
|
|
68
83
|
/**
|
|
@@ -84,14 +99,14 @@ export function getWith_<A, R, E, B>(
|
|
|
84
99
|
f: (a: A) => IO<R, E, B>,
|
|
85
100
|
__tsplusTrace?: string,
|
|
86
101
|
): IO<R, E, B> {
|
|
87
|
-
return
|
|
102
|
+
return IO.withFiberContext((fiber) => f(fiber.unsafeGetRef(fiberRef)));
|
|
88
103
|
}
|
|
89
104
|
|
|
90
105
|
/**
|
|
91
106
|
* @tsplus getter fncts.io.FiberRef remove
|
|
92
107
|
*/
|
|
93
108
|
export function remove<A>(self: FiberRef<A>, __tsplusTrace?: string): UIO<void> {
|
|
94
|
-
return
|
|
109
|
+
return IO.withFiberContext((fiber) => IO(fiber.unsafeDeleteRef(self)));
|
|
95
110
|
}
|
|
96
111
|
|
|
97
112
|
/**
|
|
@@ -133,3 +148,11 @@ export function fork<Value, Patch>(self: FiberRef.WithPatch<Value, Patch>): Patc
|
|
|
133
148
|
concrete(self);
|
|
134
149
|
return self._fork;
|
|
135
150
|
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @tsplus fluent fncts.io.FiberRef join
|
|
154
|
+
*/
|
|
155
|
+
export function join<Value, Patch>(self: FiberRef.WithPatch<Value, Patch>, oldValue: Value, newValue: Value): Value {
|
|
156
|
+
concrete(self);
|
|
157
|
+
return self._join(oldValue, newValue);
|
|
158
|
+
}
|
|
@@ -33,6 +33,7 @@ export class FiberRefInternal<Value, Patch> extends FiberRef<Value> implements H
|
|
|
33
33
|
readonly _combine: (first: Patch, second: Patch) => Patch,
|
|
34
34
|
readonly _patch: (patch: Patch) => (oldValue: Value) => Value,
|
|
35
35
|
readonly _fork: Patch,
|
|
36
|
+
readonly _join: (oldValue: Value, newValue: Value) => Value,
|
|
36
37
|
) {
|
|
37
38
|
super();
|
|
38
39
|
}
|