effect 3.4.9 → 3.5.1

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 (166) hide show
  1. package/RcMap/package.json +6 -0
  2. package/RcRef/package.json +6 -0
  3. package/dist/cjs/Cause.js +22 -1
  4. package/dist/cjs/Cause.js.map +1 -1
  5. package/dist/cjs/Channel.js.map +1 -1
  6. package/dist/cjs/Config.js.map +1 -1
  7. package/dist/cjs/Console.js.map +1 -1
  8. package/dist/cjs/Data.js +3 -1
  9. package/dist/cjs/Data.js.map +1 -1
  10. package/dist/cjs/Duration.js +23 -2
  11. package/dist/cjs/Duration.js.map +1 -1
  12. package/dist/cjs/Effect.js +78 -15
  13. package/dist/cjs/Effect.js.map +1 -1
  14. package/dist/cjs/Logger.js +234 -13
  15. package/dist/cjs/Logger.js.map +1 -1
  16. package/dist/cjs/PubSub.js.map +1 -1
  17. package/dist/cjs/Random.js +24 -1
  18. package/dist/cjs/Random.js.map +1 -1
  19. package/dist/cjs/RcMap.js +52 -0
  20. package/dist/cjs/RcMap.js.map +1 -0
  21. package/dist/cjs/RcRef.js +51 -0
  22. package/dist/cjs/RcRef.js.map +1 -0
  23. package/dist/cjs/Stream.js +29 -2
  24. package/dist/cjs/Stream.js.map +1 -1
  25. package/dist/cjs/index.js +6 -2
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/internal/cause.js +21 -5
  28. package/dist/cjs/internal/cause.js.map +1 -1
  29. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  30. package/dist/cjs/internal/channel.js.map +1 -1
  31. package/dist/cjs/internal/core-effect.js +0 -5
  32. package/dist/cjs/internal/core-effect.js.map +1 -1
  33. package/dist/cjs/internal/core.js +15 -10
  34. package/dist/cjs/internal/core.js.map +1 -1
  35. package/dist/cjs/internal/defaultServices.js +1 -1
  36. package/dist/cjs/internal/defaultServices.js.map +1 -1
  37. package/dist/cjs/internal/fiberRuntime.js +3 -1
  38. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  39. package/dist/cjs/internal/logger.js +129 -27
  40. package/dist/cjs/internal/logger.js.map +1 -1
  41. package/dist/cjs/internal/pubsub.js +216 -36
  42. package/dist/cjs/internal/pubsub.js.map +1 -1
  43. package/dist/cjs/internal/random.js +2 -1
  44. package/dist/cjs/internal/random.js.map +1 -1
  45. package/dist/cjs/internal/rcMap.js +129 -0
  46. package/dist/cjs/internal/rcMap.js.map +1 -0
  47. package/dist/cjs/internal/rcRef.js +122 -0
  48. package/dist/cjs/internal/rcRef.js.map +1 -0
  49. package/dist/cjs/internal/stream.js +57 -11
  50. package/dist/cjs/internal/stream.js.map +1 -1
  51. package/dist/cjs/internal/version.js +1 -1
  52. package/dist/dts/Cause.d.ts +40 -1
  53. package/dist/dts/Cause.d.ts.map +1 -1
  54. package/dist/dts/Channel.d.ts +3 -3
  55. package/dist/dts/Channel.d.ts.map +1 -1
  56. package/dist/dts/Config.d.ts +5 -0
  57. package/dist/dts/Config.d.ts.map +1 -1
  58. package/dist/dts/Console.d.ts +2 -4
  59. package/dist/dts/Console.d.ts.map +1 -1
  60. package/dist/dts/Duration.d.ts +5 -0
  61. package/dist/dts/Duration.d.ts.map +1 -1
  62. package/dist/dts/Effect.d.ts +78 -15
  63. package/dist/dts/Effect.d.ts.map +1 -1
  64. package/dist/dts/Logger.d.ts +238 -12
  65. package/dist/dts/Logger.d.ts.map +1 -1
  66. package/dist/dts/PubSub.d.ts +15 -4
  67. package/dist/dts/PubSub.d.ts.map +1 -1
  68. package/dist/dts/Random.d.ts +23 -0
  69. package/dist/dts/Random.d.ts.map +1 -1
  70. package/dist/dts/RcMap.d.ts +93 -0
  71. package/dist/dts/RcMap.d.ts.map +1 -0
  72. package/dist/dts/RcRef.d.ts +83 -0
  73. package/dist/dts/RcRef.d.ts.map +1 -0
  74. package/dist/dts/Stream.d.ts +64 -26
  75. package/dist/dts/Stream.d.ts.map +1 -1
  76. package/dist/dts/index.d.ts +8 -0
  77. package/dist/dts/index.d.ts.map +1 -1
  78. package/dist/dts/internal/core-effect.d.ts.map +1 -1
  79. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  80. package/dist/dts/internal/logger.d.ts.map +1 -1
  81. package/dist/dts/internal/random.d.ts +1 -1
  82. package/dist/dts/internal/random.d.ts.map +1 -1
  83. package/dist/dts/internal/rcMap.d.ts +2 -0
  84. package/dist/dts/internal/rcMap.d.ts.map +1 -0
  85. package/dist/dts/internal/rcRef.d.ts +2 -0
  86. package/dist/dts/internal/rcRef.d.ts.map +1 -0
  87. package/dist/dts/internal/stream.d.ts +1 -0
  88. package/dist/dts/internal/stream.d.ts.map +1 -1
  89. package/dist/esm/Cause.js +21 -0
  90. package/dist/esm/Cause.js.map +1 -1
  91. package/dist/esm/Channel.js.map +1 -1
  92. package/dist/esm/Config.js.map +1 -1
  93. package/dist/esm/Console.js.map +1 -1
  94. package/dist/esm/Data.js +3 -1
  95. package/dist/esm/Data.js.map +1 -1
  96. package/dist/esm/Duration.js +20 -0
  97. package/dist/esm/Duration.js.map +1 -1
  98. package/dist/esm/Effect.js +78 -15
  99. package/dist/esm/Effect.js.map +1 -1
  100. package/dist/esm/Logger.js +233 -12
  101. package/dist/esm/Logger.js.map +1 -1
  102. package/dist/esm/PubSub.js.map +1 -1
  103. package/dist/esm/Random.js +23 -0
  104. package/dist/esm/Random.js.map +1 -1
  105. package/dist/esm/RcMap.js +44 -0
  106. package/dist/esm/RcMap.js.map +1 -0
  107. package/dist/esm/RcRef.js +43 -0
  108. package/dist/esm/RcRef.js.map +1 -0
  109. package/dist/esm/Stream.js +27 -0
  110. package/dist/esm/Stream.js.map +1 -1
  111. package/dist/esm/index.js +8 -0
  112. package/dist/esm/index.js.map +1 -1
  113. package/dist/esm/internal/cause.js +21 -5
  114. package/dist/esm/internal/cause.js.map +1 -1
  115. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  116. package/dist/esm/internal/channel.js.map +1 -1
  117. package/dist/esm/internal/core-effect.js +0 -5
  118. package/dist/esm/internal/core-effect.js.map +1 -1
  119. package/dist/esm/internal/core.js +11 -7
  120. package/dist/esm/internal/core.js.map +1 -1
  121. package/dist/esm/internal/defaultServices.js +1 -1
  122. package/dist/esm/internal/defaultServices.js.map +1 -1
  123. package/dist/esm/internal/fiberRuntime.js +2 -0
  124. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  125. package/dist/esm/internal/logger.js +127 -26
  126. package/dist/esm/internal/logger.js.map +1 -1
  127. package/dist/esm/internal/pubsub.js +216 -36
  128. package/dist/esm/internal/pubsub.js.map +1 -1
  129. package/dist/esm/internal/random.js +2 -1
  130. package/dist/esm/internal/random.js.map +1 -1
  131. package/dist/esm/internal/rcMap.js +120 -0
  132. package/dist/esm/internal/rcMap.js.map +1 -0
  133. package/dist/esm/internal/rcRef.js +112 -0
  134. package/dist/esm/internal/rcRef.js.map +1 -0
  135. package/dist/esm/internal/stream.js +53 -8
  136. package/dist/esm/internal/stream.js.map +1 -1
  137. package/dist/esm/internal/version.js +1 -1
  138. package/package.json +17 -1
  139. package/src/Cause.ts +47 -1
  140. package/src/Channel.ts +3 -3
  141. package/src/Config.ts +6 -0
  142. package/src/Console.ts +2 -4
  143. package/src/Data.ts +1 -1
  144. package/src/Duration.ts +18 -0
  145. package/src/Effect.ts +78 -15
  146. package/src/Logger.ts +242 -12
  147. package/src/PubSub.ts +11 -4
  148. package/src/Random.ts +24 -0
  149. package/src/RcMap.ts +103 -0
  150. package/src/RcRef.ts +91 -0
  151. package/src/Stream.ts +83 -26
  152. package/src/index.ts +10 -0
  153. package/src/internal/cause.ts +26 -5
  154. package/src/internal/channel/channelExecutor.ts +1 -1
  155. package/src/internal/channel.ts +4 -3
  156. package/src/internal/core-effect.ts +0 -5
  157. package/src/internal/core.ts +19 -9
  158. package/src/internal/defaultServices.ts +1 -1
  159. package/src/internal/fiberRuntime.ts +6 -0
  160. package/src/internal/logger.ts +135 -27
  161. package/src/internal/pubsub.ts +249 -58
  162. package/src/internal/random.ts +2 -1
  163. package/src/internal/rcMap.ts +213 -0
  164. package/src/internal/rcRef.ts +172 -0
  165. package/src/internal/stream.ts +325 -111
  166. package/src/internal/version.ts +1 -1
