@fncts/io 0.0.41 → 0.0.42
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 +2 -2
- package/Fiber/definition.d.ts +1 -0
- package/FiberSet.d.ts +66 -0
- package/Hub/definition.d.ts +3 -0
- package/Hub/internal.d.ts +1 -0
- package/IO/api/diffFiberRefs.d.ts +7 -0
- package/IO/api/timeout.d.ts +5 -0
- package/IO/api.d.ts +6 -1
- package/IO/definition.d.ts +18 -7
- package/Layer/api.d.ts +5 -0
- package/Queue/api/dimapIO.d.ts +5 -0
- package/Queue/api/filterInputIO.d.ts +1 -1
- package/Queue/api/filterOutputIO.d.ts +1 -0
- package/Queue/api/operations.d.ts +11 -0
- package/Queue/api/zipWithIO.d.ts +1 -0
- package/Queue/definition.d.ts +5 -0
- package/Queue/internal.d.ts +1 -0
- package/STM/definition.d.ts +1 -1
- package/Stream/api.d.ts +10 -0
- package/_cjs/Fiber/FiberRuntime.cjs +86 -75
- package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
- package/_cjs/Fiber/definition.cjs.map +1 -1
- package/_cjs/FiberSet.cjs +129 -0
- package/_cjs/FiberSet.cjs.map +1 -0
- package/_cjs/Hub/api.cjs +20 -11
- package/_cjs/Hub/api.cjs.map +1 -1
- package/_cjs/Hub/definition.cjs +3 -0
- package/_cjs/Hub/definition.cjs.map +1 -1
- package/_cjs/Hub/internal.cjs +65 -49
- package/_cjs/Hub/internal.cjs.map +1 -1
- package/_cjs/IO/api/diffFiberRefs.cjs +17 -0
- package/_cjs/IO/api/diffFiberRefs.cjs.map +1 -0
- package/_cjs/IO/api/memoize.cjs +7 -4
- package/_cjs/IO/api/memoize.cjs.map +1 -1
- package/_cjs/IO/api/timeout.cjs +8 -0
- package/_cjs/IO/api/timeout.cjs.map +1 -1
- package/_cjs/IO/api.cjs +10 -3
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO/definition.cjs +9 -3
- package/_cjs/IO/definition.cjs.map +1 -1
- package/_cjs/Layer/api.cjs +8 -1
- package/_cjs/Layer/api.cjs.map +1 -1
- package/_cjs/Queue/api/dimapIO.cjs +28 -10
- package/_cjs/Queue/api/dimapIO.cjs.map +1 -1
- package/_cjs/Queue/api/filterInputIO.cjs +21 -9
- package/_cjs/Queue/api/filterInputIO.cjs.map +1 -1
- package/_cjs/Queue/api/filterOutputIO.cjs +28 -16
- package/_cjs/Queue/api/filterOutputIO.cjs.map +1 -1
- package/_cjs/Queue/api/operations.cjs +20 -0
- package/_cjs/Queue/api/operations.cjs.map +1 -1
- package/_cjs/Queue/api/zipWithIO.cjs +16 -9
- package/_cjs/Queue/api/zipWithIO.cjs.map +1 -1
- package/_cjs/Queue/definition.cjs.map +1 -1
- package/_cjs/Queue/internal.cjs +84 -54
- package/_cjs/Queue/internal.cjs.map +1 -1
- package/_cjs/STM/definition.cjs +1 -1
- package/_cjs/STM/definition.cjs.map +1 -1
- package/_cjs/Stream/api.cjs +40 -5
- package/_cjs/Stream/api.cjs.map +1 -1
- package/_cjs/internal/BackgroundScheduler.cjs +0 -1
- package/_cjs/internal/BackgroundScheduler.cjs.map +1 -1
- package/_mjs/Fiber/FiberRuntime.mjs +86 -75
- package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
- package/_mjs/Fiber/definition.mjs.map +1 -1
- package/_mjs/FiberSet.mjs +113 -0
- package/_mjs/FiberSet.mjs.map +1 -0
- package/_mjs/Hub/api.mjs +20 -11
- package/_mjs/Hub/api.mjs.map +1 -1
- package/_mjs/Hub/definition.mjs +3 -0
- package/_mjs/Hub/definition.mjs.map +1 -1
- package/_mjs/Hub/internal.mjs +65 -49
- package/_mjs/Hub/internal.mjs.map +1 -1
- package/_mjs/IO/api/diffFiberRefs.mjs +9 -0
- package/_mjs/IO/api/diffFiberRefs.mjs.map +1 -0
- package/_mjs/IO/api/memoize.mjs +7 -4
- package/_mjs/IO/api/memoize.mjs.map +1 -1
- package/_mjs/IO/api/timeout.mjs +7 -0
- package/_mjs/IO/api/timeout.mjs.map +1 -1
- package/_mjs/IO/api.mjs +9 -3
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO/definition.mjs +7 -2
- package/_mjs/IO/definition.mjs.map +1 -1
- package/_mjs/Layer/api.mjs +7 -1
- package/_mjs/Layer/api.mjs.map +1 -1
- package/_mjs/Queue/api/dimapIO.mjs +28 -10
- package/_mjs/Queue/api/dimapIO.mjs.map +1 -1
- package/_mjs/Queue/api/filterInputIO.mjs +21 -9
- package/_mjs/Queue/api/filterInputIO.mjs.map +1 -1
- package/_mjs/Queue/api/filterOutputIO.mjs +28 -16
- package/_mjs/Queue/api/filterOutputIO.mjs.map +1 -1
- package/_mjs/Queue/api/operations.mjs +18 -0
- package/_mjs/Queue/api/operations.mjs.map +1 -1
- package/_mjs/Queue/api/zipWithIO.mjs +16 -9
- package/_mjs/Queue/api/zipWithIO.mjs.map +1 -1
- package/_mjs/Queue/definition.mjs.map +1 -1
- package/_mjs/Queue/internal.mjs +84 -54
- package/_mjs/Queue/internal.mjs.map +1 -1
- package/_mjs/STM/definition.mjs +1 -1
- package/_mjs/STM/definition.mjs.map +1 -1
- package/_mjs/Stream/api.mjs +36 -4
- package/_mjs/Stream/api.mjs.map +1 -1
- package/_mjs/internal/BackgroundScheduler.mjs +0 -1
- package/_mjs/internal/BackgroundScheduler.mjs.map +1 -1
- package/_src/Fiber/FiberRuntime.ts +50 -36
- package/_src/Fiber/definition.ts +2 -0
- package/_src/FiberSet.ts +115 -0
- package/_src/Hub/api.ts +15 -6
- package/_src/Hub/definition.ts +6 -0
- package/_src/Hub/internal.ts +19 -0
- package/_src/IO/api/diffFiberRefs.ts +11 -0
- package/_src/IO/api/memoize.ts +5 -3
- package/_src/IO/api/timeout.ts +8 -0
- package/_src/IO/api.ts +7 -0
- package/_src/IO/definition.ts +20 -4
- package/_src/Layer/api.ts +10 -0
- package/_src/Queue/api/dimapIO.ts +25 -0
- package/_src/Queue/api/filterInputIO.ts +16 -0
- package/_src/Queue/api/filterOutputIO.ts +16 -0
- package/_src/Queue/api/operations.ts +20 -0
- package/_src/Queue/api/zipWithIO.ts +8 -0
- package/_src/Queue/definition.ts +4 -0
- package/_src/Queue/internal.ts +32 -0
- package/_src/STM/definition.ts +1 -1
- package/_src/Stream/api.ts +55 -0
- package/_src/global.ts +4 -0
- package/_src/internal/BackgroundScheduler.ts +0 -1
- package/global.d.ts +4 -0
- package/package.json +4 -4
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"BackgroundScheduler.mjs","names":["whenReady","observers","promise","Promise","resolve","push","value","forEach","observer","BackgroundScheduler","constructor","state","tasks","idleDeadline","undefined","frameTimeElapsed","onIdleCallback","onAnimationFrame","frameWorkStartTime","isTracking","lastCallTime","lastResult","globalId","running","Set","callbacks","scheduleTask","task","yieldBackgroundOrContinue","then","createTask","wr","item","ready","length","startTracking","reset","loop","requestIdleCallback","idleCallbackId","deadline","cb","cancelIdleCallback","requestAnimationFrame","setTimeout","removeTask","index","indexOf","splice","nextTask","isTimeToYield","now","Date","calculateDeadline","navigator","scheduling","isInputPending","Number","MAX_SAFE_INTEGER","timeRemaining","Math","min","requestPromiseEscape","callback","id","add","has","delete","cancelPromiseEscape","requestNextTask","channel","MessageChannel","port2","postMessage","port1","onmessage","close","callbacksCopy","yieldControl","promiseEscapeId","schedule","backgroundScheduler"],"sources":["../../_src/internal/BackgroundScheduler.ts"],"sourcesContent":[null],"mappings":"AAwBA,SAASA,SAASA,CAAA;EAChB,MAAMC,SAAS,GAA8B,EAAE;EAE/C,MAAMC,OAAO,GAAGA,CAAA,KAAM,IAAIC,OAAO,CAAKC,OAAO,IAAKH,SAAS,CAACI,IAAI,CAACD,OAAO,CAAC,CAAC;EAE1E,OAAO;IACLF,OAAO;IACPE,OAAO,EAAGE,KAAK,IAAKL,SAAS,CAACM,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAACF,KAAK,CAAC;GACpE;AACH;AAgBA,OAAM,MAAOG,mBAAmB;EAAhCC,YAAA;IACE,KAAAC,KAAK,GAAU;MACbC,KAAK,EAAE,EAAE;MACTC,YAAY,EAAEC,SAAS;MACvBC,gBAAgB,EAAE,KAAK;MACvBC,cAAc,EAAEhB,SAAS,EAAE;MAC3BiB,gBAAgB,EAAEjB,SAAS,EAAE;MAC7BkB,kBAAkB,EAAEJ;KACrB;IAED,KAAAK,UAAU,GAAG,KAAK;IAElB,KAAAC,YAAY,GAAG,CAAC;IAChB,KAAAC,UAAU,GAAK,KAAK;IACpB,KAAAC,QAAQ,GAAO,CAAC;IAChB,KAAAC,OAAO,GAAQ,IAAIC,GAAG,EAAU;IAChC,KAAAC,SAAS,GAAsB,EAAE;
|
1
|
+
{"version":3,"file":"BackgroundScheduler.mjs","names":["whenReady","observers","promise","Promise","resolve","push","value","forEach","observer","BackgroundScheduler","constructor","state","tasks","idleDeadline","undefined","frameTimeElapsed","onIdleCallback","onAnimationFrame","frameWorkStartTime","isTracking","lastCallTime","lastResult","globalId","running","Set","callbacks","scheduleTask","task","yieldBackgroundOrContinue","then","createTask","wr","item","ready","length","startTracking","reset","loop","requestIdleCallback","idleCallbackId","deadline","cb","cancelIdleCallback","requestAnimationFrame","setTimeout","removeTask","index","indexOf","splice","nextTask","isTimeToYield","now","Date","calculateDeadline","navigator","scheduling","isInputPending","Number","MAX_SAFE_INTEGER","timeRemaining","Math","min","requestPromiseEscape","callback","id","add","has","delete","cancelPromiseEscape","requestNextTask","channel","MessageChannel","port2","postMessage","port1","onmessage","close","callbacksCopy","yieldControl","promiseEscapeId","schedule","backgroundScheduler"],"sources":["../../_src/internal/BackgroundScheduler.ts"],"sourcesContent":[null],"mappings":"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"}
|
@@ -3,8 +3,10 @@ import type { OnFailure, OnSuccess, OnSuccessAndFailure, UIO } from "../IO/defin
|
|
3
3
|
import type { WhileLoop } from "../IO/definition.js";
|
4
4
|
import type { RuntimeFlags } from "../RuntimeFlags.js";
|
5
5
|
|
6
|
+
import { EitherTag } from "@fncts/base/data/Either";
|
6
7
|
import { isIOError } from "@fncts/base/data/exceptions";
|
7
8
|
import { ExitTag } from "@fncts/base/data/Exit";
|
9
|
+
import { MaybeTag } from "@fncts/base/data/Maybe";
|
8
10
|
import { Trace } from "@fncts/base/data/Trace";
|
9
11
|
import { FiberTypeId, FiberVariance } from "@fncts/io/Fiber/definition";
|
10
12
|
import { StackTraceBuilder } from "@fncts/io/internal/StackTraceBuilder";
|
@@ -19,7 +21,7 @@ import { RuntimeFlag } from "../RuntimeFlag.js";
|
|
19
21
|
import { FiberMessage, FiberMessageTag } from "./FiberMessage.js";
|
20
22
|
|
21
23
|
export class RevertFlags {
|
22
|
-
readonly
|
24
|
+
readonly _ioOpCode = IOTag.RevertFlags;
|
23
25
|
constructor(
|
24
26
|
readonly patch: RuntimeFlags.Patch,
|
25
27
|
readonly trace?: string,
|
@@ -27,7 +29,7 @@ export class RevertFlags {
|
|
27
29
|
}
|
28
30
|
|
29
31
|
export class UpdateTrace {
|
30
|
-
readonly
|
32
|
+
readonly _ioOpCode = IOTag.UpdateTrace;
|
31
33
|
constructor(readonly trace?: string) {}
|
32
34
|
}
|
33
35
|
|
@@ -269,7 +271,7 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
269
271
|
}
|
270
272
|
} catch (e) {
|
271
273
|
if (isIO(e)) {
|
272
|
-
if (IO.concrete(e).
|
274
|
+
if (IO.concrete(e)._ioOpCode === IOTag.YieldNow) {
|
273
275
|
if (this._runtimeFlags.cooperativeYielding) {
|
274
276
|
this.tell(FiberMessage.YieldNow);
|
275
277
|
this.tell(FiberMessage.Resume(IO.unit));
|
@@ -277,10 +279,10 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
277
279
|
} else {
|
278
280
|
effect = IO.unit;
|
279
281
|
}
|
280
|
-
} else if (IO.concrete(e).
|
282
|
+
} else if (IO.concrete(e)._ioOpCode === IOTag.Async) {
|
281
283
|
effect = null!;
|
282
284
|
} else {
|
283
|
-
throw new Error(`Unhandled op ${IO.concrete(e).
|
285
|
+
throw new Error(`Unhandled op ${IO.concrete(e)._ioOpCode}`);
|
284
286
|
}
|
285
287
|
} else {
|
286
288
|
throw e;
|
@@ -318,12 +320,12 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
318
320
|
cur = IO.concrete(IO.yieldNow.flatMap(() => oldCur, trace));
|
319
321
|
}
|
320
322
|
try {
|
321
|
-
switch (cur.
|
323
|
+
switch (cur._ioOpCode) {
|
322
324
|
case IOTag.Sync: {
|
323
325
|
const value = cur.i0();
|
324
326
|
const cont = this.getNextSuccessCont();
|
325
327
|
if (cont) {
|
326
|
-
switch (cont.
|
328
|
+
switch (cont._ioOpCode) {
|
327
329
|
case IOTag.OnSuccess: {
|
328
330
|
cur = IO.concrete(cont.i1(value));
|
329
331
|
break;
|
@@ -406,7 +408,7 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
406
408
|
const oldCur = cur;
|
407
409
|
const cont = this.getNextSuccessCont();
|
408
410
|
if (cont) {
|
409
|
-
switch (cont.
|
411
|
+
switch (cont._ioOpCode) {
|
410
412
|
case IOTag.OnSuccess: {
|
411
413
|
cur = IO.concrete(cont.i1(oldCur.i0));
|
412
414
|
break;
|
@@ -447,7 +449,7 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
447
449
|
const cause = cur.i0();
|
448
450
|
const cont = this.getNextFailCont();
|
449
451
|
if (cont) {
|
450
|
-
switch (cont.
|
452
|
+
switch (cont._ioOpCode) {
|
451
453
|
case IOTag.OnFailure:
|
452
454
|
case IOTag.OnSuccessAndFailure: {
|
453
455
|
if (!(this._runtimeFlags.interruptible && this.isInterrupted())) {
|
@@ -504,38 +506,50 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
504
506
|
cur = IO.concrete(cur.commit);
|
505
507
|
break;
|
506
508
|
}
|
507
|
-
case
|
508
|
-
cur = IO.concrete(
|
509
|
+
case IOTag.External: {
|
510
|
+
cur = IO.concrete(cur.toIO);
|
509
511
|
break;
|
510
512
|
}
|
511
|
-
case
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
513
|
+
case null: {
|
514
|
+
switch (cur._tag) {
|
515
|
+
case MaybeTag.Just: {
|
516
|
+
cur = IO.concrete(IO.succeedNow(cur.value));
|
517
|
+
break;
|
518
|
+
}
|
519
|
+
case MaybeTag.Nothing: {
|
520
|
+
cur = IO.concrete(IO.failNow(new NoSuchElementError()));
|
521
|
+
break;
|
522
|
+
}
|
523
|
+
case EitherTag.Left: {
|
524
|
+
cur = IO.concrete(IO.failNow(cur.left));
|
525
|
+
break;
|
526
|
+
}
|
527
|
+
case EitherTag.Right: {
|
528
|
+
cur = IO.concrete(IO.succeedNow(cur.right));
|
529
|
+
break;
|
530
|
+
}
|
531
|
+
case ExitTag.Failure: {
|
532
|
+
cur = IO.concrete(IO.failCauseNow(cur.cause));
|
533
|
+
break;
|
534
|
+
}
|
535
|
+
case ExitTag.Success: {
|
536
|
+
cur = IO.concrete(IO.succeedNow(cur.value));
|
537
|
+
break;
|
538
|
+
}
|
539
|
+
case "Tag": {
|
540
|
+
cur = IO.concrete(IO.service(cur));
|
541
|
+
break;
|
542
|
+
}
|
543
|
+
}
|
533
544
|
}
|
534
545
|
}
|
535
546
|
} catch (e) {
|
536
547
|
if (isIOError(e)) {
|
537
548
|
cur = IO.concrete(IO.failCauseNow(e.cause));
|
538
|
-
} else if (
|
549
|
+
} else if (
|
550
|
+
isIO(e) &&
|
551
|
+
(IO.concrete(e)._ioOpCode === IOTag.Async || IO.concrete(e)._ioOpCode === IOTag.YieldNow)
|
552
|
+
) {
|
539
553
|
throw e;
|
540
554
|
} else if (isInterruptedException(e)) {
|
541
555
|
cur = IO.concrete(IO.failCauseNow(Cause.parallel(Cause.halt(e), Cause.interrupt(FiberId.none))));
|
@@ -836,7 +850,7 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
836
850
|
getNextSuccessCont() {
|
837
851
|
while (this.stack.hasNext) {
|
838
852
|
const frame = this.stack.pop()!;
|
839
|
-
if (frame.
|
853
|
+
if (frame._ioOpCode !== IOTag.OnFailure) {
|
840
854
|
return frame;
|
841
855
|
}
|
842
856
|
}
|
@@ -845,7 +859,7 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
845
859
|
getNextFailCont() {
|
846
860
|
while (this.stack.hasNext) {
|
847
861
|
const frame = this.stack.pop()!;
|
848
|
-
if (frame.
|
862
|
+
if (frame._ioOpCode !== IOTag.OnSuccess && frame._ioOpCode !== IOTag.WhileLoop) {
|
849
863
|
return frame;
|
850
864
|
}
|
851
865
|
}
|
package/_src/Fiber/definition.ts
CHANGED
@@ -89,6 +89,8 @@ export interface RuntimeFiber<E, A> extends FiberCommon<E, A> {
|
|
89
89
|
* The trace of the Fiber
|
90
90
|
*/
|
91
91
|
readonly trace: UIO<Trace>;
|
92
|
+
|
93
|
+
addObserver(observer: (exit: Exit<E, A>) => void): void;
|
92
94
|
}
|
93
95
|
|
94
96
|
export class SyntheticFiber<E, A> implements FiberCommon<E, A> {
|
package/_src/FiberSet.ts
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
export const FiberSetTypeId = Symbol.for("fncts.io.FiberSet");
|
2
|
+
export type FiberSetTypeId = typeof FiberSetTypeId;
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @tsplus type fncts.io.FiberSet
|
6
|
+
* @tsplus companion fncts.io.FiberSetOps
|
7
|
+
*/
|
8
|
+
export class FiberSet<E, A> {
|
9
|
+
readonly [FiberSetTypeId]: FiberSetTypeId = FiberSetTypeId;
|
10
|
+
constructor(
|
11
|
+
readonly backing: Set<Fiber.Runtime<E, A>>,
|
12
|
+
readonly future: Future<unknown, never>,
|
13
|
+
) {}
|
14
|
+
}
|
15
|
+
|
16
|
+
/**
|
17
|
+
* @tsplus static fncts.io.FiberSetOps unsafeMake
|
18
|
+
*/
|
19
|
+
export function unsafeMake<E, A>(backing: Set<Fiber.Runtime<E, A>>, future: Future<unknown, never>): FiberSet<E, A> {
|
20
|
+
return new FiberSet(backing, future);
|
21
|
+
}
|
22
|
+
|
23
|
+
/**
|
24
|
+
* @tsplus static fncts.io.FiberSetOps make
|
25
|
+
*/
|
26
|
+
export function make<E, A>(): IO<Scope, never, FiberSet<E, A>> {
|
27
|
+
return IO.acquireRelease(
|
28
|
+
Future.make<unknown, never>().map((future) => FiberSet.unsafeMake(new Set<Fiber.Runtime<E, A>>(), future)),
|
29
|
+
(fiberSet) => fiberSet.clear,
|
30
|
+
);
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @tsplus static fncts.io.FiberSetOps makeRuntime
|
35
|
+
*/
|
36
|
+
export function makeRuntime<R, E, A>(): IO<
|
37
|
+
Scope | R,
|
38
|
+
never,
|
39
|
+
<XE extends E, XA extends A>(io: IO<R, XE, XA>) => Fiber.Runtime<XE, XA>
|
40
|
+
> {
|
41
|
+
return make<E, A>().flatMap((fiberSet) => fiberSet.runtime());
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* @tsplus pipeable fncts.io.FiberSet unsafeAdd
|
46
|
+
*/
|
47
|
+
export function unsafeAdd<XE extends E, XA extends A, E, A>(fiber: Fiber.Runtime<XE, XA>) {
|
48
|
+
return (self: FiberSet<E, A>): void => {
|
49
|
+
if (self.backing.has(fiber)) {
|
50
|
+
return;
|
51
|
+
}
|
52
|
+
self.backing.add(fiber);
|
53
|
+
fiber.addObserver((exit) => {
|
54
|
+
self.backing.delete(fiber);
|
55
|
+
if (exit.isFailure() && !exit.cause.isInterruptedOnly) {
|
56
|
+
self.future.unsafeDone(exit);
|
57
|
+
}
|
58
|
+
});
|
59
|
+
};
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* @tsplus pipeable fncts.io.FiberSet add
|
64
|
+
*/
|
65
|
+
export function add<XE extends E, XA extends A, E, A>(fiber: Fiber.Runtime<XE, XA>) {
|
66
|
+
return (self: FiberSet<E, A>): UIO<void> => IO(self.unsafeAdd(fiber));
|
67
|
+
}
|
68
|
+
|
69
|
+
/**
|
70
|
+
* @tsplus pipeable fncts.io.FiberSet runtime
|
71
|
+
*/
|
72
|
+
export function runtime<R = never>() {
|
73
|
+
return <E, A>(
|
74
|
+
self: FiberSet<E, A>,
|
75
|
+
): IO<R, never, <XE extends E, XA extends A>(io: IO<R, XE, XA>) => Fiber.Runtime<XE, XA>> => {
|
76
|
+
return IO.runtime<R>().map((runtime) => {
|
77
|
+
const runFork = runtime.unsafeRunFiber;
|
78
|
+
return (io) => {
|
79
|
+
const fiber = runFork(io);
|
80
|
+
self.unsafeAdd(fiber);
|
81
|
+
return fiber;
|
82
|
+
};
|
83
|
+
});
|
84
|
+
};
|
85
|
+
}
|
86
|
+
|
87
|
+
/**
|
88
|
+
* @tsplus pipeable fncts.io.FiberSet run
|
89
|
+
*/
|
90
|
+
export function run<R, XE extends E, XA extends A, E, A>(io: IO<R, XE, XA>) {
|
91
|
+
return (self: FiberSet<E, A>): IO<R, never, Fiber.Runtime<XE, XA>> => {
|
92
|
+
return io.forkDaemon.tap((fiber) => self.add(fiber));
|
93
|
+
};
|
94
|
+
}
|
95
|
+
|
96
|
+
/**
|
97
|
+
* @tsplus getter fncts.io.FiberSet size
|
98
|
+
*/
|
99
|
+
export function size<E, A>(self: FiberSet<E, A>): UIO<number> {
|
100
|
+
return IO(self.backing.size);
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
* @tsplus getter fncts.io.FiberSet join
|
105
|
+
*/
|
106
|
+
export function join<E, A>(self: FiberSet<E, A>): FIO<E, never> {
|
107
|
+
return (self.future as Future<E, never>).await;
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* @tsplus getter fncts.io.FiberSet clear
|
112
|
+
*/
|
113
|
+
export function clear<E, A>(self: FiberSet<E, A>): UIO<void> {
|
114
|
+
return IO.foreach(self.backing, (fiber) => fiber.interrupt) > IO(self.backing.clear());
|
115
|
+
}
|
package/_src/Hub/api.ts
CHANGED
@@ -68,6 +68,9 @@ class DimapIO<RA, RB, RC, RD, EA, EB, EC, ED, A, B, C, D> extends PHubInternal<
|
|
68
68
|
isShutdown = this.source.isShutdown;
|
69
69
|
shutdown = this.source.shutdown;
|
70
70
|
size = this.source.size;
|
71
|
+
get unsafeSize() {
|
72
|
+
return this.source.unsafeSize;
|
73
|
+
}
|
71
74
|
subscribe: IO<Scope, never, PDequeue<RA | RC, RB | RD, EA | EC, EB | ED, C, D>> = unsafeCoerce(
|
72
75
|
this.source.subscribe.map((queue) => queue.mapIO(this.g)),
|
73
76
|
);
|
@@ -119,9 +122,12 @@ class FilterInputIO<RA, RA1, RB, EA, EA1, EB, A, B> extends PHubInternal<RA | RA
|
|
119
122
|
isShutdown = this.source.isShutdown;
|
120
123
|
shutdown = this.source.shutdown;
|
121
124
|
size = this.source.size;
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
+
get unsafeSize() {
|
126
|
+
return this.source.unsafeSize;
|
127
|
+
}
|
128
|
+
subscribe = this.source.subscribe;
|
129
|
+
publish = (a: A) => this.f(a).flatMap((b) => (b ? this.source.publish(a) : IO.succeedNow(false)));
|
130
|
+
publishAll = (as: Iterable<A>) =>
|
125
131
|
IO.filter(as, this.f).flatMap((as) => (as.isNonEmpty ? this.source.publishAll(as) : IO.succeedNow(false)));
|
126
132
|
}
|
127
133
|
|
@@ -161,9 +167,12 @@ class FilterOutputIO<RA, RB, RB1, EA, EB, EB1, A, B> extends PHubInternal<RA, RB
|
|
161
167
|
isShutdown = this.source.isShutdown;
|
162
168
|
shutdown = this.source.shutdown;
|
163
169
|
size = this.source.size;
|
164
|
-
|
165
|
-
|
166
|
-
|
170
|
+
get unsafeSize() {
|
171
|
+
return this.source.unsafeSize;
|
172
|
+
}
|
173
|
+
subscribe = this.source.subscribe.map((queue) => queue.filterOutputIO(this.f));
|
174
|
+
publish = (a: A) => this.source.publish(a);
|
175
|
+
publishAll = (as: Iterable<A>) => this.source.publishAll(as);
|
167
176
|
}
|
168
177
|
|
169
178
|
/**
|
package/_src/Hub/definition.ts
CHANGED
@@ -84,6 +84,8 @@ export abstract class PHubInternal<RA, RB, EA, EB, A, B>
|
|
84
84
|
*/
|
85
85
|
abstract isShutdown: UIO<boolean>;
|
86
86
|
|
87
|
+
abstract unsafeSize: Maybe<number>;
|
88
|
+
|
87
89
|
/**
|
88
90
|
* Publishes a message to the hub, returning whether the message was
|
89
91
|
* published to the hub.
|
@@ -113,6 +115,10 @@ export abstract class PHubInternal<RA, RB, EA, EB, A, B>
|
|
113
115
|
*/
|
114
116
|
abstract subscribe: IO<Scope, never, PDequeue<RA, RB, EA, EB, A, B>>;
|
115
117
|
|
118
|
+
unsafeOffer(_: never): boolean {
|
119
|
+
throw new Error("Cannot unsafely publish to a Hub");
|
120
|
+
}
|
121
|
+
|
116
122
|
offer(a: A, __tsplusTrace?: string): IO<RA, EA, boolean> {
|
117
123
|
return this.publish(a);
|
118
124
|
}
|
package/_src/Hub/internal.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import type { Maybe } from "@fncts/base/data/Maybe";
|
1
2
|
import type { Hub as HubInternal } from "@fncts/io/internal/Hub";
|
2
3
|
|
3
4
|
import { HashSet } from "@fncts/base/collection/mutable/HashSet";
|
@@ -282,6 +283,13 @@ class UnsafeSubscription<A> extends QueueInternal<never, never, never, never, A,
|
|
282
283
|
}),
|
283
284
|
);
|
284
285
|
|
286
|
+
get unsafeSize(): Maybe<number> {
|
287
|
+
if (this.shutdownFlag.get) {
|
288
|
+
return Nothing();
|
289
|
+
}
|
290
|
+
return Just(this.subscription.size());
|
291
|
+
}
|
292
|
+
|
285
293
|
size: UIO<number> = IO.defer(() => {
|
286
294
|
if (this.shutdownFlag.get) {
|
287
295
|
return IO.interrupt;
|
@@ -290,6 +298,10 @@ class UnsafeSubscription<A> extends QueueInternal<never, never, never, never, A,
|
|
290
298
|
return IO.succeed(this.subscription.size());
|
291
299
|
});
|
292
300
|
|
301
|
+
unsafeOffer(_: never): boolean {
|
302
|
+
return false;
|
303
|
+
}
|
304
|
+
|
293
305
|
offer = (_: never): IO<never, never, boolean> => IO.succeedNow(false);
|
294
306
|
|
295
307
|
offerAll = (_: Iterable<never>): IO<never, never, boolean> => IO.succeedNow(false);
|
@@ -423,6 +435,13 @@ class UnsafeHub<A> extends PHubInternal<never, never, never, never, A, A> {
|
|
423
435
|
}),
|
424
436
|
).uninterruptible;
|
425
437
|
|
438
|
+
get unsafeSize(): Maybe<number> {
|
439
|
+
if (this.shutdownFlag.get) {
|
440
|
+
return Nothing();
|
441
|
+
}
|
442
|
+
return Just(this.hub.size());
|
443
|
+
}
|
444
|
+
|
426
445
|
size = IO.defer(() => {
|
427
446
|
if (this.shutdownFlag.get) {
|
428
447
|
return IO.interrupt;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { FiberRefsPatch } from "@fncts/io/FiberRefs";
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @tsplus getter fncts.io.IO diffFiberRefs
|
5
|
+
*/
|
6
|
+
export function diffFiberRefs<R, E, A>(
|
7
|
+
self: IO<R, E, A>,
|
8
|
+
__tsplusTrace?: string,
|
9
|
+
): IO<R, E, readonly [FiberRefsPatch, A]> {
|
10
|
+
return self.summarized(IO.getFiberRefs(), FiberRefsPatch.diff);
|
11
|
+
}
|
package/_src/IO/api/memoize.ts
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
import type { FiberRefsPatch } from "@fncts/io/FiberRefs";
|
2
|
+
|
1
3
|
/**
|
2
4
|
* @tsplus getter fncts.io.IO memoize
|
3
5
|
*/
|
4
6
|
export function memoize<R, E, A>(self: IO<R, E, A>, __tsplusTrace?: string): UIO<IO<R, E, A>> {
|
5
7
|
return Do((_) => {
|
6
|
-
const future = _(Future.make<E, A>());
|
7
|
-
const complete = _(
|
8
|
-
return complete > future.await;
|
8
|
+
const future = _(Future.make<E, readonly [FiberRefsPatch, A]>());
|
9
|
+
const complete = _(self.diffFiberRefs.fulfill(future).once);
|
10
|
+
return complete > future.await.flatMap(([patch, a]) => IO.patchFiberRefs(patch).as(a));
|
9
11
|
});
|
10
12
|
}
|
package/_src/IO/api/timeout.ts
CHANGED
@@ -27,6 +27,14 @@ export function timeoutTo<A, B, B1>(duration: Lazy<Duration>, b: Lazy<B>, f: (a:
|
|
27
27
|
};
|
28
28
|
}
|
29
29
|
|
30
|
+
/**
|
31
|
+
* @tsplus pipeable fncts.io.IO timeoutFail
|
32
|
+
*/
|
33
|
+
export function timeoutFail<E1>(duration: Lazy<Duration>, b: Lazy<E1>) {
|
34
|
+
return <R, E, A>(self: IO<R, E, A>): IO<R, E | E1, A> =>
|
35
|
+
self.timeoutTo(duration, IO.fail(b), (a) => IO.succeedNow(a)).flatten;
|
36
|
+
}
|
37
|
+
|
30
38
|
/**
|
31
39
|
* @tsplus pipeable fncts.io.IO timeout
|
32
40
|
*/
|
package/_src/IO/api.ts
CHANGED
@@ -958,6 +958,13 @@ export function getOrFailUnit<A>(option: Maybe<A>, __tsplusTrace?: string): FIO<
|
|
958
958
|
return IO.getOrFailWith(option, undefined);
|
959
959
|
}
|
960
960
|
|
961
|
+
/**
|
962
|
+
* @tsplus static fncts.io.IOOps getFiberRefs
|
963
|
+
*/
|
964
|
+
export function getFiberRefs(__tsplusTrace?: string): UIO<FiberRefs> {
|
965
|
+
return IO.withFiberRuntime((fiberState) => IO.succeed(fiberState.getFiberRefs()));
|
966
|
+
}
|
967
|
+
|
961
968
|
/**
|
962
969
|
* Creates an `IO` that halts with the specified lazily-evaluated defect.
|
963
970
|
* This method can be used for terminating a fiber because a defect has been
|
package/_src/IO/definition.ts
CHANGED
@@ -51,7 +51,7 @@ declare module "@fncts/base/data/Exit/definition" {
|
|
51
51
|
}
|
52
52
|
|
53
53
|
declare module "@fncts/base/data/Tag/definition" {
|
54
|
-
interface Tag<T, Identifier = T> extends IO<
|
54
|
+
export interface Tag<T, Identifier = T> extends IO<T, never, T> {}
|
55
55
|
}
|
56
56
|
|
57
57
|
/**
|
@@ -100,11 +100,12 @@ export const enum IOTag {
|
|
100
100
|
Commit,
|
101
101
|
RevertFlags,
|
102
102
|
UpdateTrace,
|
103
|
+
External,
|
103
104
|
}
|
104
105
|
|
105
106
|
export type IOOp<Tag extends string | number, Body = {}> = IO<never, never, never> &
|
106
107
|
Body & {
|
107
|
-
readonly
|
108
|
+
readonly _ioOpCode: Tag;
|
108
109
|
};
|
109
110
|
|
110
111
|
export class IOPrimitive {
|
@@ -112,8 +113,8 @@ export class IOPrimitive {
|
|
112
113
|
public i1: any = undefined;
|
113
114
|
public i2: any = undefined;
|
114
115
|
public trace: string | undefined = undefined;
|
115
|
-
[IOTypeId] = IOTypeId;
|
116
|
-
constructor(readonly
|
116
|
+
readonly [IOTypeId]: IOTypeId = IOTypeId;
|
117
|
+
constructor(readonly _ioOpCode: unknown) {}
|
117
118
|
}
|
118
119
|
|
119
120
|
export function isIO(u: unknown): u is IO<any, any, any> {
|
@@ -257,6 +258,7 @@ export type Primitive =
|
|
257
258
|
| WhileLoop
|
258
259
|
| YieldNow
|
259
260
|
| Fail
|
261
|
+
| External<any, any, any>
|
260
262
|
| STM<any, any, any>
|
261
263
|
| Left<any>
|
262
264
|
| Right<any>
|
@@ -277,3 +279,17 @@ export function concrete(io: IO<any, any, any>): Primitive {
|
|
277
279
|
export type EvaluationStep = OnSuccessAndFailure | OnFailure | OnSuccess;
|
278
280
|
|
279
281
|
export type Canceler<R> = URIO<R, void>;
|
282
|
+
|
283
|
+
export abstract class External<R, E, A> extends IOPrimitive implements IO<R, E, A> {
|
284
|
+
declare _ioOpCode: IOTag.External;
|
285
|
+
declare [IOVariance]: {
|
286
|
+
_R: () => R;
|
287
|
+
_E: () => E;
|
288
|
+
_A: () => A;
|
289
|
+
};
|
290
|
+
|
291
|
+
constructor() {
|
292
|
+
super(IOTag.External);
|
293
|
+
}
|
294
|
+
abstract toIO: IO<R, E, A>;
|
295
|
+
}
|
package/_src/Layer/api.ts
CHANGED
@@ -324,6 +324,16 @@ function retryLoop<RIn, E, ROut, S, RIn1, X>(
|
|
324
324
|
);
|
325
325
|
}
|
326
326
|
|
327
|
+
/**
|
328
|
+
* @tsplus static fncts.io.LayerOps scopedDiscard
|
329
|
+
*/
|
330
|
+
export function scopedDiscard<R, E, A>(
|
331
|
+
io: Lazy<IO<R, E, A>>,
|
332
|
+
__tsplusTrace?: string,
|
333
|
+
): Layer<Exclude<R, Scope>, E, never> {
|
334
|
+
return Layer.scopedEnvironment(io().as(Environment.empty));
|
335
|
+
}
|
336
|
+
|
327
337
|
/**
|
328
338
|
* @tsplus static fncts.io.LayerOps scoped
|
329
339
|
*/
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import type { Maybe } from "@fncts/base/data/Maybe";
|
1
2
|
import type { UIO } from "@fncts/io/IO";
|
2
3
|
import type { PDequeue, PDequeueInternal, PEnqueue, PEnqueueInternal } from "@fncts/io/Queue/definition";
|
3
4
|
|
@@ -32,6 +33,14 @@ class DimapIO<RA, RB, EA, EB, A, B, RC, EC, C, RD, ED, D> extends QueueInternal<
|
|
32
33
|
|
33
34
|
isShutdown: UIO<boolean> = this.queue.isShutdown;
|
34
35
|
|
36
|
+
get unsafeSize(): Maybe<number> {
|
37
|
+
return this.queue.unsafeSize;
|
38
|
+
}
|
39
|
+
|
40
|
+
unsafeOffer(a: C): boolean {
|
41
|
+
throw new Error("Cannot unsafely offer to an effectful Queue");
|
42
|
+
}
|
43
|
+
|
35
44
|
offer(c: C): IO<RC | RA, EA | EC, boolean> {
|
36
45
|
return this.f(c).flatMap((a) => this.queue.offer(a));
|
37
46
|
}
|
@@ -151,6 +160,14 @@ class ContramapIO<RA, RB, EA, EB, A, B, RC, EC, C> implements PEnqueueInternal<R
|
|
151
160
|
|
152
161
|
isShutdown: UIO<boolean> = this.queue.isShutdown;
|
153
162
|
|
163
|
+
get unsafeSize(): Maybe<number> {
|
164
|
+
return this.queue.unsafeSize;
|
165
|
+
}
|
166
|
+
|
167
|
+
unsafeOffer(a: C): boolean {
|
168
|
+
throw new Error("Cannot unsafely offer to an effectful Queue");
|
169
|
+
}
|
170
|
+
|
154
171
|
offer(c: C): IO<RC | RA, EA | EC, boolean> {
|
155
172
|
return this.f(c).flatMap((a) => this.queue.offer(a));
|
156
173
|
}
|
@@ -202,6 +219,14 @@ class MapIO<RA, RB, EA, EB, A, B, RC, EC, C> implements PDequeueInternal<RA, RB
|
|
202
219
|
|
203
220
|
size: UIO<number> = this.queue.size;
|
204
221
|
|
222
|
+
get unsafeSize(): Maybe<number> {
|
223
|
+
return this.queue.unsafeSize;
|
224
|
+
}
|
225
|
+
|
226
|
+
unsafeOffer(a: C): boolean {
|
227
|
+
throw new Error("Cannot unsafely offer to an effectful Queue");
|
228
|
+
}
|
229
|
+
|
205
230
|
take: IO<RB | RC, EB | EC, C> = this.queue.take.flatMap(this.f);
|
206
231
|
|
207
232
|
takeAll: IO<RB | RC, EB | EC, Conc<C>> = this.queue.takeAll.flatMap((bs) => IO.foreach(bs, this.f));
|
@@ -16,6 +16,14 @@ class FilterInputIO<RA, RB, EA, EB, B, A, A1 extends A, R2, E2> extends QueueInt
|
|
16
16
|
|
17
17
|
isShutdown: UIO<boolean> = this.queue.isShutdown;
|
18
18
|
|
19
|
+
get unsafeSize(): Maybe<number> {
|
20
|
+
return this.queue.unsafeSize;
|
21
|
+
}
|
22
|
+
|
23
|
+
unsafeOffer(a: A1): boolean {
|
24
|
+
throw new Error("Cannot unsafely offer to an effectful Queue");
|
25
|
+
}
|
26
|
+
|
19
27
|
offer(a: A1): IO<RA | R2, EA | E2, boolean> {
|
20
28
|
return this.f(a).flatMap((b) => (b ? this.queue.offer(a) : IO.succeedNow(false)));
|
21
29
|
}
|
@@ -92,6 +100,14 @@ class FilterInputEnqueueIO<RA, RB, EA, EB, B, A, A1 extends A, R2, E2>
|
|
92
100
|
|
93
101
|
isShutdown: UIO<boolean> = this.queue.isShutdown;
|
94
102
|
|
103
|
+
get unsafeSize(): Maybe<number> {
|
104
|
+
return this.queue.unsafeSize;
|
105
|
+
}
|
106
|
+
|
107
|
+
unsafeOffer(a: A1): boolean {
|
108
|
+
throw new Error("Cannot unsafely offer to an effectful Queue");
|
109
|
+
}
|
110
|
+
|
95
111
|
offer(a: A1): IO<RA | R2, EA | E2, boolean> {
|
96
112
|
return this.f(a).flatMap((b) => (b ? this.queue.offer(a) : IO.succeedNow(false)));
|
97
113
|
}
|