@fncts/io 0.0.23 → 0.0.25
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/FiberRef/api.d.ts +0 -63
- package/FiberRef/operations.d.ts +64 -0
- package/FiberRef.d.ts +1 -0
- package/FiberRefs/api.d.ts +6 -1
- package/FiberRefs.d.ts +0 -1
- package/IO/api/daemonChildren.d.ts +6 -0
- package/IO/api/descriptor.d.ts +12 -0
- package/IO/api/disconnect.d.ts +17 -0
- package/IO/api/fork.d.ts +4 -0
- package/IO/api/forkDaemon.d.ts +10 -0
- package/IO/api/interrupt.d.ts +1 -20
- package/IO/api/race.d.ts +7 -1
- package/IO/api/raceWith.d.ts +17 -0
- package/IO/api/transplant.d.ts +13 -0
- package/IO/api.d.ts +1 -12
- package/IO.d.ts +6 -1
- package/RefSubject/Atomic.d.ts +1 -1
- package/_cjs/Cached/api.cjs +1 -1
- package/_cjs/Channel/api/mergeAllWith.cjs +1 -1
- package/_cjs/Channel/api/mergeWith.cjs +17 -16
- package/_cjs/Channel/api/mergeWith.cjs.map +1 -1
- package/_cjs/Channel/api.cjs +1 -3
- package/_cjs/Channel/api.cjs.map +1 -1
- package/_cjs/Fiber/FiberRuntime.cjs +16 -17
- package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
- package/_cjs/FiberRef/api/locallyScoped.cjs +1 -1
- package/_cjs/FiberRef/api/locallyScopedWith.cjs +1 -1
- package/_cjs/FiberRef/api.cjs +0 -124
- package/_cjs/FiberRef/api.cjs.map +1 -1
- package/_cjs/FiberRef/constructors.cjs +1 -1
- package/_cjs/FiberRef/operations.cjs +130 -0
- package/_cjs/FiberRef/operations.cjs.map +1 -0
- package/_cjs/FiberRef.cjs +11 -0
- package/_cjs/FiberRef.cjs.map +1 -1
- package/_cjs/FiberRefs/api.cjs +90 -0
- package/_cjs/FiberRefs/api.cjs.map +1 -1
- package/_cjs/FiberRefs.cjs +0 -11
- package/_cjs/FiberRefs.cjs.map +1 -1
- package/_cjs/Future/api.cjs +1 -3
- package/_cjs/Future/api.cjs.map +1 -1
- package/_cjs/IO/api/asyncIO.cjs +1 -3
- package/_cjs/IO/api/asyncIO.cjs.map +1 -1
- package/_cjs/IO/api/bracketExit.cjs +1 -3
- package/_cjs/IO/api/bracketExit.cjs.map +1 -1
- package/_cjs/IO/api/clockWith.cjs +1 -1
- package/_cjs/IO/api/concurrency.cjs +1 -1
- package/_cjs/IO/api/consoleWith.cjs +1 -1
- package/_cjs/IO/api/daemonChildren.cjs +19 -0
- package/_cjs/IO/api/daemonChildren.cjs.map +1 -0
- package/_cjs/IO/api/descriptor.cjs +30 -0
- package/_cjs/IO/api/descriptor.cjs.map +1 -0
- package/_cjs/IO/api/disconnect.cjs +31 -0
- package/_cjs/IO/api/disconnect.cjs.map +1 -0
- package/_cjs/IO/api/environment.cjs +1 -1
- package/_cjs/IO/api/foreachConcurrent.cjs +19 -20
- package/_cjs/IO/api/foreachConcurrent.cjs.map +1 -1
- package/_cjs/IO/api/fork.cjs +8 -3
- package/_cjs/IO/api/fork.cjs.map +1 -1
- package/_cjs/IO/api/forkDaemon.cjs +21 -0
- package/_cjs/IO/api/forkDaemon.cjs.map +1 -0
- package/_cjs/IO/api/forkIn.cjs +2 -4
- package/_cjs/IO/api/forkIn.cjs.map +1 -1
- package/_cjs/IO/api/forkScoped.cjs +2 -4
- package/_cjs/IO/api/forkScoped.cjs.map +1 -1
- package/_cjs/IO/api/fulfill.cjs +1 -3
- package/_cjs/IO/api/fulfill.cjs.map +1 -1
- package/_cjs/IO/api/interrupt.cjs +8 -59
- package/_cjs/IO/api/interrupt.cjs.map +1 -1
- package/_cjs/IO/api/race.cjs +24 -12
- package/_cjs/IO/api/race.cjs.map +1 -1
- package/_cjs/IO/api/{core-scope.cjs → raceWith.cjs} +15 -56
- package/_cjs/IO/api/raceWith.cjs.map +1 -0
- package/_cjs/IO/api/randomWith.cjs +1 -1
- package/_cjs/IO/api/supervised.cjs +1 -1
- package/_cjs/IO/api/transplant.cjs +31 -0
- package/_cjs/IO/api/transplant.cjs.map +1 -0
- package/_cjs/IO/api/zipConcurrent.cjs +5 -6
- package/_cjs/IO/api/zipConcurrent.cjs.map +1 -1
- package/_cjs/IO/api.cjs +52 -70
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO.cjs +59 -4
- package/_cjs/IO.cjs.map +1 -1
- package/_cjs/Layer/MemoMap.cjs +1 -3
- package/_cjs/Layer/MemoMap.cjs.map +1 -1
- package/_cjs/RefSubject/Atomic.cjs +2 -2
- package/_cjs/RefSubject/Atomic.cjs.map +1 -1
- package/_cjs/Reloadable/constructors.cjs +1 -1
- package/_cjs/Reloadable/definition.cjs +1 -1
- package/_cjs/STM/api/atomically.cjs +2 -4
- package/_cjs/STM/api/atomically.cjs.map +1 -1
- package/_cjs/ScopedRef/api.cjs +2 -6
- package/_cjs/ScopedRef/api.cjs.map +1 -1
- package/_cjs/State/api.cjs +1 -1
- package/_cjs/Stream/api.cjs +137 -135
- package/_cjs/Stream/api.cjs.map +1 -1
- package/_cjs/TReentrantLock/api.cjs +2 -6
- package/_cjs/TReentrantLock/api.cjs.map +1 -1
- package/_cjs/TSemaphore/api.cjs +1 -3
- package/_cjs/TSemaphore/api.cjs.map +1 -1
- package/_mjs/Cached/api.mjs +1 -1
- package/_mjs/Channel/api/mergeAllWith.mjs +1 -1
- package/_mjs/Channel/api/mergeWith.mjs +17 -16
- package/_mjs/Channel/api/mergeWith.mjs.map +1 -1
- package/_mjs/Channel/api.mjs +1 -3
- package/_mjs/Channel/api.mjs.map +1 -1
- package/_mjs/Fiber/FiberRuntime.mjs +16 -17
- package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
- package/_mjs/FiberRef/api/locallyScoped.mjs +1 -1
- package/_mjs/FiberRef/api/locallyScopedWith.mjs +1 -1
- package/_mjs/FiberRef/api.mjs +0 -107
- package/_mjs/FiberRef/api.mjs.map +1 -1
- package/_mjs/FiberRef/constructors.mjs +1 -1
- package/_mjs/FiberRef/operations.mjs +109 -0
- package/_mjs/FiberRef/operations.mjs.map +1 -0
- package/_mjs/FiberRef.mjs +1 -0
- package/_mjs/FiberRef.mjs.map +1 -1
- package/_mjs/FiberRefs/api.mjs +89 -0
- package/_mjs/FiberRefs/api.mjs.map +1 -1
- package/_mjs/FiberRefs.mjs +0 -1
- package/_mjs/FiberRefs.mjs.map +1 -1
- package/_mjs/Future/api.mjs +1 -3
- package/_mjs/Future/api.mjs.map +1 -1
- package/_mjs/IO/api/asyncIO.mjs +1 -3
- package/_mjs/IO/api/asyncIO.mjs.map +1 -1
- package/_mjs/IO/api/bracketExit.mjs +1 -3
- package/_mjs/IO/api/bracketExit.mjs.map +1 -1
- package/_mjs/IO/api/clockWith.mjs +1 -1
- package/_mjs/IO/api/concurrency.mjs +1 -1
- package/_mjs/IO/api/consoleWith.mjs +1 -1
- package/_mjs/IO/api/daemonChildren.mjs +11 -0
- package/_mjs/IO/api/daemonChildren.mjs.map +1 -0
- package/_mjs/IO/api/descriptor.mjs +20 -0
- package/_mjs/IO/api/descriptor.mjs.map +1 -0
- package/_mjs/IO/api/disconnect.mjs +23 -0
- package/_mjs/IO/api/disconnect.mjs.map +1 -0
- package/_mjs/IO/api/environment.mjs +1 -1
- package/_mjs/IO/api/foreachConcurrent.mjs +19 -20
- package/_mjs/IO/api/foreachConcurrent.mjs.map +1 -1
- package/_mjs/IO/api/fork.mjs +6 -2
- package/_mjs/IO/api/fork.mjs.map +1 -1
- package/_mjs/IO/api/forkDaemon.mjs +13 -0
- package/_mjs/IO/api/forkDaemon.mjs.map +1 -0
- package/_mjs/IO/api/forkIn.mjs +2 -4
- package/_mjs/IO/api/forkIn.mjs.map +1 -1
- package/_mjs/IO/api/forkScoped.mjs +2 -4
- package/_mjs/IO/api/forkScoped.mjs.map +1 -1
- package/_mjs/IO/api/fulfill.mjs +1 -3
- package/_mjs/IO/api/fulfill.mjs.map +1 -1
- package/_mjs/IO/api/interrupt.mjs +6 -55
- package/_mjs/IO/api/interrupt.mjs.map +1 -1
- package/_mjs/IO/api/race.mjs +22 -12
- package/_mjs/IO/api/race.mjs.map +1 -1
- package/_mjs/IO/api/raceWith.mjs +59 -0
- package/_mjs/IO/api/raceWith.mjs.map +1 -0
- package/_mjs/IO/api/randomWith.mjs +1 -1
- package/_mjs/IO/api/supervised.mjs +1 -1
- package/_mjs/IO/api/transplant.mjs +23 -0
- package/_mjs/IO/api/transplant.mjs.map +1 -0
- package/_mjs/IO/api/zipConcurrent.mjs +5 -6
- package/_mjs/IO/api/zipConcurrent.mjs.map +1 -1
- package/_mjs/IO/api.mjs +51 -67
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO.mjs +6 -1
- package/_mjs/IO.mjs.map +1 -1
- package/_mjs/Layer/MemoMap.mjs +1 -3
- package/_mjs/Layer/MemoMap.mjs.map +1 -1
- package/_mjs/RefSubject/Atomic.mjs +1 -1
- package/_mjs/RefSubject/Atomic.mjs.map +1 -1
- package/_mjs/Reloadable/constructors.mjs +1 -1
- package/_mjs/Reloadable/definition.mjs +1 -1
- package/_mjs/STM/api/atomically.mjs +2 -4
- package/_mjs/STM/api/atomically.mjs.map +1 -1
- package/_mjs/ScopedRef/api.mjs +2 -6
- package/_mjs/ScopedRef/api.mjs.map +1 -1
- package/_mjs/State/api.mjs +1 -1
- package/_mjs/Stream/api.mjs +137 -135
- package/_mjs/Stream/api.mjs.map +1 -1
- package/_mjs/TReentrantLock/api.mjs +2 -6
- package/_mjs/TReentrantLock/api.mjs.map +1 -1
- package/_mjs/TSemaphore/api.mjs +1 -3
- package/_mjs/TSemaphore/api.mjs.map +1 -1
- package/_src/Channel/api.ts +1 -1
- package/_src/FiberRef/api.ts +0 -114
- package/_src/FiberRef/operations.ts +115 -0
- package/_src/FiberRef.ts +1 -0
- package/_src/FiberRefs/api.ts +72 -0
- package/_src/FiberRefs.ts +0 -1
- package/_src/Future/api.ts +1 -1
- package/_src/IO/api/asyncIO.ts +1 -1
- package/_src/IO/api/bracketExit.ts +1 -1
- package/_src/IO/api/daemonChildren.ts +6 -0
- package/_src/IO/api/descriptor.ts +14 -0
- package/_src/IO/api/disconnect.ts +25 -0
- package/_src/IO/api/foreachConcurrent.ts +1 -1
- package/_src/IO/api/fork.ts +3 -0
- package/_src/IO/api/forkDaemon.ts +12 -0
- package/_src/IO/api/forkIn.ts +1 -1
- package/_src/IO/api/forkScoped.ts +1 -3
- package/_src/IO/api/fulfill.ts +1 -1
- package/_src/IO/api/interrupt.ts +5 -56
- package/_src/IO/api/race.ts +18 -8
- package/_src/IO/api/{core-scope.ts → raceWith.ts} +2 -44
- package/_src/IO/api/transplant.ts +19 -0
- package/_src/IO/api/zipConcurrent.ts +1 -1
- package/_src/IO/api.ts +0 -15
- package/_src/IO.ts +6 -1
- package/_src/Layer/MemoMap.ts +1 -1
- package/_src/RefSubject/Atomic.ts +1 -1
- package/_src/STM/api/atomically.ts +1 -1
- package/_src/ScopedRef/api.ts +2 -2
- package/_src/TReentrantLock/api.ts +2 -2
- package/_src/TSemaphore/api.ts +1 -1
- package/package.json +1 -1
- package/FiberRefs/join.d.ts +0 -9
- package/IO/api/core-scope.d.ts +0 -43
- package/_cjs/FiberRefs/join.cjs +0 -104
- package/_cjs/FiberRefs/join.cjs.map +0 -1
- package/_cjs/IO/api/core-scope.cjs.map +0 -1
- package/_mjs/FiberRefs/join.mjs +0 -96
- package/_mjs/FiberRefs/join.mjs.map +0 -1
- package/_mjs/IO/api/core-scope.mjs +0 -97
- package/_mjs/IO/api/core-scope.mjs.map +0 -1
- package/_src/FiberRefs/join.ts +0 -71
|
@@ -21,7 +21,7 @@ export function atomically<R, E, A>(stm: STM<R, E, A>, __tsplusTrace?: string):
|
|
|
21
21
|
const id = TxnId.make();
|
|
22
22
|
const state = new AtomicReference<CommitState<E, A>>(CommitState.Running);
|
|
23
23
|
const async = IO.async(tryCommitAsync(result.journal, fiberId, stm, id, state, r, scheduler));
|
|
24
|
-
return IO.uninterruptibleMask((
|
|
24
|
+
return IO.uninterruptibleMask((restore) =>
|
|
25
25
|
restore(async).catchAllCause((cause) => {
|
|
26
26
|
state.compareAndSet(CommitState.Running, CommitState.Interrupted);
|
|
27
27
|
const newState = state.get;
|
package/_src/ScopedRef/api.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @tsplus static fncts.io.ScopedRefOps fromAcquire
|
|
3
3
|
*/
|
|
4
4
|
export function fromAcquire<R, E, A>(acquire: IO<R, E, A>, __tsplusTrace?: string): IO<R | Scope, E, ScopedRef<A>> {
|
|
5
|
-
return IO.uninterruptibleMask((
|
|
5
|
+
return IO.uninterruptibleMask((restore) =>
|
|
6
6
|
Do((_) => {
|
|
7
7
|
const newScope = _(Scope.make);
|
|
8
8
|
const a = _(
|
|
@@ -23,7 +23,7 @@ class Synch<A> extends ScopedRef<A> {
|
|
|
23
23
|
close: UIO<void> = this.ref.get.flatMap(([scope, _]) => scope.close(Exit.unit));
|
|
24
24
|
set<R, E>(acquire: IO<R, E, A>, __tsplusTrace?: string): IO<Exclude<R, Scope>, E, void> {
|
|
25
25
|
return this.ref.modifyIO(([oldScope, a]) =>
|
|
26
|
-
IO.uninterruptibleMask((
|
|
26
|
+
IO.uninterruptibleMask((restore) =>
|
|
27
27
|
Do((_) => {
|
|
28
28
|
const newScope = _(Scope.make);
|
|
29
29
|
const exit = _(restore(acquire.provideSomeService(newScope, Scope.Tag)).result);
|
|
@@ -92,7 +92,7 @@ export function releaseWrite(self: TReentrantLock, __tsplusTrace?: string): USTM
|
|
|
92
92
|
export function withReadLock<R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) {
|
|
93
93
|
return (self: TReentrantLock): IO<R, E, A> => {
|
|
94
94
|
return IO.uninterruptibleMask(
|
|
95
|
-
(
|
|
95
|
+
(restore) => restore(self.acquireRead.commit) > restore(io).ensuring(self.releaseRead.commit),
|
|
96
96
|
);
|
|
97
97
|
};
|
|
98
98
|
}
|
|
@@ -103,7 +103,7 @@ export function withReadLock<R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) {
|
|
|
103
103
|
export function withWriteLock<R, E, A>(io: IO<R, E, A>, __tsplusTrace?: string) {
|
|
104
104
|
return (self: TReentrantLock): IO<R, E, A> => {
|
|
105
105
|
return IO.uninterruptibleMask(
|
|
106
|
-
(
|
|
106
|
+
(restore) => restore(self.acquireWrite.commit) > restore(io).ensuring(self.releaseWrite.commit),
|
|
107
107
|
);
|
|
108
108
|
};
|
|
109
109
|
}
|
package/_src/TSemaphore/api.ts
CHANGED
|
@@ -56,7 +56,7 @@ export function releaseN(n: number, __tsplusTrace?: string) {
|
|
|
56
56
|
export function withPermits(self: TSemaphore, __tsplusTrace?: string) {
|
|
57
57
|
return (n: number) =>
|
|
58
58
|
<R, E, A>(io: IO<R, E, A>) =>
|
|
59
|
-
IO.uninterruptibleMask((
|
|
59
|
+
IO.uninterruptibleMask((restore) =>
|
|
60
60
|
restore(self.acquireN(n).commit).zipRight(restore(io).ensuring(self.releaseN(n).commit)),
|
|
61
61
|
);
|
|
62
62
|
}
|
package/package.json
CHANGED
package/FiberRefs/join.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { FiberId } from "@fncts/base/data/FiberId/definition";
|
|
2
|
-
import { FiberRefs } from "@fncts/io/FiberRefs";
|
|
3
|
-
import { Cons, List } from "@fncts/base/collection/immutable/List/definition";
|
|
4
|
-
import { FiberRef } from "@fncts/io/FiberRef/definition";
|
|
5
|
-
/**
|
|
6
|
-
* @tsplus pipeable fncts.io.FiberRefs join
|
|
7
|
-
* @tsplus location "@fncts/io/FiberRefs/join"
|
|
8
|
-
*/
|
|
9
|
-
export declare function join(fiberId: FiberId.Runtime, that: FiberRefs): (self: FiberRefs) => FiberRefs;
|
package/IO/api/core-scope.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Lazy } from "@fncts/base/data/function/definition";
|
|
2
|
-
import { Exit } from "@fncts/base/data/Exit/definition";
|
|
3
|
-
import { Fiber } from "@fncts/io/Fiber/definition";
|
|
4
|
-
import { URIO } from "@fncts/io/IO/definition";
|
|
5
|
-
import type { FiberRuntime } from "@fncts/io/Fiber/FiberRuntime";
|
|
6
|
-
import { IO } from "../definition.js";
|
|
7
|
-
/**
|
|
8
|
-
* @tsplus getter fncts.io.IO daemonChildren
|
|
9
|
-
* @tsplus location "@fncts/io/IO/api/core-scope"
|
|
10
|
-
*/
|
|
11
|
-
export declare function daemonChildren<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A>;
|
|
12
|
-
/**
|
|
13
|
-
* @tsplus pipeable fncts.io.IO raceFibersWith
|
|
14
|
-
* @tsplus location "@fncts/io/IO/api/core-scope"
|
|
15
|
-
*/
|
|
16
|
-
export declare function raceFibersWith<R, E, A, R1, E1, B, R2, E2, C, R3, E3, D>(right: Lazy<IO<R1, E1, B>>, leftWins: (winner: FiberRuntime<E, A>, loser: FiberRuntime<E1, B>) => IO<R2, E2, C>, rightWins: (winner: FiberRuntime<E1, B>, loser: FiberRuntime<E, A>) => IO<R3, E3, D>, __tsplusTrace?: string): (left: IO<R, E, A>) => IO<R | R1 | R2 | R3, E2 | E3, C | D>;
|
|
17
|
-
/**
|
|
18
|
-
* Returns an effect that races this effect with the specified effect, calling
|
|
19
|
-
* the specified finisher as soon as one result or the other has been computed.
|
|
20
|
-
* @tsplus pipeable fncts.io.IO raceWith
|
|
21
|
-
* @tsplus location "@fncts/io/IO/api/core-scope"
|
|
22
|
-
*/
|
|
23
|
-
export declare function raceWith<R, E, A, R1, E1, A1, R2, E2, A2, R3, E3, A3>(right: Lazy<IO<R1, E1, A1>>, leftWins: (exit: Exit<E, A>, fiber: Fiber<E1, A1>) => IO<R2, E2, A2>, rightWins: (exit: Exit<E1, A1>, fiber: Fiber<E, A>) => IO<R3, E3, A3>, __tsplusTrace?: string): (left: IO<R, E, A>) => IO<R | R1 | R2 | R3, E2 | E3, A2 | A3>;
|
|
24
|
-
export type Grafter = <R, E, A>(effect: IO<R, E, A>) => IO<R, E, A>;
|
|
25
|
-
/**
|
|
26
|
-
* Transplants specified effects so that when those effects fork other
|
|
27
|
-
* effects, the forked effects will be governed by the scope of the
|
|
28
|
-
* fiber that executes this effect.
|
|
29
|
-
*
|
|
30
|
-
* This can be used to "graft" deep grandchildren onto a higher-level
|
|
31
|
-
* scope, effectively extending their lifespans into the parent scope.
|
|
32
|
-
* @tsplus static fncts.io.IOOps transplant
|
|
33
|
-
* @tsplus location "@fncts/io/IO/api/core-scope"
|
|
34
|
-
*/
|
|
35
|
-
export declare function transplant<R, E, A>(f: (_: Grafter) => IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A>;
|
|
36
|
-
/**
|
|
37
|
-
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
38
|
-
* new fiber is attached to the global scope, when the fiber executing the
|
|
39
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
40
|
-
* @tsplus getter fncts.io.IO forkDaemon
|
|
41
|
-
* @tsplus location "@fncts/io/IO/api/core-scope"
|
|
42
|
-
*/
|
|
43
|
-
export declare function forkDaemon<R, E, A>(ma: IO<R, E, A>, __tsplusTrace?: string): URIO<R, FiberRuntime<E, A>>;
|
package/_cjs/FiberRefs/join.cjs
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.join = join;
|
|
7
|
-
var tsplus_module_1 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/FiberRefs"));
|
|
8
|
-
var tsplus_module_2 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Equatable/api"));
|
|
9
|
-
var tsplus_module_3 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/FiberRef/api"));
|
|
10
|
-
var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/List/constructors"));
|
|
11
|
-
var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/HashMap/api"));
|
|
12
|
-
var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/List/definition"));
|
|
13
|
-
var tsplus_module_7 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Maybe/destructors"));
|
|
14
|
-
var tsplus_module_8 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/number/instances"));
|
|
15
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
-
/**
|
|
18
|
-
* @tsplus pipeable fncts.io.FiberRefs join
|
|
19
|
-
*/
|
|
20
|
-
function join(fiberId, that) {
|
|
21
|
-
return self => {
|
|
22
|
-
const parentFiberRefs = tsplus_module_1.FiberRefs.reverseGet(self);
|
|
23
|
-
const childFiberRefs = tsplus_module_1.FiberRefs.reverseGet(that);
|
|
24
|
-
const fiberRefLocals = tsplus_module_5.foldLeftWithIndex(parentFiberRefs, (ref, parentFiberRefs, childStack) => {
|
|
25
|
-
const childValue = childStack.head[1];
|
|
26
|
-
if (tsplus_module_2.strictEquals(childStack.head[0], fiberId)) {
|
|
27
|
-
return parentFiberRefs;
|
|
28
|
-
}
|
|
29
|
-
return tsplus_module_7.match(() => {
|
|
30
|
-
if (tsplus_module_2.strictEquals(childValue, tsplus_module_3.initial(ref))) return parentFiberRefs;
|
|
31
|
-
return tsplus_module_5.set(ref, tsplus_module_4.cons([fiberId, childValue]))(parentFiberRefs);
|
|
32
|
-
}, parentStack => {
|
|
33
|
-
const [ancestor, wasModified] = findAncestor(ref, parentStack, childStack);
|
|
34
|
-
if (!wasModified) return parentFiberRefs;
|
|
35
|
-
const patch = tsplus_module_3.diff(ref)(ancestor, childValue);
|
|
36
|
-
const oldValue = parentStack.head[1];
|
|
37
|
-
const newValue = tsplus_module_3.join(oldValue, tsplus_module_3.patch(ref)(patch)(oldValue))(ref);
|
|
38
|
-
if (oldValue === newValue) return parentFiberRefs;
|
|
39
|
-
let newStack;
|
|
40
|
-
if (tsplus_module_6.isEmpty(parentStack)) {
|
|
41
|
-
newStack = tsplus_module_4.cons([fiberId, newValue]);
|
|
42
|
-
} else {
|
|
43
|
-
const [parentFiberId] = parentStack.head;
|
|
44
|
-
if (tsplus_module_2.strictEquals(parentFiberId, fiberId)) {
|
|
45
|
-
newStack = tsplus_module_4.cons([parentFiberId, newValue], parentStack.tail);
|
|
46
|
-
} else {
|
|
47
|
-
newStack = tsplus_module_4.cons([fiberId, newValue], parentStack);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return tsplus_module_5.set(ref, newStack)(parentFiberRefs);
|
|
51
|
-
})(tsplus_module_5.get(ref)(parentFiberRefs));
|
|
52
|
-
})(childFiberRefs);
|
|
53
|
-
return tsplus_module_1.FiberRefs.get(fiberRefLocals);
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
function compareFiberId(left, right) {
|
|
57
|
-
const compare = tsplus_module_8.Ord.compare(right.startTime)(left.startTime);
|
|
58
|
-
return compare === 0 ? tsplus_module_8.Ord.compare(right.id)(left.id) : compare;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* @tsplus tailRec
|
|
62
|
-
*/
|
|
63
|
-
function findAncestor(ref, parentStack, childStack, childModified = false) {
|
|
64
|
-
var ref_1 = ref,
|
|
65
|
-
parentStack_1 = parentStack,
|
|
66
|
-
childStack_1 = childStack,
|
|
67
|
-
childModified_1 = childModified;
|
|
68
|
-
var ref_2 = ref,
|
|
69
|
-
parentStack_2 = parentStack,
|
|
70
|
-
childStack_2 = childStack,
|
|
71
|
-
childModified_2 = childModified;
|
|
72
|
-
while (1) {
|
|
73
|
-
if (tsplus_module_6.isNonEmpty(parentStack_1) && tsplus_module_6.isNonEmpty(childStack_1)) {
|
|
74
|
-
const [parentFiberId] = parentStack_1.head;
|
|
75
|
-
const [childFiberId, childValue] = childStack_1.head;
|
|
76
|
-
const compare = compareFiberId(parentFiberId, childFiberId);
|
|
77
|
-
if (compare < 0) {
|
|
78
|
-
ref_2 = ref_1;
|
|
79
|
-
parentStack_2 = parentStack_1;
|
|
80
|
-
childStack_2 = childStack_1.tail;
|
|
81
|
-
childModified_2 = true;
|
|
82
|
-
ref_1 = ref_2;
|
|
83
|
-
parentStack_1 = parentStack_2;
|
|
84
|
-
childStack_1 = childStack_2;
|
|
85
|
-
childModified_1 = childModified_2;
|
|
86
|
-
continue;
|
|
87
|
-
} else if (compare > 0) {
|
|
88
|
-
ref_2 = ref_1;
|
|
89
|
-
parentStack_2 = parentStack_1.tail;
|
|
90
|
-
childStack_2 = childStack_1;
|
|
91
|
-
childModified_2 = childModified_1;
|
|
92
|
-
ref_1 = ref_2;
|
|
93
|
-
parentStack_1 = parentStack_2;
|
|
94
|
-
childStack_1 = childStack_2;
|
|
95
|
-
childModified_1 = childModified_2;
|
|
96
|
-
continue;
|
|
97
|
-
} else {
|
|
98
|
-
return [childValue, childModified_1];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return [tsplus_module_3.initial(ref_1), true];
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=join.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"join.cjs","mappings":"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","names":["join","fiberId","that","self","parentFiberRefs","tsplus_module_1","reverseGet","childFiberRefs","fiberRefLocals","tsplus_module_5","ref","childStack","childValue","head","tsplus_module_7","tsplus_module_2","tsplus_module_4","parentStack","ancestor","wasModified","findAncestor","patch","tsplus_module_3","oldValue","newValue","newStack","tsplus_module_6","parentFiberId","tail","get","compareFiberId","left","right","compare","tsplus_module_8","startTime","id","childModified","parentStack_1","childStack_1","childModified_1","parentStack_2","childStack_2","childModified_2","childFiberId"],"sourceRoot":"","sources":["../../_src/FiberRefs/join.ts"],"sourcesContent":[null]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-scope.cjs","mappings":"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","names":["daemonChildren","raceFibersWith","self","__tsplusTrace","tsplus_module_4","tsplus_module_2","right","leftWins","rightWins","left","tsplus_module_5","parentState","parentStatus","right0","parentRuntimeFlags","runtimeFlags","complete","winner","loser","cont","ab","cb","compareAndSet","raceIndicator","AtomicBoolean","leftFiber","rightFiber","setFiberRef","scope","addObserver","startFork","raceWith","raceFibersWith_1","exit","_tag","inheritAll","await","transplant","f","fiberState","scopeOverride","getFiberRef","tsplus_module_6","forkDaemon","ma"],"sourceRoot":"","sources":["../../../_src/IO/api/core-scope.ts"],"sourcesContent":[null]}
|
package/_mjs/FiberRefs/join.mjs
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@fncts/io/FiberRefs";
|
|
2
|
-
import * as tsplus_module_2 from "@fncts/base/data/Equatable/api";
|
|
3
|
-
import * as tsplus_module_3 from "@fncts/io/FiberRef/api";
|
|
4
|
-
import * as tsplus_module_4 from "@fncts/base/collection/immutable/List/constructors";
|
|
5
|
-
import * as tsplus_module_5 from "@fncts/base/collection/immutable/HashMap/api";
|
|
6
|
-
import * as tsplus_module_6 from "@fncts/base/collection/immutable/List/definition";
|
|
7
|
-
import * as tsplus_module_7 from "@fncts/base/data/Maybe/destructors";
|
|
8
|
-
import * as tsplus_module_8 from "@fncts/base/data/number/instances";
|
|
9
|
-
/**
|
|
10
|
-
* @tsplus pipeable fncts.io.FiberRefs join
|
|
11
|
-
*/
|
|
12
|
-
export function join(fiberId, that) {
|
|
13
|
-
return self => {
|
|
14
|
-
const parentFiberRefs = tsplus_module_1.FiberRefs.reverseGet(self);
|
|
15
|
-
const childFiberRefs = tsplus_module_1.FiberRefs.reverseGet(that);
|
|
16
|
-
const fiberRefLocals = tsplus_module_5.foldLeftWithIndex(parentFiberRefs, (ref, parentFiberRefs, childStack) => {
|
|
17
|
-
const childValue = childStack.head[1];
|
|
18
|
-
if (tsplus_module_2.strictEquals(childStack.head[0], fiberId)) {
|
|
19
|
-
return parentFiberRefs;
|
|
20
|
-
}
|
|
21
|
-
return tsplus_module_7.match(() => {
|
|
22
|
-
if (tsplus_module_2.strictEquals(childValue, tsplus_module_3.initial(ref))) return parentFiberRefs;
|
|
23
|
-
return tsplus_module_5.set(ref, tsplus_module_4.cons([fiberId, childValue]))(parentFiberRefs);
|
|
24
|
-
}, parentStack => {
|
|
25
|
-
const [ancestor, wasModified] = findAncestor(ref, parentStack, childStack);
|
|
26
|
-
if (!wasModified) return parentFiberRefs;
|
|
27
|
-
const patch = tsplus_module_3.diff(ref)(ancestor, childValue);
|
|
28
|
-
const oldValue = parentStack.head[1];
|
|
29
|
-
const newValue = tsplus_module_3.join(oldValue, tsplus_module_3.patch(ref)(patch)(oldValue))(ref);
|
|
30
|
-
if (oldValue === newValue) return parentFiberRefs;
|
|
31
|
-
let newStack;
|
|
32
|
-
if (tsplus_module_6.isEmpty(parentStack)) {
|
|
33
|
-
newStack = tsplus_module_4.cons([fiberId, newValue]);
|
|
34
|
-
} else {
|
|
35
|
-
const [parentFiberId] = parentStack.head;
|
|
36
|
-
if (tsplus_module_2.strictEquals(parentFiberId, fiberId)) {
|
|
37
|
-
newStack = tsplus_module_4.cons([parentFiberId, newValue], parentStack.tail);
|
|
38
|
-
} else {
|
|
39
|
-
newStack = tsplus_module_4.cons([fiberId, newValue], parentStack);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return tsplus_module_5.set(ref, newStack)(parentFiberRefs);
|
|
43
|
-
})(tsplus_module_5.get(ref)(parentFiberRefs));
|
|
44
|
-
})(childFiberRefs);
|
|
45
|
-
return tsplus_module_1.FiberRefs.get(fiberRefLocals);
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function compareFiberId(left, right) {
|
|
49
|
-
const compare = tsplus_module_8.Ord.compare(right.startTime)(left.startTime);
|
|
50
|
-
return compare === 0 ? tsplus_module_8.Ord.compare(right.id)(left.id) : compare;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* @tsplus tailRec
|
|
54
|
-
*/
|
|
55
|
-
function findAncestor(ref, parentStack, childStack, childModified = false) {
|
|
56
|
-
var ref_1 = ref,
|
|
57
|
-
parentStack_1 = parentStack,
|
|
58
|
-
childStack_1 = childStack,
|
|
59
|
-
childModified_1 = childModified;
|
|
60
|
-
var ref_2 = ref,
|
|
61
|
-
parentStack_2 = parentStack,
|
|
62
|
-
childStack_2 = childStack,
|
|
63
|
-
childModified_2 = childModified;
|
|
64
|
-
while (1) {
|
|
65
|
-
if (tsplus_module_6.isNonEmpty(parentStack_1) && tsplus_module_6.isNonEmpty(childStack_1)) {
|
|
66
|
-
const [parentFiberId] = parentStack_1.head;
|
|
67
|
-
const [childFiberId, childValue] = childStack_1.head;
|
|
68
|
-
const compare = compareFiberId(parentFiberId, childFiberId);
|
|
69
|
-
if (compare < 0) {
|
|
70
|
-
ref_2 = ref_1;
|
|
71
|
-
parentStack_2 = parentStack_1;
|
|
72
|
-
childStack_2 = childStack_1.tail;
|
|
73
|
-
childModified_2 = true;
|
|
74
|
-
ref_1 = ref_2;
|
|
75
|
-
parentStack_1 = parentStack_2;
|
|
76
|
-
childStack_1 = childStack_2;
|
|
77
|
-
childModified_1 = childModified_2;
|
|
78
|
-
continue;
|
|
79
|
-
} else if (compare > 0) {
|
|
80
|
-
ref_2 = ref_1;
|
|
81
|
-
parentStack_2 = parentStack_1.tail;
|
|
82
|
-
childStack_2 = childStack_1;
|
|
83
|
-
childModified_2 = childModified_1;
|
|
84
|
-
ref_1 = ref_2;
|
|
85
|
-
parentStack_1 = parentStack_2;
|
|
86
|
-
childStack_1 = childStack_2;
|
|
87
|
-
childModified_1 = childModified_2;
|
|
88
|
-
continue;
|
|
89
|
-
} else {
|
|
90
|
-
return [childValue, childModified_1];
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return [tsplus_module_3.initial(ref_1), true];
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=join.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"join.mjs","mappings":"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","names":["join","fiberId","that","self","parentFiberRefs","tsplus_module_1","reverseGet","childFiberRefs","fiberRefLocals","tsplus_module_5","ref","childStack","childValue","head","tsplus_module_7","tsplus_module_2","tsplus_module_4","parentStack","ancestor","wasModified","findAncestor","patch","tsplus_module_3","oldValue","newValue","newStack","tsplus_module_6","parentFiberId","tail","get","compareFiberId","left","right","compare","tsplus_module_8","startTime","id","childModified","parentStack_1","childStack_1","childModified_1","parentStack_2","childStack_2","childModified_2","childFiberId"],"sourceRoot":"","sources":["../../_src/FiberRefs/join.ts"],"sourcesContent":[null]}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@fncts/io/FiberScope/constructors";
|
|
2
|
-
import * as tsplus_module_2 from "@fncts/base/data/Maybe/constructors";
|
|
3
|
-
import * as tsplus_module_3 from "@fncts/io/FiberRef/unsafe";
|
|
4
|
-
import * as tsplus_module_4 from "@fncts/io/FiberRef/api";
|
|
5
|
-
import * as tsplus_module_5 from "@fncts/io/IO/api";
|
|
6
|
-
import * as tsplus_module_6 from "@fncts/base/data/Maybe/api";
|
|
7
|
-
import * as tsplus_module_7 from "@fncts/io/IO/api/fork";
|
|
8
|
-
export const daemonChildren = daemonChildren_1;
|
|
9
|
-
export const raceFibersWith = raceFibersWith_1;
|
|
10
|
-
import { AtomicBoolean } from "@fncts/base/internal/AtomicBoolean";
|
|
11
|
-
import { unsafeMakeChildFiber } from "@fncts/io/IO/api/fork";
|
|
12
|
-
/**
|
|
13
|
-
* @tsplus getter fncts.io.IO daemonChildren
|
|
14
|
-
*/
|
|
15
|
-
function daemonChildren_1(self, __tsplusTrace) {
|
|
16
|
-
return tsplus_module_4.locally(tsplus_module_3.forkScopeOverride, tsplus_module_2.just(tsplus_module_1.global), __tsplusTrace)(self);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* @tsplus pipeable fncts.io.IO raceFibersWith
|
|
20
|
-
*/
|
|
21
|
-
function raceFibersWith_1(right, leftWins, rightWins, __tsplusTrace) {
|
|
22
|
-
return left => {
|
|
23
|
-
return tsplus_module_5.withFiberRuntime((parentState, parentStatus) => {
|
|
24
|
-
const right0 = right();
|
|
25
|
-
const parentRuntimeFlags = parentStatus.runtimeFlags;
|
|
26
|
-
function complete(winner, loser, cont, ab, cb) {
|
|
27
|
-
if (ab.compareAndSet(true, false)) {
|
|
28
|
-
cb(cont(winner, loser));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const raceIndicator = new AtomicBoolean(true);
|
|
32
|
-
const leftFiber = unsafeMakeChildFiber(left, parentState, parentRuntimeFlags, null, __tsplusTrace);
|
|
33
|
-
const rightFiber = unsafeMakeChildFiber(right0, parentState, parentRuntimeFlags, null, __tsplusTrace);
|
|
34
|
-
leftFiber.setFiberRef(tsplus_module_3.forkScopeOverride, tsplus_module_2.just(parentState.scope));
|
|
35
|
-
rightFiber.setFiberRef(tsplus_module_3.forkScopeOverride, tsplus_module_2.just(parentState.scope));
|
|
36
|
-
return tsplus_module_5.async(cb => {
|
|
37
|
-
leftFiber.addObserver(() => complete(leftFiber, rightFiber, leftWins, raceIndicator, cb));
|
|
38
|
-
rightFiber.addObserver(() => complete(rightFiber, leftFiber, rightWins, raceIndicator, cb));
|
|
39
|
-
leftFiber.startFork(left);
|
|
40
|
-
rightFiber.startFork(right0);
|
|
41
|
-
});
|
|
42
|
-
}, __tsplusTrace);
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Returns an effect that races this effect with the specified effect, calling
|
|
47
|
-
* the specified finisher as soon as one result or the other has been computed.
|
|
48
|
-
*
|
|
49
|
-
* @tsplus pipeable fncts.io.IO raceWith
|
|
50
|
-
*/
|
|
51
|
-
export function raceWith(right, leftWins, rightWins, __tsplusTrace) {
|
|
52
|
-
return left => {
|
|
53
|
-
return raceFibersWith_1(right, (winner, loser) => tsplus_module_5.flatMap(exit => {
|
|
54
|
-
switch (exit._tag) {
|
|
55
|
-
case "Success" /* ExitTag.Success */:
|
|
56
|
-
return tsplus_module_5.flatMap(() => leftWins(exit, loser), __tsplusTrace)(winner.inheritAll);
|
|
57
|
-
case "Failure" /* ExitTag.Failure */:
|
|
58
|
-
return leftWins(exit, loser);
|
|
59
|
-
}
|
|
60
|
-
}, __tsplusTrace)(winner.await), (winner, loser) => tsplus_module_5.flatMap(exit => {
|
|
61
|
-
switch (exit._tag) {
|
|
62
|
-
case "Success" /* ExitTag.Success */:
|
|
63
|
-
return tsplus_module_5.flatMap(() => rightWins(exit, loser), __tsplusTrace)(winner.inheritAll);
|
|
64
|
-
case "Failure" /* ExitTag.Failure */:
|
|
65
|
-
return rightWins(exit, loser);
|
|
66
|
-
}
|
|
67
|
-
}, __tsplusTrace)(winner.await), __tsplusTrace)(left);
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Transplants specified effects so that when those effects fork other
|
|
72
|
-
* effects, the forked effects will be governed by the scope of the
|
|
73
|
-
* fiber that executes this effect.
|
|
74
|
-
*
|
|
75
|
-
* This can be used to "graft" deep grandchildren onto a higher-level
|
|
76
|
-
* scope, effectively extending their lifespans into the parent scope.
|
|
77
|
-
*
|
|
78
|
-
* @tsplus static fncts.io.IOOps transplant
|
|
79
|
-
*/
|
|
80
|
-
export function transplant(f, __tsplusTrace) {
|
|
81
|
-
return tsplus_module_5.withFiberRuntime(fiberState => {
|
|
82
|
-
const scopeOverride = fiberState.getFiberRef(tsplus_module_3.forkScopeOverride);
|
|
83
|
-
const scope = tsplus_module_6.getOrElse(() => fiberState.scope)(scopeOverride);
|
|
84
|
-
return f(tsplus_module_4.locally(tsplus_module_3.forkScopeOverride, tsplus_module_2.just(scope), __tsplusTrace));
|
|
85
|
-
}, __tsplusTrace);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
89
|
-
* new fiber is attached to the global scope, when the fiber executing the
|
|
90
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
91
|
-
*
|
|
92
|
-
* @tsplus getter fncts.io.IO forkDaemon
|
|
93
|
-
*/
|
|
94
|
-
export function forkDaemon(ma, __tsplusTrace) {
|
|
95
|
-
return daemonChildren_1(tsplus_module_7.fork(ma, __tsplusTrace), __tsplusTrace);
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=core-scope.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-scope.mjs","mappings":"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","names":["daemonChildren","raceFibersWith","AtomicBoolean","unsafeMakeChildFiber","self","__tsplusTrace","tsplus_module_4","tsplus_module_2","right","leftWins","rightWins","left","tsplus_module_5","parentState","parentStatus","right0","parentRuntimeFlags","runtimeFlags","complete","winner","loser","cont","ab","cb","compareAndSet","raceIndicator","leftFiber","rightFiber","setFiberRef","scope","addObserver","startFork","raceWith","raceFibersWith_1","exit","_tag","inheritAll","await","transplant","f","fiberState","scopeOverride","getFiberRef","tsplus_module_6","forkDaemon","ma"],"sourceRoot":"","sources":["../../../_src/IO/api/core-scope.ts"],"sourcesContent":[null]}
|
package/_src/FiberRefs/join.ts
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @tsplus pipeable fncts.io.FiberRefs join
|
|
3
|
-
*/
|
|
4
|
-
export function join(fiberId: FiberId.Runtime, that: FiberRefs) {
|
|
5
|
-
return (self: FiberRefs): FiberRefs => {
|
|
6
|
-
const parentFiberRefs = FiberRefs.reverseGet(self);
|
|
7
|
-
const childFiberRefs = FiberRefs.reverseGet(that);
|
|
8
|
-
const fiberRefLocals = childFiberRefs.foldLeftWithIndex(parentFiberRefs, (ref, parentFiberRefs, childStack) => {
|
|
9
|
-
const childValue = childStack.head[1];
|
|
10
|
-
if (childStack.head[0] == fiberId) {
|
|
11
|
-
return parentFiberRefs;
|
|
12
|
-
}
|
|
13
|
-
return parentFiberRefs.get(ref).match(
|
|
14
|
-
() => {
|
|
15
|
-
if (Equatable.strictEquals(childValue, ref.initial)) return parentFiberRefs;
|
|
16
|
-
return parentFiberRefs.set(ref, Cons([fiberId, childValue] as const));
|
|
17
|
-
},
|
|
18
|
-
(parentStack) => {
|
|
19
|
-
const [ancestor, wasModified] = findAncestor(ref, parentStack, childStack);
|
|
20
|
-
if (!wasModified) return parentFiberRefs;
|
|
21
|
-
const patch = ref.diff(ancestor, childValue);
|
|
22
|
-
const oldValue = parentStack.head[1];
|
|
23
|
-
const newValue = ref.join(oldValue, ref.patch(patch)(oldValue));
|
|
24
|
-
if (oldValue === newValue) return parentFiberRefs;
|
|
25
|
-
let newStack: Cons<readonly [FiberId.Runtime, unknown]>;
|
|
26
|
-
if (parentStack.isEmpty()) {
|
|
27
|
-
newStack = Cons([fiberId, newValue] as const);
|
|
28
|
-
} else {
|
|
29
|
-
const [parentFiberId] = parentStack.head;
|
|
30
|
-
if (parentFiberId == fiberId) {
|
|
31
|
-
newStack = Cons([parentFiberId, newValue], parentStack.tail);
|
|
32
|
-
} else {
|
|
33
|
-
newStack = Cons([fiberId, newValue], parentStack);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return parentFiberRefs.set(ref, newStack);
|
|
37
|
-
},
|
|
38
|
-
);
|
|
39
|
-
});
|
|
40
|
-
return FiberRefs.get(fiberRefLocals);
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function compareFiberId(left: FiberId.Runtime, right: FiberId.Runtime): number {
|
|
45
|
-
const compare = Number.Ord.compare(right.startTime)(left.startTime);
|
|
46
|
-
return compare === 0 ? Number.Ord.compare(right.id)(left.id) : compare;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* @tsplus tailRec
|
|
51
|
-
*/
|
|
52
|
-
function findAncestor(
|
|
53
|
-
ref: FiberRef<any>,
|
|
54
|
-
parentStack: List<readonly [FiberId.Runtime, any]>,
|
|
55
|
-
childStack: List<readonly [FiberId.Runtime, any]>,
|
|
56
|
-
childModified = false,
|
|
57
|
-
): readonly [any, boolean] {
|
|
58
|
-
if (parentStack.isNonEmpty() && childStack.isNonEmpty()) {
|
|
59
|
-
const [parentFiberId] = parentStack.head;
|
|
60
|
-
const [childFiberId, childValue] = childStack.head;
|
|
61
|
-
const compare = compareFiberId(parentFiberId, childFiberId);
|
|
62
|
-
if (compare < 0) {
|
|
63
|
-
return findAncestor(ref, parentStack, childStack.tail, true);
|
|
64
|
-
} else if (compare > 0) {
|
|
65
|
-
return findAncestor(ref, parentStack.tail, childStack, childModified);
|
|
66
|
-
} else {
|
|
67
|
-
return [childValue, childModified];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return [ref.initial, true];
|
|
71
|
-
}
|