effect 3.4.9 → 3.5.0

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 (159) 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/Logger.js +11 -1
  13. package/dist/cjs/Logger.js.map +1 -1
  14. package/dist/cjs/PubSub.js.map +1 -1
  15. package/dist/cjs/Random.js +9 -1
  16. package/dist/cjs/Random.js.map +1 -1
  17. package/dist/cjs/RcMap.js +52 -0
  18. package/dist/cjs/RcMap.js.map +1 -0
  19. package/dist/cjs/RcRef.js +51 -0
  20. package/dist/cjs/RcRef.js.map +1 -0
  21. package/dist/cjs/Stream.js +29 -2
  22. package/dist/cjs/Stream.js.map +1 -1
  23. package/dist/cjs/index.js +6 -2
  24. package/dist/cjs/index.js.map +1 -1
  25. package/dist/cjs/internal/cause.js +21 -5
  26. package/dist/cjs/internal/cause.js.map +1 -1
  27. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  28. package/dist/cjs/internal/channel.js.map +1 -1
  29. package/dist/cjs/internal/core-effect.js +0 -5
  30. package/dist/cjs/internal/core-effect.js.map +1 -1
  31. package/dist/cjs/internal/core.js +15 -10
  32. package/dist/cjs/internal/core.js.map +1 -1
  33. package/dist/cjs/internal/defaultServices.js +1 -1
  34. package/dist/cjs/internal/defaultServices.js.map +1 -1
  35. package/dist/cjs/internal/fiberRuntime.js +3 -1
  36. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  37. package/dist/cjs/internal/logger.js +128 -27
  38. package/dist/cjs/internal/logger.js.map +1 -1
  39. package/dist/cjs/internal/pubsub.js +216 -36
  40. package/dist/cjs/internal/pubsub.js.map +1 -1
  41. package/dist/cjs/internal/random.js +2 -1
  42. package/dist/cjs/internal/random.js.map +1 -1
  43. package/dist/cjs/internal/rcMap.js +129 -0
  44. package/dist/cjs/internal/rcMap.js.map +1 -0
  45. package/dist/cjs/internal/rcRef.js +122 -0
  46. package/dist/cjs/internal/rcRef.js.map +1 -0
  47. package/dist/cjs/internal/stream.js +57 -11
  48. package/dist/cjs/internal/stream.js.map +1 -1
  49. package/dist/cjs/internal/version.js +1 -1
  50. package/dist/dts/Cause.d.ts +40 -1
  51. package/dist/dts/Cause.d.ts.map +1 -1
  52. package/dist/dts/Channel.d.ts +3 -3
  53. package/dist/dts/Channel.d.ts.map +1 -1
  54. package/dist/dts/Config.d.ts +5 -0
  55. package/dist/dts/Config.d.ts.map +1 -1
  56. package/dist/dts/Console.d.ts +2 -4
  57. package/dist/dts/Console.d.ts.map +1 -1
  58. package/dist/dts/Duration.d.ts +5 -0
  59. package/dist/dts/Duration.d.ts.map +1 -1
  60. package/dist/dts/Logger.d.ts +15 -0
  61. package/dist/dts/Logger.d.ts.map +1 -1
  62. package/dist/dts/PubSub.d.ts +15 -4
  63. package/dist/dts/PubSub.d.ts.map +1 -1
  64. package/dist/dts/Random.d.ts +8 -0
  65. package/dist/dts/Random.d.ts.map +1 -1
  66. package/dist/dts/RcMap.d.ts +93 -0
  67. package/dist/dts/RcMap.d.ts.map +1 -0
  68. package/dist/dts/RcRef.d.ts +83 -0
  69. package/dist/dts/RcRef.d.ts.map +1 -0
  70. package/dist/dts/Stream.d.ts +64 -26
  71. package/dist/dts/Stream.d.ts.map +1 -1
  72. package/dist/dts/index.d.ts +8 -0
  73. package/dist/dts/index.d.ts.map +1 -1
  74. package/dist/dts/internal/core-effect.d.ts.map +1 -1
  75. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  76. package/dist/dts/internal/logger.d.ts.map +1 -1
  77. package/dist/dts/internal/random.d.ts +1 -1
  78. package/dist/dts/internal/random.d.ts.map +1 -1
  79. package/dist/dts/internal/rcMap.d.ts +2 -0
  80. package/dist/dts/internal/rcMap.d.ts.map +1 -0
  81. package/dist/dts/internal/rcRef.d.ts +2 -0
  82. package/dist/dts/internal/rcRef.d.ts.map +1 -0
  83. package/dist/dts/internal/stream.d.ts +1 -0
  84. package/dist/dts/internal/stream.d.ts.map +1 -1
  85. package/dist/esm/Cause.js +21 -0
  86. package/dist/esm/Cause.js.map +1 -1
  87. package/dist/esm/Channel.js.map +1 -1
  88. package/dist/esm/Config.js.map +1 -1
  89. package/dist/esm/Console.js.map +1 -1
  90. package/dist/esm/Data.js +3 -1
  91. package/dist/esm/Data.js.map +1 -1
  92. package/dist/esm/Duration.js +20 -0
  93. package/dist/esm/Duration.js.map +1 -1
  94. package/dist/esm/Logger.js +10 -0
  95. package/dist/esm/Logger.js.map +1 -1
  96. package/dist/esm/PubSub.js.map +1 -1
  97. package/dist/esm/Random.js +8 -0
  98. package/dist/esm/Random.js.map +1 -1
  99. package/dist/esm/RcMap.js +44 -0
  100. package/dist/esm/RcMap.js.map +1 -0
  101. package/dist/esm/RcRef.js +43 -0
  102. package/dist/esm/RcRef.js.map +1 -0
  103. package/dist/esm/Stream.js +27 -0
  104. package/dist/esm/Stream.js.map +1 -1
  105. package/dist/esm/index.js +8 -0
  106. package/dist/esm/index.js.map +1 -1
  107. package/dist/esm/internal/cause.js +21 -5
  108. package/dist/esm/internal/cause.js.map +1 -1
  109. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  110. package/dist/esm/internal/channel.js.map +1 -1
  111. package/dist/esm/internal/core-effect.js +0 -5
  112. package/dist/esm/internal/core-effect.js.map +1 -1
  113. package/dist/esm/internal/core.js +11 -7
  114. package/dist/esm/internal/core.js.map +1 -1
  115. package/dist/esm/internal/defaultServices.js +1 -1
  116. package/dist/esm/internal/defaultServices.js.map +1 -1
  117. package/dist/esm/internal/fiberRuntime.js +2 -0
  118. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  119. package/dist/esm/internal/logger.js +126 -26
  120. package/dist/esm/internal/logger.js.map +1 -1
  121. package/dist/esm/internal/pubsub.js +216 -36
  122. package/dist/esm/internal/pubsub.js.map +1 -1
  123. package/dist/esm/internal/random.js +2 -1
  124. package/dist/esm/internal/random.js.map +1 -1
  125. package/dist/esm/internal/rcMap.js +120 -0
  126. package/dist/esm/internal/rcMap.js.map +1 -0
  127. package/dist/esm/internal/rcRef.js +112 -0
  128. package/dist/esm/internal/rcRef.js.map +1 -0
  129. package/dist/esm/internal/stream.js +53 -8
  130. package/dist/esm/internal/stream.js.map +1 -1
  131. package/dist/esm/internal/version.js +1 -1
  132. package/package.json +17 -1
  133. package/src/Cause.ts +47 -1
  134. package/src/Channel.ts +3 -3
  135. package/src/Config.ts +6 -0
  136. package/src/Console.ts +2 -4
  137. package/src/Data.ts +1 -1
  138. package/src/Duration.ts +18 -0
  139. package/src/Logger.ts +19 -0
  140. package/src/PubSub.ts +11 -4
  141. package/src/Random.ts +9 -0
  142. package/src/RcMap.ts +103 -0
  143. package/src/RcRef.ts +91 -0
  144. package/src/Stream.ts +83 -26
  145. package/src/index.ts +10 -0
  146. package/src/internal/cause.ts +26 -5
  147. package/src/internal/channel/channelExecutor.ts +1 -1
  148. package/src/internal/channel.ts +4 -3
  149. package/src/internal/core-effect.ts +0 -5
  150. package/src/internal/core.ts +19 -9
  151. package/src/internal/defaultServices.ts +1 -1
  152. package/src/internal/fiberRuntime.ts +6 -0
  153. package/src/internal/logger.ts +133 -27
  154. package/src/internal/pubsub.ts +249 -58
  155. package/src/internal/random.ts +2 -1
  156. package/src/internal/rcMap.ts +213 -0
  157. package/src/internal/rcRef.ts +172 -0
  158. package/src/internal/stream.ts +325 -111
  159. package/src/internal/version.ts +1 -1
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.fromIterable = exports.fromEventListener = exports.fromEffectOption = exports.fromEffect = exports.fromChunks = exports.fromChunkQueue = exports.fromChunkPubSub = exports.fromChunk = exports.fromChannel = exports.fromAsyncIterable = exports.forever = exports.flattenTake = exports.flattenIterables = exports.flattenExitOption = exports.flattenEffect = exports.flattenChunks = exports.flatten = exports.flatMap = exports.findEffect = exports.find = exports.finalizer = exports.filterMapWhileEffect = exports.filterMapWhile = exports.filterMapEffect = exports.filterMap = exports.filterEffect = exports.filter = exports.failSync = exports.failCauseSync = exports.failCause = exports.fail = exports.execute = exports.ensuringWith = exports.ensuring = exports.encodeText = exports.empty = exports.either = exports.dropWhileEffect = exports.dropWhile = exports.dropUntilEffect = exports.dropUntil = exports.dropRight = exports.drop = exports.drainFork = exports.drain = exports.distributedWithDynamicCallback = exports.distributedWithDynamic = exports.distributedWith = exports.dieSync = exports.dieMessage = exports.die = exports.decodeText = exports.debounce = exports.crossWith = exports.crossRight = exports.crossLeft = exports.cross = exports.contextWithStream = exports.contextWithEffect = exports.contextWith = exports.context = exports.concatAll = exports.concat = exports.combineChunks = exports.combine = exports.chunksWith = exports.chunks = exports.channelToStream = exports.changesWithEffect = exports.changesWith = exports.changes = exports.catchTags = exports.catchTag = exports.catchSomeCause = exports.catchSome = exports.catchAllCause = exports.catchAll = exports.bufferChunks = exports.buffer = exports.broadcastedQueuesDynamic = exports.broadcastedQueues = exports.broadcastDynamic = exports.broadcast = exports.branchAfter = exports.bindTo = exports.bind = exports.asyncScoped = exports.asyncEffect = exports.as = exports.aggregateWithinEither = exports.aggregateWithin = exports.aggregate = exports.acquireRelease = exports.accumulateChunks = exports.accumulate = exports._async = exports.StreamTypeId = exports.StreamImpl = exports.Do = exports.DefaultChunkSize = void 0;
7
- exports.runFoldEffect = exports.runFold = exports.runDrain = exports.runCount = exports.runCollect = exports.run = exports.retry = exports.repeatWith = exports.repeatValue = exports.repeatElementsWith = exports.repeatElements = exports.repeatEither = exports.repeatEffectWithSchedule = exports.repeatEffectOption = exports.repeatEffectChunkOption = exports.repeatEffectChunk = exports.repeatEffect = exports.repeat = exports.refineOrDieWith = exports.refineOrDie = exports.rechunk = exports.range = exports.provideSomeLayer = exports.provideServiceStream = exports.provideServiceEffect = exports.provideService = exports.provideLayer = exports.provideContext = exports.prepend = exports.pipeThroughChannelOrFail = exports.pipeThroughChannel = exports.pipeThrough = exports.peel = exports.partitionEither = exports.partition = exports.paginateEffect = exports.paginateChunkEffect = exports.paginateChunk = exports.paginate = exports.orElseSucceed = exports.orElseIfEmptyStream = exports.orElseIfEmptyChunk = exports.orElseIfEmpty = exports.orElseFail = exports.orElseEither = exports.orElse = exports.orDieWith = exports.orDie = exports.onError = exports.onDone = exports.never = exports.mkString = exports.mergeWith = exports.mergeRight = exports.mergeLeft = exports.mergeEither = exports.mergeAll = exports.merge = exports.matchConcurrency = exports.mapInputContext = exports.mapErrorCause = exports.mapError = exports.mapEffectSequential = exports.mapEffectPar = exports.mapConcatEffect = exports.mapConcatChunkEffect = exports.mapConcatChunk = exports.mapConcat = exports.mapChunksEffect = exports.mapChunks = exports.mapBoth = exports.mapAccumEffect = exports.mapAccum = exports.map = exports.make = exports.let_ = exports.iterate = exports.isStream = exports.intersperseAffixes = exports.intersperse = exports.interruptWhenDeferred = exports.interruptWhen = exports.interruptAfter = exports.interleaveWith = exports.interleave = exports.identityStream = exports.haltWhenDeferred = exports.haltWhen = exports.haltAfter = exports.groupedWithin = exports.grouped = exports.groupAdjacentBy = exports.fromSchedule = exports.fromReadableStreamByob = exports.fromReadableStream = exports.fromQueue = exports.fromPull = exports.fromPubSub = exports.fromIteratorSucceed = exports.fromIterableEffect = void 0;
8
- exports.zipWithPreviousAndNext = exports.zipWithPrevious = exports.zipWithNext = exports.zipWithIndex = exports.zipWithChunks = exports.zipWith = exports.zipRight = exports.zipLeft = exports.zipLatestWith = exports.zipLatestAll = exports.zipLatest = exports.zipFlatten = exports.zipAllWith = exports.zipAllSortedByKeyWith = exports.zipAllSortedByKeyRight = exports.zipAllSortedByKeyLeft = exports.zipAllSortedByKey = exports.zipAllRight = exports.zipAllLeft = exports.zipAll = exports.zip = exports.withSpan = exports.whenEffect = exports.whenCaseEffect = exports.whenCase = exports.when = exports.void = exports.updateService = exports.unwrapScoped = exports.unwrap = exports.unfoldEffect = exports.unfoldChunkEffect = exports.unfoldChunk = exports.unfold = exports.transduce = exports.toReadableStreamRuntime = exports.toReadableStreamEffect = exports.toReadableStream = exports.toQueueOfElements = exports.toQueue = exports.toPull = exports.toPubSub = exports.toChannel = exports.timeoutTo = exports.timeoutFailCause = exports.timeoutFail = exports.timeout = exports.tick = exports.throttleEffect = exports.throttle = exports.tapSink = exports.tapErrorCause = exports.tapError = exports.tapBoth = exports.tap = exports.takeWhile = exports.takeUntilEffect = exports.takeUntil = exports.takeRight = exports.take = exports.sync = exports.suspend = exports.succeed = exports.splitOnChunk = exports.splitLines = exports.split = exports.someOrFail = exports.someOrElse = exports.some = exports.slidingSize = exports.sliding = exports.scoped = exports.scheduleWith = exports.schedule = exports.scanReduceEffect = exports.scanReduce = exports.scanEffect = exports.scan = exports.runSum = exports.runScoped = exports.runLast = exports.runIntoQueueScoped = exports.runIntoQueueElementsScoped = exports.runIntoQueue = exports.runIntoPubSubScoped = exports.runIntoPubSub = exports.runHead = exports.runForEachWhileScoped = exports.runForEachWhile = exports.runForEachScoped = exports.runForEachChunkScoped = exports.runForEachChunk = exports.runForEach = exports.runFoldWhileScopedEffect = exports.runFoldWhileScoped = exports.runFoldWhileEffect = exports.runFoldWhile = exports.runFoldScopedEffect = exports.runFoldScoped = void 0;
7
+ exports.runFold = exports.runDrain = exports.runCount = exports.runCollect = exports.run = exports.retry = exports.repeatWith = exports.repeatValue = exports.repeatElementsWith = exports.repeatElements = exports.repeatEither = exports.repeatEffectWithSchedule = exports.repeatEffectOption = exports.repeatEffectChunkOption = exports.repeatEffectChunk = exports.repeatEffect = exports.repeat = exports.refineOrDieWith = exports.refineOrDie = exports.rechunk = exports.range = exports.raceAll = exports.provideSomeLayer = exports.provideServiceStream = exports.provideServiceEffect = exports.provideService = exports.provideLayer = exports.provideContext = exports.prepend = exports.pipeThroughChannelOrFail = exports.pipeThroughChannel = exports.pipeThrough = exports.peel = exports.partitionEither = exports.partition = exports.paginateEffect = exports.paginateChunkEffect = exports.paginateChunk = exports.paginate = exports.orElseSucceed = exports.orElseIfEmptyStream = exports.orElseIfEmptyChunk = exports.orElseIfEmpty = exports.orElseFail = exports.orElseEither = exports.orElse = exports.orDieWith = exports.orDie = exports.onError = exports.onDone = exports.never = exports.mkString = exports.mergeWith = exports.mergeRight = exports.mergeLeft = exports.mergeEither = exports.mergeAll = exports.merge = exports.matchConcurrency = exports.mapInputContext = exports.mapErrorCause = exports.mapError = exports.mapEffectSequential = exports.mapEffectPar = exports.mapConcatEffect = exports.mapConcatChunkEffect = exports.mapConcatChunk = exports.mapConcat = exports.mapChunksEffect = exports.mapChunks = exports.mapBoth = exports.mapAccumEffect = exports.mapAccum = exports.map = exports.make = exports.let_ = exports.iterate = exports.isStream = exports.intersperseAffixes = exports.intersperse = exports.interruptWhenDeferred = exports.interruptWhen = exports.interruptAfter = exports.interleaveWith = exports.interleave = exports.identityStream = exports.haltWhenDeferred = exports.haltWhen = exports.haltAfter = exports.groupedWithin = exports.grouped = exports.groupAdjacentBy = exports.fromSchedule = exports.fromReadableStreamByob = exports.fromReadableStream = exports.fromQueue = exports.fromPull = exports.fromPubSub = exports.fromIteratorSucceed = exports.fromIterableEffect = void 0;
8
+ exports.zipWithPreviousAndNext = exports.zipWithPrevious = exports.zipWithNext = exports.zipWithIndex = exports.zipWithChunks = exports.zipWith = exports.zipRight = exports.zipLeft = exports.zipLatestWith = exports.zipLatestAll = exports.zipLatest = exports.zipFlatten = exports.zipAllWith = exports.zipAllSortedByKeyWith = exports.zipAllSortedByKeyRight = exports.zipAllSortedByKeyLeft = exports.zipAllSortedByKey = exports.zipAllRight = exports.zipAllLeft = exports.zipAll = exports.zip = exports.withSpan = exports.whenEffect = exports.whenCaseEffect = exports.whenCase = exports.when = exports.void = exports.updateService = exports.unwrapScoped = exports.unwrap = exports.unfoldEffect = exports.unfoldChunkEffect = exports.unfoldChunk = exports.unfold = exports.transduce = exports.toReadableStreamRuntime = exports.toReadableStreamEffect = exports.toReadableStream = exports.toQueueOfElements = exports.toQueue = exports.toPull = exports.toPubSub = exports.toChannel = exports.timeoutTo = exports.timeoutFailCause = exports.timeoutFail = exports.timeout = exports.tick = exports.throttleEffect = exports.throttle = exports.tapSink = exports.tapErrorCause = exports.tapError = exports.tapBoth = exports.tap = exports.takeWhile = exports.takeUntilEffect = exports.takeUntil = exports.takeRight = exports.take = exports.sync = exports.suspend = exports.succeed = exports.splitOnChunk = exports.splitLines = exports.split = exports.someOrFail = exports.someOrElse = exports.some = exports.slidingSize = exports.sliding = exports.scoped = exports.scheduleWith = exports.schedule = exports.scanReduceEffect = exports.scanReduce = exports.scanEffect = exports.scan = exports.runSum = exports.runScoped = exports.runLast = exports.runIntoQueueScoped = exports.runIntoQueueElementsScoped = exports.runIntoQueue = exports.runIntoPubSubScoped = exports.runIntoPubSub = exports.runHead = exports.runForEachWhileScoped = exports.runForEachWhile = exports.runForEachScoped = exports.runForEachChunkScoped = exports.runForEachChunk = exports.runForEach = exports.runFoldWhileScopedEffect = exports.runFoldWhileScoped = exports.runFoldWhileEffect = exports.runFoldWhile = exports.runFoldScopedEffect = exports.runFoldScoped = exports.runFoldEffect = void 0;
9
9
  var Cause = _interopRequireWildcard(require("../Cause.js"));
