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
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type * as Cause from "../Cause.js"
|
|
2
|
+
import * as Context from "../Context.js"
|
|
3
|
+
import type * as Deferred from "../Deferred.js"
|
|
4
|
+
import * as Duration from "../Duration.js"
|
|
5
|
+
import type { Effect } from "../Effect.js"
|
|
6
|
+
import type { RuntimeFiber } from "../Fiber.js"
|
|
7
|
+
import { dual, identity } from "../Function.js"
|
|
8
|
+
import * as MutableHashMap from "../MutableHashMap.js"
|
|
9
|
+
import { pipeArguments } from "../Pipeable.js"
|
|
10
|
+
import type * as RcMap from "../RcMap.js"
|
|
11
|
+
import type * as Scope from "../Scope.js"
|
|
12
|
+
import * as coreEffect from "./core-effect.js"
|
|
13
|
+
import * as core from "./core.js"
|
|
14
|
+
import * as circular from "./effect/circular.js"
|
|
15
|
+
import * as fiberRuntime from "./fiberRuntime.js"
|
|
16
|
+
|
|
17
|
+
/** @internal */
|
|
18
|
+
export const TypeId: RcMap.TypeId = Symbol.for("effect/RcMap") as RcMap.TypeId
|
|
19
|
+
|
|
20
|
+
type State<K, A, E> = State.Open<K, A, E> | State.Closed
|
|
21
|
+
|
|
22
|
+
declare namespace State {
|
|
23
|
+
interface Open<K, A, E> {
|
|
24
|
+
readonly _tag: "Open"
|
|
25
|
+
readonly map: MutableHashMap.MutableHashMap<K, Entry<A, E>>
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface Closed {
|
|
29
|
+
readonly _tag: "Closed"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface Entry<A, E> {
|
|
33
|
+
readonly deferred: Deferred.Deferred<A, E>
|
|
34
|
+
readonly scope: Scope.CloseableScope
|
|
35
|
+
fiber: RuntimeFiber<void, never> | undefined
|
|
36
|
+
refCount: number
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const variance: RcMap.RcMap.Variance<any, any, any> = {
|
|
41
|
+
_K: identity,
|
|
42
|
+
_A: identity,
|
|
43
|
+
_E: identity
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
class RcMapImpl<K, A, E> implements RcMap.RcMap<K, A, E> {
|
|
47
|
+
readonly [TypeId]: RcMap.RcMap.Variance<K, A, E>
|
|
48
|
+
|
|
49
|
+
state: State<K, A, E> = {
|
|
50
|
+
_tag: "Open",
|
|
51
|
+
map: MutableHashMap.empty()
|
|
52
|
+
}
|
|
53
|
+
readonly semaphore = circular.unsafeMakeSemaphore(1)
|
|
54
|
+
|
|
55
|
+
constructor(
|
|
56
|
+
readonly lookup: (key: K) => Effect<A, E, Scope.Scope>,
|
|
57
|
+
readonly context: Context.Context<never>,
|
|
58
|
+
readonly scope: Scope.Scope,
|
|
59
|
+
readonly idleTimeToLive: Duration.Duration | undefined,
|
|
60
|
+
readonly capacity: number
|
|
61
|
+
) {
|
|
62
|
+
this[TypeId] = variance
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
pipe() {
|
|
66
|
+
return pipeArguments(this, arguments)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** @internal */
|
|
71
|
+
export const make: {
|
|
72
|
+
<K, A, E, R>(options: {
|
|
73
|
+
readonly lookup: (key: K) => Effect<A, E, R>
|
|
74
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
75
|
+
readonly capacity?: undefined
|
|
76
|
+
}): Effect<RcMap.RcMap<K, A, E>, never, Scope.Scope | R>
|
|
77
|
+
<K, A, E, R>(options: {
|
|
78
|
+
readonly lookup: (key: K) => Effect<A, E, R>
|
|
79
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
80
|
+
readonly capacity: number
|
|
81
|
+
}): Effect<RcMap.RcMap<K, A, E | Cause.ExceededCapacityException>, never, Scope.Scope | R>
|
|
82
|
+
} = <K, A, E, R>(options: {
|
|
83
|
+
readonly lookup: (key: K) => Effect<A, E, R>
|
|
84
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
85
|
+
readonly capacity?: number | undefined
|
|
86
|
+
}) =>
|
|
87
|
+
core.withFiberRuntime<RcMap.RcMap<K, A, E>, never, R | Scope.Scope>((fiber) => {
|
|
88
|
+
const context = fiber.getFiberRef(core.currentContext) as Context.Context<R | Scope.Scope>
|
|
89
|
+
const scope = Context.get(context, fiberRuntime.scopeTag)
|
|
90
|
+
const self = new RcMapImpl<K, A, E>(
|
|
91
|
+
options.lookup as any,
|
|
92
|
+
context,
|
|
93
|
+
scope,
|
|
94
|
+
options.idleTimeToLive ? Duration.decode(options.idleTimeToLive) : undefined,
|
|
95
|
+
Math.max(options.capacity ?? Number.POSITIVE_INFINITY, 0)
|
|
96
|
+
)
|
|
97
|
+
return core.as(
|
|
98
|
+
scope.addFinalizer(() =>
|
|
99
|
+
core.suspend(() => {
|
|
100
|
+
if (self.state._tag === "Closed") {
|
|
101
|
+
return core.void
|
|
102
|
+
}
|
|
103
|
+
const map = self.state.map
|
|
104
|
+
self.state = { _tag: "Closed" }
|
|
105
|
+
return core.forEachSequentialDiscard(
|
|
106
|
+
map,
|
|
107
|
+
([, entry]) => core.scopeClose(entry.scope, core.exitVoid)
|
|
108
|
+
).pipe(
|
|
109
|
+
core.tap(() => {
|
|
110
|
+
MutableHashMap.clear(map)
|
|
111
|
+
}),
|
|
112
|
+
self.semaphore.withPermits(1)
|
|
113
|
+
)
|
|
114
|
+
})
|
|
115
|
+
),
|
|
116
|
+
self
|
|
117
|
+
)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
/** @internal */
|
|
121
|
+
export const get: {
|
|
122
|
+
<K>(key: K): <A, E>(self: RcMap.RcMap<K, A, E>) => Effect<A, E, Scope.Scope>
|
|
123
|
+
<K, A, E>(self: RcMap.RcMap<K, A, E>, key: K): Effect<A, E, Scope.Scope>
|
|
124
|
+
} = dual(
|
|
125
|
+
2,
|
|
126
|
+
<K, A, E>(self_: RcMap.RcMap<K, A, E>, key: K): Effect<A, E, Scope.Scope> => {
|
|
127
|
+
const self = self_ as RcMapImpl<K, A, E>
|
|
128
|
+
return core.uninterruptibleMask((restore) =>
|
|
129
|
+
core.suspend(() => {
|
|
130
|
+
if (self.state._tag === "Closed") {
|
|
131
|
+
return core.interrupt
|
|
132
|
+
}
|
|
133
|
+
const state = self.state
|
|
134
|
+
const o = MutableHashMap.get(state.map, key)
|
|
135
|
+
if (o._tag === "Some") {
|
|
136
|
+
const entry = o.value
|
|
137
|
+
entry.refCount++
|
|
138
|
+
return entry.fiber
|
|
139
|
+
? core.as(core.interruptFiber(entry.fiber), entry)
|
|
140
|
+
: core.succeed(entry)
|
|
141
|
+
} else if (Number.isFinite(self.capacity) && MutableHashMap.size(self.state.map) >= self.capacity) {
|
|
142
|
+
return core.fail(
|
|
143
|
+
new core.ExceededCapacityException(`RcMap attempted to exceed capacity of ${self.capacity}`)
|
|
144
|
+
) as Effect<never>
|
|
145
|
+
}
|
|
146
|
+
const acquire = self.lookup(key)
|
|
147
|
+
return fiberRuntime.scopeMake().pipe(
|
|
148
|
+
coreEffect.bindTo("scope"),
|
|
149
|
+
coreEffect.bind("deferred", () => core.deferredMake<A, E>()),
|
|
150
|
+
core.tap(({ deferred, scope }) =>
|
|
151
|
+
restore(core.fiberRefLocally(
|
|
152
|
+
acquire as Effect<A, E>,
|
|
153
|
+
core.currentContext,
|
|
154
|
+
Context.add(self.context, fiberRuntime.scopeTag, scope)
|
|
155
|
+
)).pipe(
|
|
156
|
+
core.exit,
|
|
157
|
+
core.flatMap((exit) => core.deferredDone(deferred, exit)),
|
|
158
|
+
circular.forkIn(scope)
|
|
159
|
+
)
|
|
160
|
+
),
|
|
161
|
+
core.map(({ deferred, scope }) => {
|
|
162
|
+
const entry: State.Entry<A, E> = {
|
|
163
|
+
deferred,
|
|
164
|
+
scope,
|
|
165
|
+
fiber: undefined,
|
|
166
|
+
refCount: 1
|
|
167
|
+
}
|
|
168
|
+
MutableHashMap.set(state.map, key, entry)
|
|
169
|
+
return entry
|
|
170
|
+
})
|
|
171
|
+
)
|
|
172
|
+
}).pipe(
|
|
173
|
+
self.semaphore.withPermits(1),
|
|
174
|
+
coreEffect.bindTo("entry"),
|
|
175
|
+
coreEffect.bind("scope", () => fiberRuntime.scopeTag),
|
|
176
|
+
core.tap(({ entry, scope }) =>
|
|
177
|
+
scope.addFinalizer(() =>
|
|
178
|
+
core.suspend(() => {
|
|
179
|
+
entry.refCount--
|
|
180
|
+
if (entry.refCount > 0) {
|
|
181
|
+
return core.void
|
|
182
|
+
} else if (self.idleTimeToLive === undefined) {
|
|
183
|
+
if (self.state._tag === "Open") {
|
|
184
|
+
MutableHashMap.remove(self.state.map, key)
|
|
185
|
+
}
|
|
186
|
+
return core.scopeClose(entry.scope, core.exitVoid)
|
|
187
|
+
}
|
|
188
|
+
return coreEffect.sleep(self.idleTimeToLive).pipe(
|
|
189
|
+
core.interruptible,
|
|
190
|
+
core.zipRight(core.suspend(() => {
|
|
191
|
+
if (self.state._tag === "Open" && entry.refCount === 0) {
|
|
192
|
+
MutableHashMap.remove(self.state.map, key)
|
|
193
|
+
return core.scopeClose(entry.scope, core.exitVoid)
|
|
194
|
+
}
|
|
195
|
+
return core.void
|
|
196
|
+
})),
|
|
197
|
+
fiberRuntime.ensuring(core.sync(() => {
|
|
198
|
+
entry.fiber = undefined
|
|
199
|
+
})),
|
|
200
|
+
circular.forkIn(self.scope),
|
|
201
|
+
core.tap((fiber) => {
|
|
202
|
+
entry.fiber = fiber
|
|
203
|
+
}),
|
|
204
|
+
self.semaphore.withPermits(1)
|
|
205
|
+
)
|
|
206
|
+
})
|
|
207
|
+
)
|
|
208
|
+
),
|
|
209
|
+
core.flatMap(({ entry }) => restore(core.deferredAwait(entry.deferred)))
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
}
|
|
213
|
+
)
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import * as Context from "../Context.js"
|
|
2
|
+
import * as Duration from "../Duration.js"
|
|
3
|
+
import type { Effect } from "../Effect.js"
|
|
4
|
+
import type { RuntimeFiber } from "../Fiber.js"
|
|
5
|
+
import { identity } from "../Function.js"
|
|
6
|
+
import { pipeArguments } from "../Pipeable.js"
|
|
7
|
+
import type * as RcRef from "../RcRef.js"
|
|
8
|
+
import type * as Scope from "../Scope.js"
|
|
9
|
+
import * as coreEffect from "./core-effect.js"
|
|
10
|
+
import * as core from "./core.js"
|
|
11
|
+
import * as circular from "./effect/circular.js"
|
|
12
|
+
import * as fiberRuntime from "./fiberRuntime.js"
|
|
13
|
+
|
|
14
|
+
/** @internal */
|
|
15
|
+
export const TypeId: RcRef.TypeId = Symbol.for("effect/RcRef") as RcRef.TypeId
|
|
16
|
+
|
|
17
|
+
type State<A> = State.Empty | State.Acquired<A> | State.Closed
|
|
18
|
+
|
|
19
|
+
declare namespace State {
|
|
20
|
+
interface Empty {
|
|
21
|
+
readonly _tag: "Empty"
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface Acquired<A> {
|
|
25
|
+
readonly _tag: "Acquired"
|
|
26
|
+
readonly value: A
|
|
27
|
+
readonly scope: Scope.CloseableScope
|
|
28
|
+
fiber: RuntimeFiber<void, never> | undefined
|
|
29
|
+
refCount: number
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface Closed {
|
|
33
|
+
readonly _tag: "Closed"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const stateEmpty: State<never> = { _tag: "Empty" }
|
|
38
|
+
const stateClosed: State<never> = { _tag: "Closed" }
|
|
39
|
+
|
|
40
|
+
const variance: RcRef.RcRef.Variance<any, any> = {
|
|
41
|
+
_A: identity,
|
|
42
|
+
_E: identity
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
class RcRefImpl<A, E> implements RcRef.RcRef<A, E> {
|
|
46
|
+
readonly [TypeId]: RcRef.RcRef.Variance<A, E>
|
|
47
|
+
|
|
48
|
+
state: State<A> = stateEmpty
|
|
49
|
+
readonly semaphore = circular.unsafeMakeSemaphore(1)
|
|
50
|
+
|
|
51
|
+
constructor(
|
|
52
|
+
readonly acquire: Effect<A, E, Scope.Scope>,
|
|
53
|
+
readonly context: Context.Context<never>,
|
|
54
|
+
readonly scope: Scope.Scope,
|
|
55
|
+
readonly idleTimeToLive: Duration.Duration | undefined
|
|
56
|
+
) {
|
|
57
|
+
this[TypeId] = variance
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
pipe() {
|
|
61
|
+
return pipeArguments(this, arguments)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** @internal */
|
|
66
|
+
export const make = <A, E, R>(options: {
|
|
67
|
+
readonly acquire: Effect<A, E, R>
|
|
68
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
69
|
+
}) =>
|
|
70
|
+
core.withFiberRuntime<RcRef.RcRef<A, E>, never, R | Scope.Scope>((fiber) => {
|
|
71
|
+
const context = fiber.getFiberRef(core.currentContext) as Context.Context<R | Scope.Scope>
|
|
72
|
+
const scope = Context.get(context, fiberRuntime.scopeTag)
|
|
73
|
+
const ref = new RcRefImpl<A, E>(
|
|
74
|
+
options.acquire as Effect<A, E, Scope.Scope>,
|
|
75
|
+
context,
|
|
76
|
+
scope,
|
|
77
|
+
options.idleTimeToLive ? Duration.decode(options.idleTimeToLive) : undefined
|
|
78
|
+
)
|
|
79
|
+
return core.as(
|
|
80
|
+
scope.addFinalizer(() =>
|
|
81
|
+
ref.semaphore.withPermits(1)(core.suspend(() => {
|
|
82
|
+
const close = ref.state._tag === "Acquired"
|
|
83
|
+
? core.scopeClose(ref.state.scope, core.exitVoid)
|
|
84
|
+
: core.void
|
|
85
|
+
ref.state = stateClosed
|
|
86
|
+
return close
|
|
87
|
+
}))
|
|
88
|
+
),
|
|
89
|
+
ref
|
|
90
|
+
)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
/** @internal */
|
|
94
|
+
export const get = <A, E>(
|
|
95
|
+
self_: RcRef.RcRef<A, E>
|
|
96
|
+
): Effect<A, E, Scope.Scope> => {
|
|
97
|
+
const self = self_ as RcRefImpl<A, E>
|
|
98
|
+
return core.uninterruptibleMask((restore) =>
|
|
99
|
+
core.suspend(() => {
|
|
100
|
+
switch (self.state._tag) {
|
|
101
|
+
case "Closed": {
|
|
102
|
+
return core.interrupt
|
|
103
|
+
}
|
|
104
|
+
case "Acquired": {
|
|
105
|
+
self.state.refCount++
|
|
106
|
+
return self.state.fiber
|
|
107
|
+
? core.as(core.interruptFiber(self.state.fiber), self.state)
|
|
108
|
+
: core.succeed(self.state)
|
|
109
|
+
}
|
|
110
|
+
case "Empty": {
|
|
111
|
+
return fiberRuntime.scopeMake().pipe(
|
|
112
|
+
coreEffect.bindTo("scope"),
|
|
113
|
+
coreEffect.bind("value", ({ scope }) =>
|
|
114
|
+
restore(core.fiberRefLocally(
|
|
115
|
+
self.acquire as Effect<A, E>,
|
|
116
|
+
core.currentContext,
|
|
117
|
+
Context.add(self.context, fiberRuntime.scopeTag, scope)
|
|
118
|
+
))),
|
|
119
|
+
core.map(({ scope, value }) => {
|
|
120
|
+
const state: State.Acquired<A> = {
|
|
121
|
+
_tag: "Acquired",
|
|
122
|
+
value,
|
|
123
|
+
scope,
|
|
124
|
+
fiber: undefined,
|
|
125
|
+
refCount: 1
|
|
126
|
+
}
|
|
127
|
+
self.state = state
|
|
128
|
+
return state
|
|
129
|
+
})
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
).pipe(
|
|
135
|
+
self.semaphore.withPermits(1),
|
|
136
|
+
coreEffect.bindTo("state"),
|
|
137
|
+
coreEffect.bind("scope", () => fiberRuntime.scopeTag),
|
|
138
|
+
core.tap(({ scope, state }) =>
|
|
139
|
+
scope.addFinalizer(() =>
|
|
140
|
+
core.suspend(() => {
|
|
141
|
+
state.refCount--
|
|
142
|
+
if (state.refCount > 0) {
|
|
143
|
+
return core.void
|
|
144
|
+
}
|
|
145
|
+
if (self.idleTimeToLive === undefined) {
|
|
146
|
+
self.state = stateEmpty
|
|
147
|
+
return core.scopeClose(state.scope, core.exitVoid)
|
|
148
|
+
}
|
|
149
|
+
return coreEffect.sleep(self.idleTimeToLive).pipe(
|
|
150
|
+
core.interruptible,
|
|
151
|
+
core.zipRight(core.suspend(() => {
|
|
152
|
+
if (self.state._tag === "Acquired" && self.state.refCount === 0) {
|
|
153
|
+
self.state = stateEmpty
|
|
154
|
+
return core.scopeClose(state.scope, core.exitVoid)
|
|
155
|
+
}
|
|
156
|
+
return core.void
|
|
157
|
+
})),
|
|
158
|
+
fiberRuntime.ensuring(core.sync(() => {
|
|
159
|
+
state.fiber = undefined
|
|
160
|
+
})),
|
|
161
|
+
circular.forkIn(self.scope),
|
|
162
|
+
core.tap((fiber) => {
|
|
163
|
+
state.fiber = fiber
|
|
164
|
+
}),
|
|
165
|
+
self.semaphore.withPermits(1)
|
|
166
|
+
)
|
|
167
|
+
})
|
|
168
|
+
)
|
|
169
|
+
),
|
|
170
|
+
core.map(({ state }) => state.value)
|
|
171
|
+
)
|
|
172
|
+
}
|