@fncts/io 0.0.24 → 0.0.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (230) hide show
  1. package/FiberRef/api.d.ts +0 -63
  2. package/FiberRef/operations.d.ts +64 -0
  3. package/FiberRef.d.ts +1 -0
  4. package/FiberRefs/api.d.ts +6 -1
  5. package/FiberRefs.d.ts +0 -1
  6. package/IO/api/daemonChildren.d.ts +6 -0
  7. package/IO/api/disconnect.d.ts +17 -0
  8. package/IO/api/fork.d.ts +4 -0
  9. package/IO/api/forkDaemon.d.ts +10 -0
  10. package/IO/api/interrupt.d.ts +1 -20
  11. package/IO/api/race.d.ts +7 -1
  12. package/IO/api/raceWith.d.ts +17 -0
  13. package/IO/api/transplant.d.ts +13 -0
  14. package/IO/api/whenFiberRef.d.ts +10 -0
  15. package/IO/api/whenRef.d.ts +10 -0
  16. package/IO/api/zipConcurrent.d.ts +5 -4
  17. package/IO/api.d.ts +12 -1
  18. package/IO.d.ts +7 -1
  19. package/RefSubject/Atomic.d.ts +1 -1
  20. package/_cjs/Cached/api.cjs +1 -1
  21. package/_cjs/Channel/api/mergeAllWith.cjs +1 -1
  22. package/_cjs/Channel/api/mergeWith.cjs +17 -16
  23. package/_cjs/Channel/api/mergeWith.cjs.map +1 -1
  24. package/_cjs/Channel/api.cjs +1 -3
  25. package/_cjs/Channel/api.cjs.map +1 -1
  26. package/_cjs/Fiber/FiberRuntime.cjs +16 -17
  27. package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
  28. package/_cjs/FiberRef/api/locallyScoped.cjs +1 -1
  29. package/_cjs/FiberRef/api/locallyScopedWith.cjs +1 -1
  30. package/_cjs/FiberRef/api.cjs +0 -124
  31. package/_cjs/FiberRef/api.cjs.map +1 -1
  32. package/_cjs/FiberRef/constructors.cjs +1 -1
  33. package/_cjs/FiberRef/operations.cjs +130 -0
  34. package/_cjs/FiberRef/operations.cjs.map +1 -0
  35. package/_cjs/FiberRef.cjs +11 -0
  36. package/_cjs/FiberRef.cjs.map +1 -1
  37. package/_cjs/FiberRefs/api.cjs +90 -0
  38. package/_cjs/FiberRefs/api.cjs.map +1 -1
  39. package/_cjs/FiberRefs.cjs +0 -11
  40. package/_cjs/FiberRefs.cjs.map +1 -1
  41. package/_cjs/Future/api.cjs +1 -3
  42. package/_cjs/Future/api.cjs.map +1 -1
  43. package/_cjs/IO/api/asyncIO.cjs +1 -3
  44. package/_cjs/IO/api/asyncIO.cjs.map +1 -1
  45. package/_cjs/IO/api/bracketExit.cjs +1 -3
  46. package/_cjs/IO/api/bracketExit.cjs.map +1 -1
  47. package/_cjs/IO/api/clockWith.cjs +1 -1
  48. package/_cjs/IO/api/concurrency.cjs +1 -1
  49. package/_cjs/IO/api/consoleWith.cjs +1 -1
  50. package/_cjs/IO/api/daemonChildren.cjs +19 -0
  51. package/_cjs/IO/api/daemonChildren.cjs.map +1 -0
  52. package/_cjs/IO/api/disconnect.cjs +31 -0
  53. package/_cjs/IO/api/disconnect.cjs.map +1 -0
  54. package/_cjs/IO/api/environment.cjs +1 -1
  55. package/_cjs/IO/api/foreachConcurrent.cjs +19 -20
  56. package/_cjs/IO/api/foreachConcurrent.cjs.map +1 -1
  57. package/_cjs/IO/api/fork.cjs +8 -3
  58. package/_cjs/IO/api/fork.cjs.map +1 -1
  59. package/_cjs/IO/api/forkDaemon.cjs +21 -0
  60. package/_cjs/IO/api/forkDaemon.cjs.map +1 -0
  61. package/_cjs/IO/api/forkIn.cjs +2 -4
  62. package/_cjs/IO/api/forkIn.cjs.map +1 -1
  63. package/_cjs/IO/api/forkScoped.cjs +2 -4
  64. package/_cjs/IO/api/forkScoped.cjs.map +1 -1
  65. package/_cjs/IO/api/fulfill.cjs +1 -3
  66. package/_cjs/IO/api/fulfill.cjs.map +1 -1
  67. package/_cjs/IO/api/interrupt.cjs +8 -59
  68. package/_cjs/IO/api/interrupt.cjs.map +1 -1
  69. package/_cjs/IO/api/race.cjs +24 -12
  70. package/_cjs/IO/api/race.cjs.map +1 -1
  71. package/_cjs/IO/api/{core-scope.cjs → raceWith.cjs} +15 -56
  72. package/_cjs/IO/api/raceWith.cjs.map +1 -0
  73. package/_cjs/IO/api/randomWith.cjs +1 -1
  74. package/_cjs/IO/api/supervised.cjs +1 -1
  75. package/_cjs/IO/api/transplant.cjs +31 -0
  76. package/_cjs/IO/api/transplant.cjs.map +1 -0
  77. package/_cjs/IO/api/whenFiberRef.cjs +20 -0
  78. package/_cjs/IO/api/whenFiberRef.cjs.map +1 -0
  79. package/_cjs/IO/api/whenRef.cjs +21 -0
  80. package/_cjs/IO/api/whenRef.cjs.map +1 -0
  81. package/_cjs/IO/api/zipConcurrent.cjs +25 -19
  82. package/_cjs/IO/api/zipConcurrent.cjs.map +1 -1
  83. package/_cjs/IO/api.cjs +21 -5
  84. package/_cjs/IO/api.cjs.map +1 -1
  85. package/_cjs/IO.cjs +70 -4
  86. package/_cjs/IO.cjs.map +1 -1
  87. package/_cjs/Layer/MemoMap.cjs +1 -3
  88. package/_cjs/Layer/MemoMap.cjs.map +1 -1
  89. package/_cjs/RefSubject/Atomic.cjs +2 -2
  90. package/_cjs/RefSubject/Atomic.cjs.map +1 -1
  91. package/_cjs/Reloadable/constructors.cjs +1 -1
  92. package/_cjs/Reloadable/definition.cjs +1 -1
  93. package/_cjs/STM/api/atomically.cjs +2 -4
  94. package/_cjs/STM/api/atomically.cjs.map +1 -1
  95. package/_cjs/ScopedRef/api.cjs +2 -6
  96. package/_cjs/ScopedRef/api.cjs.map +1 -1
  97. package/_cjs/State/api.cjs +1 -1
  98. package/_cjs/Stream/api.cjs +137 -135
  99. package/_cjs/Stream/api.cjs.map +1 -1
  100. package/_cjs/TReentrantLock/api.cjs +2 -6
  101. package/_cjs/TReentrantLock/api.cjs.map +1 -1
  102. package/_cjs/TSemaphore/api.cjs +1 -3
  103. package/_cjs/TSemaphore/api.cjs.map +1 -1
  104. package/_mjs/Cached/api.mjs +1 -1
  105. package/_mjs/Channel/api/mergeAllWith.mjs +1 -1
  106. package/_mjs/Channel/api/mergeWith.mjs +17 -16
  107. package/_mjs/Channel/api/mergeWith.mjs.map +1 -1
  108. package/_mjs/Channel/api.mjs +1 -3
  109. package/_mjs/Channel/api.mjs.map +1 -1
  110. package/_mjs/Fiber/FiberRuntime.mjs +16 -17
  111. package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
  112. package/_mjs/FiberRef/api/locallyScoped.mjs +1 -1
  113. package/_mjs/FiberRef/api/locallyScopedWith.mjs +1 -1
  114. package/_mjs/FiberRef/api.mjs +0 -107
  115. package/_mjs/FiberRef/api.mjs.map +1 -1
  116. package/_mjs/FiberRef/constructors.mjs +1 -1
  117. package/_mjs/FiberRef/operations.mjs +109 -0
  118. package/_mjs/FiberRef/operations.mjs.map +1 -0
  119. package/_mjs/FiberRef.mjs +1 -0
  120. package/_mjs/FiberRef.mjs.map +1 -1
  121. package/_mjs/FiberRefs/api.mjs +89 -0
  122. package/_mjs/FiberRefs/api.mjs.map +1 -1
  123. package/_mjs/FiberRefs.mjs +0 -1
  124. package/_mjs/FiberRefs.mjs.map +1 -1
  125. package/_mjs/Future/api.mjs +1 -3
  126. package/_mjs/Future/api.mjs.map +1 -1
  127. package/_mjs/IO/api/asyncIO.mjs +1 -3
  128. package/_mjs/IO/api/asyncIO.mjs.map +1 -1
  129. package/_mjs/IO/api/bracketExit.mjs +1 -3
  130. package/_mjs/IO/api/bracketExit.mjs.map +1 -1
  131. package/_mjs/IO/api/clockWith.mjs +1 -1
  132. package/_mjs/IO/api/concurrency.mjs +1 -1
  133. package/_mjs/IO/api/consoleWith.mjs +1 -1
  134. package/_mjs/IO/api/daemonChildren.mjs +11 -0
  135. package/_mjs/IO/api/daemonChildren.mjs.map +1 -0
  136. package/_mjs/IO/api/disconnect.mjs +23 -0
  137. package/_mjs/IO/api/disconnect.mjs.map +1 -0
  138. package/_mjs/IO/api/environment.mjs +1 -1
  139. package/_mjs/IO/api/foreachConcurrent.mjs +19 -20
  140. package/_mjs/IO/api/foreachConcurrent.mjs.map +1 -1
  141. package/_mjs/IO/api/fork.mjs +6 -2
  142. package/_mjs/IO/api/fork.mjs.map +1 -1
  143. package/_mjs/IO/api/forkDaemon.mjs +13 -0
  144. package/_mjs/IO/api/forkDaemon.mjs.map +1 -0
  145. package/_mjs/IO/api/forkIn.mjs +2 -4
  146. package/_mjs/IO/api/forkIn.mjs.map +1 -1
  147. package/_mjs/IO/api/forkScoped.mjs +2 -4
  148. package/_mjs/IO/api/forkScoped.mjs.map +1 -1
  149. package/_mjs/IO/api/fulfill.mjs +1 -3
  150. package/_mjs/IO/api/fulfill.mjs.map +1 -1
  151. package/_mjs/IO/api/interrupt.mjs +6 -55
  152. package/_mjs/IO/api/interrupt.mjs.map +1 -1
  153. package/_mjs/IO/api/race.mjs +22 -12
  154. package/_mjs/IO/api/race.mjs.map +1 -1
  155. package/_mjs/IO/api/raceWith.mjs +59 -0
  156. package/_mjs/IO/api/raceWith.mjs.map +1 -0
  157. package/_mjs/IO/api/randomWith.mjs +1 -1
  158. package/_mjs/IO/api/supervised.mjs +1 -1
  159. package/_mjs/IO/api/transplant.mjs +23 -0
  160. package/_mjs/IO/api/transplant.mjs.map +1 -0
  161. package/_mjs/IO/api/whenFiberRef.mjs +12 -0
  162. package/_mjs/IO/api/whenFiberRef.mjs.map +1 -0
  163. package/_mjs/IO/api/whenRef.mjs +13 -0
  164. package/_mjs/IO/api/whenRef.mjs.map +1 -0
  165. package/_mjs/IO/api/zipConcurrent.mjs +23 -17
  166. package/_mjs/IO/api/zipConcurrent.mjs.map +1 -1
  167. package/_mjs/IO/api.mjs +16 -3
  168. package/_mjs/IO/api.mjs.map +1 -1
  169. package/_mjs/IO.mjs +7 -1
  170. package/_mjs/IO.mjs.map +1 -1
  171. package/_mjs/Layer/MemoMap.mjs +1 -3
  172. package/_mjs/Layer/MemoMap.mjs.map +1 -1
  173. package/_mjs/RefSubject/Atomic.mjs +1 -1
  174. package/_mjs/RefSubject/Atomic.mjs.map +1 -1
  175. package/_mjs/Reloadable/constructors.mjs +1 -1
  176. package/_mjs/Reloadable/definition.mjs +1 -1
  177. package/_mjs/STM/api/atomically.mjs +2 -4
  178. package/_mjs/STM/api/atomically.mjs.map +1 -1
  179. package/_mjs/ScopedRef/api.mjs +2 -6
  180. package/_mjs/ScopedRef/api.mjs.map +1 -1
  181. package/_mjs/State/api.mjs +1 -1
  182. package/_mjs/Stream/api.mjs +137 -135
  183. package/_mjs/Stream/api.mjs.map +1 -1
  184. package/_mjs/TReentrantLock/api.mjs +2 -6
  185. package/_mjs/TReentrantLock/api.mjs.map +1 -1
  186. package/_mjs/TSemaphore/api.mjs +1 -3
  187. package/_mjs/TSemaphore/api.mjs.map +1 -1
  188. package/_src/Channel/api.ts +1 -1
  189. package/_src/FiberRef/api.ts +0 -114
  190. package/_src/FiberRef/operations.ts +115 -0
  191. package/_src/FiberRef.ts +1 -0
  192. package/_src/FiberRefs/api.ts +72 -0
  193. package/_src/FiberRefs.ts +0 -1
  194. package/_src/Future/api.ts +1 -1
  195. package/_src/IO/api/asyncIO.ts +1 -1
  196. package/_src/IO/api/bracketExit.ts +1 -1
  197. package/_src/IO/api/daemonChildren.ts +6 -0
  198. package/_src/IO/api/disconnect.ts +25 -0
  199. package/_src/IO/api/foreachConcurrent.ts +1 -1
  200. package/_src/IO/api/fork.ts +3 -0
  201. package/_src/IO/api/forkDaemon.ts +12 -0
  202. package/_src/IO/api/forkIn.ts +1 -1
  203. package/_src/IO/api/forkScoped.ts +1 -3
  204. package/_src/IO/api/fulfill.ts +1 -1
  205. package/_src/IO/api/interrupt.ts +5 -56
  206. package/_src/IO/api/race.ts +18 -8
  207. package/_src/IO/api/{core-scope.ts → raceWith.ts} +2 -44
  208. package/_src/IO/api/transplant.ts +19 -0
  209. package/_src/IO/api/whenFiberRef.ts +9 -0
  210. package/_src/IO/api/whenRef.ts +9 -0
  211. package/_src/IO/api/zipConcurrent.ts +41 -43
  212. package/_src/IO/api.ts +18 -2
  213. package/_src/IO.ts +7 -1
  214. package/_src/Layer/MemoMap.ts +1 -1
  215. package/_src/RefSubject/Atomic.ts +1 -1
  216. package/_src/STM/api/atomically.ts +1 -1
  217. package/_src/ScopedRef/api.ts +2 -2
  218. package/_src/TReentrantLock/api.ts +2 -2
  219. package/_src/TSemaphore/api.ts +1 -1
  220. package/package.json +2 -2
  221. package/FiberRefs/join.d.ts +0 -9
  222. package/IO/api/core-scope.d.ts +0 -43
  223. package/_cjs/FiberRefs/join.cjs +0 -104
  224. package/_cjs/FiberRefs/join.cjs.map +0 -1
  225. package/_cjs/IO/api/core-scope.cjs.map +0 -1
  226. package/_mjs/FiberRefs/join.mjs +0 -96
  227. package/_mjs/FiberRefs/join.mjs.map +0 -1
  228. package/_mjs/IO/api/core-scope.mjs +0 -97
  229. package/_mjs/IO/api/core-scope.mjs.map +0 -1
  230. package/_src/FiberRefs/join.ts +0 -71
