effect 3.4.8 → 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.
- package/RcMap/package.json +6 -0
- package/RcRef/package.json +6 -0
- package/dist/cjs/Array.js +14 -37
- package/dist/cjs/Array.js.map +1 -1
- package/dist/cjs/BigDecimal.js +11 -34
- package/dist/cjs/BigDecimal.js.map +1 -1
- package/dist/cjs/BigInt.js +7 -30
- package/dist/cjs/BigInt.js.map +1 -1
- package/dist/cjs/Boolean.js +6 -29
- package/dist/cjs/Boolean.js.map +1 -1
- package/dist/cjs/Brand.js +6 -29
- package/dist/cjs/Brand.js.map +1 -1
- package/dist/cjs/Cache.js +3 -26
- package/dist/cjs/Cache.js.map +1 -1
- package/dist/cjs/Cause.js +26 -28
- package/dist/cjs/Cause.js.map +1 -1
- package/dist/cjs/Channel.js +6 -29
- package/dist/cjs/Channel.js.map +1 -1
- package/dist/cjs/ChildExecutorDecision.js +3 -26
- package/dist/cjs/ChildExecutorDecision.js.map +1 -1
- package/dist/cjs/Chunk.js +12 -35
- package/dist/cjs/Chunk.js.map +1 -1
- package/dist/cjs/Clock.js +4 -27
- package/dist/cjs/Clock.js.map +1 -1
- package/dist/cjs/Config.js +3 -26
- package/dist/cjs/Config.js.map +1 -1
- package/dist/cjs/ConfigError.js +3 -26
- package/dist/cjs/ConfigError.js.map +1 -1
- package/dist/cjs/ConfigProvider.js +3 -26
- package/dist/cjs/ConfigProvider.js.map +1 -1
- package/dist/cjs/ConfigProviderPathPatch.js +3 -26
- package/dist/cjs/ConfigProviderPathPatch.js.map +1 -1
- package/dist/cjs/Console.js +4 -27
- package/dist/cjs/Console.js.map +1 -1
- package/dist/cjs/Context.js +3 -26
- package/dist/cjs/Context.js.map +1 -1
- package/dist/cjs/Cron.js +13 -36
- package/dist/cjs/Cron.js.map +1 -1
- package/dist/cjs/Data.js +9 -30
- package/dist/cjs/Data.js.map +1 -1
- package/dist/cjs/DefaultServices.js +3 -26
- package/dist/cjs/DefaultServices.js.map +1 -1
- package/dist/cjs/Deferred.js +4 -27
- package/dist/cjs/Deferred.js.map +1 -1
- package/dist/cjs/Differ.js +10 -33
- package/dist/cjs/Differ.js.map +1 -1
- package/dist/cjs/Duration.js +33 -35
- package/dist/cjs/Duration.js.map +1 -1
- package/dist/cjs/Effect.js +16 -39
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/Effectable.js +3 -26
- package/dist/cjs/Effectable.js.map +1 -1
- package/dist/cjs/Either.js +8 -31
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/Encoding.js +7 -30
- package/dist/cjs/Encoding.js.map +1 -1
- package/dist/cjs/Equal.js +5 -28
- package/dist/cjs/Equal.js.map +1 -1
- package/dist/cjs/Equivalence.js +1 -1
- package/dist/cjs/Equivalence.js.map +1 -1
- package/dist/cjs/ExecutionStrategy.js +3 -26
- package/dist/cjs/ExecutionStrategy.js.map +1 -1
- package/dist/cjs/Exit.js +3 -26
- package/dist/cjs/Exit.js.map +1 -1
- package/dist/cjs/Fiber.js +6 -29
- package/dist/cjs/Fiber.js.map +1 -1
- package/dist/cjs/FiberHandle.js +15 -38
- package/dist/cjs/FiberHandle.js.map +1 -1
- package/dist/cjs/FiberId.js +3 -26
- package/dist/cjs/FiberId.js.map +1 -1
- package/dist/cjs/FiberMap.js +17 -40
- package/dist/cjs/FiberMap.js.map +1 -1
- package/dist/cjs/FiberRef.js +6 -29
- package/dist/cjs/FiberRef.js.map +1 -1
- package/dist/cjs/FiberRefs.js +3 -26
- package/dist/cjs/FiberRefs.js.map +1 -1
- package/dist/cjs/FiberRefsPatch.js +3 -26
- package/dist/cjs/FiberRefsPatch.js.map +1 -1
- package/dist/cjs/FiberSet.js +16 -39
- package/dist/cjs/FiberSet.js.map +1 -1
- package/dist/cjs/FiberStatus.js +3 -26
- package/dist/cjs/FiberStatus.js.map +1 -1
- package/dist/cjs/GlobalValue.js +3 -26
- package/dist/cjs/GlobalValue.js.map +1 -1
- package/dist/cjs/GroupBy.js +3 -26
- package/dist/cjs/GroupBy.js.map +1 -1
- package/dist/cjs/Hash.js +4 -4
- package/dist/cjs/Hash.js.map +1 -1
- package/dist/cjs/HashMap.js +4 -27
- package/dist/cjs/HashMap.js.map +1 -1
- package/dist/cjs/HashSet.js +3 -26
- package/dist/cjs/HashSet.js.map +1 -1
- package/dist/cjs/Inspectable.js +1 -1
- package/dist/cjs/Inspectable.js.map +1 -1
- package/dist/cjs/Iterable.js +8 -31
- package/dist/cjs/Iterable.js.map +1 -1
- package/dist/cjs/KeyedPool.js +3 -26
- package/dist/cjs/KeyedPool.js.map +1 -1
- package/dist/cjs/Layer.js +11 -34
- package/dist/cjs/Layer.js.map +1 -1
- package/dist/cjs/List.js +13 -36
- package/dist/cjs/List.js.map +1 -1
- package/dist/cjs/LogLevel.js +6 -29
- package/dist/cjs/LogLevel.js.map +1 -1
- package/dist/cjs/LogSpan.js +3 -26
- package/dist/cjs/LogSpan.js.map +1 -1
- package/dist/cjs/Logger.js +17 -30
- package/dist/cjs/Logger.js.map +1 -1
- package/dist/cjs/ManagedRuntime.js +3 -26
- package/dist/cjs/ManagedRuntime.js.map +1 -1
- package/dist/cjs/Match.js +4 -27
- package/dist/cjs/Match.js.map +1 -1
- package/dist/cjs/MergeDecision.js +3 -26
- package/dist/cjs/MergeDecision.js.map +1 -1
- package/dist/cjs/MergeState.js +3 -26
- package/dist/cjs/MergeState.js.map +1 -1
- package/dist/cjs/MergeStrategy.js +3 -26
- package/dist/cjs/MergeStrategy.js.map +1 -1
- package/dist/cjs/Metric.js +4 -27
- package/dist/cjs/Metric.js.map +1 -1
- package/dist/cjs/MetricBoundaries.js +3 -26
- package/dist/cjs/MetricBoundaries.js.map +1 -1
- package/dist/cjs/MetricHook.js +3 -26
- package/dist/cjs/MetricHook.js.map +1 -1
- package/dist/cjs/MetricKey.js +3 -26
- package/dist/cjs/MetricKey.js.map +1 -1
- package/dist/cjs/MetricKeyType.js +3 -26
- package/dist/cjs/MetricKeyType.js.map +1 -1
- package/dist/cjs/MetricLabel.js +3 -26
- package/dist/cjs/MetricLabel.js.map +1 -1
- package/dist/cjs/MetricPair.js +3 -26
- package/dist/cjs/MetricPair.js.map +1 -1
- package/dist/cjs/MetricPolling.js +3 -26
- package/dist/cjs/MetricPolling.js.map +1 -1
- package/dist/cjs/MetricRegistry.js +3 -26
- package/dist/cjs/MetricRegistry.js.map +1 -1
- package/dist/cjs/MetricState.js +3 -26
- package/dist/cjs/MetricState.js.map +1 -1
- package/dist/cjs/Micro.js +15 -38
- package/dist/cjs/Micro.js.map +1 -1
- package/dist/cjs/ModuleVersion.js +3 -26
- package/dist/cjs/ModuleVersion.js.map +1 -1
- package/dist/cjs/MutableHashMap.js +8 -31
- package/dist/cjs/MutableHashMap.js.map +1 -1
- package/dist/cjs/MutableHashSet.js +6 -29
- package/dist/cjs/MutableHashSet.js.map +1 -1
- package/dist/cjs/MutableList.js +5 -28
- package/dist/cjs/MutableList.js.map +1 -1
- package/dist/cjs/MutableQueue.js +7 -30
- package/dist/cjs/MutableQueue.js.map +1 -1
- package/dist/cjs/MutableRef.js +6 -29
- package/dist/cjs/MutableRef.js.map +1 -1
- package/dist/cjs/Number.js +7 -30
- package/dist/cjs/Number.js.map +1 -1
- package/dist/cjs/Option.js +10 -33
- package/dist/cjs/Option.js.map +1 -1
- package/dist/cjs/Order.js +1 -1
- package/dist/cjs/Order.js.map +1 -1
- package/dist/cjs/Ordering.js +1 -1
- package/dist/cjs/Ordering.js.map +1 -1
- package/dist/cjs/Pool.js +3 -26
- package/dist/cjs/Pool.js.map +1 -1
- package/dist/cjs/Predicate.js +1 -1
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/PubSub.js +3 -26
- package/dist/cjs/PubSub.js.map +1 -1
- package/dist/cjs/Queue.js +3 -26
- package/dist/cjs/Queue.js.map +1 -1
- package/dist/cjs/Random.js +13 -28
- package/dist/cjs/Random.js.map +1 -1
- package/dist/cjs/RateLimiter.js +3 -26
- package/dist/cjs/RateLimiter.js.map +1 -1
- package/dist/cjs/RcMap.js +52 -0
- package/dist/cjs/RcMap.js.map +1 -0
- package/dist/cjs/RcRef.js +51 -0
- package/dist/cjs/RcRef.js.map +1 -0
- package/dist/cjs/Readable.js +6 -29
- package/dist/cjs/Readable.js.map +1 -1
- package/dist/cjs/Record.js +6 -29
- package/dist/cjs/Record.js.map +1 -1
- package/dist/cjs/RedBlackTree.js +4 -27
- package/dist/cjs/RedBlackTree.js.map +1 -1
- package/dist/cjs/Redacted.js +4 -27
- package/dist/cjs/Redacted.js.map +1 -1
- package/dist/cjs/Ref.js +3 -26
- package/dist/cjs/Ref.js.map +1 -1
- package/dist/cjs/Reloadable.js +3 -26
- package/dist/cjs/Reloadable.js.map +1 -1
- package/dist/cjs/Request.js +7 -30
- package/dist/cjs/Request.js.map +1 -1
- package/dist/cjs/RequestBlock.js +3 -26
- package/dist/cjs/RequestBlock.js.map +1 -1
- package/dist/cjs/RequestResolver.js +6 -29
- package/dist/cjs/RequestResolver.js.map +1 -1
- package/dist/cjs/Resource.js +3 -26
- package/dist/cjs/Resource.js.map +1 -1
- package/dist/cjs/Runtime.js +3 -26
- package/dist/cjs/Runtime.js.map +1 -1
- package/dist/cjs/RuntimeFlags.js +4 -27
- package/dist/cjs/RuntimeFlags.js.map +1 -1
- package/dist/cjs/RuntimeFlagsPatch.js +4 -27
- package/dist/cjs/RuntimeFlagsPatch.js.map +1 -1
- package/dist/cjs/STM.js +6 -29
- package/dist/cjs/STM.js.map +1 -1
- package/dist/cjs/Schedule.js +3 -26
- package/dist/cjs/Schedule.js.map +1 -1
- package/dist/cjs/ScheduleDecision.js +3 -26
- package/dist/cjs/ScheduleDecision.js.map +1 -1
- package/dist/cjs/ScheduleInterval.js +3 -26
- package/dist/cjs/ScheduleInterval.js.map +1 -1
- package/dist/cjs/ScheduleIntervals.js +3 -26
- package/dist/cjs/ScheduleIntervals.js.map +1 -1
- package/dist/cjs/Scheduler.js +5 -28
- package/dist/cjs/Scheduler.js.map +1 -1
- package/dist/cjs/Scope.js +4 -27
- package/dist/cjs/Scope.js.map +1 -1
- package/dist/cjs/ScopedCache.js +3 -26
- package/dist/cjs/ScopedCache.js.map +1 -1
- package/dist/cjs/ScopedRef.js +3 -26
- package/dist/cjs/ScopedRef.js.map +1 -1
- package/dist/cjs/Secret.js +3 -26
- package/dist/cjs/Secret.js.map +1 -1
- package/dist/cjs/SingleProducerAsyncInput.js +3 -26
- package/dist/cjs/SingleProducerAsyncInput.js.map +1 -1
- package/dist/cjs/Sink.js +3 -26
- package/dist/cjs/Sink.js.map +1 -1
- package/dist/cjs/SortedMap.js +10 -33
- package/dist/cjs/SortedMap.js.map +1 -1
- package/dist/cjs/SortedSet.js +9 -32
- package/dist/cjs/SortedSet.js.map +1 -1
- package/dist/cjs/Stream.js +1077 -32
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/StreamHaltStrategy.js +3 -26
- package/dist/cjs/StreamHaltStrategy.js.map +1 -1
- package/dist/cjs/Streamable.js +4 -27
- package/dist/cjs/Streamable.js.map +1 -1
- package/dist/cjs/String.js +9 -32
- package/dist/cjs/String.js.map +1 -1
- package/dist/cjs/Struct.js +6 -29
- package/dist/cjs/Struct.js.map +1 -1
- package/dist/cjs/Subscribable.js +8 -31
- package/dist/cjs/Subscribable.js.map +1 -1
- package/dist/cjs/SubscriptionRef.js +5 -28
- package/dist/cjs/SubscriptionRef.js.map +1 -1
- package/dist/cjs/Supervisor.js +5 -28
- package/dist/cjs/Supervisor.js.map +1 -1
- package/dist/cjs/Symbol.js +4 -27
- package/dist/cjs/Symbol.js.map +1 -1
- package/dist/cjs/SynchronizedRef.js +5 -28
- package/dist/cjs/SynchronizedRef.js.map +1 -1
- package/dist/cjs/TArray.js +3 -26
- package/dist/cjs/TArray.js.map +1 -1
- package/dist/cjs/TDeferred.js +3 -26
- package/dist/cjs/TDeferred.js.map +1 -1
- package/dist/cjs/TMap.js +3 -26
- package/dist/cjs/TMap.js.map +1 -1
- package/dist/cjs/TPriorityQueue.js +3 -26
- package/dist/cjs/TPriorityQueue.js.map +1 -1
- package/dist/cjs/TPubSub.js +3 -26
- package/dist/cjs/TPubSub.js.map +1 -1
- package/dist/cjs/TQueue.js +3 -26
- package/dist/cjs/TQueue.js.map +1 -1
- package/dist/cjs/TRandom.js +3 -26
- package/dist/cjs/TRandom.js.map +1 -1
- package/dist/cjs/TReentrantLock.js +3 -26
- package/dist/cjs/TReentrantLock.js.map +1 -1
- package/dist/cjs/TRef.js +3 -26
- package/dist/cjs/TRef.js.map +1 -1
- package/dist/cjs/TSemaphore.js +3 -26
- package/dist/cjs/TSemaphore.js.map +1 -1
- package/dist/cjs/TSet.js +3 -26
- package/dist/cjs/TSet.js.map +1 -1
- package/dist/cjs/Take.js +3 -26
- package/dist/cjs/Take.js.map +1 -1
- package/dist/cjs/TestAnnotation.js +10 -33
- package/dist/cjs/TestAnnotation.js.map +1 -1
- package/dist/cjs/TestAnnotationMap.js +5 -28
- package/dist/cjs/TestAnnotationMap.js.map +1 -1
- package/dist/cjs/TestAnnotations.js +15 -38
- package/dist/cjs/TestAnnotations.js.map +1 -1
- package/dist/cjs/TestClock.js +25 -48
- package/dist/cjs/TestClock.js.map +1 -1
- package/dist/cjs/TestConfig.js +3 -26
- package/dist/cjs/TestConfig.js.map +1 -1
- package/dist/cjs/TestContext.js +7 -30
- package/dist/cjs/TestContext.js.map +1 -1
- package/dist/cjs/TestLive.js +5 -28
- package/dist/cjs/TestLive.js.map +1 -1
- package/dist/cjs/TestServices.js +15 -38
- package/dist/cjs/TestServices.js.map +1 -1
- package/dist/cjs/TestSized.js +4 -27
- package/dist/cjs/TestSized.js.map +1 -1
- package/dist/cjs/Tracer.js +4 -27
- package/dist/cjs/Tracer.js.map +1 -1
- package/dist/cjs/Trie.js +3 -26
- package/dist/cjs/Trie.js.map +1 -1
- package/dist/cjs/Tuple.js +6 -29
- package/dist/cjs/Tuple.js.map +1 -1
- package/dist/cjs/Unify.js +1 -1
- package/dist/cjs/Unify.js.map +1 -1
- package/dist/cjs/UpstreamPullRequest.js +3 -26
- package/dist/cjs/UpstreamPullRequest.js.map +1 -1
- package/dist/cjs/UpstreamPullStrategy.js +3 -26
- package/dist/cjs/UpstreamPullStrategy.js.map +1 -1
- package/dist/cjs/Utils.js +4 -4
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/index.js +166 -185
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/blockedRequests.js +9 -32
- package/dist/cjs/internal/blockedRequests.js.map +1 -1
- package/dist/cjs/internal/cache.js +20 -43
- package/dist/cjs/internal/cache.js.map +1 -1
- package/dist/cjs/internal/cause.js +37 -44
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/channel/channelExecutor.js +21 -44
- package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
- package/dist/cjs/internal/channel/channelState.js +5 -28
- package/dist/cjs/internal/channel/channelState.js.map +1 -1
- package/dist/cjs/internal/channel/childExecutorDecision.js +5 -28
- package/dist/cjs/internal/channel/childExecutorDecision.js.map +1 -1
- package/dist/cjs/internal/channel/continuation.js +4 -27
- package/dist/cjs/internal/channel/continuation.js.map +1 -1
- package/dist/cjs/internal/channel/mergeDecision.js +5 -28
- package/dist/cjs/internal/channel/mergeDecision.js.map +1 -1
- package/dist/cjs/internal/channel/mergeState.js +5 -28
- package/dist/cjs/internal/channel/mergeState.js.map +1 -1
- package/dist/cjs/internal/channel/mergeStrategy.js +5 -28
- package/dist/cjs/internal/channel/mergeStrategy.js.map +1 -1
- package/dist/cjs/internal/channel/singleProducerAsyncInput.js +9 -32
- package/dist/cjs/internal/channel/singleProducerAsyncInput.js.map +1 -1
- package/dist/cjs/internal/channel/subexecutor.js +5 -28
- package/dist/cjs/internal/channel/subexecutor.js.map +1 -1
- package/dist/cjs/internal/channel/upstreamPullRequest.js +5 -28
- package/dist/cjs/internal/channel/upstreamPullRequest.js.map +1 -1
- package/dist/cjs/internal/channel/upstreamPullStrategy.js +5 -28
- package/dist/cjs/internal/channel/upstreamPullStrategy.js.map +1 -1
- package/dist/cjs/internal/channel.js +31 -54
- package/dist/cjs/internal/channel.js.map +1 -1
- package/dist/cjs/internal/clock.js +6 -29
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/cjs/internal/completedRequestMap.js +2 -2
- package/dist/cjs/internal/completedRequestMap.js.map +1 -1
- package/dist/cjs/internal/concurrency.js +3 -26
- package/dist/cjs/internal/concurrency.js.map +1 -1
- package/dist/cjs/internal/config.js +17 -40
- package/dist/cjs/internal/config.js.map +1 -1
- package/dist/cjs/internal/configError.js +7 -30
- package/dist/cjs/internal/configError.js.map +1 -1
- package/dist/cjs/internal/configProvider/pathPatch.js +8 -31
- package/dist/cjs/internal/configProvider/pathPatch.js.map +1 -1
- package/dist/cjs/internal/configProvider.js +17 -40
- package/dist/cjs/internal/configProvider.js.map +1 -1
- package/dist/cjs/internal/console.js +9 -32
- package/dist/cjs/internal/console.js.map +1 -1
- package/dist/cjs/internal/context.js +10 -33
- package/dist/cjs/internal/context.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +29 -57
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core-stream.js +14 -37
- package/dist/cjs/internal/core-stream.js.map +1 -1
- package/dist/cjs/internal/core.js +47 -65
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/data.js +5 -28
- package/dist/cjs/internal/data.js.map +1 -1
- package/dist/cjs/internal/dataSource.js +10 -33
- package/dist/cjs/internal/dataSource.js.map +1 -1
- package/dist/cjs/internal/defaultServices/console.js +4 -27
- package/dist/cjs/internal/defaultServices/console.js.map +1 -1
- package/dist/cjs/internal/defaultServices.js +14 -37
- package/dist/cjs/internal/defaultServices.js.map +1 -1
- package/dist/cjs/internal/deferred.js +3 -26
- package/dist/cjs/internal/deferred.js.map +1 -1
- package/dist/cjs/internal/differ/chunkPatch.js +6 -29
- package/dist/cjs/internal/differ/chunkPatch.js.map +1 -1
- package/dist/cjs/internal/differ/contextPatch.js +7 -30
- package/dist/cjs/internal/differ/contextPatch.js.map +1 -1
- package/dist/cjs/internal/differ/hashMapPatch.js +7 -30
- package/dist/cjs/internal/differ/hashMapPatch.js.map +1 -1
- package/dist/cjs/internal/differ/hashSetPatch.js +6 -29
- package/dist/cjs/internal/differ/hashSetPatch.js.map +1 -1
- package/dist/cjs/internal/differ/orPatch.js +7 -30
- package/dist/cjs/internal/differ/orPatch.js.map +1 -1
- package/dist/cjs/internal/differ/readonlyArrayPatch.js +6 -29
- package/dist/cjs/internal/differ/readonlyArrayPatch.js.map +1 -1
- package/dist/cjs/internal/differ.js +10 -33
- package/dist/cjs/internal/differ.js.map +1 -1
- package/dist/cjs/internal/doNotation.js +1 -1
- package/dist/cjs/internal/doNotation.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +24 -47
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/effectable.js +8 -31
- package/dist/cjs/internal/effectable.js.map +1 -1
- package/dist/cjs/internal/either.js +9 -32
- package/dist/cjs/internal/either.js.map +1 -1
- package/dist/cjs/internal/encoding/base64.js +4 -27
- package/dist/cjs/internal/encoding/base64.js.map +1 -1
- package/dist/cjs/internal/encoding/base64Url.js +5 -28
- package/dist/cjs/internal/encoding/base64Url.js.map +1 -1
- package/dist/cjs/internal/encoding/common.js +1 -1
- package/dist/cjs/internal/encoding/common.js.map +1 -1
- package/dist/cjs/internal/encoding/hex.js +4 -27
- package/dist/cjs/internal/encoding/hex.js.map +1 -1
- package/dist/cjs/internal/executionStrategy.js +1 -1
- package/dist/cjs/internal/executionStrategy.js.map +1 -1
- package/dist/cjs/internal/fiber.js +17 -40
- package/dist/cjs/internal/fiber.js.map +1 -1
- package/dist/cjs/internal/fiberId.js +11 -34
- package/dist/cjs/internal/fiberId.js.map +1 -1
- package/dist/cjs/internal/fiberRefs/patch.js +6 -29
- package/dist/cjs/internal/fiberRefs/patch.js.map +1 -1
- package/dist/cjs/internal/fiberRefs.js +9 -32
- package/dist/cjs/internal/fiberRefs.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +58 -79
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/fiberScope.js +5 -28
- package/dist/cjs/internal/fiberScope.js.map +1 -1
- package/dist/cjs/internal/fiberStatus.js +6 -29
- package/dist/cjs/internal/fiberStatus.js.map +1 -1
- package/dist/cjs/internal/groupBy.js +18 -41
- package/dist/cjs/internal/groupBy.js.map +1 -1
- package/dist/cjs/internal/hashMap/bitwise.js +1 -1
- package/dist/cjs/internal/hashMap/bitwise.js.map +1 -1
- package/dist/cjs/internal/hashMap/keySet.js +1 -1
- package/dist/cjs/internal/hashMap/keySet.js.map +1 -1
- package/dist/cjs/internal/hashMap/node.js +9 -32
- package/dist/cjs/internal/hashMap/node.js.map +1 -1
- package/dist/cjs/internal/hashMap.js +12 -35
- package/dist/cjs/internal/hashMap.js.map +1 -1
- package/dist/cjs/internal/hashSet.js +9 -32
- package/dist/cjs/internal/hashSet.js.map +1 -1
- package/dist/cjs/internal/keyedPool.js +14 -37
- package/dist/cjs/internal/keyedPool.js.map +1 -1
- package/dist/cjs/internal/layer/circular.js +12 -35
- package/dist/cjs/internal/layer/circular.js.map +1 -1
- package/dist/cjs/internal/layer.js +25 -48
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/logger-circular.js +9 -32
- package/dist/cjs/internal/logger-circular.js.map +1 -1
- package/dist/cjs/internal/logger.js +139 -61
- package/dist/cjs/internal/logger.js.map +1 -1
- package/dist/cjs/internal/managedRuntime.js +9 -32
- package/dist/cjs/internal/managedRuntime.js.map +1 -1
- package/dist/cjs/internal/matcher.js +6 -29
- package/dist/cjs/internal/matcher.js.map +1 -1
- package/dist/cjs/internal/metric/boundaries.js +9 -32
- package/dist/cjs/internal/metric/boundaries.js.map +1 -1
- package/dist/cjs/internal/metric/hook.js +9 -32
- package/dist/cjs/internal/metric/hook.js.map +1 -1
- package/dist/cjs/internal/metric/key.js +11 -34
- package/dist/cjs/internal/metric/key.js.map +1 -1
- package/dist/cjs/internal/metric/keyType.js +8 -31
- package/dist/cjs/internal/metric/keyType.js.map +1 -1
- package/dist/cjs/internal/metric/label.js +6 -29
- package/dist/cjs/internal/metric/label.js.map +1 -1
- package/dist/cjs/internal/metric/pair.js +1 -1
- package/dist/cjs/internal/metric/pair.js.map +1 -1
- package/dist/cjs/internal/metric/polling.js +8 -31
- package/dist/cjs/internal/metric/polling.js.map +1 -1
- package/dist/cjs/internal/metric/registry.js +8 -31
- package/dist/cjs/internal/metric/registry.js.map +1 -1
- package/dist/cjs/internal/metric/state.js +8 -31
- package/dist/cjs/internal/metric/state.js.map +1 -1
- package/dist/cjs/internal/metric.js +15 -38
- package/dist/cjs/internal/metric.js.map +1 -1
- package/dist/cjs/internal/option.js +7 -30
- package/dist/cjs/internal/option.js.map +1 -1
- package/dist/cjs/internal/pool.js +43 -42
- package/dist/cjs/internal/pool.js.map +1 -1
- package/dist/cjs/internal/pubsub.js +229 -72
- package/dist/cjs/internal/pubsub.js.map +1 -1
- package/dist/cjs/internal/query.js +10 -33
- package/dist/cjs/internal/query.js.map +1 -1
- package/dist/cjs/internal/queue.js +12 -35
- package/dist/cjs/internal/queue.js.map +1 -1
- package/dist/cjs/internal/random.js +9 -31
- package/dist/cjs/internal/random.js.map +1 -1
- package/dist/cjs/internal/rateLimiter.js +6 -29
- package/dist/cjs/internal/rateLimiter.js.map +1 -1
- package/dist/cjs/internal/rcMap.js +129 -0
- package/dist/cjs/internal/rcMap.js.map +1 -0
- package/dist/cjs/internal/rcRef.js +122 -0
- package/dist/cjs/internal/rcRef.js.map +1 -0
- package/dist/cjs/internal/redBlackTree/iterator.js +4 -27
- package/dist/cjs/internal/redBlackTree/iterator.js.map +1 -1
- package/dist/cjs/internal/redBlackTree.js +13 -36
- package/dist/cjs/internal/redBlackTree.js.map +1 -1
- package/dist/cjs/internal/redacted.js +8 -31
- package/dist/cjs/internal/redacted.js.map +1 -1
- package/dist/cjs/internal/ref.js +8 -31
- package/dist/cjs/internal/ref.js.map +1 -1
- package/dist/cjs/internal/reloadable.js +10 -33
- package/dist/cjs/internal/reloadable.js.map +1 -1
- package/dist/cjs/internal/request.js +7 -30
- package/dist/cjs/internal/request.js.map +1 -1
- package/dist/cjs/internal/resource.js +7 -30
- package/dist/cjs/internal/resource.js.map +1 -1
- package/dist/cjs/internal/ringBuffer.js +5 -28
- package/dist/cjs/internal/ringBuffer.js.map +1 -1
- package/dist/cjs/internal/runtime.js +23 -46
- package/dist/cjs/internal/runtime.js.map +1 -1
- package/dist/cjs/internal/runtimeFlags.js +5 -28
- package/dist/cjs/internal/runtimeFlags.js.map +1 -1
- package/dist/cjs/internal/runtimeFlagsPatch.js +1 -1
- package/dist/cjs/internal/runtimeFlagsPatch.js.map +1 -1
- package/dist/cjs/internal/schedule/decision.js +4 -27
- package/dist/cjs/internal/schedule/decision.js.map +1 -1
- package/dist/cjs/internal/schedule/interval.js +5 -28
- package/dist/cjs/internal/schedule/interval.js.map +1 -1
- package/dist/cjs/internal/schedule/intervals.js +7 -30
- package/dist/cjs/internal/schedule/intervals.js.map +1 -1
- package/dist/cjs/internal/schedule.js +21 -44
- package/dist/cjs/internal/schedule.js.map +1 -1
- package/dist/cjs/internal/scopedCache.js +19 -42
- package/dist/cjs/internal/scopedCache.js.map +1 -1
- package/dist/cjs/internal/scopedRef.js +10 -33
- package/dist/cjs/internal/scopedRef.js.map +1 -1
- package/dist/cjs/internal/secret.js +5 -28
- package/dist/cjs/internal/secret.js.map +1 -1
- package/dist/cjs/internal/singleShotGen.js.map +1 -1
- package/dist/cjs/internal/sink.js +22 -45
- package/dist/cjs/internal/sink.js.map +1 -1
- package/dist/cjs/internal/stm/core.js +30 -53
- package/dist/cjs/internal/stm/core.js.map +1 -1
- package/dist/cjs/internal/stm/stm/entry.js +3 -26
- package/dist/cjs/internal/stm/stm/entry.js.map +1 -1
- package/dist/cjs/internal/stm/stm/journal.js +3 -26
- package/dist/cjs/internal/stm/stm/journal.js.map +1 -1
- package/dist/cjs/internal/stm/stm/stmState.js +9 -32
- package/dist/cjs/internal/stm/stm/stmState.js.map +1 -1
- package/dist/cjs/internal/stm/stm/tExit.js +7 -30
- package/dist/cjs/internal/stm/stm/tExit.js.map +1 -1
- package/dist/cjs/internal/stm/stm/tryCommit.js +3 -26
- package/dist/cjs/internal/stm/stm/tryCommit.js.map +1 -1
- package/dist/cjs/internal/stm/stm/versioned.js.map +1 -1
- package/dist/cjs/internal/stm/stm.js +17 -40
- package/dist/cjs/internal/stm/stm.js.map +1 -1
- package/dist/cjs/internal/stm/tArray.js +9 -32
- package/dist/cjs/internal/stm/tArray.js.map +1 -1
- package/dist/cjs/internal/stm/tDeferred.js +8 -31
- package/dist/cjs/internal/stm/tDeferred.js.map +1 -1
- package/dist/cjs/internal/stm/tMap.js +15 -38
- package/dist/cjs/internal/stm/tMap.js.map +1 -1
- package/dist/cjs/internal/stm/tPriorityQueue.js +9 -32
- package/dist/cjs/internal/stm/tPriorityQueue.js.map +1 -1
- package/dist/cjs/internal/stm/tPubSub.js +12 -35
- package/dist/cjs/internal/stm/tPubSub.js.map +1 -1
- package/dist/cjs/internal/stm/tQueue.js +12 -35
- package/dist/cjs/internal/stm/tQueue.js.map +1 -1
- package/dist/cjs/internal/stm/tRandom.js +10 -33
- package/dist/cjs/internal/stm/tRandom.js.map +1 -1
- package/dist/cjs/internal/stm/tReentrantLock.js +10 -33
- package/dist/cjs/internal/stm/tReentrantLock.js.map +1 -1
- package/dist/cjs/internal/stm/tRef.js +7 -30
- package/dist/cjs/internal/stm/tRef.js.map +1 -1
- package/dist/cjs/internal/stm/tSemaphore.js +8 -31
- package/dist/cjs/internal/stm/tSemaphore.js.map +1 -1
- package/dist/cjs/internal/stm/tSet.js +10 -33
- package/dist/cjs/internal/stm/tSet.js.map +1 -1
- package/dist/cjs/internal/stream/emit.js +8 -31
- package/dist/cjs/internal/stream/emit.js.map +1 -1
- package/dist/cjs/internal/stream/haltStrategy.js +4 -27
- package/dist/cjs/internal/stream/haltStrategy.js.map +1 -1
- package/dist/cjs/internal/stream/handoff.js +7 -30
- package/dist/cjs/internal/stream/handoff.js.map +1 -1
- package/dist/cjs/internal/stream/pull.js +7 -30
- package/dist/cjs/internal/stream/pull.js.map +1 -1
- package/dist/cjs/internal/stream.js +103 -80
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/subscriptionRef.js +13 -36
- package/dist/cjs/internal/subscriptionRef.js.map +1 -1
- package/dist/cjs/internal/supervisor/patch.js +8 -31
- package/dist/cjs/internal/supervisor/patch.js.map +1 -1
- package/dist/cjs/internal/supervisor.js +8 -31
- package/dist/cjs/internal/supervisor.js.map +1 -1
- package/dist/cjs/internal/synchronizedRef.js +5 -28
- package/dist/cjs/internal/synchronizedRef.js.map +1 -1
- package/dist/cjs/internal/take.js +9 -32
- package/dist/cjs/internal/take.js.map +1 -1
- package/dist/cjs/internal/tracer.js +3 -26
- package/dist/cjs/internal/tracer.js.map +1 -1
- package/dist/cjs/internal/trie.js +9 -32
- package/dist/cjs/internal/trie.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Cause.d.ts +40 -1
- package/dist/dts/Cause.d.ts.map +1 -1
- package/dist/dts/Channel.d.ts +3 -3
- package/dist/dts/Channel.d.ts.map +1 -1
- package/dist/dts/Config.d.ts +5 -0
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Console.d.ts +2 -4
- package/dist/dts/Console.d.ts.map +1 -1
- package/dist/dts/Duration.d.ts +5 -0
- package/dist/dts/Duration.d.ts.map +1 -1
- package/dist/dts/Logger.d.ts +15 -0
- package/dist/dts/Logger.d.ts.map +1 -1
- package/dist/dts/PubSub.d.ts +15 -4
- package/dist/dts/PubSub.d.ts.map +1 -1
- package/dist/dts/Random.d.ts +8 -0
- package/dist/dts/Random.d.ts.map +1 -1
- package/dist/dts/RcMap.d.ts +93 -0
- package/dist/dts/RcMap.d.ts.map +1 -0
- package/dist/dts/RcRef.d.ts +83 -0
- package/dist/dts/RcRef.d.ts.map +1 -0
- package/dist/dts/Stream.d.ts +1139 -29
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/index.d.ts +8 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core-effect.d.ts.map +1 -1
- package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
- package/dist/dts/internal/logger.d.ts.map +1 -1
- package/dist/dts/internal/random.d.ts +1 -1
- package/dist/dts/internal/random.d.ts.map +1 -1
- package/dist/dts/internal/rcMap.d.ts +2 -0
- package/dist/dts/internal/rcMap.d.ts.map +1 -0
- package/dist/dts/internal/rcRef.d.ts +2 -0
- package/dist/dts/internal/rcRef.d.ts.map +1 -0
- package/dist/dts/internal/stream.d.ts +1 -0
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/Cause.js +21 -0
- package/dist/esm/Cause.js.map +1 -1
- package/dist/esm/Channel.js.map +1 -1
- package/dist/esm/Config.js.map +1 -1
- package/dist/esm/Console.js.map +1 -1
- package/dist/esm/Data.js +3 -1
- package/dist/esm/Data.js.map +1 -1
- package/dist/esm/Duration.js +20 -0
- package/dist/esm/Duration.js.map +1 -1
- package/dist/esm/Logger.js +10 -0
- package/dist/esm/Logger.js.map +1 -1
- package/dist/esm/PubSub.js.map +1 -1
- package/dist/esm/Random.js +8 -0
- package/dist/esm/Random.js.map +1 -1
- package/dist/esm/RcMap.js +44 -0
- package/dist/esm/RcMap.js.map +1 -0
- package/dist/esm/RcRef.js +43 -0
- package/dist/esm/RcRef.js.map +1 -0
- package/dist/esm/Stream.js +1102 -3
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/cause.js +21 -5
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
- package/dist/esm/internal/channel.js.map +1 -1
- package/dist/esm/internal/core-effect.js +0 -5
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +11 -7
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/defaultServices.js +1 -1
- package/dist/esm/internal/defaultServices.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +2 -0
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/logger.js +126 -26
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/pool.js +29 -5
- package/dist/esm/internal/pool.js.map +1 -1
- package/dist/esm/internal/pubsub.js +216 -36
- package/dist/esm/internal/pubsub.js.map +1 -1
- package/dist/esm/internal/random.js +2 -1
- package/dist/esm/internal/random.js.map +1 -1
- package/dist/esm/internal/rcMap.js +120 -0
- package/dist/esm/internal/rcMap.js.map +1 -0
- package/dist/esm/internal/rcRef.js +112 -0
- package/dist/esm/internal/rcRef.js.map +1 -0
- package/dist/esm/internal/stream.js +53 -8
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +17 -1
- package/src/Cause.ts +47 -1
- package/src/Channel.ts +3 -3
- package/src/Config.ts +6 -0
- package/src/Console.ts +2 -4
- package/src/Data.ts +1 -1
- package/src/Duration.ts +18 -0
- package/src/Logger.ts +19 -0
- package/src/PubSub.ts +11 -4
- package/src/Random.ts +9 -0
- package/src/RcMap.ts +103 -0
- package/src/RcRef.ts +91 -0
- package/src/Stream.ts +1158 -29
- package/src/index.ts +10 -0
- package/src/internal/cause.ts +26 -5
- package/src/internal/channel/channelExecutor.ts +1 -1
- package/src/internal/channel.ts +4 -3
- package/src/internal/core-effect.ts +0 -5
- package/src/internal/core.ts +19 -9
- package/src/internal/defaultServices.ts +1 -1
- package/src/internal/fiberRuntime.ts +6 -0
- package/src/internal/logger.ts +133 -27
- package/src/internal/pool.ts +36 -5
- package/src/internal/pubsub.ts +249 -58
- package/src/internal/random.ts +2 -1
- package/src/internal/rcMap.ts +213 -0
- package/src/internal/rcRef.ts +172 -0
- package/src/internal/stream.ts +325 -111
- package/src/internal/version.ts +1 -1
package/src/Stream.ts
CHANGED
|
@@ -30,7 +30,7 @@ import type * as Emit from "./StreamEmit.js"
|
|
|
30
30
|
import type * as HaltStrategy from "./StreamHaltStrategy.js"
|
|
31
31
|
import type * as Take from "./Take.js"
|
|
32
32
|
import type * as Tracer from "./Tracer.js"
|
|
33
|
-
import type { Covariant, NoInfer } from "./Types.js"
|
|
33
|
+
import type { Covariant, NoInfer, TupleOf } from "./Types.js"
|
|
34
34
|
import type * as Unify from "./Unify.js"
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -146,6 +146,7 @@ export declare namespace Stream {
|
|
|
146
146
|
/**
|
|
147
147
|
* @since 2.0.0
|
|
148
148
|
* @category models
|
|
149
|
+
* @deprecated use Types.TupleOf instead
|
|
149
150
|
*/
|
|
150
151
|
export type DynamicTuple<T, N extends number> = N extends N ? number extends N ? Array<T> : DynamicTupleOf<T, N, []>
|
|
151
152
|
: never
|
|
@@ -153,6 +154,7 @@ export declare namespace Stream {
|
|
|
153
154
|
/**
|
|
154
155
|
* @since 2.0.0
|
|
155
156
|
* @category models
|
|
157
|
+
* @deprecated use Types.TupleOf instead
|
|
156
158
|
*/
|
|
157
159
|
export type DynamicTupleOf<T, N extends number, R extends Array<unknown>> = R["length"] extends N ? R
|
|
158
160
|
: DynamicTupleOf<T, N, [T, ...R]>
|
|
@@ -188,6 +190,29 @@ export const accumulateChunks: <A, E, R>(self: Stream<A, E, R>) => Stream<A, E,
|
|
|
188
190
|
* Creates a stream from a single value that will get cleaned up after the
|
|
189
191
|
* stream is consumed.
|
|
190
192
|
*
|
|
193
|
+
* @example
|
|
194
|
+
* import { Console, Effect, Stream } from "effect"
|
|
195
|
+
*
|
|
196
|
+
* // Simulating File operations
|
|
197
|
+
* const open = (filename: string) =>
|
|
198
|
+
* Effect.gen(function*() {
|
|
199
|
+
* yield* Console.log(`Opening ${filename}`)
|
|
200
|
+
* return {
|
|
201
|
+
* getLines: Effect.succeed(["Line 1", "Line 2", "Line 3"]),
|
|
202
|
+
* close: Console.log(`Closing ${filename}`)
|
|
203
|
+
* }
|
|
204
|
+
* })
|
|
205
|
+
*
|
|
206
|
+
* const stream = Stream.acquireRelease(
|
|
207
|
+
* open("file.txt"),
|
|
208
|
+
* (file) => file.close
|
|
209
|
+
* ).pipe(Stream.flatMap((file) => file.getLines))
|
|
210
|
+
*
|
|
211
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
212
|
+
* // Opening file.txt
|
|
213
|
+
* // Closing file.txt
|
|
214
|
+
* // { _id: 'Chunk', values: [ [ 'Line 1', 'Line 2', 'Line 3' ] ] }
|
|
215
|
+
*
|
|
191
216
|
* @since 2.0.0
|
|
192
217
|
* @category constructors
|
|
193
218
|
*/
|
|
@@ -269,6 +294,14 @@ export const aggregateWithinEither: {
|
|
|
269
294
|
/**
|
|
270
295
|
* Maps the success values of this stream to the specified constant value.
|
|
271
296
|
*
|
|
297
|
+
* @example
|
|
298
|
+
* import { Effect, Stream } from "effect"
|
|
299
|
+
*
|
|
300
|
+
* const stream = Stream.range(1, 5).pipe(Stream.as(null))
|
|
301
|
+
*
|
|
302
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
303
|
+
* // { _id: 'Chunk', values: [ null, null, null, null, null ] }
|
|
304
|
+
*
|
|
272
305
|
* @since 2.0.0
|
|
273
306
|
* @category mapping
|
|
274
307
|
*/
|
|
@@ -279,7 +312,10 @@ export const as: {
|
|
|
279
312
|
|
|
280
313
|
const _async: <A, E = never, R = never>(
|
|
281
314
|
register: (emit: Emit.Emit<R, E, A, void>) => Effect.Effect<void, never, R> | void,
|
|
282
|
-
|
|
315
|
+
bufferSize?: number | "unbounded" | {
|
|
316
|
+
readonly bufferSize?: number | undefined
|
|
317
|
+
readonly strategy?: "dropping" | "sliding" | "suspend" | undefined
|
|
318
|
+
} | undefined
|
|
283
319
|
) => Stream<A, E, R> = internal._async
|
|
284
320
|
|
|
285
321
|
export {
|
|
@@ -291,6 +327,29 @@ export {
|
|
|
291
327
|
* The registration function can optionally return an `Effect`, which will be
|
|
292
328
|
* executed if the `Fiber` executing this Effect is interrupted.
|
|
293
329
|
*
|
|
330
|
+
* @example
|
|
331
|
+
* import type { StreamEmit } from "effect"
|
|
332
|
+
* import { Chunk, Effect, Option, Stream } from "effect"
|
|
333
|
+
*
|
|
334
|
+
* const events = [1, 2, 3, 4]
|
|
335
|
+
*
|
|
336
|
+
* const stream = Stream.async(
|
|
337
|
+
* (emit: StreamEmit.Emit<never, never, number, void>) => {
|
|
338
|
+
* events.forEach((n) => {
|
|
339
|
+
* setTimeout(() => {
|
|
340
|
+
* if (n === 3) {
|
|
341
|
+
* emit(Effect.fail(Option.none())) // Terminate the stream
|
|
342
|
+
* } else {
|
|
343
|
+
* emit(Effect.succeed(Chunk.of(n))) // Add the current item to the stream
|
|
344
|
+
* }
|
|
345
|
+
* }, 100 * n)
|
|
346
|
+
* })
|
|
347
|
+
* }
|
|
348
|
+
* )
|
|
349
|
+
*
|
|
350
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
351
|
+
* // { _id: 'Chunk', values: [ 1, 2 ] }
|
|
352
|
+
*
|
|
294
353
|
* @since 2.0.0
|
|
295
354
|
* @category constructors
|
|
296
355
|
*/
|
|
@@ -308,7 +367,10 @@ export {
|
|
|
308
367
|
*/
|
|
309
368
|
export const asyncEffect: <A, E = never, R = never>(
|
|
310
369
|
register: (emit: Emit.Emit<R, E, A, void>) => Effect.Effect<unknown, E, R>,
|
|
311
|
-
|
|
370
|
+
bufferSize?: number | "unbounded" | {
|
|
371
|
+
readonly bufferSize?: number | undefined
|
|
372
|
+
readonly strategy?: "dropping" | "sliding" | "suspend" | undefined
|
|
373
|
+
} | undefined
|
|
312
374
|
) => Stream<A, E, R> = internal.asyncEffect
|
|
313
375
|
|
|
314
376
|
/**
|
|
@@ -322,7 +384,10 @@ export const asyncEffect: <A, E = never, R = never>(
|
|
|
322
384
|
*/
|
|
323
385
|
export const asyncScoped: <A, E = never, R = never>(
|
|
324
386
|
register: (emit: Emit.Emit<R, E, A, void>) => Effect.Effect<unknown, E, R | Scope.Scope>,
|
|
325
|
-
|
|
387
|
+
bufferSize?: number | "unbounded" | {
|
|
388
|
+
readonly bufferSize?: number | undefined
|
|
389
|
+
readonly strategy?: "dropping" | "sliding" | "suspend" | undefined
|
|
390
|
+
} | undefined
|
|
326
391
|
) => Stream<A, E, Exclude<R, Scope.Scope>> = internal.asyncScoped
|
|
327
392
|
|
|
328
393
|
/**
|
|
@@ -350,6 +415,77 @@ export const branchAfter: {
|
|
|
350
415
|
* as this stream. The driver stream will only ever advance the `maximumLag`
|
|
351
416
|
* chunks before the slowest downstream stream.
|
|
352
417
|
*
|
|
418
|
+
* @example
|
|
419
|
+
* import { Console, Effect, Fiber, Schedule, Stream } from "effect"
|
|
420
|
+
*
|
|
421
|
+
* const numbers = Effect.scoped(
|
|
422
|
+
* Stream.range(1, 20).pipe(
|
|
423
|
+
* Stream.tap((n) => Console.log(`Emit ${n} element before broadcasting`)),
|
|
424
|
+
* Stream.broadcast(2, 5),
|
|
425
|
+
* Stream.flatMap(([first, second]) =>
|
|
426
|
+
* Effect.gen(function*() {
|
|
427
|
+
* const fiber1 = yield* Stream.runFold(first, 0, (acc, e) => Math.max(acc, e)).pipe(
|
|
428
|
+
* Effect.andThen((max) => Console.log(`Maximum: ${max}`)),
|
|
429
|
+
* Effect.fork
|
|
430
|
+
* )
|
|
431
|
+
* const fiber2 = yield* second.pipe(
|
|
432
|
+
* Stream.schedule(Schedule.spaced("1 second")),
|
|
433
|
+
* Stream.runForEach((n) => Console.log(`Logging to the Console: ${n}`)),
|
|
434
|
+
* Effect.fork
|
|
435
|
+
* )
|
|
436
|
+
* yield* Fiber.join(fiber1).pipe(
|
|
437
|
+
* Effect.zip(Fiber.join(fiber2), { concurrent: true })
|
|
438
|
+
* )
|
|
439
|
+
* })
|
|
440
|
+
* ),
|
|
441
|
+
* Stream.runCollect
|
|
442
|
+
* )
|
|
443
|
+
* )
|
|
444
|
+
*
|
|
445
|
+
* // Effect.runPromise(numbers).then(console.log)
|
|
446
|
+
* // Emit 1 element before broadcasting
|
|
447
|
+
* // Emit 2 element before broadcasting
|
|
448
|
+
* // Emit 3 element before broadcasting
|
|
449
|
+
* // Emit 4 element before broadcasting
|
|
450
|
+
* // Emit 5 element before broadcasting
|
|
451
|
+
* // Emit 6 element before broadcasting
|
|
452
|
+
* // Emit 7 element before broadcasting
|
|
453
|
+
* // Emit 8 element before broadcasting
|
|
454
|
+
* // Emit 9 element before broadcasting
|
|
455
|
+
* // Emit 10 element before broadcasting
|
|
456
|
+
* // Emit 11 element before broadcasting
|
|
457
|
+
* // Logging to the Console: 1
|
|
458
|
+
* // Logging to the Console: 2
|
|
459
|
+
* // Logging to the Console: 3
|
|
460
|
+
* // Logging to the Console: 4
|
|
461
|
+
* // Logging to the Console: 5
|
|
462
|
+
* // Emit 12 element before broadcasting
|
|
463
|
+
* // Emit 13 element before broadcasting
|
|
464
|
+
* // Emit 14 element before broadcasting
|
|
465
|
+
* // Emit 15 element before broadcasting
|
|
466
|
+
* // Emit 16 element before broadcasting
|
|
467
|
+
* // Logging to the Console: 6
|
|
468
|
+
* // Logging to the Console: 7
|
|
469
|
+
* // Logging to the Console: 8
|
|
470
|
+
* // Logging to the Console: 9
|
|
471
|
+
* // Logging to the Console: 10
|
|
472
|
+
* // Emit 17 element before broadcasting
|
|
473
|
+
* // Emit 18 element before broadcasting
|
|
474
|
+
* // Emit 19 element before broadcasting
|
|
475
|
+
* // Emit 20 element before broadcasting
|
|
476
|
+
* // Logging to the Console: 11
|
|
477
|
+
* // Logging to the Console: 12
|
|
478
|
+
* // Logging to the Console: 13
|
|
479
|
+
* // Logging to the Console: 14
|
|
480
|
+
* // Logging to the Console: 15
|
|
481
|
+
* // Maximum: 20
|
|
482
|
+
* // Logging to the Console: 16
|
|
483
|
+
* // Logging to the Console: 17
|
|
484
|
+
* // Logging to the Console: 18
|
|
485
|
+
* // Logging to the Console: 19
|
|
486
|
+
* // Logging to the Console: 20
|
|
487
|
+
* // { _id: 'Chunk', values: [ undefined ] }
|
|
488
|
+
*
|
|
353
489
|
* @since 2.0.0
|
|
354
490
|
* @category utils
|
|
355
491
|
*/
|
|
@@ -359,12 +495,12 @@ export const broadcast: {
|
|
|
359
495
|
maximumLag: number
|
|
360
496
|
): <A, E, R>(
|
|
361
497
|
self: Stream<A, E, R>
|
|
362
|
-
) => Effect.Effect<
|
|
498
|
+
) => Effect.Effect<TupleOf<N, Stream<A, E>>, never, Scope.Scope | R>
|
|
363
499
|
<A, E, R, N extends number>(
|
|
364
500
|
self: Stream<A, E, R>,
|
|
365
501
|
n: N,
|
|
366
502
|
maximumLag: number
|
|
367
|
-
): Effect.Effect<
|
|
503
|
+
): Effect.Effect<TupleOf<N, Stream<A, E>>, never, Scope.Scope | R>
|
|
368
504
|
} = internal.broadcast
|
|
369
505
|
|
|
370
506
|
/**
|
|
@@ -396,12 +532,12 @@ export const broadcastedQueues: {
|
|
|
396
532
|
maximumLag: number
|
|
397
533
|
): <A, E, R>(
|
|
398
534
|
self: Stream<A, E, R>
|
|
399
|
-
) => Effect.Effect<
|
|
535
|
+
) => Effect.Effect<TupleOf<N, Queue.Dequeue<Take.Take<A, E>>>, never, R | Scope.Scope>
|
|
400
536
|
<A, E, R, N extends number>(
|
|
401
537
|
self: Stream<A, E, R>,
|
|
402
538
|
n: N,
|
|
403
539
|
maximumLag: number
|
|
404
|
-
): Effect.Effect<
|
|
540
|
+
): Effect.Effect<TupleOf<N, Queue.Dequeue<Take.Take<A, E>>>, never, Scope.Scope | R>
|
|
405
541
|
} = internal.broadcastedQueues
|
|
406
542
|
|
|
407
543
|
/**
|
|
@@ -430,9 +566,38 @@ export const broadcastedQueuesDynamic: {
|
|
|
430
566
|
* Allows a faster producer to progress independently of a slower consumer by
|
|
431
567
|
* buffering up to `capacity` elements in a queue.
|
|
432
568
|
*
|
|
433
|
-
*
|
|
569
|
+
* Note: This combinator destroys the chunking structure. It's recommended to
|
|
434
570
|
* use rechunk afterwards. Additionally, prefer capacities that are powers
|
|
435
571
|
* of 2 for better performance.
|
|
572
|
+
*
|
|
573
|
+
* @example
|
|
574
|
+
* import { Console, Effect, Schedule, Stream } from "effect"
|
|
575
|
+
*
|
|
576
|
+
* const stream = Stream.range(1, 10).pipe(
|
|
577
|
+
* Stream.tap((n) => Console.log(`before buffering: ${n}`)),
|
|
578
|
+
* Stream.buffer({ capacity: 4 }),
|
|
579
|
+
* Stream.tap((n) => Console.log(`after buffering: ${n}`)),
|
|
580
|
+
* Stream.schedule(Schedule.spaced("5 seconds"))
|
|
581
|
+
* )
|
|
582
|
+
*
|
|
583
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
584
|
+
* // before buffering: 1
|
|
585
|
+
* // before buffering: 2
|
|
586
|
+
* // before buffering: 3
|
|
587
|
+
* // before buffering: 4
|
|
588
|
+
* // before buffering: 5
|
|
589
|
+
* // before buffering: 6
|
|
590
|
+
* // after buffering: 1
|
|
591
|
+
* // after buffering: 2
|
|
592
|
+
* // before buffering: 7
|
|
593
|
+
* // after buffering: 3
|
|
594
|
+
* // before buffering: 8
|
|
595
|
+
* // after buffering: 4
|
|
596
|
+
* // before buffering: 9
|
|
597
|
+
* // after buffering: 5
|
|
598
|
+
* // before buffering: 10
|
|
599
|
+
* // ...
|
|
600
|
+
*
|
|
436
601
|
* @since 2.0.0
|
|
437
602
|
* @category utils
|
|
438
603
|
*/
|
|
@@ -618,6 +783,14 @@ export const catchSomeCause: {
|
|
|
618
783
|
* previous element emitted, using natural equality to determine whether two
|
|
619
784
|
* elements are equal.
|
|
620
785
|
*
|
|
786
|
+
* @example
|
|
787
|
+
* import { Effect, Stream } from "effect"
|
|
788
|
+
*
|
|
789
|
+
* const stream = Stream.make(1, 1, 1, 2, 2, 3, 4).pipe(Stream.changes)
|
|
790
|
+
*
|
|
791
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
792
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3, 4 ] }
|
|
793
|
+
*
|
|
621
794
|
* @since 2.0.0
|
|
622
795
|
* @category utils
|
|
623
796
|
*/
|
|
@@ -749,6 +922,17 @@ export const combineChunks: {
|
|
|
749
922
|
* that emits the elements from this stream and then the elements from the
|
|
750
923
|
* specified stream.
|
|
751
924
|
*
|
|
925
|
+
* @example
|
|
926
|
+
* import { Effect, Stream } from "effect"
|
|
927
|
+
*
|
|
928
|
+
* const s1 = Stream.make(1, 2, 3)
|
|
929
|
+
* const s2 = Stream.make(4, 5)
|
|
930
|
+
*
|
|
931
|
+
* const stream = Stream.concat(s1, s2)
|
|
932
|
+
*
|
|
933
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
934
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3, 4, 5 ] }
|
|
935
|
+
*
|
|
752
936
|
* @since 2.0.0
|
|
753
937
|
* @category utils
|
|
754
938
|
*/
|
|
@@ -760,6 +944,24 @@ export const concat: {
|
|
|
760
944
|
/**
|
|
761
945
|
* Concatenates all of the streams in the chunk to one stream.
|
|
762
946
|
*
|
|
947
|
+
* @example
|
|
948
|
+
* import { Chunk, Effect, Stream } from "effect"
|
|
949
|
+
*
|
|
950
|
+
* const s1 = Stream.make(1, 2, 3)
|
|
951
|
+
* const s2 = Stream.make(4, 5)
|
|
952
|
+
* const s3 = Stream.make(6, 7, 8)
|
|
953
|
+
*
|
|
954
|
+
* const stream = Stream.concatAll(Chunk.make(s1, s2, s3))
|
|
955
|
+
*
|
|
956
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
957
|
+
* // {
|
|
958
|
+
* // _id: 'Chunk',
|
|
959
|
+
* // values: [
|
|
960
|
+
* // 1, 2, 3, 4,
|
|
961
|
+
* // 5, 6, 7, 8
|
|
962
|
+
* // ]
|
|
963
|
+
* // }
|
|
964
|
+
*
|
|
763
965
|
* @since 2.0.0
|
|
764
966
|
* @category constructors
|
|
765
967
|
*/
|
|
@@ -772,6 +974,22 @@ export const concatAll: <A, E, R>(streams: Chunk.Chunk<Stream<A, E, R>>) => Stre
|
|
|
772
974
|
*
|
|
773
975
|
* See also `Stream.zip` for the more common point-wise variant.
|
|
774
976
|
*
|
|
977
|
+
* @example
|
|
978
|
+
* import { Effect, Stream } from "effect"
|
|
979
|
+
*
|
|
980
|
+
* const s1 = Stream.make(1, 2, 3)
|
|
981
|
+
* const s2 = Stream.make("a", "b")
|
|
982
|
+
*
|
|
983
|
+
* const product = Stream.cross(s1, s2)
|
|
984
|
+
*
|
|
985
|
+
* // Effect.runPromise(Stream.runCollect(product)).then(console.log)
|
|
986
|
+
* // {
|
|
987
|
+
* // _id: "Chunk",
|
|
988
|
+
* // values: [
|
|
989
|
+
* // [ 1, "a" ], [ 1, "b" ], [ 2, "a" ], [ 2, "b" ], [ 3, "a" ], [ 3, "b" ]
|
|
990
|
+
* // ]
|
|
991
|
+
* // }
|
|
992
|
+
*
|
|
775
993
|
* @since 2.0.0
|
|
776
994
|
* @category utils
|
|
777
995
|
*/
|
|
@@ -844,6 +1062,45 @@ export const crossWith: {
|
|
|
844
1062
|
* example, a search engine may only want to initiate a search after a user
|
|
845
1063
|
* has paused typing so as to not prematurely recommend results.
|
|
846
1064
|
*
|
|
1065
|
+
* @example
|
|
1066
|
+
* import { Effect, Stream } from "effect"
|
|
1067
|
+
*
|
|
1068
|
+
* let last = Date.now()
|
|
1069
|
+
* const log = (message: string) =>
|
|
1070
|
+
* Effect.sync(() => {
|
|
1071
|
+
* const end = Date.now()
|
|
1072
|
+
* console.log(`${message} after ${end - last}ms`)
|
|
1073
|
+
* last = end
|
|
1074
|
+
* })
|
|
1075
|
+
*
|
|
1076
|
+
* const stream = Stream.make(1, 2, 3).pipe(
|
|
1077
|
+
* Stream.concat(
|
|
1078
|
+
* Stream.fromEffect(Effect.sleep("200 millis").pipe(Effect.as(4))) // Emit 4 after 200 ms
|
|
1079
|
+
* ),
|
|
1080
|
+
* Stream.concat(Stream.make(5, 6)), // Continue with more rapid values
|
|
1081
|
+
* Stream.concat(
|
|
1082
|
+
* Stream.fromEffect(Effect.sleep("150 millis").pipe(Effect.as(7))) // Emit 7 after 150 ms
|
|
1083
|
+
* ),
|
|
1084
|
+
* Stream.concat(Stream.make(8)),
|
|
1085
|
+
* Stream.tap((n) => log(`Received ${n}`)),
|
|
1086
|
+
* Stream.debounce("100 millis"), // Only emit values after a pause of at least 100 milliseconds,
|
|
1087
|
+
* Stream.tap((n) => log(`> Emitted ${n}`))
|
|
1088
|
+
* )
|
|
1089
|
+
*
|
|
1090
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1091
|
+
* // Received 1 after 5ms
|
|
1092
|
+
* // Received 2 after 2ms
|
|
1093
|
+
* // Received 3 after 0ms
|
|
1094
|
+
* // > Emitted 3 after 104ms
|
|
1095
|
+
* // Received 4 after 99ms
|
|
1096
|
+
* // Received 5 after 1ms
|
|
1097
|
+
* // Received 6 after 0ms
|
|
1098
|
+
* // > Emitted 6 after 101ms
|
|
1099
|
+
* // Received 7 after 50ms
|
|
1100
|
+
* // Received 8 after 1ms
|
|
1101
|
+
* // > Emitted 8 after 101ms
|
|
1102
|
+
* // { _id: 'Chunk', values: [ 3, 6, 8 ] }
|
|
1103
|
+
*
|
|
847
1104
|
* @since 2.0.0
|
|
848
1105
|
* @category utils
|
|
849
1106
|
*/
|
|
@@ -893,7 +1150,7 @@ export const distributedWith: {
|
|
|
893
1150
|
}
|
|
894
1151
|
): <E, R>(
|
|
895
1152
|
self: Stream<A, E, R>
|
|
896
|
-
) => Effect.Effect<
|
|
1153
|
+
) => Effect.Effect<TupleOf<N, Queue.Dequeue<Exit.Exit<A, Option.Option<E>>>>, never, Scope.Scope | R>
|
|
897
1154
|
<A, E, R, N extends number>(
|
|
898
1155
|
self: Stream<A, E, R>,
|
|
899
1156
|
options: {
|
|
@@ -901,7 +1158,7 @@ export const distributedWith: {
|
|
|
901
1158
|
readonly maximumLag: number
|
|
902
1159
|
readonly decide: (a: A) => Effect.Effect<Predicate<number>>
|
|
903
1160
|
}
|
|
904
|
-
): Effect.Effect<
|
|
1161
|
+
): Effect.Effect<TupleOf<N, Queue.Dequeue<Exit.Exit<A, Option.Option<E>>>>, never, Scope.Scope | R>
|
|
905
1162
|
} = internal.distributedWith
|
|
906
1163
|
|
|
907
1164
|
/**
|
|
@@ -939,6 +1196,15 @@ export const distributedWithDynamic: {
|
|
|
939
1196
|
* Converts this stream to a stream that executes its effects but emits no
|
|
940
1197
|
* elements. Useful for sequencing effects using streams:
|
|
941
1198
|
*
|
|
1199
|
+
* @example
|
|
1200
|
+
* import { Effect, Stream } from "effect"
|
|
1201
|
+
*
|
|
1202
|
+
* // We create a stream and immediately drain it.
|
|
1203
|
+
* const stream = Stream.range(1, 6).pipe(Stream.drain)
|
|
1204
|
+
*
|
|
1205
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1206
|
+
* // { _id: 'Chunk', values: [] }
|
|
1207
|
+
*
|
|
942
1208
|
* @since 2.0.0
|
|
943
1209
|
* @category utils
|
|
944
1210
|
*/
|
|
@@ -1054,6 +1320,14 @@ export const either: <A, E, R>(self: Stream<A, E, R>) => Stream<Either.Either<A,
|
|
|
1054
1320
|
/**
|
|
1055
1321
|
* The empty stream.
|
|
1056
1322
|
*
|
|
1323
|
+
* @example
|
|
1324
|
+
* import { Effect, Stream } from "effect"
|
|
1325
|
+
*
|
|
1326
|
+
* const stream = Stream.empty
|
|
1327
|
+
*
|
|
1328
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1329
|
+
* // { _id: 'Chunk', values: [] }
|
|
1330
|
+
*
|
|
1057
1331
|
* @since 2.0.0
|
|
1058
1332
|
* @category constructors
|
|
1059
1333
|
*/
|
|
@@ -1062,6 +1336,22 @@ export const empty: Stream<never> = internal.empty
|
|
|
1062
1336
|
/**
|
|
1063
1337
|
* Executes the provided finalizer after this stream's finalizers run.
|
|
1064
1338
|
*
|
|
1339
|
+
* @example
|
|
1340
|
+
* import { Console, Effect, Stream } from "effect"
|
|
1341
|
+
*
|
|
1342
|
+
* const program = Stream.fromEffect(Console.log("Application Logic.")).pipe(
|
|
1343
|
+
* Stream.concat(Stream.finalizer(Console.log("Finalizing the stream"))),
|
|
1344
|
+
* Stream.ensuring(
|
|
1345
|
+
* Console.log("Doing some other works after stream's finalization")
|
|
1346
|
+
* )
|
|
1347
|
+
* )
|
|
1348
|
+
*
|
|
1349
|
+
* // Effect.runPromise(Stream.runCollect(program)).then(console.log)
|
|
1350
|
+
* // Application Logic.
|
|
1351
|
+
* // Finalizing the stream
|
|
1352
|
+
* // Doing some other works after stream's finalization
|
|
1353
|
+
* // { _id: 'Chunk', values: [ undefined, undefined ] }
|
|
1354
|
+
*
|
|
1065
1355
|
* @since 2.0.0
|
|
1066
1356
|
* @category utils
|
|
1067
1357
|
*/
|
|
@@ -1133,6 +1423,18 @@ export const execute: <X, E, R>(effect: Effect.Effect<X, E, R>) => Stream<never,
|
|
|
1133
1423
|
/**
|
|
1134
1424
|
* Terminates with the specified error.
|
|
1135
1425
|
*
|
|
1426
|
+
* @example
|
|
1427
|
+
* import { Effect, Stream } from "effect"
|
|
1428
|
+
*
|
|
1429
|
+
* const stream = Stream.fail("Uh oh!")
|
|
1430
|
+
*
|
|
1431
|
+
* Effect.runPromiseExit(Stream.runCollect(stream)).then(console.log)
|
|
1432
|
+
* // {
|
|
1433
|
+
* // _id: 'Exit',
|
|
1434
|
+
* // _tag: 'Failure',
|
|
1435
|
+
* // cause: { _id: 'Cause', _tag: 'Fail', failure: 'Uh oh!' }
|
|
1436
|
+
* // }
|
|
1437
|
+
*
|
|
1136
1438
|
* @since 2.0.0
|
|
1137
1439
|
* @category constructors
|
|
1138
1440
|
*/
|
|
@@ -1165,6 +1467,14 @@ export const failCauseSync: <E>(evaluate: LazyArg<Cause.Cause<E>>) => Stream<nev
|
|
|
1165
1467
|
/**
|
|
1166
1468
|
* Filters the elements emitted by this stream using the provided function.
|
|
1167
1469
|
*
|
|
1470
|
+
* @example
|
|
1471
|
+
* import { Effect, Stream } from "effect"
|
|
1472
|
+
*
|
|
1473
|
+
* const stream = Stream.range(1, 11).pipe(Stream.filter((n) => n % 2 === 0))
|
|
1474
|
+
*
|
|
1475
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1476
|
+
* // { _id: 'Chunk', values: [ 2, 4, 6, 8, 10 ] }
|
|
1477
|
+
*
|
|
1168
1478
|
* @since 2.0.0
|
|
1169
1479
|
* @category filtering
|
|
1170
1480
|
*/
|
|
@@ -1248,6 +1558,29 @@ export const filterMapWhileEffect: {
|
|
|
1248
1558
|
* Creates a one-element stream that never fails and executes the finalizer
|
|
1249
1559
|
* when it ends.
|
|
1250
1560
|
*
|
|
1561
|
+
* @example
|
|
1562
|
+
* import { Console, Effect, Stream } from "effect"
|
|
1563
|
+
*
|
|
1564
|
+
* const application = Stream.fromEffect(Console.log("Application Logic."))
|
|
1565
|
+
*
|
|
1566
|
+
* const deleteDir = (dir: string) => Console.log(`Deleting dir: ${dir}`)
|
|
1567
|
+
*
|
|
1568
|
+
* const program = application.pipe(
|
|
1569
|
+
* Stream.concat(
|
|
1570
|
+
* Stream.finalizer(
|
|
1571
|
+
* deleteDir("tmp").pipe(
|
|
1572
|
+
* Effect.andThen(Console.log("Temporary directory was deleted."))
|
|
1573
|
+
* )
|
|
1574
|
+
* )
|
|
1575
|
+
* )
|
|
1576
|
+
* )
|
|
1577
|
+
*
|
|
1578
|
+
* // Effect.runPromise(Stream.runCollect(program)).then(console.log)
|
|
1579
|
+
* // Application Logic.
|
|
1580
|
+
* // Deleting dir: tmp
|
|
1581
|
+
* // Temporary directory was deleted.
|
|
1582
|
+
* // { _id: 'Chunk', values: [ undefined, undefined ] }
|
|
1583
|
+
*
|
|
1251
1584
|
* @since 2.0.0
|
|
1252
1585
|
* @category constructors
|
|
1253
1586
|
*/
|
|
@@ -1408,6 +1741,22 @@ export const forever: <A, E, R>(self: Stream<A, E, R>) => Stream<A, E, R> = inte
|
|
|
1408
1741
|
/**
|
|
1409
1742
|
* Creates a stream from an `AsyncIterable`.
|
|
1410
1743
|
*
|
|
1744
|
+
* @example
|
|
1745
|
+
* import { Effect, Stream } from "effect"
|
|
1746
|
+
*
|
|
1747
|
+
* const myAsyncIterable = async function*() {
|
|
1748
|
+
* yield 1
|
|
1749
|
+
* yield 2
|
|
1750
|
+
* }
|
|
1751
|
+
*
|
|
1752
|
+
* const stream = Stream.fromAsyncIterable(
|
|
1753
|
+
* myAsyncIterable(),
|
|
1754
|
+
* (e) => new Error(String(e)) // Error Handling
|
|
1755
|
+
* )
|
|
1756
|
+
*
|
|
1757
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1758
|
+
* // { _id: 'Chunk', values: [ 1, 2 ] }
|
|
1759
|
+
*
|
|
1411
1760
|
* @since 2.0.0
|
|
1412
1761
|
* @category constructors
|
|
1413
1762
|
*/
|
|
@@ -1437,6 +1786,15 @@ export const toChannel: <A, E, R>(
|
|
|
1437
1786
|
/**
|
|
1438
1787
|
* Creates a stream from a `Chunk` of values.
|
|
1439
1788
|
*
|
|
1789
|
+
* @example
|
|
1790
|
+
* import { Chunk, Effect, Stream } from "effect"
|
|
1791
|
+
*
|
|
1792
|
+
* // Creating a stream with values from a single Chunk
|
|
1793
|
+
* const stream = Stream.fromChunk(Chunk.make(1, 2, 3))
|
|
1794
|
+
*
|
|
1795
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1796
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3 ] }
|
|
1797
|
+
*
|
|
1440
1798
|
* @since 2.0.0
|
|
1441
1799
|
* @category constructors
|
|
1442
1800
|
*/
|
|
@@ -1477,6 +1835,15 @@ export const fromChunkQueue: <A>(
|
|
|
1477
1835
|
/**
|
|
1478
1836
|
* Creates a stream from an arbitrary number of chunks.
|
|
1479
1837
|
*
|
|
1838
|
+
* @example
|
|
1839
|
+
* import { Chunk, Effect, Stream } from "effect"
|
|
1840
|
+
*
|
|
1841
|
+
* // Creating a stream with values from multiple Chunks
|
|
1842
|
+
* const stream = Stream.fromChunks(Chunk.make(1, 2, 3), Chunk.make(4, 5, 6))
|
|
1843
|
+
*
|
|
1844
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1845
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3, 4, 5, 6 ] }
|
|
1846
|
+
*
|
|
1480
1847
|
* @since 2.0.0
|
|
1481
1848
|
* @category constructors
|
|
1482
1849
|
*/
|
|
@@ -1486,6 +1853,14 @@ export const fromChunks: <A>(...chunks: Array<Chunk.Chunk<A>>) => Stream<A> = in
|
|
|
1486
1853
|
* Either emits the success value of this effect or terminates the stream
|
|
1487
1854
|
* with the failure value of this effect.
|
|
1488
1855
|
*
|
|
1856
|
+
* @example
|
|
1857
|
+
* import { Effect, Random, Stream } from "effect"
|
|
1858
|
+
*
|
|
1859
|
+
* const stream = Stream.fromEffect(Random.nextInt)
|
|
1860
|
+
*
|
|
1861
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1862
|
+
* // Example Output: { _id: 'Chunk', values: [ 922694024 ] }
|
|
1863
|
+
*
|
|
1489
1864
|
* @since 2.0.0
|
|
1490
1865
|
* @category constructors
|
|
1491
1866
|
*/
|
|
@@ -1530,6 +1905,16 @@ export const fromPubSub: {
|
|
|
1530
1905
|
/**
|
|
1531
1906
|
* Creates a new `Stream` from an iterable collection of values.
|
|
1532
1907
|
*
|
|
1908
|
+
* @example
|
|
1909
|
+
* import { Effect, Stream } from "effect"
|
|
1910
|
+
*
|
|
1911
|
+
* const numbers = [1, 2, 3]
|
|
1912
|
+
*
|
|
1913
|
+
* const stream = Stream.fromIterable(numbers)
|
|
1914
|
+
*
|
|
1915
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
1916
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3 ] }
|
|
1917
|
+
*
|
|
1533
1918
|
* @since 2.0.0
|
|
1534
1919
|
* @category constructors
|
|
1535
1920
|
*/
|
|
@@ -1538,6 +1923,23 @@ export const fromIterable: <A>(iterable: Iterable<A>) => Stream<A> = internal.fr
|
|
|
1538
1923
|
/**
|
|
1539
1924
|
* Creates a stream from an effect producing a value of type `Iterable<A>`.
|
|
1540
1925
|
*
|
|
1926
|
+
* @example
|
|
1927
|
+
* import { Context, Effect, Stream } from "effect"
|
|
1928
|
+
*
|
|
1929
|
+
* class Database extends Context.Tag("Database")<
|
|
1930
|
+
* Database,
|
|
1931
|
+
* { readonly getUsers: Effect.Effect<Array<string>> }
|
|
1932
|
+
* >() {}
|
|
1933
|
+
*
|
|
1934
|
+
* const getUsers = Database.pipe(Effect.andThen((_) => _.getUsers))
|
|
1935
|
+
*
|
|
1936
|
+
* const stream = Stream.fromIterableEffect(getUsers)
|
|
1937
|
+
*
|
|
1938
|
+
* // Effect.runPromise(
|
|
1939
|
+
* // Stream.runCollect(stream.pipe(Stream.provideService(Database, { getUsers: Effect.succeed(["user1", "user2"]) })))
|
|
1940
|
+
* // ).then(console.log)
|
|
1941
|
+
* // { _id: 'Chunk', values: [ 'user1', 'user2' ] }
|
|
1942
|
+
*
|
|
1541
1943
|
* @since 2.0.0
|
|
1542
1944
|
* @category constructors
|
|
1543
1945
|
*/
|
|
@@ -1614,6 +2016,19 @@ export const fromReadableStreamByob: <E>(
|
|
|
1614
2016
|
* input. The stream will emit an element for each value output from the
|
|
1615
2017
|
* schedule, continuing for as long as the schedule continues.
|
|
1616
2018
|
*
|
|
2019
|
+
* @example
|
|
2020
|
+
* import { Effect, Schedule, Stream } from "effect"
|
|
2021
|
+
*
|
|
2022
|
+
* // Emits values every 1 second for a total of 5 emissions
|
|
2023
|
+
* const schedule = Schedule.spaced("1 second").pipe(
|
|
2024
|
+
* Schedule.compose(Schedule.recurs(5))
|
|
2025
|
+
* )
|
|
2026
|
+
*
|
|
2027
|
+
* const stream = Stream.fromSchedule(schedule)
|
|
2028
|
+
*
|
|
2029
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2030
|
+
* // { _id: 'Chunk', values: [ 0, 1, 2, 3, 4 ] }
|
|
2031
|
+
*
|
|
1617
2032
|
* @since 2.0.0
|
|
1618
2033
|
* @category constructors
|
|
1619
2034
|
*/
|
|
@@ -1635,6 +2050,35 @@ export const groupAdjacentBy: {
|
|
|
1635
2050
|
/**
|
|
1636
2051
|
* More powerful version of `Stream.groupByKey`.
|
|
1637
2052
|
*
|
|
2053
|
+
* @example
|
|
2054
|
+
* import { Chunk, Effect, GroupBy, Stream } from "effect"
|
|
2055
|
+
*
|
|
2056
|
+
* const groupByKeyResult = Stream.fromIterable([
|
|
2057
|
+
* "Mary",
|
|
2058
|
+
* "James",
|
|
2059
|
+
* "Robert",
|
|
2060
|
+
* "Patricia",
|
|
2061
|
+
* "John",
|
|
2062
|
+
* "Jennifer",
|
|
2063
|
+
* "Rebecca",
|
|
2064
|
+
* "Peter"
|
|
2065
|
+
* ]).pipe(
|
|
2066
|
+
* Stream.groupBy((name) => Effect.succeed([name.substring(0, 1), name]))
|
|
2067
|
+
* )
|
|
2068
|
+
*
|
|
2069
|
+
* const stream = GroupBy.evaluate(groupByKeyResult, (key, stream) =>
|
|
2070
|
+
* Stream.fromEffect(
|
|
2071
|
+
* Stream.runCollect(stream).pipe(
|
|
2072
|
+
* Effect.andThen((chunk) => [key, Chunk.size(chunk)] as const)
|
|
2073
|
+
* )
|
|
2074
|
+
* ))
|
|
2075
|
+
*
|
|
2076
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2077
|
+
* // {
|
|
2078
|
+
* // _id: 'Chunk',
|
|
2079
|
+
* // values: [ [ 'M', 1 ], [ 'J', 3 ], [ 'R', 2 ], [ 'P', 2 ] ]
|
|
2080
|
+
* // }
|
|
2081
|
+
*
|
|
1638
2082
|
* @since 2.0.0
|
|
1639
2083
|
* @category grouping
|
|
1640
2084
|
*/
|
|
@@ -1706,6 +2150,22 @@ export const groupByKey: {
|
|
|
1706
2150
|
/**
|
|
1707
2151
|
* Partitions the stream with specified `chunkSize`.
|
|
1708
2152
|
*
|
|
2153
|
+
* @example
|
|
2154
|
+
* import { Effect, Stream } from "effect"
|
|
2155
|
+
*
|
|
2156
|
+
* const stream = Stream.range(0, 8).pipe(Stream.grouped(3))
|
|
2157
|
+
*
|
|
2158
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then((chunks) => console.log("%o", chunks))
|
|
2159
|
+
* // {
|
|
2160
|
+
* // _id: 'Chunk',
|
|
2161
|
+
* // values: [
|
|
2162
|
+
* // { _id: 'Chunk', values: [ 0, 1, 2, [length]: 3 ] },
|
|
2163
|
+
* // { _id: 'Chunk', values: [ 3, 4, 5, [length]: 3 ] },
|
|
2164
|
+
* // { _id: 'Chunk', values: [ 6, 7, 8, [length]: 3 ] },
|
|
2165
|
+
* // [length]: 3
|
|
2166
|
+
* // ]
|
|
2167
|
+
* // }
|
|
2168
|
+
*
|
|
1709
2169
|
* @since 2.0.0
|
|
1710
2170
|
* @category utils
|
|
1711
2171
|
*/
|
|
@@ -1718,6 +2178,43 @@ export const grouped: {
|
|
|
1718
2178
|
* Partitions the stream with the specified `chunkSize` or until the specified
|
|
1719
2179
|
* `duration` has passed, whichever is satisfied first.
|
|
1720
2180
|
*
|
|
2181
|
+
* @example
|
|
2182
|
+
* import { Chunk, Effect, Schedule, Stream } from "effect"
|
|
2183
|
+
*
|
|
2184
|
+
* const stream = Stream.range(0, 9).pipe(
|
|
2185
|
+
* Stream.repeat(Schedule.spaced("1 second")),
|
|
2186
|
+
* Stream.groupedWithin(18, "1.5 seconds"),
|
|
2187
|
+
* Stream.take(3)
|
|
2188
|
+
* )
|
|
2189
|
+
*
|
|
2190
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then((chunks) => console.log(Chunk.toArray(chunks)))
|
|
2191
|
+
* // [
|
|
2192
|
+
* // {
|
|
2193
|
+
* // _id: 'Chunk',
|
|
2194
|
+
* // values: [
|
|
2195
|
+
* // 0, 1, 2, 3, 4, 5, 6,
|
|
2196
|
+
* // 7, 8, 9, 0, 1, 2, 3,
|
|
2197
|
+
* // 4, 5, 6, 7
|
|
2198
|
+
* // ]
|
|
2199
|
+
* // },
|
|
2200
|
+
* // {
|
|
2201
|
+
* // _id: 'Chunk',
|
|
2202
|
+
* // values: [
|
|
2203
|
+
* // 8, 9, 0, 1, 2,
|
|
2204
|
+
* // 3, 4, 5, 6, 7,
|
|
2205
|
+
* // 8, 9
|
|
2206
|
+
* // ]
|
|
2207
|
+
* // },
|
|
2208
|
+
* // {
|
|
2209
|
+
* // _id: 'Chunk',
|
|
2210
|
+
* // values: [
|
|
2211
|
+
* // 0, 1, 2, 3, 4, 5, 6,
|
|
2212
|
+
* // 7, 8, 9, 0, 1, 2, 3,
|
|
2213
|
+
* // 4, 5, 6, 7
|
|
2214
|
+
* // ]
|
|
2215
|
+
* // }
|
|
2216
|
+
* // ]
|
|
2217
|
+
*
|
|
1721
2218
|
* @since 2.0.0
|
|
1722
2219
|
* @category utils
|
|
1723
2220
|
*/
|
|
@@ -1789,6 +2286,16 @@ export const identity: <A, E = never, R = never>() => Stream<A, E, R> = internal
|
|
|
1789
2286
|
* one stream is exhausted all remaining values in the other stream will be
|
|
1790
2287
|
* pulled.
|
|
1791
2288
|
*
|
|
2289
|
+
* @example
|
|
2290
|
+
* import { Effect, Stream } from "effect"
|
|
2291
|
+
*
|
|
2292
|
+
* const s1 = Stream.make(1, 2, 3)
|
|
2293
|
+
* const s2 = Stream.make(4, 5, 6)
|
|
2294
|
+
*
|
|
2295
|
+
* const stream = Stream.interleave(s1, s2)
|
|
2296
|
+
*
|
|
2297
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2298
|
+
* // { _id: 'Chunk', values: [ 1, 4, 2, 5, 3, 6 ] }
|
|
1792
2299
|
* @since 2.0.0
|
|
1793
2300
|
* @category utils
|
|
1794
2301
|
*/
|
|
@@ -1806,6 +2313,25 @@ export const interleave: {
|
|
|
1806
2313
|
* stream are exhausted further requests for values from that stream will be
|
|
1807
2314
|
* ignored.
|
|
1808
2315
|
*
|
|
2316
|
+
* @example
|
|
2317
|
+
* import { Effect, Stream } from "effect"
|
|
2318
|
+
*
|
|
2319
|
+
* const s1 = Stream.make(1, 3, 5, 7, 9)
|
|
2320
|
+
* const s2 = Stream.make(2, 4, 6, 8, 10)
|
|
2321
|
+
*
|
|
2322
|
+
* const booleanStream = Stream.make(true, false, false).pipe(Stream.forever)
|
|
2323
|
+
*
|
|
2324
|
+
* const stream = Stream.interleaveWith(s1, s2, booleanStream)
|
|
2325
|
+
*
|
|
2326
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2327
|
+
* // {
|
|
2328
|
+
* // _id: 'Chunk',
|
|
2329
|
+
* // values: [
|
|
2330
|
+
* // 1, 2, 4, 3, 6,
|
|
2331
|
+
* // 8, 5, 10, 7, 9
|
|
2332
|
+
* // ]
|
|
2333
|
+
* // }
|
|
2334
|
+
*
|
|
1809
2335
|
* @since 2.0.0
|
|
1810
2336
|
* @category utils
|
|
1811
2337
|
*/
|
|
@@ -1824,6 +2350,20 @@ export const interleaveWith: {
|
|
|
1824
2350
|
/**
|
|
1825
2351
|
* Intersperse stream with provided `element`.
|
|
1826
2352
|
*
|
|
2353
|
+
* @example
|
|
2354
|
+
* import { Effect, Stream } from "effect"
|
|
2355
|
+
*
|
|
2356
|
+
* const stream = Stream.make(1, 2, 3, 4, 5).pipe(Stream.intersperse(0))
|
|
2357
|
+
*
|
|
2358
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2359
|
+
* // {
|
|
2360
|
+
* // _id: 'Chunk',
|
|
2361
|
+
* // values: [
|
|
2362
|
+
* // 1, 0, 2, 0, 3,
|
|
2363
|
+
* // 0, 4, 0, 5
|
|
2364
|
+
* // ]
|
|
2365
|
+
* // }
|
|
2366
|
+
*
|
|
1827
2367
|
* @since 2.0.0
|
|
1828
2368
|
* @category utils
|
|
1829
2369
|
*/
|
|
@@ -1835,6 +2375,27 @@ export const intersperse: {
|
|
|
1835
2375
|
/**
|
|
1836
2376
|
* Intersperse the specified element, also adding a prefix and a suffix.
|
|
1837
2377
|
*
|
|
2378
|
+
* @example
|
|
2379
|
+
* import { Effect, Stream } from "effect"
|
|
2380
|
+
*
|
|
2381
|
+
* const stream = Stream.make(1, 2, 3, 4, 5).pipe(
|
|
2382
|
+
* Stream.intersperseAffixes({
|
|
2383
|
+
* start: "[",
|
|
2384
|
+
* middle: "-",
|
|
2385
|
+
* end: "]"
|
|
2386
|
+
* })
|
|
2387
|
+
* )
|
|
2388
|
+
*
|
|
2389
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2390
|
+
* // {
|
|
2391
|
+
* // _id: 'Chunk',
|
|
2392
|
+
* // values: [
|
|
2393
|
+
* // '[', 1, '-', 2, '-',
|
|
2394
|
+
* // 3, '-', 4, '-', 5,
|
|
2395
|
+
* // ']'
|
|
2396
|
+
* // ]
|
|
2397
|
+
* // }
|
|
2398
|
+
*
|
|
1838
2399
|
* @since 2.0.0
|
|
1839
2400
|
* @category utils
|
|
1840
2401
|
*/
|
|
@@ -1896,6 +2457,15 @@ export const interruptWhenDeferred: {
|
|
|
1896
2457
|
* The infinite stream of iterative function application: a, f(a), f(f(a)),
|
|
1897
2458
|
* f(f(f(a))), ...
|
|
1898
2459
|
*
|
|
2460
|
+
* @example
|
|
2461
|
+
* import { Effect, Stream } from "effect"
|
|
2462
|
+
*
|
|
2463
|
+
* // An infinite Stream of numbers starting from 1 and incrementing
|
|
2464
|
+
* const stream = Stream.iterate(1, (n) => n + 1)
|
|
2465
|
+
*
|
|
2466
|
+
* // Effect.runPromise(Stream.runCollect(stream.pipe(Stream.take(10)))).then(console.log)
|
|
2467
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] }
|
|
2468
|
+
*
|
|
1899
2469
|
* @since 2.0.0
|
|
1900
2470
|
* @category constructors
|
|
1901
2471
|
*/
|
|
@@ -1904,6 +2474,14 @@ export const iterate: <A>(value: A, next: (value: A) => A) => Stream<A> = intern
|
|
|
1904
2474
|
/**
|
|
1905
2475
|
* Creates a stream from an sequence of values.
|
|
1906
2476
|
*
|
|
2477
|
+
* @example
|
|
2478
|
+
* import { Effect, Stream } from "effect"
|
|
2479
|
+
*
|
|
2480
|
+
* const stream = Stream.make(1, 2, 3)
|
|
2481
|
+
*
|
|
2482
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2483
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3 ] }
|
|
2484
|
+
*
|
|
1907
2485
|
* @since 2.0.0
|
|
1908
2486
|
* @category constructors
|
|
1909
2487
|
*/
|
|
@@ -1912,6 +2490,14 @@ export const make: <As extends Array<any>>(...as: As) => Stream<As[number]> = in
|
|
|
1912
2490
|
/**
|
|
1913
2491
|
* Transforms the elements of this stream using the supplied function.
|
|
1914
2492
|
*
|
|
2493
|
+
* @example
|
|
2494
|
+
* import { Effect, Stream } from "effect"
|
|
2495
|
+
*
|
|
2496
|
+
* const stream = Stream.make(1, 2, 3).pipe(Stream.map((n) => n + 1))
|
|
2497
|
+
*
|
|
2498
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2499
|
+
* // { _id: 'Chunk', values: [ 2, 3, 4 ] }
|
|
2500
|
+
*
|
|
1915
2501
|
* @since 2.0.0
|
|
1916
2502
|
* @category mapping
|
|
1917
2503
|
*/
|
|
@@ -1923,6 +2509,18 @@ export const map: {
|
|
|
1923
2509
|
/**
|
|
1924
2510
|
* Statefully maps over the elements of this stream to produce new elements.
|
|
1925
2511
|
*
|
|
2512
|
+
* @example
|
|
2513
|
+
* import { Effect, Stream } from "effect"
|
|
2514
|
+
*
|
|
2515
|
+
* const runningTotal = (stream: Stream.Stream<number>): Stream.Stream<number> =>
|
|
2516
|
+
* stream.pipe(Stream.mapAccum(0, (s, a) => [s + a, s + a]))
|
|
2517
|
+
*
|
|
2518
|
+
* // input: 0, 1, 2, 3, 4, 5, 6
|
|
2519
|
+
* // Effect.runPromise(Stream.runCollect(runningTotal(Stream.range(0, 6)))).then(
|
|
2520
|
+
* // console.log
|
|
2521
|
+
* // )
|
|
2522
|
+
* // { _id: "Chunk", values: [ 0, 1, 3, 6, 10, 15, 21 ] }
|
|
2523
|
+
*
|
|
1926
2524
|
* @since 2.0.0
|
|
1927
2525
|
* @category mapping
|
|
1928
2526
|
*/
|
|
@@ -1998,6 +2596,17 @@ export const mapChunksEffect: {
|
|
|
1998
2596
|
* Maps each element to an iterable, and flattens the iterables into the
|
|
1999
2597
|
* output of this stream.
|
|
2000
2598
|
*
|
|
2599
|
+
* @example
|
|
2600
|
+
* import { Effect, Stream } from "effect"
|
|
2601
|
+
*
|
|
2602
|
+
* const numbers = Stream.make("1-2-3", "4-5", "6").pipe(
|
|
2603
|
+
* Stream.mapConcat((s) => s.split("-")),
|
|
2604
|
+
* Stream.map((s) => parseInt(s))
|
|
2605
|
+
* )
|
|
2606
|
+
*
|
|
2607
|
+
* // Effect.runPromise(Stream.runCollect(numbers)).then(console.log)
|
|
2608
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3, 4, 5, 6 ] }
|
|
2609
|
+
*
|
|
2001
2610
|
* @since 2.0.0
|
|
2002
2611
|
* @category mapping
|
|
2003
2612
|
*/
|
|
@@ -2055,6 +2664,16 @@ export const mapConcatEffect: {
|
|
|
2055
2664
|
/**
|
|
2056
2665
|
* Maps over elements of the stream with the specified effectful function.
|
|
2057
2666
|
*
|
|
2667
|
+
* @example
|
|
2668
|
+
* import { Effect, Random, Stream } from "effect"
|
|
2669
|
+
*
|
|
2670
|
+
* const stream = Stream.make(10, 20, 30).pipe(
|
|
2671
|
+
* Stream.mapEffect((n) => Random.nextIntBetween(0, n))
|
|
2672
|
+
* )
|
|
2673
|
+
*
|
|
2674
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2675
|
+
* // Example Output: { _id: 'Chunk', values: [ 7, 19, 8 ] }
|
|
2676
|
+
*
|
|
2058
2677
|
* @since 2.0.0
|
|
2059
2678
|
* @category mapping
|
|
2060
2679
|
*/
|
|
@@ -2111,6 +2730,21 @@ export const mapErrorCause: {
|
|
|
2111
2730
|
* New produced stream will terminate when both specified stream terminate if
|
|
2112
2731
|
* no termination strategy is specified.
|
|
2113
2732
|
*
|
|
2733
|
+
* @example
|
|
2734
|
+
* import { Effect, Schedule, Stream } from "effect"
|
|
2735
|
+
*
|
|
2736
|
+
* const s1 = Stream.make(1, 2, 3).pipe(
|
|
2737
|
+
* Stream.schedule(Schedule.spaced("100 millis"))
|
|
2738
|
+
* )
|
|
2739
|
+
* const s2 = Stream.make(4, 5, 6).pipe(
|
|
2740
|
+
* Stream.schedule(Schedule.spaced("200 millis"))
|
|
2741
|
+
* )
|
|
2742
|
+
*
|
|
2743
|
+
* const stream = Stream.merge(s1, s2)
|
|
2744
|
+
*
|
|
2745
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2746
|
+
* // { _id: 'Chunk', values: [ 1, 4, 2, 3, 5, 6 ] }
|
|
2747
|
+
*
|
|
2114
2748
|
* @since 2.0.0
|
|
2115
2749
|
* @category utils
|
|
2116
2750
|
*/
|
|
@@ -2157,6 +2791,24 @@ export const mergeAll: {
|
|
|
2157
2791
|
* New produced stream will terminate when both specified stream terminate if
|
|
2158
2792
|
* no termination strategy is specified.
|
|
2159
2793
|
*
|
|
2794
|
+
* @example
|
|
2795
|
+
* import { Effect, Schedule, Stream } from "effect"
|
|
2796
|
+
*
|
|
2797
|
+
* const s1 = Stream.make("1", "2", "3").pipe(
|
|
2798
|
+
* Stream.schedule(Schedule.spaced("100 millis"))
|
|
2799
|
+
* )
|
|
2800
|
+
* const s2 = Stream.make(4.1, 5.3, 6.2).pipe(
|
|
2801
|
+
* Stream.schedule(Schedule.spaced("200 millis"))
|
|
2802
|
+
* )
|
|
2803
|
+
*
|
|
2804
|
+
* const stream = Stream.mergeWith(s1, s2, {
|
|
2805
|
+
* onSelf: (s) => parseInt(s),
|
|
2806
|
+
* onOther: (n) => Math.floor(n)
|
|
2807
|
+
* })
|
|
2808
|
+
*
|
|
2809
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
2810
|
+
* // { _id: 'Chunk', values: [ 1, 4, 2, 3, 5, 6 ] }
|
|
2811
|
+
*
|
|
2160
2812
|
* @since 2.0.0
|
|
2161
2813
|
* @category utils
|
|
2162
2814
|
*/
|
|
@@ -2202,8 +2854,8 @@ export const mergeEither: {
|
|
|
2202
2854
|
* @category utils
|
|
2203
2855
|
*/
|
|
2204
2856
|
export const mergeLeft: {
|
|
2205
|
-
<
|
|
2206
|
-
<
|
|
2857
|
+
<AR, ER, RR>(right: Stream<AR, ER, RR>): <AL, EL, RL>(left: Stream<AL, EL, RL>) => Stream<AL, ER | EL, RR | RL>
|
|
2858
|
+
<AL, EL, RL, AR, ER, RR>(left: Stream<AL, EL, RL>, right: Stream<AR, ER, RR>): Stream<AL, EL | ER, RL | RR>
|
|
2207
2859
|
} = internal.mergeLeft
|
|
2208
2860
|
|
|
2209
2861
|
/**
|
|
@@ -2214,8 +2866,8 @@ export const mergeLeft: {
|
|
|
2214
2866
|
* @category utils
|
|
2215
2867
|
*/
|
|
2216
2868
|
export const mergeRight: {
|
|
2217
|
-
<
|
|
2218
|
-
<
|
|
2869
|
+
<AR, ER, RR>(right: Stream<AR, ER, RR>): <AL, EL, RL>(left: Stream<AL, EL, RL>) => Stream<AR, ER | EL, RR | RL>
|
|
2870
|
+
<AL, EL, RL, AR, ER, RR>(left: Stream<AL, EL, RL>, right: Stream<AR, ER, RR>): Stream<AR, EL | ER, RL | RR>
|
|
2219
2871
|
} = internal.mergeRight
|
|
2220
2872
|
|
|
2221
2873
|
/**
|
|
@@ -2380,6 +3032,17 @@ export const orElseSucceed: {
|
|
|
2380
3032
|
* than the unfolding of the state. This is useful for embedding paginated
|
|
2381
3033
|
* APIs, hence the name.
|
|
2382
3034
|
*
|
|
3035
|
+
* @example
|
|
3036
|
+
* import { Effect, Option, Stream } from "effect"
|
|
3037
|
+
*
|
|
3038
|
+
* const stream = Stream.paginate(0, (n) => [
|
|
3039
|
+
* n,
|
|
3040
|
+
* n < 3 ? Option.some(n + 1) : Option.none()
|
|
3041
|
+
* ])
|
|
3042
|
+
*
|
|
3043
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
3044
|
+
* // { _id: 'Chunk', values: [ 0, 1, 2, 3 ] }
|
|
3045
|
+
*
|
|
2383
3046
|
* @since 2.0.0
|
|
2384
3047
|
* @category constructors
|
|
2385
3048
|
*/
|
|
@@ -2430,6 +3093,25 @@ export const paginateEffect: <S, A, E, R>(
|
|
|
2430
3093
|
* evaluated to false. The faster stream may advance by up to buffer elements
|
|
2431
3094
|
* further than the slower one.
|
|
2432
3095
|
*
|
|
3096
|
+
* @example
|
|
3097
|
+
* import { Effect, Stream } from "effect"
|
|
3098
|
+
*
|
|
3099
|
+
* const partition = Stream.range(1, 10).pipe(
|
|
3100
|
+
* Stream.partition((n) => n % 2 === 0, { bufferSize: 5 })
|
|
3101
|
+
* )
|
|
3102
|
+
*
|
|
3103
|
+
* const program = Effect.scoped(
|
|
3104
|
+
* Effect.gen(function*() {
|
|
3105
|
+
* const [evens, odds] = yield* partition
|
|
3106
|
+
* console.log(yield* Stream.runCollect(evens))
|
|
3107
|
+
* console.log(yield* Stream.runCollect(odds))
|
|
3108
|
+
* })
|
|
3109
|
+
* )
|
|
3110
|
+
*
|
|
3111
|
+
* // Effect.runPromise(program)
|
|
3112
|
+
* // { _id: 'Chunk', values: [ 2, 4, 6, 8, 10 ] }
|
|
3113
|
+
* // { _id: 'Chunk', values: [ 1, 3, 5, 7, 9 ] }
|
|
3114
|
+
*
|
|
2433
3115
|
* @since 2.0.0
|
|
2434
3116
|
* @category utils
|
|
2435
3117
|
*/
|
|
@@ -2462,6 +3144,28 @@ export const partition: {
|
|
|
2462
3144
|
* Split a stream by an effectful predicate. The faster stream may advance by
|
|
2463
3145
|
* up to buffer elements further than the slower one.
|
|
2464
3146
|
*
|
|
3147
|
+
* @example
|
|
3148
|
+
* import { Effect, Either, Stream } from "effect"
|
|
3149
|
+
*
|
|
3150
|
+
* const partition = Stream.range(1, 9).pipe(
|
|
3151
|
+
* Stream.partitionEither(
|
|
3152
|
+
* (n) => Effect.succeed(n % 2 === 0 ? Either.left(n) : Either.right(n)),
|
|
3153
|
+
* { bufferSize: 5 }
|
|
3154
|
+
* )
|
|
3155
|
+
* )
|
|
3156
|
+
*
|
|
3157
|
+
* const program = Effect.scoped(
|
|
3158
|
+
* Effect.gen(function*() {
|
|
3159
|
+
* const [evens, odds] = yield* partition
|
|
3160
|
+
* console.log(yield* Stream.runCollect(evens))
|
|
3161
|
+
* console.log(yield* Stream.runCollect(odds))
|
|
3162
|
+
* })
|
|
3163
|
+
* )
|
|
3164
|
+
*
|
|
3165
|
+
* // Effect.runPromise(program)
|
|
3166
|
+
* // { _id: 'Chunk', values: [ 2, 4, 6, 8 ] }
|
|
3167
|
+
* // { _id: 'Chunk', values: [ 1, 3, 5, 7, 9 ] }
|
|
3168
|
+
*
|
|
2465
3169
|
* @since 2.0.0
|
|
2466
3170
|
* @category utils
|
|
2467
3171
|
*/
|
|
@@ -2664,9 +3368,52 @@ export const provideSomeLayer: {
|
|
|
2664
3368
|
): Stream<A, E | E2, RIn | Exclude<R, ROut>>
|
|
2665
3369
|
} = internal.provideSomeLayer
|
|
2666
3370
|
|
|
3371
|
+
/**
|
|
3372
|
+
* Returns a stream that mirrors the first upstream to emit an item.
|
|
3373
|
+
* As soon as one of the upstream emits a first value, all the others are interrupted.
|
|
3374
|
+
* The resulting stream will forward all items from the "winning" source stream.
|
|
3375
|
+
* Any upstream failures will cause the returned stream to fail.
|
|
3376
|
+
*
|
|
3377
|
+
* @example
|
|
3378
|
+
* import { Stream, Schedule, Console, Effect } from "effect"
|
|
3379
|
+
*
|
|
3380
|
+
* const stream = Stream.raceAll(
|
|
3381
|
+
* Stream.fromSchedule(Schedule.spaced('1 millis')),
|
|
3382
|
+
* Stream.fromSchedule(Schedule.spaced('2 millis')),
|
|
3383
|
+
* Stream.fromSchedule(Schedule.spaced('4 millis')),
|
|
3384
|
+
* ).pipe(Stream.take(6), Stream.tap(Console.log))
|
|
3385
|
+
*
|
|
3386
|
+
* Effect.runPromise(Stream.runDrain(stream))
|
|
3387
|
+
* // Output each millisecond from the first stream, the rest streams are interrupted
|
|
3388
|
+
* // 0
|
|
3389
|
+
* // 1
|
|
3390
|
+
* // 2
|
|
3391
|
+
* // 3
|
|
3392
|
+
* // 4
|
|
3393
|
+
* // 5
|
|
3394
|
+
* @since 3.5.0
|
|
3395
|
+
* @category racing
|
|
3396
|
+
*/
|
|
3397
|
+
export const raceAll: <S extends ReadonlyArray<Stream<any, any, any>>>(
|
|
3398
|
+
...streams: S
|
|
3399
|
+
) => Stream<
|
|
3400
|
+
Stream.Success<S[number]>,
|
|
3401
|
+
Stream.Error<S[number]>,
|
|
3402
|
+
Stream.Context<S[number]>
|
|
3403
|
+
> = internal.raceAll
|
|
3404
|
+
|
|
2667
3405
|
/**
|
|
2668
3406
|
* Constructs a stream from a range of integers, including both endpoints.
|
|
2669
3407
|
*
|
|
3408
|
+
* @example
|
|
3409
|
+
* import { Effect, Stream } from "effect"
|
|
3410
|
+
*
|
|
3411
|
+
* // A Stream with a range of numbers from 1 to 5
|
|
3412
|
+
* const stream = Stream.range(1, 5)
|
|
3413
|
+
*
|
|
3414
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
3415
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3, 4, 5 ] }
|
|
3416
|
+
*
|
|
2670
3417
|
* @since 2.0.0
|
|
2671
3418
|
* @category constructors
|
|
2672
3419
|
*/
|
|
@@ -2714,6 +3461,14 @@ export const refineOrDieWith: {
|
|
|
2714
3461
|
* Repeats the entire stream using the specified schedule. The stream will
|
|
2715
3462
|
* execute normally, and then repeat again according to the provided schedule.
|
|
2716
3463
|
*
|
|
3464
|
+
* @example
|
|
3465
|
+
* import { Effect, Schedule, Stream } from "effect"
|
|
3466
|
+
*
|
|
3467
|
+
* const stream = Stream.repeat(Stream.succeed(1), Schedule.forever)
|
|
3468
|
+
*
|
|
3469
|
+
* // Effect.runPromise(Stream.runCollect(stream.pipe(Stream.take(5)))).then(console.log)
|
|
3470
|
+
* // { _id: 'Chunk', values: [ 1, 1, 1, 1, 1 ] }
|
|
3471
|
+
*
|
|
2717
3472
|
* @since 2.0.0
|
|
2718
3473
|
* @category utils
|
|
2719
3474
|
*/
|
|
@@ -2726,6 +3481,14 @@ export const repeat: {
|
|
|
2726
3481
|
* Creates a stream from an effect producing a value of type `A` which repeats
|
|
2727
3482
|
* forever.
|
|
2728
3483
|
*
|
|
3484
|
+
* @example
|
|
3485
|
+
* import { Effect, Random, Stream } from "effect"
|
|
3486
|
+
*
|
|
3487
|
+
* const stream = Stream.repeatEffect(Random.nextInt)
|
|
3488
|
+
*
|
|
3489
|
+
* // Effect.runPromise(Stream.runCollect(stream.pipe(Stream.take(5)))).then(console.log)
|
|
3490
|
+
* // Example Output: { _id: 'Chunk', values: [ 3891571149, 4239494205, 2352981603, 2339111046, 1488052210 ] }
|
|
3491
|
+
*
|
|
2729
3492
|
* @since 2.0.0
|
|
2730
3493
|
* @category constructors
|
|
2731
3494
|
*/
|
|
@@ -2756,6 +3519,22 @@ export const repeatEffectChunkOption: <A, E, R>(
|
|
|
2756
3519
|
* Creates a stream from an effect producing values of type `A` until it fails
|
|
2757
3520
|
* with `None`.
|
|
2758
3521
|
*
|
|
3522
|
+
* @example
|
|
3523
|
+
* // In this example, we're draining an Iterator to create a stream from it
|
|
3524
|
+
* import { Stream, Effect, Option } from "effect"
|
|
3525
|
+
*
|
|
3526
|
+
* const drainIterator = <A>(it: Iterator<A>): Stream.Stream<A> =>
|
|
3527
|
+
* Stream.repeatEffectOption(
|
|
3528
|
+
* Effect.sync(() => it.next()).pipe(
|
|
3529
|
+
* Effect.andThen((res) => {
|
|
3530
|
+
* if (res.done) {
|
|
3531
|
+
* return Effect.fail(Option.none())
|
|
3532
|
+
* }
|
|
3533
|
+
* return Effect.succeed(res.value)
|
|
3534
|
+
* })
|
|
3535
|
+
* )
|
|
3536
|
+
* )
|
|
3537
|
+
*
|
|
2759
3538
|
* @since 2.0.0
|
|
2760
3539
|
* @category constructors
|
|
2761
3540
|
*/
|
|
@@ -2837,6 +3616,14 @@ export const repeatElementsWith: {
|
|
|
2837
3616
|
/**
|
|
2838
3617
|
* Repeats the provided value infinitely.
|
|
2839
3618
|
*
|
|
3619
|
+
* @example
|
|
3620
|
+
* import { Effect, Stream } from "effect"
|
|
3621
|
+
*
|
|
3622
|
+
* const stream = Stream.repeatValue(0)
|
|
3623
|
+
*
|
|
3624
|
+
* // Effect.runPromise(Stream.runCollect(stream.pipe(Stream.take(5)))).then(console.log)
|
|
3625
|
+
* // { _id: 'Chunk', values: [ 0, 0, 0, 0, 0 ] }
|
|
3626
|
+
*
|
|
2840
3627
|
* @since 2.0.0
|
|
2841
3628
|
* @category constructors
|
|
2842
3629
|
*/
|
|
@@ -2896,7 +3683,7 @@ export const run: {
|
|
|
2896
3683
|
<A, E, R, A2, E2, R2>(
|
|
2897
3684
|
self: Stream<A, E, R>,
|
|
2898
3685
|
sink: Sink.Sink<A2, A, unknown, E2, R2>
|
|
2899
|
-
): Effect.Effect<A2, E | E2, R | R2
|
|
3686
|
+
): Effect.Effect<A2, E | E2, Exclude<R | R2, Scope.Scope>>
|
|
2900
3687
|
} = internal.run
|
|
2901
3688
|
|
|
2902
3689
|
/**
|
|
@@ -2905,7 +3692,8 @@ export const run: {
|
|
|
2905
3692
|
* @since 2.0.0
|
|
2906
3693
|
* @category destructors
|
|
2907
3694
|
*/
|
|
2908
|
-
export const runCollect: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<Chunk.Chunk<A>, E, R
|
|
3695
|
+
export const runCollect: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<Chunk.Chunk<A>, E, Exclude<R, Scope.Scope>> =
|
|
3696
|
+
internal.runCollect
|
|
2909
3697
|
|
|
2910
3698
|
/**
|
|
2911
3699
|
* Runs the stream and emits the number of elements processed
|
|
@@ -2913,7 +3701,8 @@ export const runCollect: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<Chunk
|
|
|
2913
3701
|
* @since 2.0.0
|
|
2914
3702
|
* @category destructors
|
|
2915
3703
|
*/
|
|
2916
|
-
export const runCount: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<number, E, R
|
|
3704
|
+
export const runCount: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<number, E, Exclude<R, Scope.Scope>> =
|
|
3705
|
+
internal.runCount
|
|
2917
3706
|
|
|
2918
3707
|
/**
|
|
2919
3708
|
* Runs the stream only for its effects. The emitted elements are discarded.
|
|
@@ -2921,7 +3710,8 @@ export const runCount: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<number,
|
|
|
2921
3710
|
* @since 2.0.0
|
|
2922
3711
|
* @category destructors
|
|
2923
3712
|
*/
|
|
2924
|
-
export const runDrain: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<void, E, R
|
|
3713
|
+
export const runDrain: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<void, E, Exclude<R, Scope.Scope>> =
|
|
3714
|
+
internal.runDrain
|
|
2925
3715
|
|
|
2926
3716
|
/**
|
|
2927
3717
|
* Executes a pure fold over the stream of values - reduces all elements in
|
|
@@ -2931,8 +3721,8 @@ export const runDrain: <A, E, R>(self: Stream<A, E, R>) => Effect.Effect<void, E
|
|
|
2931
3721
|
* @category destructors
|
|
2932
3722
|
*/
|
|
2933
3723
|
export const runFold: {
|
|
2934
|
-
<S, A>(s: S, f: (s: S, a: A) => S): <E, R>(self: Stream<A, E, R>) => Effect.Effect<S, E, R
|
|
2935
|
-
<A, E, R, S>(self: Stream<A, E, R>, s: S, f: (s: S, a: A) => S): Effect.Effect<S, E, R
|
|
3724
|
+
<S, A>(s: S, f: (s: S, a: A) => S): <E, R>(self: Stream<A, E, R>) => Effect.Effect<S, E, Exclude<R, Scope.Scope>>
|
|
3725
|
+
<A, E, R, S>(self: Stream<A, E, R>, s: S, f: (s: S, a: A) => S): Effect.Effect<S, E, Exclude<R, Scope.Scope>>
|
|
2936
3726
|
} = internal.runFold
|
|
2937
3727
|
|
|
2938
3728
|
/**
|
|
@@ -2945,12 +3735,12 @@ export const runFoldEffect: {
|
|
|
2945
3735
|
<S, A, E2, R2>(
|
|
2946
3736
|
s: S,
|
|
2947
3737
|
f: (s: S, a: A) => Effect.Effect<S, E2, R2>
|
|
2948
|
-
): <E, R>(self: Stream<A, E, R>) => Effect.Effect<S, E2 | E,
|
|
3738
|
+
): <E, R>(self: Stream<A, E, R>) => Effect.Effect<S, E2 | E, Exclude<R | R2, Scope.Scope>>
|
|
2949
3739
|
<A, E, R, S, E2, R2>(
|
|
2950
3740
|
self: Stream<A, E, R>,
|
|
2951
3741
|
s: S,
|
|
2952
3742
|
f: (s: S, a: A) => Effect.Effect<S, E2, R2>
|
|
2953
|
-
): Effect.Effect<S, E | E2, R | R2
|
|
3743
|
+
): Effect.Effect<S, E | E2, Exclude<R | R2, Scope.Scope>>
|
|
2954
3744
|
} = internal.runFoldEffect
|
|
2955
3745
|
|
|
2956
3746
|
/**
|
|
@@ -2992,8 +3782,17 @@ export const runFoldScopedEffect: {
|
|
|
2992
3782
|
* @category destructors
|
|
2993
3783
|
*/
|
|
2994
3784
|
export const runFoldWhile: {
|
|
2995
|
-
<S, A>(
|
|
2996
|
-
|
|
3785
|
+
<S, A>(
|
|
3786
|
+
s: S,
|
|
3787
|
+
cont: Predicate<S>,
|
|
3788
|
+
f: (s: S, a: A) => S
|
|
3789
|
+
): <E, R>(self: Stream<A, E, R>) => Effect.Effect<S, E, Exclude<R, Scope.Scope>>
|
|
3790
|
+
<A, E, R, S>(
|
|
3791
|
+
self: Stream<A, E, R>,
|
|
3792
|
+
s: S,
|
|
3793
|
+
cont: Predicate<S>,
|
|
3794
|
+
f: (s: S, a: A) => S
|
|
3795
|
+
): Effect.Effect<S, E, Exclude<R, Scope.Scope>>
|
|
2997
3796
|
} = internal.runFoldWhile
|
|
2998
3797
|
|
|
2999
3798
|
/**
|
|
@@ -3008,13 +3807,13 @@ export const runFoldWhileEffect: {
|
|
|
3008
3807
|
s: S,
|
|
3009
3808
|
cont: Predicate<S>,
|
|
3010
3809
|
f: (s: S, a: A) => Effect.Effect<S, E2, R2>
|
|
3011
|
-
): <E, R>(self: Stream<A, E, R>) => Effect.Effect<S, E2 | E,
|
|
3810
|
+
): <E, R>(self: Stream<A, E, R>) => Effect.Effect<S, E2 | E, Exclude<R | R2, Scope.Scope>>
|
|
3012
3811
|
<A, E, R, S, E2, R2>(
|
|
3013
3812
|
self: Stream<A, E, R>,
|
|
3014
3813
|
s: S,
|
|
3015
3814
|
cont: Predicate<S>,
|
|
3016
3815
|
f: (s: S, a: A) => Effect.Effect<S, E2, R2>
|
|
3017
|
-
): Effect.Effect<S, E | E2, R | R2
|
|
3816
|
+
): Effect.Effect<S, E | E2, Exclude<R | R2, Scope.Scope>>
|
|
3018
3817
|
} = internal.runFoldWhileEffect
|
|
3019
3818
|
|
|
3020
3819
|
/**
|
|
@@ -3276,6 +4075,14 @@ export const runSum: <E, R>(self: Stream<number, E, R>) => Effect.Effect<number,
|
|
|
3276
4075
|
* Statefully maps over the elements of this stream to produce all
|
|
3277
4076
|
* intermediate results of type `S` given an initial S.
|
|
3278
4077
|
*
|
|
4078
|
+
* @example
|
|
4079
|
+
* import { Effect, Stream } from "effect"
|
|
4080
|
+
*
|
|
4081
|
+
* const stream = Stream.range(1, 6).pipe(Stream.scan(0, (a, b) => a + b))
|
|
4082
|
+
*
|
|
4083
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4084
|
+
* // { _id: 'Chunk', values: [ 0, 1, 3, 6, 10, 15, 21 ] }
|
|
4085
|
+
*
|
|
3279
4086
|
* @since 2.0.0
|
|
3280
4087
|
* @category utils
|
|
3281
4088
|
*/
|
|
@@ -3372,6 +4179,24 @@ export const scheduleWith: {
|
|
|
3372
4179
|
/**
|
|
3373
4180
|
* Creates a single-valued stream from a scoped resource.
|
|
3374
4181
|
*
|
|
4182
|
+
* @example
|
|
4183
|
+
* import { Console, Effect, Stream } from "effect"
|
|
4184
|
+
*
|
|
4185
|
+
* // Creating a single-valued stream from a scoped resource
|
|
4186
|
+
* const stream = Stream.scoped(
|
|
4187
|
+
* Effect.acquireUseRelease(
|
|
4188
|
+
* Console.log("acquire"),
|
|
4189
|
+
* () => Console.log("use"),
|
|
4190
|
+
* () => Console.log("release")
|
|
4191
|
+
* )
|
|
4192
|
+
* )
|
|
4193
|
+
*
|
|
4194
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4195
|
+
* // acquire
|
|
4196
|
+
* // use
|
|
4197
|
+
* // release
|
|
4198
|
+
* // { _id: 'Chunk', values: [ undefined ] }
|
|
4199
|
+
*
|
|
3375
4200
|
* @since 2.0.0
|
|
3376
4201
|
* @category constructors
|
|
3377
4202
|
*/
|
|
@@ -3488,6 +4313,15 @@ export const splitLines: <E, R>(self: Stream<string, E, R>) => Stream<string, E,
|
|
|
3488
4313
|
/**
|
|
3489
4314
|
* Creates a single-valued pure stream.
|
|
3490
4315
|
*
|
|
4316
|
+
* @example
|
|
4317
|
+
* import { Effect, Stream } from "effect"
|
|
4318
|
+
*
|
|
4319
|
+
* // A Stream with a single number
|
|
4320
|
+
* const stream = Stream.succeed(3)
|
|
4321
|
+
*
|
|
4322
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4323
|
+
* // { _id: 'Chunk', values: [ 3 ] }
|
|
4324
|
+
*
|
|
3491
4325
|
* @since 2.0.0
|
|
3492
4326
|
* @category constructors
|
|
3493
4327
|
*/
|
|
@@ -3512,6 +4346,14 @@ export const suspend: <A, E, R>(stream: LazyArg<Stream<A, E, R>>) => Stream<A, E
|
|
|
3512
4346
|
/**
|
|
3513
4347
|
* Takes the specified number of elements from this stream.
|
|
3514
4348
|
*
|
|
4349
|
+
* @example
|
|
4350
|
+
* import { Effect, Stream } from "effect"
|
|
4351
|
+
*
|
|
4352
|
+
* const stream = Stream.take(Stream.iterate(0, (n) => n + 1), 5)
|
|
4353
|
+
*
|
|
4354
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4355
|
+
* // { _id: 'Chunk', values: [ 0, 1, 2, 3, 4 ] }
|
|
4356
|
+
*
|
|
3515
4357
|
* @since 2.0.0
|
|
3516
4358
|
* @category utils
|
|
3517
4359
|
*/
|
|
@@ -3523,6 +4365,14 @@ export const take: {
|
|
|
3523
4365
|
/**
|
|
3524
4366
|
* Takes the last specified number of elements from this stream.
|
|
3525
4367
|
*
|
|
4368
|
+
* @example
|
|
4369
|
+
* import { Effect, Stream } from "effect"
|
|
4370
|
+
*
|
|
4371
|
+
* const stream = Stream.takeRight(Stream.make(1, 2, 3, 4, 5, 6), 3)
|
|
4372
|
+
*
|
|
4373
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4374
|
+
* // { _id: 'Chunk', values: [ 4, 5, 6 ] }
|
|
4375
|
+
*
|
|
3526
4376
|
* @since 2.0.0
|
|
3527
4377
|
* @category utils
|
|
3528
4378
|
*/
|
|
@@ -3535,6 +4385,14 @@ export const takeRight: {
|
|
|
3535
4385
|
* Takes all elements of the stream until the specified predicate evaluates to
|
|
3536
4386
|
* `true`.
|
|
3537
4387
|
*
|
|
4388
|
+
* @example
|
|
4389
|
+
* import { Effect, Stream } from "effect"
|
|
4390
|
+
*
|
|
4391
|
+
* const stream = Stream.takeUntil(Stream.iterate(0, (n) => n + 1), (n) => n === 4)
|
|
4392
|
+
*
|
|
4393
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4394
|
+
* // { _id: 'Chunk', values: [ 0, 1, 2, 3, 4 ] }
|
|
4395
|
+
*
|
|
3538
4396
|
* @since 2.0.0
|
|
3539
4397
|
* @category utils
|
|
3540
4398
|
*/
|
|
@@ -3564,6 +4422,14 @@ export const takeUntilEffect: {
|
|
|
3564
4422
|
* Takes all elements of the stream for as long as the specified predicate
|
|
3565
4423
|
* evaluates to `true`.
|
|
3566
4424
|
*
|
|
4425
|
+
* @example
|
|
4426
|
+
* import { Effect, Stream } from "effect"
|
|
4427
|
+
*
|
|
4428
|
+
* const stream = Stream.takeWhile(Stream.iterate(0, (n) => n + 1), (n) => n < 5)
|
|
4429
|
+
*
|
|
4430
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4431
|
+
* // { _id: 'Chunk', values: [ 0, 1, 2, 3, 4 ] }
|
|
4432
|
+
*
|
|
3567
4433
|
* @since 2.0.0
|
|
3568
4434
|
* @category utils
|
|
3569
4435
|
*/
|
|
@@ -3577,6 +4443,24 @@ export const takeWhile: {
|
|
|
3577
4443
|
/**
|
|
3578
4444
|
* Adds an effect to consumption of every element of the stream.
|
|
3579
4445
|
*
|
|
4446
|
+
* @example
|
|
4447
|
+
* import { Console, Effect, Stream } from "effect"
|
|
4448
|
+
*
|
|
4449
|
+
* const stream = Stream.make(1, 2, 3).pipe(
|
|
4450
|
+
* Stream.tap((n) => Console.log(`before mapping: ${n}`)),
|
|
4451
|
+
* Stream.map((n) => n * 2),
|
|
4452
|
+
* Stream.tap((n) => Console.log(`after mapping: ${n}`))
|
|
4453
|
+
* )
|
|
4454
|
+
*
|
|
4455
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4456
|
+
* // before mapping: 1
|
|
4457
|
+
* // after mapping: 2
|
|
4458
|
+
* // before mapping: 2
|
|
4459
|
+
* // after mapping: 4
|
|
4460
|
+
* // before mapping: 3
|
|
4461
|
+
* // after mapping: 6
|
|
4462
|
+
* // { _id: 'Chunk', values: [ 2, 4, 6 ] }
|
|
4463
|
+
*
|
|
3580
4464
|
* @since 2.0.0
|
|
3581
4465
|
* @category sequencing
|
|
3582
4466
|
*/
|
|
@@ -3657,7 +4541,7 @@ export const tapSink: {
|
|
|
3657
4541
|
* parameters using the token bucket algorithm. Allows for burst in the
|
|
3658
4542
|
* processing of elements by allowing the token bucket to accumulate tokens up
|
|
3659
4543
|
* to a `units + burst` threshold. The weight of each chunk is determined by
|
|
3660
|
-
* the `
|
|
4544
|
+
* the `cost` function.
|
|
3661
4545
|
*
|
|
3662
4546
|
* If using the "enforce" strategy, chunks that do not meet the bandwidth
|
|
3663
4547
|
* constraints are dropped. If using the "shape" strategy, chunks are delayed
|
|
@@ -3665,6 +4549,43 @@ export const tapSink: {
|
|
|
3665
4549
|
*
|
|
3666
4550
|
* Defaults to the "shape" strategy.
|
|
3667
4551
|
*
|
|
4552
|
+
* @example
|
|
4553
|
+
* import { Chunk, Effect, Schedule, Stream } from "effect"
|
|
4554
|
+
*
|
|
4555
|
+
* let last = Date.now()
|
|
4556
|
+
* const log = (message: string) =>
|
|
4557
|
+
* Effect.sync(() => {
|
|
4558
|
+
* const end = Date.now()
|
|
4559
|
+
* console.log(`${message} after ${end - last}ms`)
|
|
4560
|
+
* last = end
|
|
4561
|
+
* })
|
|
4562
|
+
*
|
|
4563
|
+
* const stream = Stream.fromSchedule(Schedule.spaced("50 millis")).pipe(
|
|
4564
|
+
* Stream.take(6),
|
|
4565
|
+
* Stream.tap((n) => log(`Received ${n}`)),
|
|
4566
|
+
* Stream.throttle({
|
|
4567
|
+
* cost: Chunk.size,
|
|
4568
|
+
* duration: "100 millis",
|
|
4569
|
+
* units: 1
|
|
4570
|
+
* }),
|
|
4571
|
+
* Stream.tap((n) => log(`> Emitted ${n}`))
|
|
4572
|
+
* )
|
|
4573
|
+
*
|
|
4574
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4575
|
+
* // Received 0 after 56ms
|
|
4576
|
+
* // > Emitted 0 after 0ms
|
|
4577
|
+
* // Received 1 after 52ms
|
|
4578
|
+
* // > Emitted 1 after 48ms
|
|
4579
|
+
* // Received 2 after 52ms
|
|
4580
|
+
* // > Emitted 2 after 49ms
|
|
4581
|
+
* // Received 3 after 52ms
|
|
4582
|
+
* // > Emitted 3 after 48ms
|
|
4583
|
+
* // Received 4 after 52ms
|
|
4584
|
+
* // > Emitted 4 after 47ms
|
|
4585
|
+
* // Received 5 after 52ms
|
|
4586
|
+
* // > Emitted 5 after 49ms
|
|
4587
|
+
* // { _id: 'Chunk', values: [ 0, 1, 2, 3, 4, 5 ] }
|
|
4588
|
+
*
|
|
3668
4589
|
* @since 2.0.0
|
|
3669
4590
|
* @category utils
|
|
3670
4591
|
*/
|
|
@@ -3731,6 +4652,27 @@ export const throttleEffect: {
|
|
|
3731
4652
|
/**
|
|
3732
4653
|
* A stream that emits void values spaced by the specified duration.
|
|
3733
4654
|
*
|
|
4655
|
+
* @example
|
|
4656
|
+
* import { Effect, Stream } from "effect"
|
|
4657
|
+
*
|
|
4658
|
+
* let last = Date.now()
|
|
4659
|
+
* const log = (message: string) =>
|
|
4660
|
+
* Effect.sync(() => {
|
|
4661
|
+
* const end = Date.now()
|
|
4662
|
+
* console.log(`${message} after ${end - last}ms`)
|
|
4663
|
+
* last = end
|
|
4664
|
+
* })
|
|
4665
|
+
*
|
|
4666
|
+
* const stream = Stream.tick("1 seconds").pipe(Stream.tap(() => log("tick")))
|
|
4667
|
+
*
|
|
4668
|
+
* // Effect.runPromise(Stream.runCollect(stream.pipe(Stream.take(5)))).then(console.log)
|
|
4669
|
+
* // tick after 4ms
|
|
4670
|
+
* // tick after 1003ms
|
|
4671
|
+
* // tick after 1001ms
|
|
4672
|
+
* // tick after 1002ms
|
|
4673
|
+
* // tick after 1002ms
|
|
4674
|
+
* // { _id: 'Chunk', values: [ undefined, undefined, undefined, undefined, undefined ] }
|
|
4675
|
+
*
|
|
3734
4676
|
* @since 2.0.0
|
|
3735
4677
|
* @category constructors
|
|
3736
4678
|
*/
|
|
@@ -3820,6 +4762,32 @@ export const toPubSub: {
|
|
|
3820
4762
|
* finished, or with Some error if it fails, otherwise it returns a chunk of
|
|
3821
4763
|
* the stream's output.
|
|
3822
4764
|
*
|
|
4765
|
+
* @example
|
|
4766
|
+
* import { Effect, Stream } from "effect"
|
|
4767
|
+
*
|
|
4768
|
+
* // Simulate a chunked stream
|
|
4769
|
+
* const stream = Stream.fromIterable([1, 2, 3, 4, 5]).pipe(Stream.rechunk(2))
|
|
4770
|
+
*
|
|
4771
|
+
* const program = Effect.gen(function*() {
|
|
4772
|
+
* // Create an effect to get data chunks from the stream
|
|
4773
|
+
* const getChunk = yield* Stream.toPull(stream)
|
|
4774
|
+
*
|
|
4775
|
+
* // Continuously fetch and process chunks
|
|
4776
|
+
* while (true) {
|
|
4777
|
+
* const chunk = yield* getChunk
|
|
4778
|
+
* console.log(chunk)
|
|
4779
|
+
* }
|
|
4780
|
+
* })
|
|
4781
|
+
*
|
|
4782
|
+
* // Effect.runPromise(Effect.scoped(program)).then(console.log, console.error)
|
|
4783
|
+
* // { _id: 'Chunk', values: [ 1, 2 ] }
|
|
4784
|
+
* // { _id: 'Chunk', values: [ 3, 4 ] }
|
|
4785
|
+
* // { _id: 'Chunk', values: [ 5 ] }
|
|
4786
|
+
* // (FiberFailure) Error: {
|
|
4787
|
+
* // "_id": "Option",
|
|
4788
|
+
* // "_tag": "None"
|
|
4789
|
+
* // }
|
|
4790
|
+
*
|
|
3823
4791
|
* @since 2.0.0
|
|
3824
4792
|
* @category destructors
|
|
3825
4793
|
*/
|
|
@@ -3947,6 +4915,14 @@ export const transduce: {
|
|
|
3947
4915
|
/**
|
|
3948
4916
|
* Creates a stream by peeling off the "layers" of a value of type `S`.
|
|
3949
4917
|
*
|
|
4918
|
+
* @example
|
|
4919
|
+
* import { Effect, Option, Stream } from "effect"
|
|
4920
|
+
*
|
|
4921
|
+
* const stream = Stream.unfold(1, (n) => Option.some([n, n + 1]))
|
|
4922
|
+
*
|
|
4923
|
+
* // Effect.runPromise(Stream.runCollect(stream.pipe(Stream.take(5)))).then(console.log)
|
|
4924
|
+
* // { _id: 'Chunk', values: [ 1, 2, 3, 4, 5 ] }
|
|
4925
|
+
*
|
|
3950
4926
|
* @since 2.0.0
|
|
3951
4927
|
* @category constructors
|
|
3952
4928
|
*/
|
|
@@ -3979,6 +4955,17 @@ export const unfoldChunkEffect: <S, A, E, R>(
|
|
|
3979
4955
|
* Creates a stream by effectfully peeling off the "layers" of a value of type
|
|
3980
4956
|
* `S`.
|
|
3981
4957
|
*
|
|
4958
|
+
* @example
|
|
4959
|
+
* import { Effect, Option, Random, Stream } from "effect"
|
|
4960
|
+
*
|
|
4961
|
+
* const stream = Stream.unfoldEffect(1, (n) =>
|
|
4962
|
+
* Random.nextBoolean.pipe(
|
|
4963
|
+
* Effect.map((b) => (b ? Option.some([n, -n]) : Option.some([n, n])))
|
|
4964
|
+
* ))
|
|
4965
|
+
*
|
|
4966
|
+
* // Effect.runPromise(Stream.runCollect(stream.pipe(Stream.take(5)))).then(console.log)
|
|
4967
|
+
* // { _id: 'Chunk', values: [ 1, -1, -1, -1, -1 ] }
|
|
4968
|
+
*
|
|
3982
4969
|
* @since 2.0.0
|
|
3983
4970
|
* @category constructors
|
|
3984
4971
|
*/
|
|
@@ -3992,6 +4979,14 @@ export {
|
|
|
3992
4979
|
/**
|
|
3993
4980
|
* A stream that contains a single `void` value.
|
|
3994
4981
|
*
|
|
4982
|
+
* @example
|
|
4983
|
+
* import { Effect, Stream } from "effect"
|
|
4984
|
+
*
|
|
4985
|
+
* const stream = Stream.void
|
|
4986
|
+
*
|
|
4987
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
4988
|
+
* // { _id: 'Chunk', values: [ undefined ] }
|
|
4989
|
+
*
|
|
3995
4990
|
* @since 2.0.0
|
|
3996
4991
|
* @category constructors
|
|
3997
4992
|
*/
|
|
@@ -4112,6 +5107,18 @@ export const withSpan: {
|
|
|
4112
5107
|
*
|
|
4113
5108
|
* The new stream will end when one of the sides ends.
|
|
4114
5109
|
*
|
|
5110
|
+
* @example
|
|
5111
|
+
* import { Effect, Stream } from "effect"
|
|
5112
|
+
*
|
|
5113
|
+
* // We create two streams and zip them together.
|
|
5114
|
+
* const stream = Stream.zip(
|
|
5115
|
+
* Stream.make(1, 2, 3, 4, 5, 6),
|
|
5116
|
+
* Stream.make("a", "b", "c")
|
|
5117
|
+
* )
|
|
5118
|
+
*
|
|
5119
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
5120
|
+
* // { _id: 'Chunk', values: [ [ 1, 'a' ], [ 2, 'b' ], [ 3, 'c' ] ] }
|
|
5121
|
+
*
|
|
4115
5122
|
* @since 2.0.0
|
|
4116
5123
|
* @category zipping
|
|
4117
5124
|
*/
|
|
@@ -4146,6 +5153,18 @@ export const zipFlatten: {
|
|
|
4146
5153
|
* The defaults `defaultLeft` and `defaultRight` will be used if the streams
|
|
4147
5154
|
* have different lengths and one of the streams has ended before the other.
|
|
4148
5155
|
*
|
|
5156
|
+
* @example
|
|
5157
|
+
* import { Effect, Stream } from "effect"
|
|
5158
|
+
*
|
|
5159
|
+
* const stream = Stream.zipAll(Stream.make(1, 2, 3, 4, 5, 6), {
|
|
5160
|
+
* other: Stream.make("a", "b", "c"),
|
|
5161
|
+
* defaultSelf: 0,
|
|
5162
|
+
* defaultOther: "x"
|
|
5163
|
+
* })
|
|
5164
|
+
*
|
|
5165
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
5166
|
+
* // { _id: "Chunk", values: [ [ 1, "a" ], [ 2, "b" ], [ 3, "c" ], [ 4, "x" ], [ 5, "x" ], [ 6, "x" ] ] }
|
|
5167
|
+
*
|
|
4149
5168
|
* @since 2.0.0
|
|
4150
5169
|
* @category zipping
|
|
4151
5170
|
*/
|
|
@@ -4331,6 +5350,19 @@ export const zipAllSortedByKeyWith: {
|
|
|
4331
5350
|
* The functions `left` and `right` will be used if the streams have different
|
|
4332
5351
|
* lengths and one of the streams has ended before the other.
|
|
4333
5352
|
*
|
|
5353
|
+
* @example
|
|
5354
|
+
* import { Effect, Stream } from "effect"
|
|
5355
|
+
*
|
|
5356
|
+
* const stream = Stream.zipAllWith(Stream.make(1, 2, 3, 4, 5, 6), {
|
|
5357
|
+
* other: Stream.make("a", "b", "c"),
|
|
5358
|
+
* onSelf: (n) => [n, "x"],
|
|
5359
|
+
* onOther: (s) => [0, s],
|
|
5360
|
+
* onBoth: (n, s) => [n - s.length, s]
|
|
5361
|
+
* })
|
|
5362
|
+
*
|
|
5363
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
5364
|
+
* // { _id: "Chunk", values: [ [ 0, "a" ], [ 1, "b" ], [ 2, "c" ], [ 4, "x" ], [ 5, "x" ], [ 6, "x" ] ] }
|
|
5365
|
+
*
|
|
4334
5366
|
* @since 2.0.0
|
|
4335
5367
|
* @category zipping
|
|
4336
5368
|
*/
|
|
@@ -4363,6 +5395,22 @@ export const zipAllWith: {
|
|
|
4363
5395
|
* that emitted elements that are not the last value in chunks will never be
|
|
4364
5396
|
* used for zipping.
|
|
4365
5397
|
*
|
|
5398
|
+
* @example
|
|
5399
|
+
* import { Effect, Schedule, Stream } from "effect"
|
|
5400
|
+
*
|
|
5401
|
+
* const s1 = Stream.make(1, 2, 3).pipe(
|
|
5402
|
+
* Stream.schedule(Schedule.spaced("1 second"))
|
|
5403
|
+
* )
|
|
5404
|
+
*
|
|
5405
|
+
* const s2 = Stream.make("a", "b", "c", "d").pipe(
|
|
5406
|
+
* Stream.schedule(Schedule.spaced("500 millis"))
|
|
5407
|
+
* )
|
|
5408
|
+
*
|
|
5409
|
+
* const stream = Stream.zipLatest(s1, s2)
|
|
5410
|
+
*
|
|
5411
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
5412
|
+
* // { _id: "Chunk", values: [ [ 1, "a" ], [ 1, "b" ], [ 2, "b" ], [ 2, "c" ], [ 2, "d" ], [ 3, "d" ] ] }
|
|
5413
|
+
*
|
|
4366
5414
|
* @since 2.0.0
|
|
4367
5415
|
* @category zipping
|
|
4368
5416
|
*/
|
|
@@ -4388,7 +5436,7 @@ export const zipLatest: {
|
|
|
4388
5436
|
* Stream.fromSchedule(Schedule.spaced('4 millis')),
|
|
4389
5437
|
* ).pipe(Stream.take(6), Stream.tap(Console.log))
|
|
4390
5438
|
*
|
|
4391
|
-
* Effect.runPromise(Stream.runDrain(stream))
|
|
5439
|
+
* // Effect.runPromise(Stream.runDrain(stream))
|
|
4392
5440
|
* // Output:
|
|
4393
5441
|
* // [ 0, 0, 0 ]
|
|
4394
5442
|
* // [ 1, 0, 0 ]
|
|
@@ -4468,6 +5516,19 @@ export const zipRight: {
|
|
|
4468
5516
|
*
|
|
4469
5517
|
* The new stream will end when one of the sides ends.
|
|
4470
5518
|
*
|
|
5519
|
+
* @example
|
|
5520
|
+
* import { Effect, Stream } from "effect"
|
|
5521
|
+
*
|
|
5522
|
+
* // We create two streams and zip them with custom logic.
|
|
5523
|
+
* const stream = Stream.zipWith(
|
|
5524
|
+
* Stream.make(1, 2, 3, 4, 5, 6),
|
|
5525
|
+
* Stream.make("a", "b", "c"),
|
|
5526
|
+
* (n, s) => [n - s.length, s]
|
|
5527
|
+
* )
|
|
5528
|
+
*
|
|
5529
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then(console.log)
|
|
5530
|
+
* // { _id: 'Chunk', values: [ [ 0, 'a' ], [ 1, 'b' ], [ 2, 'c' ] ] }
|
|
5531
|
+
*
|
|
4471
5532
|
* @since 2.0.0
|
|
4472
5533
|
* @category zipping
|
|
4473
5534
|
*/
|
|
@@ -4513,6 +5574,19 @@ export const zipWithChunks: {
|
|
|
4513
5574
|
/**
|
|
4514
5575
|
* Zips each element with the next element if present.
|
|
4515
5576
|
*
|
|
5577
|
+
* @example
|
|
5578
|
+
* import { Chunk, Effect, Stream } from "effect"
|
|
5579
|
+
*
|
|
5580
|
+
* const stream = Stream.zipWithNext(Stream.make(1, 2, 3, 4))
|
|
5581
|
+
*
|
|
5582
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then((chunk) => console.log(Chunk.toArray(chunk)))
|
|
5583
|
+
* // [
|
|
5584
|
+
* // [ 1, { _id: 'Option', _tag: 'Some', value: 2 } ],
|
|
5585
|
+
* // [ 2, { _id: 'Option', _tag: 'Some', value: 3 } ],
|
|
5586
|
+
* // [ 3, { _id: 'Option', _tag: 'Some', value: 4 } ],
|
|
5587
|
+
* // [ 4, { _id: 'Option', _tag: 'None' } ]
|
|
5588
|
+
* // ]
|
|
5589
|
+
*
|
|
4516
5590
|
* @since 2.0.0
|
|
4517
5591
|
* @category zipping
|
|
4518
5592
|
*/
|
|
@@ -4522,6 +5596,19 @@ export const zipWithNext: <A, E, R>(self: Stream<A, E, R>) => Stream<[A, Option.
|
|
|
4522
5596
|
* Zips each element with the previous element. Initially accompanied by
|
|
4523
5597
|
* `None`.
|
|
4524
5598
|
*
|
|
5599
|
+
* @example
|
|
5600
|
+
* import { Chunk, Effect, Stream } from "effect"
|
|
5601
|
+
*
|
|
5602
|
+
* const stream = Stream.zipWithPrevious(Stream.make(1, 2, 3, 4))
|
|
5603
|
+
*
|
|
5604
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then((chunk) => console.log(Chunk.toArray(chunk)))
|
|
5605
|
+
* // [
|
|
5606
|
+
* // [ { _id: 'Option', _tag: 'None' }, 1 ],
|
|
5607
|
+
* // [ { _id: 'Option', _tag: 'Some', value: 1 }, 2 ],
|
|
5608
|
+
* // [ { _id: 'Option', _tag: 'Some', value: 2 }, 3 ],
|
|
5609
|
+
* // [ { _id: 'Option', _tag: 'Some', value: 3 }, 4 ]
|
|
5610
|
+
* // ]
|
|
5611
|
+
*
|
|
4525
5612
|
* @since 2.0.0
|
|
4526
5613
|
* @category zipping
|
|
4527
5614
|
*/
|
|
@@ -4531,6 +5618,35 @@ export const zipWithPrevious: <A, E, R>(self: Stream<A, E, R>) => Stream<[Option
|
|
|
4531
5618
|
/**
|
|
4532
5619
|
* Zips each element with both the previous and next element.
|
|
4533
5620
|
*
|
|
5621
|
+
* @example
|
|
5622
|
+
* import { Chunk, Effect, Stream } from "effect"
|
|
5623
|
+
*
|
|
5624
|
+
* const stream = Stream.zipWithPreviousAndNext(Stream.make(1, 2, 3, 4))
|
|
5625
|
+
*
|
|
5626
|
+
* // Effect.runPromise(Stream.runCollect(stream)).then((chunk) => console.log(Chunk.toArray(chunk)))
|
|
5627
|
+
* // [
|
|
5628
|
+
* // [
|
|
5629
|
+
* // { _id: 'Option', _tag: 'None' },
|
|
5630
|
+
* // 1,
|
|
5631
|
+
* // { _id: 'Option', _tag: 'Some', value: 2 }
|
|
5632
|
+
* // ],
|
|
5633
|
+
* // [
|
|
5634
|
+
* // { _id: 'Option', _tag: 'Some', value: 1 },
|
|
5635
|
+
* // 2,
|
|
5636
|
+
* // { _id: 'Option', _tag: 'Some', value: 3 }
|
|
5637
|
+
* // ],
|
|
5638
|
+
* // [
|
|
5639
|
+
* // { _id: 'Option', _tag: 'Some', value: 2 },
|
|
5640
|
+
* // 3,
|
|
5641
|
+
* // { _id: 'Option', _tag: 'Some', value: 4 }
|
|
5642
|
+
* // ],
|
|
5643
|
+
* // [
|
|
5644
|
+
* // { _id: 'Option', _tag: 'Some', value: 3 },
|
|
5645
|
+
* // 4,
|
|
5646
|
+
* // { _id: 'Option', _tag: 'None' }
|
|
5647
|
+
* // ]
|
|
5648
|
+
* // ]
|
|
5649
|
+
*
|
|
4534
5650
|
* @since 2.0.0
|
|
4535
5651
|
* @category zipping
|
|
4536
5652
|
*/
|
|
@@ -4541,6 +5657,19 @@ export const zipWithPreviousAndNext: <A, E, R>(
|
|
|
4541
5657
|
/**
|
|
4542
5658
|
* Zips this stream together with the index of elements.
|
|
4543
5659
|
*
|
|
5660
|
+
* @example
|
|
5661
|
+
* import { Effect, Stream } from "effect"
|
|
5662
|
+
*
|
|
5663
|
+
* const stream = Stream.make("Mary", "James", "Robert", "Patricia")
|
|
5664
|
+
*
|
|
5665
|
+
* const indexedStream = Stream.zipWithIndex(stream)
|
|
5666
|
+
*
|
|
5667
|
+
* // Effect.runPromise(Stream.runCollect(indexedStream)).then(console.log)
|
|
5668
|
+
* // {
|
|
5669
|
+
* // _id: 'Chunk',
|
|
5670
|
+
* // values: [ [ 'Mary', 0 ], [ 'James', 1 ], [ 'Robert', 2 ], [ 'Patricia', 3 ] ]
|
|
5671
|
+
* // }
|
|
5672
|
+
*
|
|
4544
5673
|
* @since 2.0.0
|
|
4545
5674
|
* @category zipping
|
|
4546
5675
|
*/
|