@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.
Files changed (128) hide show
  1. package/Fiber/FiberRuntime.d.ts +2 -2
  2. package/Fiber/definition.d.ts +1 -0
  3. package/FiberSet.d.ts +66 -0
  4. package/Hub/definition.d.ts +3 -0
  5. package/Hub/internal.d.ts +1 -0
  6. package/IO/api/diffFiberRefs.d.ts +7 -0
  7. package/IO/api/timeout.d.ts +5 -0
  8. package/IO/api.d.ts +6 -1
  9. package/IO/definition.d.ts +18 -7
  10. package/Layer/api.d.ts +5 -0
  11. package/Queue/api/dimapIO.d.ts +5 -0
  12. package/Queue/api/filterInputIO.d.ts +1 -1
  13. package/Queue/api/filterOutputIO.d.ts +1 -0
  14. package/Queue/api/operations.d.ts +11 -0
  15. package/Queue/api/zipWithIO.d.ts +1 -0
  16. package/Queue/definition.d.ts +5 -0
  17. package/Queue/internal.d.ts +1 -0
  18. package/STM/definition.d.ts +1 -1
  19. package/Stream/api.d.ts +10 -0
  20. package/_cjs/Fiber/FiberRuntime.cjs +86 -75
  21. package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
  22. package/_cjs/Fiber/definition.cjs.map +1 -1
  23. package/_cjs/FiberSet.cjs +129 -0
  24. package/_cjs/FiberSet.cjs.map +1 -0
  25. package/_cjs/Hub/api.cjs +20 -11
  26. package/_cjs/Hub/api.cjs.map +1 -1
  27. package/_cjs/Hub/definition.cjs +3 -0
  28. package/_cjs/Hub/definition.cjs.map +1 -1
  29. package/_cjs/Hub/internal.cjs +65 -49
  30. package/_cjs/Hub/internal.cjs.map +1 -1
  31. package/_cjs/IO/api/diffFiberRefs.cjs +17 -0
  32. package/_cjs/IO/api/diffFiberRefs.cjs.map +1 -0
  33. package/_cjs/IO/api/memoize.cjs +7 -4
  34. package/_cjs/IO/api/memoize.cjs.map +1 -1
  35. package/_cjs/IO/api/timeout.cjs +8 -0
  36. package/_cjs/IO/api/timeout.cjs.map +1 -1
  37. package/_cjs/IO/api.cjs +10 -3
  38. package/_cjs/IO/api.cjs.map +1 -1
  39. package/_cjs/IO/definition.cjs +9 -3
  40. package/_cjs/IO/definition.cjs.map +1 -1
  41. package/_cjs/Layer/api.cjs +8 -1
  42. package/_cjs/Layer/api.cjs.map +1 -1
  43. package/_cjs/Queue/api/dimapIO.cjs +28 -10
  44. package/_cjs/Queue/api/dimapIO.cjs.map +1 -1
  45. package/_cjs/Queue/api/filterInputIO.cjs +21 -9
  46. package/_cjs/Queue/api/filterInputIO.cjs.map +1 -1
  47. package/_cjs/Queue/api/filterOutputIO.cjs +28 -16
  48. package/_cjs/Queue/api/filterOutputIO.cjs.map +1 -1
  49. package/_cjs/Queue/api/operations.cjs +20 -0
  50. package/_cjs/Queue/api/operations.cjs.map +1 -1
  51. package/_cjs/Queue/api/zipWithIO.cjs +16 -9
  52. package/_cjs/Queue/api/zipWithIO.cjs.map +1 -1
  53. package/_cjs/Queue/definition.cjs.map +1 -1
  54. package/_cjs/Queue/internal.cjs +84 -54
  55. package/_cjs/Queue/internal.cjs.map +1 -1
  56. package/_cjs/STM/definition.cjs +1 -1
  57. package/_cjs/STM/definition.cjs.map +1 -1
  58. package/_cjs/Stream/api.cjs +40 -5
  59. package/_cjs/Stream/api.cjs.map +1 -1
  60. package/_cjs/internal/BackgroundScheduler.cjs +0 -1
  61. package/_cjs/internal/BackgroundScheduler.cjs.map +1 -1
  62. package/_mjs/Fiber/FiberRuntime.mjs +86 -75
  63. package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
  64. package/_mjs/Fiber/definition.mjs.map +1 -1
  65. package/_mjs/FiberSet.mjs +113 -0
  66. package/_mjs/FiberSet.mjs.map +1 -0
  67. package/_mjs/Hub/api.mjs +20 -11
  68. package/_mjs/Hub/api.mjs.map +1 -1
  69. package/_mjs/Hub/definition.mjs +3 -0
  70. package/_mjs/Hub/definition.mjs.map +1 -1
  71. package/_mjs/Hub/internal.mjs +65 -49
  72. package/_mjs/Hub/internal.mjs.map +1 -1
  73. package/_mjs/IO/api/diffFiberRefs.mjs +9 -0
  74. package/_mjs/IO/api/diffFiberRefs.mjs.map +1 -0
  75. package/_mjs/IO/api/memoize.mjs +7 -4
  76. package/_mjs/IO/api/memoize.mjs.map +1 -1
  77. package/_mjs/IO/api/timeout.mjs +7 -0
  78. package/_mjs/IO/api/timeout.mjs.map +1 -1
  79. package/_mjs/IO/api.mjs +9 -3
  80. package/_mjs/IO/api.mjs.map +1 -1
  81. package/_mjs/IO/definition.mjs +7 -2
  82. package/_mjs/IO/definition.mjs.map +1 -1
  83. package/_mjs/Layer/api.mjs +7 -1
  84. package/_mjs/Layer/api.mjs.map +1 -1
  85. package/_mjs/Queue/api/dimapIO.mjs +28 -10
  86. package/_mjs/Queue/api/dimapIO.mjs.map +1 -1
  87. package/_mjs/Queue/api/filterInputIO.mjs +21 -9
  88. package/_mjs/Queue/api/filterInputIO.mjs.map +1 -1
  89. package/_mjs/Queue/api/filterOutputIO.mjs +28 -16
  90. package/_mjs/Queue/api/filterOutputIO.mjs.map +1 -1
  91. package/_mjs/Queue/api/operations.mjs +18 -0
  92. package/_mjs/Queue/api/operations.mjs.map +1 -1
  93. package/_mjs/Queue/api/zipWithIO.mjs +16 -9
  94. package/_mjs/Queue/api/zipWithIO.mjs.map +1 -1
  95. package/_mjs/Queue/definition.mjs.map +1 -1
  96. package/_mjs/Queue/internal.mjs +84 -54
  97. package/_mjs/Queue/internal.mjs.map +1 -1
  98. package/_mjs/STM/definition.mjs +1 -1
  99. package/_mjs/STM/definition.mjs.map +1 -1
  100. package/_mjs/Stream/api.mjs +36 -4
  101. package/_mjs/Stream/api.mjs.map +1 -1
  102. package/_mjs/internal/BackgroundScheduler.mjs +0 -1
  103. package/_mjs/internal/BackgroundScheduler.mjs.map +1 -1
  104. package/_src/Fiber/FiberRuntime.ts +50 -36
  105. package/_src/Fiber/definition.ts +2 -0
  106. package/_src/FiberSet.ts +115 -0
  107. package/_src/Hub/api.ts +15 -6
  108. package/_src/Hub/definition.ts +6 -0
  109. package/_src/Hub/internal.ts +19 -0
  110. package/_src/IO/api/diffFiberRefs.ts +11 -0
  111. package/_src/IO/api/memoize.ts +5 -3
  112. package/_src/IO/api/timeout.ts +8 -0
  113. package/_src/IO/api.ts +7 -0
  114. package/_src/IO/definition.ts +20 -4
  115. package/_src/Layer/api.ts +10 -0
  116. package/_src/Queue/api/dimapIO.ts +25 -0
  117. package/_src/Queue/api/filterInputIO.ts +16 -0
  118. package/_src/Queue/api/filterOutputIO.ts +16 -0
  119. package/_src/Queue/api/operations.ts +20 -0
  120. package/_src/Queue/api/zipWithIO.ts +8 -0
  121. package/_src/Queue/definition.ts +4 -0
  122. package/_src/Queue/internal.ts +32 -0
  123. package/_src/STM/definition.ts +1 -1
  124. package/_src/Stream/api.ts +55 -0
  125. package/_src/global.ts +4 -0
  126. package/_src/internal/BackgroundScheduler.ts +0 -1
  127. package/global.d.ts +4 -0
  128. 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":"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"}
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 _tag = IOTag.RevertFlags;
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 _tag = IOTag.UpdateTrace;
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)._tag === IOTag.YieldNow) {
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)._tag === IOTag.Async) {
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)._tag}`);
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._tag) {
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._tag) {
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._tag) {
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._tag) {
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 "Just": {
508
- cur = IO.concrete(IO.succeedNow(cur.value));
509
+ case IOTag.External: {
510
+ cur = IO.concrete(cur.toIO);
509
511
  break;
510
512
  }
511
- case "Nothing": {
512
- cur = IO.concrete(IO.failNow(new NoSuchElementError()));
513
- break;
514
- }
515
- case "Left": {
516
- cur = IO.concrete(IO.failNow(cur.left));
517
- break;
518
- }
519
- case "Right": {
520
- cur = IO.concrete(IO.succeedNow(cur.right));
521
- break;
522
- }
523
- case ExitTag.Failure: {
524
- cur = IO.concrete(IO.failCauseNow(cur.cause));
525
- break;
526
- }
527
- case ExitTag.Success: {
528
- cur = IO.concrete(IO.succeedNow(cur.value));
529
- break;
530
- }
531
- case "Tag": {
532
- cur = IO.concrete(IO.service(cur));
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 (isIO(e) && (IO.concrete(e)._tag === IOTag.Async || IO.concrete(e)._tag === IOTag.YieldNow)) {
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._tag !== IOTag.OnFailure) {
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._tag !== IOTag.OnSuccess && frame._tag !== IOTag.WhileLoop) {
862
+ if (frame._ioOpCode !== IOTag.OnSuccess && frame._ioOpCode !== IOTag.WhileLoop) {
849
863
  return frame;
850
864
  }
851
865
  }
@@ -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> {
@@ -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
- subscribe = this.source.subscribe;
123
- publish = (a: A) => this.f(a).flatMap((b) => (b ? this.source.publish(a) : IO.succeedNow(false)));
124
- publishAll = (as: Iterable<A>) =>
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
- subscribe = this.source.subscribe.map((queue) => queue.filterOutputIO(this.f));
165
- publish = (a: A) => this.source.publish(a);
166
- publishAll = (as: Iterable<A>) => this.source.publishAll(as);
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
  /**
@@ -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
  }
@@ -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
+ }
@@ -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 = _(future.fulfill(self).once);
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
  }
@@ -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
@@ -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<never, never, T> {}
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 _tag: Tag;
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 _tag: Primitive["_tag"]) {}
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
  }