10
10
  var Chunk = _interopRequireWildcard(require("../Chunk.js"));
11
11
  var Clock = _interopRequireWildcard(require("../Clock.js"));
@@ -178,8 +178,23 @@ const aggregateWithinEither = exports.aggregateWithinEither = /*#__PURE__*/(0, _
178
178
  });
179
179
  /** @internal */
180
180
  const as = exports.as = /*#__PURE__*/(0, _Function.dual)(2, (self, value) => map(self, () => value));
181
+ const queueFromBufferOptions = bufferSize => {
182
+ if (bufferSize === "unbounded") {
183
+ return Queue.unbounded();
184
+ } else if (typeof bufferSize === "number" || bufferSize === undefined) {
185
+ return Queue.bounded(bufferSize ?? 16);
186
+ }
187
+ switch (bufferSize.strategy) {
188
+ case "dropping":
189
+ return Queue.dropping(bufferSize.bufferSize ?? 16);
190
+ case "sliding":
191
+ return Queue.sliding(bufferSize.bufferSize ?? 16);
192
+ default:
193
+ return Queue.bounded(bufferSize.bufferSize ?? 16);
194
+ }
195
+ };
181
196
  /** @internal */
182
- 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(() => {
197
+ const _async = (register, bufferSize) => Effect.acquireRelease(queueFromBufferOptions(bufferSize), queue => Queue.shutdown(queue)).pipe(Effect.flatMap(output => Effect.runtime().pipe(Effect.flatMap(runtime => Effect.sync(() => {
183
198
  const runPromiseExit = Runtime.runPromiseExit(runtime);
184
199
  const canceler = register(emit.make(resume => InternalTake.fromPull(resume).pipe(Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, runPromiseExit).then(exit => {
185
200
  if (Exit.isFailure(exit)) {
@@ -201,7 +216,7 @@ const _async = (register, outputBuffer = 16) => Effect.acquireRelease(Queue.boun
201
216
  }))), unwrapScoped);
202
217
  /** @internal */
203
218
  exports._async = _async;
204
- const asyncEffect = (register, outputBuffer = 16) => (0, _Function.pipe)(Effect.acquireRelease(Queue.bounded(outputBuffer), queue => Queue.shutdown(queue)), Effect.flatMap(output => (0, _Function.pipe)(Effect.runtime(), Effect.flatMap(runtime => (0, _Function.pipe)(register(emit.make(k => (0, _Function.pipe)(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
219
+ const asyncEffect = (register, bufferSize) => (0, _Function.pipe)(Effect.acquireRelease(queueFromBufferOptions(bufferSize), queue => Queue.shutdown(queue)), Effect.flatMap(output => (0, _Function.pipe)(Effect.runtime(), Effect.flatMap(runtime => (0, _Function.pipe)(register(emit.make(k => (0, _Function.pipe)(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
205
220
  if (Exit.isFailure(exit)) {
206
221
  if (!Cause.isInterrupted(exit.cause)) {
207
222
  throw Cause.squash(exit.cause);
@@ -219,7 +234,7 @@ const asyncEffect = (register, outputBuffer = 16) => (0, _Function.pipe)(Effect.
219
234
  }))))), channel.unwrapScoped, fromChannel);
220
235
  /** @internal */
221
236
  exports.asyncEffect = asyncEffect;
222
- const asyncScoped = (register, outputBuffer = 16) => (0, _Function.pipe)(Effect.acquireRelease(Queue.bounded(outputBuffer), queue => Queue.shutdown(queue)), Effect.flatMap(output => (0, _Function.pipe)(Effect.runtime(), Effect.flatMap(runtime => (0, _Function.pipe)(register(emit.make(k => (0, _Function.pipe)(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
237
+ const asyncScoped = (register, bufferSize) => (0, _Function.pipe)(Effect.acquireRelease(queueFromBufferOptions(bufferSize), queue => Queue.shutdown(queue)), Effect.flatMap(output => (0, _Function.pipe)(Effect.runtime(), Effect.flatMap(runtime => (0, _Function.pipe)(register(emit.make(k => (0, _Function.pipe)(InternalTake.fromPull(k), Effect.flatMap(take => Queue.offer(output, take)), Effect.asVoid, Runtime.runPromiseExit(runtime)).then(exit => {
223
238
  if (Exit.isFailure(exit)) {
224
239
  if (!Cause.isInterrupted(exit.cause)) {
225
240
  throw Cause.squash(exit.cause);
@@ -249,9 +264,9 @@ const broadcast = exports.broadcast = /*#__PURE__*/(0, _Function.dual)(3, (self,
249
264
  shutdown: true
250
265
  }))))));
251
266
  /** @internal */
252
- const broadcastDynamic = exports.broadcastDynamic = /*#__PURE__*/(0, _Function.dual)(2, (self, maximumLag) => (0, _Function.pipe)(self, broadcastedQueuesDynamic(maximumLag), Effect.map(effect => flattenTake(flatMap(scoped(effect), fromQueue)))));
267
+ const broadcastDynamic = exports.broadcastDynamic = /*#__PURE__*/(0, _Function.dual)(2, (self, maximumLag) => Effect.map(toPubSub(self, maximumLag), pubsub => flattenTake(fromPubSub(pubsub))));
253
268
  /** @internal */
254
- const broadcastedQueues = exports.broadcastedQueues = /*#__PURE__*/(0, _Function.dual)(3, (self, n, maximumLag) => Effect.flatMap(PubSub.bounded(maximumLag), pubsub => (0, _Function.pipe)(Effect.all(Array.from({
269
+ const broadcastedQueues = exports.broadcastedQueues = /*#__PURE__*/(0, _Function.dual)(3, (self, n, maximumLag) => Effect.flatMap(pubsubFromOptions(maximumLag), pubsub => (0, _Function.pipe)(Effect.all(Array.from({
255
270
  length: n
256
271
  }, () => PubSub.subscribe(pubsub))), Effect.tap(() => Effect.forkScoped(runIntoPubSubScoped(self, pubsub))))));
257
272
  /** @internal */
@@ -1332,9 +1347,9 @@ const mergeEither = exports.mergeEither = /*#__PURE__*/(0, _Function.dual)(2, (s
1332
1347
  onOther: Either.right
1333
1348
  }));
1334
1349
  /** @internal */
1335
- const mergeLeft = exports.mergeLeft = /*#__PURE__*/(0, _Function.dual)(2, (self, that) => (0, _Function.pipe)(self, merge(drain(that))));
1350
+ const mergeLeft = exports.mergeLeft = /*#__PURE__*/(0, _Function.dual)(2, (left, right) => (0, _Function.pipe)(left, merge(drain(right))));
1336
1351
  /** @internal */
1337
- const mergeRight = exports.mergeRight = /*#__PURE__*/(0, _Function.dual)(2, (self, that) => (0, _Function.pipe)(drain(self), merge(that)));
1352
+ const mergeRight = exports.mergeRight = /*#__PURE__*/(0, _Function.dual)(2, (left, right) => (0, _Function.pipe)(drain(left), merge(right)));
1338
1353
  /** @internal */
1339
1354
  const mergeWith = exports.mergeWith = /*#__PURE__*/(0, _Function.dual)(3, (self, other, options) => {
1340
1355
  const strategy = options.haltStrategy ? haltStrategy.fromInput(options.haltStrategy) : HaltStrategy.Both;
@@ -1523,8 +1538,22 @@ const range = (min, max, chunkSize = DefaultChunkSize) => suspend(() => {
1523
1538
  };
1524
1539
  return new StreamImpl(go(min, max, chunkSize));
1525
1540
  });
1526
- /** @internal */
1527
1541
  exports.range = range;
1542
+ const raceAll = (...streams) => Deferred.make().pipe(Effect.map(halt => {
1543
+ let winner = null;
1544
+ return mergeAll(streams.map((stream, index) => stream.pipe(takeWhile(() => {
1545
+ if (winner === null) {
1546
+ winner = index;
1547
+ Deferred.unsafeDone(halt, Exit.void);
1548
+ return true;
1549
+ }
1550
+ return winner === index;
1551
+ }), interruptWhen(Deferred.await(halt).pipe(Effect.flatMap(() => winner === index ? Effect.never : Effect.void))))), {
1552
+ concurrency: streams.length
1553
+ });
1554
+ }), unwrap);
1555
+ /** @internal */
1556
+ exports.raceAll = raceAll;
1528
1557
  const rechunk = exports.rechunk = /*#__PURE__*/(0, _Function.dual)(2, (self, n) => suspend(() => {
1529
1558
  const target = Math.max(n, 1);
1530
1559
  const process = rechunkProcess(new StreamRechunker(target), target);
@@ -2105,8 +2134,25 @@ const timeoutTo = exports.timeoutTo = /*#__PURE__*/(0, _Function.dual)(3, (self,
2105
2134
  const StreamTimeout = new Cause.RuntimeException("Stream Timeout");
2106
2135
  return (0, _Function.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()));
2107
2136
  });
2137
+ const pubsubFromOptions = options => {
2138
+ if (typeof options === "number") {
2139
+ return PubSub.bounded(options);
2140
+ } else if (options.capacity === "unbounded") {
2141
+ return PubSub.unbounded({
2142
+ replay: options.replay
2143
+ });
2144
+ }
2145
+ switch (options.strategy) {
2146
+ case "dropping":
2147
+ return PubSub.dropping(options);
2148
+ case "sliding":
2149
+ return PubSub.sliding(options);
2150
+ default:
2151
+ return PubSub.bounded(options);
2152
+ }
2153
+ };
2108
2154
  /** @internal */
2109
- const toPubSub = exports.toPubSub = /*#__PURE__*/(0, _Function.dual)(2, (self, capacity) => (0, _Function.pipe)(Effect.acquireRelease(PubSub.bounded(capacity), pubsub => PubSub.shutdown(pubsub)), Effect.tap(pubsub => (0, _Function.pipe)(self, runIntoPubSubScoped(pubsub), Effect.forkScoped))));
2155
+ const toPubSub = exports.toPubSub = /*#__PURE__*/(0, _Function.dual)(2, (self, capacity) => (0, _Function.pipe)(Effect.acquireRelease(pubsubFromOptions(capacity), pubsub => PubSub.shutdown(pubsub)), Effect.tap(pubsub => (0, _Function.pipe)(self, runIntoPubSubScoped(pubsub), Effect.forkScoped))));
2110
2156
  /** @internal */
2111
2157
  const toPull = self => Effect.map(channel.toPull(toChannel(self)), pull => (0, _Function.pipe)(pull, Effect.mapError(Option.some), Effect.flatMap(Either.match({
2112
2158
  onLeft: () => Effect.fail(Option.none()),