@@ -163,8 +163,23 @@ export const aggregateWithinEither = /*#__PURE__*/dual(3, (self, sink, schedule)
163
163
  });
164
164
  /** @internal */
165
165
  export const as = /*#__PURE__*/dual(2, (self, value) => map(self, () => value));
166
+ const queueFromBufferOptions = bufferSize => {
167
+ if (bufferSize === "unbounded") {
168
+ return Queue.unbounded();
169
+ } else if (typeof bufferSize === "number" || bufferSize === undefined) {
170
+ return Queue.bounded(bufferSize ?? 16);
171
+ }
172
+ switch (bufferSize.strategy) {
173
+ case "dropping":
174
+ return Queue.dropping(bufferSize.bufferSize ?? 16);
175
+ case "sliding":
176
+ return Queue.sliding(bufferSize.bufferSize ?? 16);
177
+ default:
178
+ return Queue.bounded(bufferSize.bufferSize ?? 16);
179
+ }
180
+ };
166
181
  /** @internal */
167
- export const _async = (register, outputBuffer = 16) => Effect.acquireRelease(Queue.bounded(outputBuffer), queue => Queue.shutdown(queue)).pipe(Effect.flatMap(output => Effect.runtime().pipe(Effect.flatMap(runtime => Effect.sync(() => {
182
+ export const _async = (register, bufferSize) => Effect.acquireRelease(queueFromBufferOptions(bufferSize), queue => Queue.shutdown(queue)).pipe(Effect.flatMap(output => Effect.runtime().pipe(Effect.flatMap(runtime => Effect.sync(() => {
168
183
  const runPromiseExit = Runtime.runPromiseExit(runtime);
169
184
  const canceler = register(emit.make(resume => InternalTake.fromPull(resume).pipe(Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, runPromiseExit).then(exit => {
170
185
  if (Exit.isFailure(exit)) {
@@ -185,7 +200,7 @@ export const _async = (register, outputBuffer = 16) => Effect.acquireRelease(Que
185
200
  return fromChannel(loop).pipe(ensuring(value ?? Effect.void));
186
201
  }))), unwrapScoped);
187
202
  /** @internal */
188
- export const asyncEffect = (register, outputBuffer = 16) => pipe(Effect.acquireRelease(Queue.bounded(outputBuffer), queue => Queue.shutdown(queue)), Effect.flatMap(output => pipe(Effect.runtime(), Effect.flatMap(runtime => pipe(register(emit.make(k => pipe(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
203
+ export const asyncEffect = (register, bufferSize) => pipe(Effect.acquireRelease(queueFromBufferOptions(bufferSize), queue => Queue.shutdown(queue)), Effect.flatMap(output => pipe(Effect.runtime(), Effect.flatMap(runtime => pipe(register(emit.make(k => pipe(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
189
204
  if (Exit.isFailure(exit)) {
190
205
  if (!Cause.isInterrupted(exit.cause)) {
191
206
  throw Cause.squash(exit.cause);
@@ -202,7 +217,7 @@ export const asyncEffect = (register, outputBuffer = 16) => pipe(Effect.acquireR
202
217
  return loop;
203
218
  }))))), channel.unwrapScoped, fromChannel);
204
219
  /** @internal */
205
- export const asyncScoped = (register, outputBuffer = 16) => pipe(Effect.acquireRelease(Queue.bounded(outputBuffer), queue => Queue.shutdown(queue)), Effect.flatMap(output => pipe(Effect.runtime(), Effect.flatMap(runtime => pipe(register(emit.make(k => pipe(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
220
+ export const asyncScoped = (register, bufferSize) => pipe(Effect.acquireRelease(queueFromBufferOptions(bufferSize), queue => Queue.shutdown(queue)), Effect.flatMap(output => pipe(Effect.runtime(), Effect.flatMap(runtime => pipe(register(emit.make(k => pipe(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
206
221
  if (Exit.isFailure(exit)) {
207
222
  if (!Cause.isInterrupted(exit.cause)) {
208
223
  throw Cause.squash(exit.cause);
@@ -231,9 +246,9 @@ export const broadcast = /*#__PURE__*/dual(3, (self, n, maximumLag) => pipe(self
231
246
  shutdown: true
232
247
  }))))));
233
248
  /** @internal */
234
- export const broadcastDynamic = /*#__PURE__*/dual(2, (self, maximumLag) => pipe(self, broadcastedQueuesDynamic(maximumLag), Effect.map(effect => flattenTake(flatMap(scoped(effect), fromQueue)))));
249
+ export const broadcastDynamic = /*#__PURE__*/dual(2, (self, maximumLag) => Effect.map(toPubSub(self, maximumLag), pubsub => flattenTake(fromPubSub(pubsub))));
235
250
  /** @internal */
236
- export const broadcastedQueues = /*#__PURE__*/dual(3, (self, n, maximumLag) => Effect.flatMap(PubSub.bounded(maximumLag), pubsub => pipe(Effect.all(Array.from({
251
+ export const broadcastedQueues = /*#__PURE__*/dual(3, (self, n, maximumLag) => Effect.flatMap(pubsubFromOptions(maximumLag), pubsub => pipe(Effect.all(Array.from({
237
252
  length: n
238
253
  }, () => PubSub.subscribe(pubsub))), Effect.tap(() => Effect.forkScoped(runIntoPubSubScoped(self, pubsub))))));
239
254
  /** @internal */
@@ -1269,9 +1284,9 @@ export const mergeEither = /*#__PURE__*/dual(2, (self, that) => mergeWith(self,
1269
1284
  onOther: Either.right
1270
1285
  }));
1271
1286
  /** @internal */
1272
- export const mergeLeft = /*#__PURE__*/dual(2, (self, that) => pipe(self, merge(drain(that))));
1287
+ export const mergeLeft = /*#__PURE__*/dual(2, (left, right) => pipe(left, merge(drain(right))));
1273
1288
  /** @internal */
1274
- export const mergeRight = /*#__PURE__*/dual(2, (self, that) => pipe(drain(self), merge(that)));
1289
+ export const mergeRight = /*#__PURE__*/dual(2, (left, right) => pipe(drain(left), merge(right)));
1275
1290
  /** @internal */
1276
1291
  export const mergeWith = /*#__PURE__*/dual(3, (self, other, options) => {
1277
1292
  const strategy = options.haltStrategy ? haltStrategy.fromInput(options.haltStrategy) : HaltStrategy.Both;
@@ -1454,6 +1469,19 @@ export const range = (min, max, chunkSize = DefaultChunkSize) => suspend(() => {
1454
1469
  };
1455
1470
  return new StreamImpl(go(min, max, chunkSize));
1456
1471
  });
1472
+ export const raceAll = (...streams) => Deferred.make().pipe(Effect.map(halt => {
1473
+ let winner = null;
1474
+ return mergeAll(streams.map((stream, index) => stream.pipe(takeWhile(() => {
1475
+ if (winner === null) {
1476
+ winner = index;
1477
+ Deferred.unsafeDone(halt, Exit.void);
1478
+ return true;
1479
+ }
1480
+ return winner === index;
1481
+ }), interruptWhen(Deferred.await(halt).pipe(Effect.flatMap(() => winner === index ? Effect.never : Effect.void))))), {
1482
+ concurrency: streams.length
1483
+ });
1484
+ }), unwrap);
1457
1485
  /** @internal */
1458
1486
  export const rechunk = /*#__PURE__*/dual(2, (self, n) => suspend(() => {
1459
1487
  const target = Math.max(n, 1);
@@ -2016,8 +2044,25 @@ export const timeoutTo = /*#__PURE__*/dual(3, (self, duration, that) => {
2016
2044
  const StreamTimeout = new Cause.RuntimeException("Stream Timeout");
2017
2045
  return pipe(self, timeoutFailCause(() => Cause.die(StreamTimeout), duration), catchSomeCause(cause => Cause.isDieType(cause) && Cause.isRuntimeException(cause.defect) && cause.defect.message !== undefined && cause.defect.message === "Stream Timeout" ? Option.some(that) : Option.none()));
2018
2046
  });
2047
+ const pubsubFromOptions = options => {
2048
+ if (typeof options === "number") {
2049
+ return PubSub.bounded(options);
2050
+ } else if (options.capacity === "unbounded") {
2051
+ return PubSub.unbounded({
2052
+ replay: options.replay
2053
+ });
2054
+ }
2055
+ switch (options.strategy) {
2056
+ case "dropping":
2057
+ return PubSub.dropping(options);
2058
+ case "sliding":
2059
+ return PubSub.sliding(options);
2060
+ default:
2061
+ return PubSub.bounded(options);
2062
+ }
2063
+ };
2019
2064
  /** @internal */
2020
- export const toPubSub = /*#__PURE__*/dual(2, (self, capacity) => pipe(Effect.acquireRelease(PubSub.bounded(capacity), pubsub => PubSub.shutdown(pubsub)), Effect.tap(pubsub => pipe(self, runIntoPubSubScoped(pubsub), Effect.forkScoped))));
2065
+ export const toPubSub = /*#__PURE__*/dual(2, (self, capacity) => pipe(Effect.acquireRelease(pubsubFromOptions(capacity), pubsub => PubSub.shutdown(pubsub)), Effect.tap(pubsub => pipe(self, runIntoPubSubScoped(pubsub), Effect.forkScoped))));
2021
2066
  /** @internal */
2022
2067
  export const toPull = self => Effect.map(channel.toPull(toChannel(self)), pull => pipe(pull, Effect.mapError(Option.some), Effect.flatMap(Either.match({
2023
2068
  onLeft: () => Effect.fail(Option.none()),