@@ -1,4 +1,8 @@
1
+ import type { InterruptibilityRestorer } from "./interrupt.js";
2
+ import type { Grafter } from "./transplant.js";
3
+
1
4
  import { tuple } from "@fncts/base/data/function";
5
+ import { AtomicBoolean } from "@fncts/base/internal/AtomicBoolean";
2
6
  import { AtomicReference } from "@fncts/base/internal/AtomicReference";
3
7
 
4
8
  /**
@@ -16,54 +20,48 @@ export function zipConcurrent<R1, E1, B>(that: IO<R1, E1, B>, __tsplusTrace?: st
16
20
  export function zipWithConcurrent<A, R1, E1, B, C>(that: IO<R1, E1, B>, f: (a: A, b: B) => C, __tsplusTrace?: string) {
17
21
  return <R, E>(self: IO<R, E, A>): IO<R | R1, E | E1, C> => {
18
22
  return IO.fiberId.flatMap((fiberId) =>
19
- IO.uninterruptibleMask(({ restore }) => {
20
- const future = Future.unsafeMake<void, C>(FiberId.none);
21
- const ref = new AtomicReference<Maybe<Either<A, B>>>(Nothing());
22
- return IO.transplant((graft) =>
23
- graft(
24
- restore(self).matchCauseIO(
25
- (cause) => future.fail(undefined) > IO.failCauseNow(cause),
26
- (a) =>
27
- ref.getAndSet(Just(Either.left(a))).match(
28
- () => IO.unit,
29
- (value) =>
30
- value.match(
31
- () => IO.unit,
32
- (b) => future.succeed(f(a, b)).asUnit,
33
- ),
34
- ),
35
- ),
36
- )
37
- .forkDaemon.zip(
38
- graft(
39
- restore(that).matchCauseIO(
40
- (cause) => future.fail(undefined) > IO.failCauseNow(cause),
41
- (b) =>
42
- ref.getAndSet(Just(Either.right(b))).match(
43
- () => IO.unit,
44
- (value) =>
45
- value.match(
46
- (a) => future.succeed(f(a, b)).asUnit,
47
- () => IO.unit,
48
- ),
49
- ),
50
- ),
51
- ).forkDaemon,
52
- )
23
+ IO.uninterruptibleMask((restore) => {
24
+ return IO.transplant((graft) => {
25
+ const future = Future.unsafeMake<void, void>(FiberId.none);
26
+ const ref = new AtomicBoolean(false);
27
+ return fork(self, restore, graft, future, ref)
28
+ .zip(fork(that, restore, graft, future, ref))
53
29
  .flatMap(([left, right]) =>
54
30
  restore(future.await).matchCauseIO(
55
31
  (cause) =>
56
- left
57
- .interruptAs(fiberId)
58
- .zipConcurrent(right.interruptAs(fiberId))
59
- .flatMap(([left, right]) =>
60
- left.zipConcurrent(right).match(IO.failCauseNow, () => IO.failCauseNow(cause.stripFailures)),
61
- ),
62
- (c) => left.inheritRefs.zip(right.inheritRefs).as(c),
32
+ left.interruptFork >
33
+ right.interruptFork >
34
+ left.await.zip(right.await).flatMap(([left, right]) =>
35
+ left
36
+ .zipWithCause(right, f, (a, b) => Cause.both(a, b))
37
+ .match(
38
+ (causes) => IO.refailCause(Cause.both(cause.stripFailures, causes)),
39
+ () => IO.refailCause(cause.stripFailures),
40
+ ),
41
+ ),
42
+ () => left.join.zipWith(right.join, f),
63
43
  ),
64
- ),
65
- );
44
+ );
45
+ });
66
46
  }),
67
47
  );
68
48
  };
69
49
  }
50
+
51
+ function fork<R, E, A, C>(
52
+ io: Lazy<IO<R, E, A>>,
53
+ restore: InterruptibilityRestorer,
54
+ graft: Grafter,
55
+ future: Future<void, void>,
56
+ ref: AtomicBoolean,
57
+ ): IO<R, never, Fiber<E, A>> {
58
+ return graft(restore(io())).matchCauseIO(
59
+ (cause) => future.fail(undefined) > IO.refailCause(cause),
60
+ (a) => {
61
+ if (ref.getAndSet(true)) {
62
+ future.unsafeDone(IO.unit);
63
+ }
64
+ return IO.succeedNow(a);
65
+ },
66
+ ).forkDaemon;
67
+ }
package/_src/IO/api.ts CHANGED
@@ -1061,6 +1061,16 @@ export function left<A>(a: Lazy<A>, __tsplusTrace?: string): UIO<Either<A, never
1061
1061
  return IO.succeed(a).flatMap((a) => IO.succeedNow(Either.left(a)));
1062
1062
  }
1063
1063
 
1064
+ /**
1065
+ * @tsplus getter fncts.io.IO just
1066
+ */
1067
+ export function just<R, E, A>(self: IO<R, E, Maybe<A>>): IO<R, Maybe<E>, A> {
1068
+ return self.matchIO(
1069
+ (e) => IO.fail(Just(e)),
1070
+ (a) => a.match(() => IO.fail(Nothing()), IO.succeedNow),
1071
+ );
1072
+ }
1073
+
1064
1074
  /**
1065
1075
  * @tsplus static fncts.io.IOOps log
1066
1076
  */
