@fncts/io 0.0.34 → 0.0.36
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/Fiber/FiberRuntime.d.ts +7 -7
- package/Fiber/constructors.d.ts +5 -0
- package/IO/api/all.d.ts +41 -0
- package/IO/api/concurrency.d.ts +11 -0
- package/IO/api/interrupt.d.ts +1 -1
- package/IO/api/raceWith.d.ts +2 -1
- package/IO/api.d.ts +7 -2
- package/IO/definition.d.ts +103 -127
- package/IO.d.ts +1 -0
- package/Push/api.d.ts +86 -36
- package/Push/definition.d.ts +28 -13
- package/Push/internal.d.ts +7 -11
- package/RefSubject/Atomic.d.ts +8 -11
- package/RefSubject/Synchronized/definition.d.ts +4 -6
- package/RefSubject/api.d.ts +0 -1
- package/RefSubject/definition.d.ts +6 -8
- package/STM/definition.d.ts +19 -2
- package/Sink/api.d.ts +24 -24
- package/Subject/Atomic.d.ts +4 -6
- package/Subject/definition.d.ts +2 -2
- package/_cjs/Channel/api/runScoped.cjs +1 -1
- package/_cjs/Channel/api/runScoped.cjs.map +1 -1
- package/_cjs/Channel/api.cjs +2 -2
- package/_cjs/Channel/api.cjs.map +1 -1
- package/_cjs/Fiber/FiberRuntime.cjs +110 -98
- package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
- package/_cjs/Fiber/constructors.cjs +10 -2
- package/_cjs/Fiber/constructors.cjs.map +1 -1
- package/_cjs/Future/api.cjs +1 -1
- package/_cjs/Future/api.cjs.map +1 -1
- package/_cjs/IO/api/all.cjs +33 -0
- package/_cjs/IO/api/all.cjs.map +1 -0
- package/_cjs/IO/api/asyncIO.cjs +1 -1
- package/_cjs/IO/api/asyncIO.cjs.map +1 -1
- package/_cjs/IO/api/bracketExit.cjs +1 -1
- package/_cjs/IO/api/bracketExit.cjs.map +1 -1
- package/_cjs/IO/api/concurrency.cjs +25 -4
- package/_cjs/IO/api/concurrency.cjs.map +1 -1
- package/_cjs/IO/api/disconnect.cjs +1 -1
- package/_cjs/IO/api/disconnect.cjs.map +1 -1
- package/_cjs/IO/api/foreachConcurrent.cjs +1 -1
- package/_cjs/IO/api/foreachConcurrent.cjs.map +1 -1
- package/_cjs/IO/api/foreachExec.cjs +1 -1
- package/_cjs/IO/api/foreachExec.cjs.map +1 -1
- package/_cjs/IO/api/forkIn.cjs +1 -1
- package/_cjs/IO/api/forkIn.cjs.map +1 -1
- package/_cjs/IO/api/forkScoped.cjs +1 -1
- package/_cjs/IO/api/forkScoped.cjs.map +1 -1
- package/_cjs/IO/api/fulfill.cjs +1 -1
- package/_cjs/IO/api/fulfill.cjs.map +1 -1
- package/_cjs/IO/api/interrupt.cjs +18 -6
- package/_cjs/IO/api/interrupt.cjs.map +1 -1
- package/_cjs/IO/api/raceWith.cjs +4 -4
- package/_cjs/IO/api/raceWith.cjs.map +1 -1
- package/_cjs/IO/api/timeout.cjs +8 -5
- package/_cjs/IO/api/timeout.cjs.map +1 -1
- package/_cjs/IO/api/zipConcurrent.cjs +1 -1
- package/_cjs/IO/api/zipConcurrent.cjs.map +1 -1
- package/_cjs/IO/api.cjs +78 -20
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO/definition.cjs +14 -191
- package/_cjs/IO/definition.cjs.map +1 -1
- package/_cjs/IO.cjs +11 -0
- package/_cjs/IO.cjs.map +1 -1
- package/_cjs/Layer/MemoMap.cjs +1 -1
- package/_cjs/Layer/MemoMap.cjs.map +1 -1
- package/_cjs/Layer/api.cjs.map +1 -1
- package/_cjs/Push/api.cjs +238 -168
- package/_cjs/Push/api.cjs.map +1 -1
- package/_cjs/Push/definition.cjs +12 -13
- package/_cjs/Push/definition.cjs.map +1 -1
- package/_cjs/Push/internal.cjs +37 -29
- package/_cjs/Push/internal.cjs.map +1 -1
- package/_cjs/RefSubject/Atomic.cjs +15 -19
- package/_cjs/RefSubject/Atomic.cjs.map +1 -1
- package/_cjs/RefSubject/Synchronized/definition.cjs +9 -10
- package/_cjs/RefSubject/Synchronized/definition.cjs.map +1 -1
- package/_cjs/RefSubject/api.cjs +5 -6
- package/_cjs/RefSubject/api.cjs.map +1 -1
- package/_cjs/RefSubject/definition.cjs.map +1 -1
- package/_cjs/STM/api/atomically.cjs +1 -1
- package/_cjs/STM/api/atomically.cjs.map +1 -1
- package/_cjs/STM/api.cjs +2 -2
- package/_cjs/STM/api.cjs.map +1 -1
- package/_cjs/STM/definition.cjs +1 -1
- package/_cjs/STM/definition.cjs.map +1 -1
- package/_cjs/ScopedRef/api.cjs +2 -2
- package/_cjs/ScopedRef/api.cjs.map +1 -1
- package/_cjs/Semaphore.cjs +1 -1
- package/_cjs/Semaphore.cjs.map +1 -1
- package/_cjs/Sink/api.cjs +13 -13
- package/_cjs/Sink/api.cjs.map +1 -1
- package/_cjs/Subject/Atomic.cjs +4 -5
- package/_cjs/Subject/Atomic.cjs.map +1 -1
- package/_cjs/TReentrantLock/api.cjs +2 -2
- package/_cjs/TReentrantLock/api.cjs.map +1 -1
- package/_cjs/TSemaphore/api.cjs +1 -1
- package/_cjs/TSemaphore/api.cjs.map +1 -1
- package/_cjs/collection/immutable/Conc/dropUntilIO.cjs +12 -17
- package/_cjs/collection/immutable/Conc/dropUntilIO.cjs.map +1 -1
- package/_cjs/collection/immutable/Conc/dropWhileIO.cjs +12 -17
- package/_cjs/collection/immutable/Conc/dropWhileIO.cjs.map +1 -1
- package/_cjs/collection/immutable/Conc/filterIO.cjs +2 -12
- package/_cjs/collection/immutable/Conc/filterIO.cjs.map +1 -1
- package/_cjs/collection/immutable/Conc/mapIO.cjs +3 -9
- package/_cjs/collection/immutable/Conc/mapIO.cjs.map +1 -1
- package/_cjs/collection/immutable/Conc/takeWhileIO.cjs +11 -27
- package/_cjs/collection/immutable/Conc/takeWhileIO.cjs.map +1 -1
- package/_mjs/Channel/api/runScoped.mjs +1 -1
- package/_mjs/Channel/api/runScoped.mjs.map +1 -1
- package/_mjs/Channel/api.mjs +2 -2
- package/_mjs/Channel/api.mjs.map +1 -1
- package/_mjs/Fiber/FiberRuntime.mjs +111 -100
- package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
- package/_mjs/Fiber/constructors.mjs +7 -1
- package/_mjs/Fiber/constructors.mjs.map +1 -1
- package/_mjs/Future/api.mjs +1 -1
- package/_mjs/Future/api.mjs.map +1 -1
- package/_mjs/IO/api/all.mjs +24 -0
- package/_mjs/IO/api/all.mjs.map +1 -0
- package/_mjs/IO/api/asyncIO.mjs +1 -1
- package/_mjs/IO/api/asyncIO.mjs.map +1 -1
- package/_mjs/IO/api/bracketExit.mjs +1 -1
- package/_mjs/IO/api/bracketExit.mjs.map +1 -1
- package/_mjs/IO/api/concurrency.mjs +19 -2
- package/_mjs/IO/api/concurrency.mjs.map +1 -1
- package/_mjs/IO/api/disconnect.mjs +1 -1
- package/_mjs/IO/api/disconnect.mjs.map +1 -1
- package/_mjs/IO/api/foreachConcurrent.mjs +1 -1
- package/_mjs/IO/api/foreachConcurrent.mjs.map +1 -1
- package/_mjs/IO/api/foreachExec.mjs +1 -1
- package/_mjs/IO/api/foreachExec.mjs.map +1 -1
- package/_mjs/IO/api/forkIn.mjs +1 -1
- package/_mjs/IO/api/forkIn.mjs.map +1 -1
- package/_mjs/IO/api/forkScoped.mjs +1 -1
- package/_mjs/IO/api/forkScoped.mjs.map +1 -1
- package/_mjs/IO/api/fulfill.mjs +1 -1
- package/_mjs/IO/api/fulfill.mjs.map +1 -1
- package/_mjs/IO/api/interrupt.mjs +19 -7
- package/_mjs/IO/api/interrupt.mjs.map +1 -1
- package/_mjs/IO/api/raceWith.mjs +4 -4
- package/_mjs/IO/api/raceWith.mjs.map +1 -1
- package/_mjs/IO/api/timeout.mjs +8 -5
- package/_mjs/IO/api/timeout.mjs.map +1 -1
- package/_mjs/IO/api/zipConcurrent.mjs +1 -1
- package/_mjs/IO/api/zipConcurrent.mjs.map +1 -1
- package/_mjs/IO/api.mjs +78 -23
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO/definition.mjs +12 -181
- package/_mjs/IO/definition.mjs.map +1 -1
- package/_mjs/IO.mjs +1 -0
- package/_mjs/IO.mjs.map +1 -1
- package/_mjs/Layer/MemoMap.mjs +1 -1
- package/_mjs/Layer/MemoMap.mjs.map +1 -1
- package/_mjs/Layer/api.mjs.map +1 -1
- package/_mjs/Push/api.mjs +223 -166
- package/_mjs/Push/api.mjs.map +1 -1
- package/_mjs/Push/definition.mjs +9 -10
- package/_mjs/Push/definition.mjs.map +1 -1
- package/_mjs/Push/internal.mjs +33 -22
- package/_mjs/Push/internal.mjs.map +1 -1
- package/_mjs/RefSubject/Atomic.mjs +15 -19
- package/_mjs/RefSubject/Atomic.mjs.map +1 -1
- package/_mjs/RefSubject/Synchronized/definition.mjs +9 -10
- package/_mjs/RefSubject/Synchronized/definition.mjs.map +1 -1
- package/_mjs/RefSubject/api.mjs +6 -7
- package/_mjs/RefSubject/api.mjs.map +1 -1
- package/_mjs/RefSubject/definition.mjs.map +1 -1
- package/_mjs/STM/api/atomically.mjs +1 -1
- package/_mjs/STM/api/atomically.mjs.map +1 -1
- package/_mjs/STM/api.mjs +2 -2
- package/_mjs/STM/api.mjs.map +1 -1
- package/_mjs/STM/definition.mjs +1 -1
- package/_mjs/STM/definition.mjs.map +1 -1
- package/_mjs/ScopedRef/api.mjs +2 -2
- package/_mjs/ScopedRef/api.mjs.map +1 -1
- package/_mjs/Semaphore.mjs +1 -1
- package/_mjs/Semaphore.mjs.map +1 -1
- package/_mjs/Sink/api.mjs +10 -10
- package/_mjs/Sink/api.mjs.map +1 -1
- package/_mjs/Subject/Atomic.mjs +4 -5
- package/_mjs/Subject/Atomic.mjs.map +1 -1
- package/_mjs/TReentrantLock/api.mjs +2 -2
- package/_mjs/TReentrantLock/api.mjs.map +1 -1
- package/_mjs/TSemaphore/api.mjs +1 -1
- package/_mjs/TSemaphore/api.mjs.map +1 -1
- package/_mjs/collection/immutable/Conc/dropUntilIO.mjs +12 -17
- package/_mjs/collection/immutable/Conc/dropUntilIO.mjs.map +1 -1
- package/_mjs/collection/immutable/Conc/dropWhileIO.mjs +12 -17
- package/_mjs/collection/immutable/Conc/dropWhileIO.mjs.map +1 -1
- package/_mjs/collection/immutable/Conc/filterIO.mjs +2 -12
- package/_mjs/collection/immutable/Conc/filterIO.mjs.map +1 -1
- package/_mjs/collection/immutable/Conc/mapIO.mjs +3 -9
- package/_mjs/collection/immutable/Conc/mapIO.mjs.map +1 -1
- package/_mjs/collection/immutable/Conc/takeWhileIO.mjs +11 -27
- package/_mjs/collection/immutable/Conc/takeWhileIO.mjs.map +1 -1
- package/_src/Channel/api.ts +3 -3
- package/_src/Fiber/FiberRuntime.ts +76 -75
- package/_src/Fiber/constructors.ts +5 -0
- package/_src/IO/api/all.ts +64 -0
- package/_src/IO/api/concurrency.ts +33 -0
- package/_src/IO/api/foreachExec.ts +2 -2
- package/_src/IO/api/interrupt.ts +20 -7
- package/_src/IO/api/raceWith.ts +4 -2
- package/_src/IO/api/timeout.ts +21 -1
- package/_src/IO/api.ts +79 -27
- package/_src/IO/definition.ts +155 -200
- package/_src/IO.ts +1 -0
- package/_src/Layer/api.ts +0 -1
- package/_src/Push/api.ts +305 -304
- package/_src/Push/definition.ts +19 -17
- package/_src/Push/internal.ts +63 -31
- package/_src/RefSubject/Atomic.ts +16 -22
- package/_src/RefSubject/Synchronized/definition.ts +6 -9
- package/_src/RefSubject/api.ts +9 -12
- package/_src/RefSubject/definition.ts +6 -8
- package/_src/STM/api.ts +0 -5
- package/_src/STM/definition.ts +8 -2
- package/_src/Sink/api.ts +9 -9
- package/_src/Subject/Atomic.ts +6 -8
- package/_src/Subject/definition.ts +2 -2
- package/_src/collection/immutable/Conc/dropUntilIO.ts +18 -15
- package/_src/collection/immutable/Conc/dropWhileIO.ts +18 -17
- package/_src/collection/immutable/Conc/filterIO.ts +1 -11
- package/_src/collection/immutable/Conc/mapIO.ts +2 -9
- package/_src/collection/immutable/Conc/takeWhileIO.ts +19 -28
- package/collection/immutable/Conc/filterIO.d.ts +1 -1
- package/collection/immutable/Conc/mapIO.d.ts +1 -1
- package/collection/immutable/Conc/takeWhileIO.d.ts +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { _A, _E, _R } from "@fncts/base/types";
|
|
2
|
+
import type { EnvironmentOf, ErrorOf, IOVariance, ValueOf } from "@fncts/io/IO";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @tsplus static fncts.io.IOOps all
|
|
6
|
+
*/
|
|
7
|
+
export function all<T extends ReadonlyArray<IO<any, any, any>>>(
|
|
8
|
+
ios: [...T],
|
|
9
|
+
): IO<
|
|
10
|
+
{ [K in number]: EnvironmentOf<T[K]> }[number],
|
|
11
|
+
{ [K in number]: ErrorOf<T[K]> }[number],
|
|
12
|
+
{ [K in keyof T]: ValueOf<T[K]> }
|
|
13
|
+
>;
|
|
14
|
+
export function all<T extends Iterable<IO<any, any, any>>>(
|
|
15
|
+
ios: T,
|
|
16
|
+
): [T] extends [Iterable<infer A>] ? IO<EnvironmentOf<A>, ErrorOf<A>, Conc<ValueOf<A>>> : never;
|
|
17
|
+
export function all<T extends Record<string, IO<any, any, any>>>(
|
|
18
|
+
ios: T,
|
|
19
|
+
): IO<
|
|
20
|
+
{ [K in keyof T]: EnvironmentOf<T[K]> }[keyof T],
|
|
21
|
+
{ [K in keyof T]: ErrorOf<T[K]> }[keyof T],
|
|
22
|
+
{ [K in keyof T]: ValueOf<T[K]> }
|
|
23
|
+
>;
|
|
24
|
+
export function all(ios: Record<string, IO<any, any, any>> | Iterable<IO<any, any, any>>): IO<any, any, any> {
|
|
25
|
+
if (Symbol.iterator in ios) {
|
|
26
|
+
return IO.foreach(ios, Function.identity);
|
|
27
|
+
} else {
|
|
28
|
+
return IO.foreach(
|
|
29
|
+
Object.entries(ios).map(([k, io]) => io.map((value) => [k, value] as const)),
|
|
30
|
+
Function.identity,
|
|
31
|
+
).map((result) => result.foldLeft({} as Record<string, any>, (b, a) => Object.assign(b, { [a[0]]: a[1] })));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @tsplus static fncts.io.IOOps allConcurrent
|
|
37
|
+
*/
|
|
38
|
+
export function allConcurrent<T extends ReadonlyArray<IO<any, any, any>>>(
|
|
39
|
+
ios: [...T],
|
|
40
|
+
): IO<
|
|
41
|
+
{ [K in number]: EnvironmentOf<T[K]> }[number],
|
|
42
|
+
{ [K in number]: ErrorOf<T[K]> }[number],
|
|
43
|
+
{ [K in keyof T]: ValueOf<T[K]> }
|
|
44
|
+
>;
|
|
45
|
+
export function allConcurrent<T extends Iterable<IO<any, any, any>>>(
|
|
46
|
+
ios: T,
|
|
47
|
+
): [T] extends [Iterable<infer A>] ? IO<EnvironmentOf<A>, ErrorOf<A>, Conc<ValueOf<A>>> : never;
|
|
48
|
+
export function allConcurrent<T extends Record<string, IO<any, any, any>>>(
|
|
49
|
+
ios: T,
|
|
50
|
+
): IO<
|
|
51
|
+
{ [K in keyof T]: EnvironmentOf<T[K]> }[keyof T],
|
|
52
|
+
{ [K in keyof T]: ErrorOf<T[K]> }[keyof T],
|
|
53
|
+
{ [K in keyof T]: ValueOf<T[K]> }
|
|
54
|
+
>;
|
|
55
|
+
export function allConcurrent(ios: Record<string, IO<any, any, any>> | Iterable<IO<any, any, any>>): IO<any, any, any> {
|
|
56
|
+
if (Symbol.iterator in ios) {
|
|
57
|
+
return IO.foreachConcurrent(ios, Function.identity);
|
|
58
|
+
} else {
|
|
59
|
+
return IO.foreachConcurrent(
|
|
60
|
+
Object.entries(ios).map(([k, io]) => io.map((value) => [k, value] as const)),
|
|
61
|
+
Function.identity,
|
|
62
|
+
).map((result) => result.foldLeft({} as Record<string, any>, (b, a) => Object.assign(b, { [a[0]]: a[1] })));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -41,3 +41,36 @@ export function withConcurrency(n: number, __tsplusTrace?: string) {
|
|
|
41
41
|
export function withConcurrencyUnbounded<R, E, A>(ma: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
42
42
|
return IO.defer(Concurrency.locally(Nothing())(ma));
|
|
43
43
|
}
|
|
44
|
+
|
|
45
|
+
export type ConcurrencyRestorer = <R, E, A>(io: IO<R, E, A>) => IO<R, E, A>;
|
|
46
|
+
|
|
47
|
+
const MakeConcurrent =
|
|
48
|
+
(n: number): ConcurrencyRestorer =>
|
|
49
|
+
(io) =>
|
|
50
|
+
io.withConcurrency(n);
|
|
51
|
+
|
|
52
|
+
const MakeConcurrentUnbounded: ConcurrencyRestorer = (io) => io.withConcurrencyUnbounded;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @tsplus static fncts.io.IOOps withConcurrencyMask
|
|
56
|
+
*/
|
|
57
|
+
export function withConcurrencyMask<R, E, A>(n: number, f: (restore: ConcurrencyRestorer) => IO<R, E, A>): IO<R, E, A> {
|
|
58
|
+
return Concurrency.getWith((concurrency) =>
|
|
59
|
+
concurrency.match(
|
|
60
|
+
() => Concurrency.locally(Just(n))(f(MakeConcurrentUnbounded)),
|
|
61
|
+
(n0) => Concurrency.locally(Just(n))(f(MakeConcurrent(n0))),
|
|
62
|
+
),
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @tsplus static fncts.io.IOOps withConcurrencyUnboundedMask
|
|
68
|
+
*/
|
|
69
|
+
export function withConcurrencyUnboundedMask<R, E, A>(f: (restore: ConcurrencyRestorer) => IO<R, E, A>): IO<R, E, A> {
|
|
70
|
+
return Concurrency.getWith((concurrency) =>
|
|
71
|
+
concurrency.match(
|
|
72
|
+
() => Concurrency.locally(Nothing())(f(MakeConcurrentUnbounded)),
|
|
73
|
+
(n0) => Concurrency.locally(Nothing())(f(MakeConcurrent(n0))),
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
}
|
|
@@ -14,7 +14,7 @@ export function foreachExec<R, E, A, B>(
|
|
|
14
14
|
): IO<R, E, Conc<B>> {
|
|
15
15
|
return es.match(
|
|
16
16
|
() => IO.foreach(as, f),
|
|
17
|
-
() => IO.foreachConcurrent(as, f)
|
|
18
|
-
(fiberBound) => IO.foreachConcurrent(as,
|
|
17
|
+
() => IO.withConcurrencyUnboundedMask((restore) => IO.foreachConcurrent(as, (a) => restore(f(a)))),
|
|
18
|
+
(fiberBound) => IO.withConcurrencyMask(fiberBound, (restore) => IO.foreachConcurrent(as, (a) => restore(f(a)))),
|
|
19
19
|
);
|
|
20
20
|
}
|
package/_src/IO/api/interrupt.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IOPrimitive,IOTag } from "@fncts/io/IO/definition";
|
|
2
2
|
import { RuntimeFlag } from "@fncts/io/RuntimeFlag";
|
|
3
3
|
import { RuntimeFlags } from "@fncts/io/RuntimeFlags";
|
|
4
4
|
|
|
@@ -40,7 +40,11 @@ export const interrupt: IO<never, never, never> = IO.fiberId.flatMap(IO.interrup
|
|
|
40
40
|
* @tsplus static fncts.io.IOOps interruptible
|
|
41
41
|
*/
|
|
42
42
|
export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
43
|
-
|
|
43
|
+
const io = new IOPrimitive(IOTag.UpdateRuntimeFlagsWithin) as any;
|
|
44
|
+
io.i0 = RuntimeFlags.enable(RuntimeFlag.Interruption);
|
|
45
|
+
io.i1 = () => self;
|
|
46
|
+
io.trace = __tsplusTrace;
|
|
47
|
+
return io;
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
/**
|
|
@@ -55,7 +59,11 @@ export function interruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string
|
|
|
55
59
|
* @tsplus static fncts.io.IOOps uninterruptible
|
|
56
60
|
*/
|
|
57
61
|
export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): IO<R, E, A> {
|
|
58
|
-
|
|
62
|
+
const io = new IOPrimitive(IOTag.UpdateRuntimeFlagsWithin) as any;
|
|
63
|
+
io.i0 = RuntimeFlags.disable(RuntimeFlag.Interruption);
|
|
64
|
+
io.i1 = () => self;
|
|
65
|
+
io.trace = __tsplusTrace;
|
|
66
|
+
return io;
|
|
59
67
|
}
|
|
60
68
|
|
|
61
69
|
/**
|
|
@@ -65,10 +73,15 @@ export function uninterruptible<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: stri
|
|
|
65
73
|
*
|
|
66
74
|
* @tsplus static fncts.io.IOOps uninterruptibleMask
|
|
67
75
|
*/
|
|
68
|
-
export function uninterruptibleMask<R, E, A>(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
76
|
+
export function uninterruptibleMask<R, E, A>(
|
|
77
|
+
f: (restore: InterruptibilityRestorer) => IO<R, E, A>,
|
|
78
|
+
__tsplusTrace?: string,
|
|
79
|
+
): IO<R, E, A> {
|
|
80
|
+
const io = new IOPrimitive(IOTag.UpdateRuntimeFlagsWithin) as any;
|
|
81
|
+
io.i0 = RuntimeFlags.disable(RuntimeFlag.Interruption);
|
|
82
|
+
io.i1 = (oldFlags: RuntimeFlags) => f(oldFlags.interruption ? RestoreInterruptible : RestoreUninterruptible);
|
|
83
|
+
io.trace = __tsplusTrace;
|
|
84
|
+
return io;
|
|
72
85
|
}
|
|
73
86
|
|
|
74
87
|
/**
|
package/_src/IO/api/raceWith.ts
CHANGED
|
@@ -10,6 +10,8 @@ export function raceFibersWith<R, E, A, R1, E1, B, R2, E2, C, R3, E3, D>(
|
|
|
10
10
|
right: Lazy<IO<R1, E1, B>>,
|
|
11
11
|
leftWins: (winner: FiberRuntime<E, A>, loser: FiberRuntime<E1, B>) => IO<R2, E2, C>,
|
|
12
12
|
rightWins: (winner: FiberRuntime<E1, B>, loser: FiberRuntime<E, A>) => IO<R3, E3, D>,
|
|
13
|
+
leftScope: FiberScope | null = null,
|
|
14
|
+
rightScope: FiberScope | null = null,
|
|
13
15
|
__tsplusTrace?: string,
|
|
14
16
|
) {
|
|
15
17
|
return (left: IO<R, E, A>): IO<R | R1 | R2 | R3, E2 | E3, C | D> => {
|
|
@@ -29,8 +31,8 @@ export function raceFibersWith<R, E, A, R1, E1, B, R2, E2, C, R3, E3, D>(
|
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
const raceIndicator = new AtomicBoolean(true);
|
|
32
|
-
const leftFiber = IO.unsafeMakeChildFiber(left, parentState, parentRuntimeFlags,
|
|
33
|
-
const rightFiber = IO.unsafeMakeChildFiber(right0, parentState, parentRuntimeFlags,
|
|
34
|
+
const leftFiber = IO.unsafeMakeChildFiber(left, parentState, parentRuntimeFlags, leftScope, __tsplusTrace);
|
|
35
|
+
const rightFiber = IO.unsafeMakeChildFiber(right0, parentState, parentRuntimeFlags, rightScope, __tsplusTrace);
|
|
34
36
|
|
|
35
37
|
return IO.async((cb) => {
|
|
36
38
|
leftFiber.addObserver(() => complete(leftFiber, rightFiber, leftWins, raceIndicator, cb));
|
package/_src/IO/api/timeout.ts
CHANGED
|
@@ -3,7 +3,27 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export function timeoutTo<A, B, B1>(duration: Lazy<Duration>, b: Lazy<B>, f: (a: A) => B1, __tsplusTrace?: string) {
|
|
5
5
|
return <R, E>(self: IO<R, E, A>): IO<R, E, B | B1> => {
|
|
6
|
-
return
|
|
6
|
+
return IO.fiberIdWith((parentFiberId) =>
|
|
7
|
+
self.raceFibersWith(
|
|
8
|
+
IO.sleep(duration).interruptible,
|
|
9
|
+
(winner, loser) =>
|
|
10
|
+
winner.await.flatMap((exit) =>
|
|
11
|
+
exit.match(
|
|
12
|
+
(cause) => loser.interruptAs(parentFiberId) > IO.refailCause(cause),
|
|
13
|
+
(a) => winner.inheritAll > loser.interruptAs(parentFiberId).as(f(a)),
|
|
14
|
+
),
|
|
15
|
+
),
|
|
16
|
+
(winner, loser) =>
|
|
17
|
+
winner.await.flatMap((exit) =>
|
|
18
|
+
exit.match(
|
|
19
|
+
(cause) => loser.interruptAs(parentFiberId) > IO.refailCause(cause),
|
|
20
|
+
() => winner.inheritAll > loser.interruptAs(parentFiberId).as(b),
|
|
21
|
+
),
|
|
22
|
+
),
|
|
23
|
+
null,
|
|
24
|
+
FiberScope.global,
|
|
25
|
+
),
|
|
26
|
+
);
|
|
7
27
|
};
|
|
8
28
|
}
|
|
9
29
|
|
package/_src/IO/api.ts
CHANGED
|
@@ -6,17 +6,8 @@ import type { RuntimeFlags } from "@fncts/io/RuntimeFlags";
|
|
|
6
6
|
|
|
7
7
|
import { IOError } from "@fncts/base/data/exceptions";
|
|
8
8
|
import { identity, pipe, tuple } from "@fncts/base/data/function";
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
GenerateStackTrace,
|
|
12
|
-
OnSuccess,
|
|
13
|
-
OnSuccessAndFailure,
|
|
14
|
-
Sync,
|
|
15
|
-
UpdateRuntimeFlags,
|
|
16
|
-
YieldNow,
|
|
17
|
-
} from "@fncts/io/IO/definition";
|
|
18
|
-
import { Stateful } from "@fncts/io/IO/definition";
|
|
19
|
-
import { Fail, IO, SucceedNow } from "@fncts/io/IO/definition";
|
|
9
|
+
import { IOPrimitive,IOTag } from "@fncts/io/IO/definition";
|
|
10
|
+
import { IO } from "@fncts/io/IO/definition";
|
|
20
11
|
|
|
21
12
|
/**
|
|
22
13
|
* Imports an asynchronous side-effect into a `IO`
|
|
@@ -28,7 +19,11 @@ export function async<R, E, A>(
|
|
|
28
19
|
blockingOn: FiberId = FiberId.none,
|
|
29
20
|
__tsplusTrace?: string,
|
|
30
21
|
): IO<R, E, A> {
|
|
31
|
-
|
|
22
|
+
const io = new IOPrimitive(IOTag.Async) as any;
|
|
23
|
+
io.i0 = register;
|
|
24
|
+
io.i1 = () => blockingOn;
|
|
25
|
+
io.trace = __tsplusTrace;
|
|
26
|
+
return io;
|
|
32
27
|
}
|
|
33
28
|
|
|
34
29
|
/**
|
|
@@ -318,7 +313,11 @@ export function checkInterruptible<R, E, A>(
|
|
|
318
313
|
*/
|
|
319
314
|
export function flatMap<A, R1, E1, B>(f: (a: A) => IO<R1, E1, B>, __tsplusTrace?: string) {
|
|
320
315
|
return <R, E>(ma: IO<R, E, A>): IO<R | R1, E | E1, B> => {
|
|
321
|
-
|
|
316
|
+
const io = new IOPrimitive(IOTag.OnSuccess) as any;
|
|
317
|
+
io.i0 = ma;
|
|
318
|
+
io.i1 = f;
|
|
319
|
+
io.trace = __tsplusTrace;
|
|
320
|
+
return io;
|
|
322
321
|
};
|
|
323
322
|
}
|
|
324
323
|
|
|
@@ -369,7 +368,7 @@ export function condIO<R, R1, E, A>(
|
|
|
369
368
|
*
|
|
370
369
|
* @tsplus static fncts.io.IOOps defer
|
|
371
370
|
*/
|
|
372
|
-
export function defer<R, E, A>(io: Lazy<IO<R, E, A>>, __tsplusTrace?: string): IO<R, E, A> {
|
|
371
|
+
export function defer<R = never, E = never, A = never>(io: Lazy<IO<R, E, A>>, __tsplusTrace?: string): IO<R, E, A> {
|
|
373
372
|
return IO.succeed(io).flatMap(identity);
|
|
374
373
|
}
|
|
375
374
|
|
|
@@ -379,7 +378,10 @@ export function defer<R, E, A>(io: Lazy<IO<R, E, A>>, __tsplusTrace?: string): I
|
|
|
379
378
|
*
|
|
380
379
|
* @tsplus static fncts.io.IOOps deferTry
|
|
381
380
|
*/
|
|
382
|
-
export function deferTry<R, E
|
|
381
|
+
export function deferTry<R = never, E = never, A = never>(
|
|
382
|
+
io: () => IO<R, E, A>,
|
|
383
|
+
__tsplusTrace?: string,
|
|
384
|
+
): IO<R, unknown, A> {
|
|
383
385
|
return IO.defer(() => {
|
|
384
386
|
try {
|
|
385
387
|
return io();
|
|
@@ -463,7 +465,10 @@ export function failNow<E>(e: E, __tsplusTrace?: string): FIO<E, never> {
|
|
|
463
465
|
* @tsplus static fncts.io.IOOps refailCause
|
|
464
466
|
*/
|
|
465
467
|
export function refailCause<E>(cause: Cause<E>, __tsplusTrace?: string): FIO<E, never> {
|
|
466
|
-
|
|
468
|
+
const io = new IOPrimitive(IOTag.Fail) as any;
|
|
469
|
+
io.i0 = () => cause;
|
|
470
|
+
io.trace = __tsplusTrace;
|
|
471
|
+
return io;
|
|
467
472
|
}
|
|
468
473
|
|
|
469
474
|
/**
|
|
@@ -472,7 +477,10 @@ export function refailCause<E>(cause: Cause<E>, __tsplusTrace?: string): FIO<E,
|
|
|
472
477
|
* @tsplus static fncts.io.IOOps failCauseNow
|
|
473
478
|
*/
|
|
474
479
|
export function failCauseNow<E>(cause: Cause<E>, __tsplusTrace?: string): FIO<E, never> {
|
|
475
|
-
|
|
480
|
+
const io = new IOPrimitive(IOTag.Fail) as any;
|
|
481
|
+
io.i0 = () => cause;
|
|
482
|
+
io.trace = __tsplusTrace;
|
|
483
|
+
return io;
|
|
476
484
|
}
|
|
477
485
|
|
|
478
486
|
/**
|
|
@@ -1223,7 +1231,12 @@ export function matchCauseIO<E, A, R1, E1, A1, R2, E2, A2>(
|
|
|
1223
1231
|
__tsplusTrace?: string,
|
|
1224
1232
|
) {
|
|
1225
1233
|
return <R>(self: IO<R, E, A>): IO<R | R1 | R2, E1 | E2, A1 | A2> => {
|
|
1226
|
-
|
|
1234
|
+
const io = new IOPrimitive(IOTag.OnSuccessAndFailure) as any;
|
|
1235
|
+
io.i0 = self;
|
|
1236
|
+
io.i1 = onFailure;
|
|
1237
|
+
io.i2 = onSuccess;
|
|
1238
|
+
io.trace = __tsplusTrace;
|
|
1239
|
+
return io;
|
|
1227
1240
|
};
|
|
1228
1241
|
}
|
|
1229
1242
|
|
|
@@ -1664,7 +1677,10 @@ export function sequenceIterableDiscard<R, E, A>(as: Iterable<IO<R, E, A>>, __ts
|
|
|
1664
1677
|
* @tsplus static fncts.io.IOOps succeedNow
|
|
1665
1678
|
*/
|
|
1666
1679
|
export function succeedNow<A>(value: A, __tsplusTrace?: string): IO<never, never, A> {
|
|
1667
|
-
|
|
1680
|
+
const io = new IOPrimitive(IOTag.SucceedNow) as any;
|
|
1681
|
+
io.i0 = value;
|
|
1682
|
+
io.trace = __tsplusTrace;
|
|
1683
|
+
return io;
|
|
1668
1684
|
}
|
|
1669
1685
|
|
|
1670
1686
|
/**
|
|
@@ -1676,7 +1692,10 @@ export function succeedNow<A>(value: A, __tsplusTrace?: string): IO<never, never
|
|
|
1676
1692
|
* @tsplus static fncts.io.IOOps __call
|
|
1677
1693
|
*/
|
|
1678
1694
|
export function succeed<A>(effect: Lazy<A>, __tsplusTrace?: string): UIO<A> {
|
|
1679
|
-
|
|
1695
|
+
const io = new IOPrimitive(IOTag.Sync) as any;
|
|
1696
|
+
io.i0 = effect;
|
|
1697
|
+
io.trace = __tsplusTrace;
|
|
1698
|
+
return io;
|
|
1680
1699
|
}
|
|
1681
1700
|
|
|
1682
1701
|
/**
|
|
@@ -1721,17 +1740,42 @@ export function timedWith<R1, E1>(msTime: IO<R1, E1, number>, __tsplusTrace?: st
|
|
|
1721
1740
|
ma.summarized(msTime, (start, end) => end - start);
|
|
1722
1741
|
}
|
|
1723
1742
|
|
|
1743
|
+
/**
|
|
1744
|
+
* @tsplus static fncts.io.IOOps attempt
|
|
1745
|
+
*/
|
|
1746
|
+
export function attempt<A>(effect: Lazy<A>, __tsplusTrace?: string): FIO<unknown, A> {
|
|
1747
|
+
return IO.defer(() => {
|
|
1748
|
+
try {
|
|
1749
|
+
return Exit.succeed(effect());
|
|
1750
|
+
} catch (u) {
|
|
1751
|
+
return IO.withFiberRuntime((fiberState) => {
|
|
1752
|
+
if (!fiberState.isFatal(u)) {
|
|
1753
|
+
throw new IOError(Cause.fail(u));
|
|
1754
|
+
} else {
|
|
1755
|
+
throw u;
|
|
1756
|
+
}
|
|
1757
|
+
});
|
|
1758
|
+
}
|
|
1759
|
+
});
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1724
1762
|
/**
|
|
1725
1763
|
* Creates a `IO` that has succeeded with a pure value
|
|
1726
1764
|
*
|
|
1727
1765
|
* @tsplus static fncts.io.IOOps tryCatch
|
|
1728
1766
|
*/
|
|
1729
1767
|
export function tryCatch<E, A>(effect: Lazy<A>, onThrow: (error: unknown) => E, __tsplusTrace?: string): FIO<E, A> {
|
|
1730
|
-
return IO.
|
|
1768
|
+
return IO.defer(() => {
|
|
1731
1769
|
try {
|
|
1732
|
-
return effect();
|
|
1770
|
+
return Exit.succeed(effect());
|
|
1733
1771
|
} catch (u) {
|
|
1734
|
-
|
|
1772
|
+
return IO.withFiberRuntime((fiberState) => {
|
|
1773
|
+
if (!fiberState.isFatal(u)) {
|
|
1774
|
+
throw new IOError(Cause.fail(u));
|
|
1775
|
+
} else {
|
|
1776
|
+
throw u;
|
|
1777
|
+
}
|
|
1778
|
+
});
|
|
1735
1779
|
}
|
|
1736
1780
|
});
|
|
1737
1781
|
}
|
|
@@ -1902,21 +1946,29 @@ export function withFiberRuntime<R, E, A>(
|
|
|
1902
1946
|
onState: (fiber: FiberRuntime<E, A>, status: Running) => IO<R, E, A>,
|
|
1903
1947
|
__tsplusTrace?: string,
|
|
1904
1948
|
): IO<R, E, A> {
|
|
1905
|
-
|
|
1949
|
+
const io = new IOPrimitive(IOTag.Stateful) as any;
|
|
1950
|
+
io.i0 = onState;
|
|
1951
|
+
io.trace = __tsplusTrace;
|
|
1952
|
+
return io;
|
|
1906
1953
|
}
|
|
1907
1954
|
|
|
1908
1955
|
/**
|
|
1909
1956
|
* @tsplus static fncts.io.IOOps updateRuntimeFlags
|
|
1910
1957
|
*/
|
|
1911
1958
|
export function updateRuntimeFlags(patch: RuntimeFlags.Patch, __tsplusTrace?: string): IO<never, never, void> {
|
|
1912
|
-
|
|
1959
|
+
const io = new IOPrimitive(IOTag.UpdateRuntimeFlags) as any;
|
|
1960
|
+
io.i0 = patch;
|
|
1961
|
+
io.trace = __tsplusTrace;
|
|
1962
|
+
return io;
|
|
1913
1963
|
}
|
|
1914
1964
|
|
|
1915
1965
|
/**
|
|
1916
1966
|
* @tsplus static fncts.io.IOOps stackTrace
|
|
1917
1967
|
*/
|
|
1918
1968
|
export function stackTrace(__tsplusTrace?: string): UIO<Trace> {
|
|
1919
|
-
|
|
1969
|
+
const io = new IOPrimitive(IOTag.GenerateStackTrace) as any;
|
|
1970
|
+
io.trace = __tsplusTrace;
|
|
1971
|
+
return io;
|
|
1920
1972
|
}
|
|
1921
1973
|
|
|
1922
1974
|
/**
|
|
@@ -1926,7 +1978,7 @@ export function stackTrace(__tsplusTrace?: string): UIO<Trace> {
|
|
|
1926
1978
|
*
|
|
1927
1979
|
* @tsplus static fncts.io.IOOps yieldNow
|
|
1928
1980
|
*/
|
|
1929
|
-
export const yieldNow: UIO<void> = new YieldNow
|
|
1981
|
+
export const yieldNow: UIO<void> = new IOPrimitive(IOTag.YieldNow) as any;
|
|
1930
1982
|
|
|
1931
1983
|
/**
|
|
1932
1984
|
* @tsplus pipeable fncts.io.IO zip
|