@@ -1291,6 +1301,11 @@ export function mergeAll<R, E, A, B>(
1291
1301
  return fas.foldLeft(IO.succeed(b) as IO<R, E, B>, (b, a) => b.zipWith(a, f));
1292
1302
  }
1293
1303
 
1304
+ /**
1305
+ * @tsplus static fncts.io.IOOps nothing
1306
+ */
1307
+ export const nothing = IO.succeedNow(Nothing());
1308
+
1294
1309
  /**
1295
1310
  * Converts an option on errors into an option on values.
1296
1311
  *
@@ -1871,10 +1886,11 @@ export function when(b: Lazy<boolean>, __tsplusTrace?: string) {
1871
1886
  * The moral equivalent of `if (p) exp` when `p` has side-effects
1872
1887
  *
1873
1888
  * @tsplus pipeable fncts.io.IO whenIO
1889
+ * @tsplus static fncts.io.IOOps whenIO
1874
1890
  */
1875
1891
  export function whenIO<R1, E1>(mb: IO<R1, E1, boolean>, __tsplusTrace?: string) {
1876
- return <R, E, A>(ma: IO<R, E, A>): IO<R1 | R, E | E1, void> => {
1877
- return mb.flatMap((b) => (b ? ma.asUnit : IO.unit));
1892
+ return <R, E, A>(ma: IO<R, E, A>): IO<R1 | R, E | E1, Maybe<A>> => {
1893
+ return mb.flatMap((b) => (b ? ma.asJust : IO.nothing));
1878
1894
  };
1879
1895
  }
1880
1896
 
package/_src/IO.ts CHANGED
@@ -19,15 +19,17 @@ export * from "./IO/api/clockWith.js";
19
19
  export * from "./IO/api/concurrency.js";
20
20
  export * from "./IO/api/concurrentFinalizers.js";
21
21
  export * from "./IO/api/consoleWith.js";
22
- export * from "./IO/api/core-scope.js";
22
+ export * from "./IO/api/daemonChildren.js";
23
23
  export * from "./IO/api/delay.js";
24
24
  export * from "./IO/api/descriptor.js";
25
+ export * from "./IO/api/disconnect.js";
25
26
  export * from "./IO/api/ensuringChildren.js";
26
27
  export * from "./IO/api/environment.js";
27
28
  export * from "./IO/api/foreachConcurrent.js";
28
29
  export * from "./IO/api/foreachExec.js";
29
30
  export * from "./IO/api/fork.js";
30
31
  export * from "./IO/api/forkAll.js";
32
+ export * from "./IO/api/forkDaemon.js";
31
33
  export * from "./IO/api/forkIn.js";
32
34
  export * from "./IO/api/forkScoped.js";
33
35
  export * from "./IO/api/fulfill.js";
@@ -39,6 +41,7 @@ export * from "./IO/api/provideLayer.js";
39
41
  export * from "./IO/api/provideSomeLayer.js";
40
42
  export * from "./IO/api/race.js";
41
43
  export * from "./IO/api/raceFirst.js";
44
+ export * from "./IO/api/raceWith.js";
42
45
  export * from "./IO/api/randomWith.js";
43
46
  export * from "./IO/api/repeat.js";
44
47
  export * from "./IO/api/retry.js";
@@ -51,6 +54,9 @@ export * from "./IO/api/sleep.js";
51
54
  export * from "./IO/api/stateful.js";
52
55
  export * from "./IO/api/supervised.js";
53
56
  export * from "./IO/api/timeout.js";
57
+ export * from "./IO/api/transplant.js";
58
+ export * from "./IO/api/whenFiberRef.js";
59
+ export * from "./IO/api/whenRef.js";
54
60
  export * from "./IO/api/withChildren.js";
55
61
  export * from "./IO/api/withEarlyRelease.js";
56
62
  export * from "./IO/api/withFinalizer.js";
@@ -35,7 +35,7 @@ export class MemoMap {
35
35
  const observers = _(Ref.make(0));
36
36
  const future = _(Future.make<E, Environment<A>>());
37
37
  const finalizerRef = _(Ref.make<Finalizer>(Finalizer.noop));
38
- const resource = IO.uninterruptibleMask(({ restore }) =>
38
+ const resource = IO.uninterruptibleMask((restore) =>
39
39
  Do((_) => {
40
40
  const outerScope = scope;
41
41
  const innerScope = _(Scope.make);
@@ -3,7 +3,7 @@ import type { Emitter } from "@fncts/io/Push";
3
3
  import { AtomicReference } from "@fncts/base/internal/AtomicReference";
4
4
  import { Hold, Push } from "@fncts/io/Push";
5
5
  import { Atomic } from "@fncts/io/Ref";
6
- import { RefSubjectInternal } from "@fncts/io/RefSubject";
6
+ import { RefSubjectInternal } from "@fncts/io/RefSubject/definition";
7
7
 
8
8
  export class AtomicRefSubject<E, A> extends RefSubjectInternal<never, E, A, A> {
9
9
  readonly stream = new Hold<never, E, A>(Push.never);
@@ -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(({ restore }) =>
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;
@@ -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(({ restore }) =>
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(({ restore }) =>
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
- ({ restore }) => restore(self.acquireRead.commit) > restore(io).ensuring(self.releaseRead.commit),
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
- ({ restore }) => restore(self.acquireWrite.commit) > restore(io).ensuring(self.releaseWrite.commit),
106
+ (restore) => restore(self.acquireWrite.commit) > restore(io).ensuring(self.releaseWrite.commit),
107
107
  );
108
108
  };
109
109
  }
@@ -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(({ restore }) =>
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
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@fncts/io",
3
- "version": "0.0.24",
3
+ "version": "0.0.26",
4
4
  "dependencies": {
5
- "@fncts/base": "0.0.23",
5
+ "@fncts/base": "0.0.24",
6
6
  "@fncts/transformers": "0.0.4",
7
7
  "@fncts/typelevel": "0.0.15"
8
8
  },
@@ -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;
@@ -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>>;
@@ -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":";;;;;;;;;;;;;;;;AAAA;;;AAGM,SAAUA,IAAI,CAACC,OAAwB,EAAEC,IAAe;EAC5D,OAAQC,IAAe,IAAe;IACpC,MAAMC,eAAe,GAAGC,yBAAS,CAACC,UAAU,CAACH,IAAI,CAAC;IAClD,MAAMI,cAAc,GAAIF,yBAAS,CAACC,UAAU,CAACJ,IAAI,CAAC;IAClD,MAAMM,cAAc,GAAIC,kCAAiCL,eAAe,EAAE,CAACM,GAAG,EAAEN,eAAe,EAAEO,UAAU,KAAI;MAC7G,MAAMC,UAAU,GAAGD,UAAU,CAACE,IAAI,CAAC,CAAC,CAAC;MACrC,iCAAIF,UAAU,CAACE,IAAI,CAAC,CAAC,CAAC,EAAIZ,OAAO,GAAE;QACjC,OAAOG,eAAe;;MAExB,OAAOU,sBACL,MAAK;QACH,IAAIC,6BAAuBH,UAAU,0BAAEF,GAAG,EAAS,EAAE,OAAON,eAAe;QAC3E,OAAOK,oBAAoBC,GAAG,EAAEM,qBAAK,CAACf,OAAO,EAAEW,UAAU,CAAU,CAAC,EAA7DR,eAAe,CAA+C;MACvE,CAAC,EACAa,WAAW,IAAI;QACd,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGC,YAAY,CAACV,GAAG,EAAEO,WAAW,EAAEN,UAAU,CAAC;QAC1E,IAAI,CAACQ,WAAW,EAAE,OAAOf,eAAe;QACxC,MAAMiB,KAAK,GAAMC,wBAAG,EAAMJ,QAAQ,EAAEN,UAAU,CAAC;QAC/C,MAAMW,QAAQ,GAAGN,WAAW,CAACJ,IAAI,CAAC,CAAC,CAAC;QACpC,MAAMW,QAAQ,GAAGF,qBAASC,QAAQ,EAAED,yBAAG,EAAOD,KAAK,CAAC,CAACE,QAAQ,CAAC,EAA7Cb,GAAG,CAA2C;QAC/D,IAAIa,QAAQ,KAAKC,QAAQ,EAAE,OAAOpB,eAAe;QACjD,IAAIqB,QAAmD;QACvD,IAAIC,mCAAW,CAAU,EAAE;UACzBD,QAAQ,GAAGT,qBAAK,CAACf,OAAO,EAAEuB,QAAQ,CAAU,CAAC;SAC9C,MAAM;UACL,MAAM,CAACG,aAAa,CAAC,GAAGV,WAAW,CAACJ,IAAI;UACxC,iCAAIc,aAAa,EAAI1B,OAAO,GAAE;YAC5BwB,QAAQ,GAAGT,qBAAK,CAACW,aAAa,EAAEH,QAAQ,CAAC,EAAEP,WAAW,CAACW,IAAI,CAAC;WAC7D,MAAM;YACLH,QAAQ,GAAGT,qBAAK,CAACf,OAAO,EAAEuB,QAAQ,CAAC,EAAEP,WAAW,CAAC;;;QAGrD,OAAOR,oBAAoBC,GAAG,EAAEe,QAAQ,EAAjCrB,eAAe,CAAmB;MAC3C,CAAC,EAxBIK,oBAAoBC,GAAG,EAAvBN,eAAe,CAAS,CAyB9B;IACH,CAAC,EA/BuBG,cAAc,CA+BpC;IACF,OAAOF,yBAAS,CAACwB,GAAG,CAACrB,cAAc,CAAC;EACtC,CAAC;AACH;AAEA,SAASsB,cAAc,CAACC,IAAqB,EAAEC,KAAsB;EACnE,MAAMC,OAAO,GAAGC,oBAAWD,OAAO,CAACD,KAAK,CAACG,SAAS,CAAC,CAACJ,IAAI,CAACI,SAAS,CAAC;EACnE,OAAOF,OAAO,KAAK,CAAC,GAAGC,oBAAWD,OAAO,CAACD,KAAK,CAACI,EAAE,CAAC,CAACL,IAAI,CAACK,EAAE,CAAC,GAAGH,OAAO;AACxE;AAEA;;;AAGA,SAASb,YAAY,CACnBV,GAAkB,EAClBO,WAAkD,EAClDN,UAAiD,EACjD0B,aAAa,GAAG,KAAK;cAHrB3B;IAAA4B,gBACArB;IAAAsB,eACA5B;IAAA6B,kBACAH,aAAa;cAHb3B;IAAA+B,gBACAxB;IAAAyB,eACA/B;IAAAgC,kBACAN,aAAa;YACY;IACzB,IAAIX,yCAAwB,IAAIA,wCAAuB,EAAE;MACvD,MAAM,CAACC,aAAa,CAAC,GAAcW,cAAYzB,IAAI;MACnD,MAAM,CAAC+B,YAAY,EAAEhC,UAAU,CAAC,GAAG2B,aAAW1B,IAAI;MAClD,MAAMoB,OAAO,GAAsBH,cAAc,CAACH,aAAa,EAAEiB,YAAY,CAAC;MAC9E,IAAIX,OAAO,GAAG,CAAC,EAAE;;;uBACuBM,aAAWX,IAAI;0BAAE,IAAI;;;;;;OAC5D,MAAM,IAAIK,OAAO,GAAG,CAAC,EAAE;;wBACGK,cAAYV,IAAI;;;;;;;;OAC1C,MAAM;QACL,OAAO,CAAChB,UAAU,kBAAgB;;;IAGtC,OAAO,iCAAc,IAAI,CAAC","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]}
@@ -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]}