@clayroach/effect 3.19.14-source-capture.8 → 3.19.14-source-trace.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SourceLocation/package.json +6 -0
- package/dist/cjs/Effect.js +2 -28
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/FiberRef.js +12 -1
- package/dist/cjs/FiberRef.js.map +1 -1
- package/dist/cjs/Layer.js +2 -24
- package/dist/cjs/Layer.js.map +1 -1
- package/dist/cjs/RuntimeFlags.js +1 -29
- package/dist/cjs/RuntimeFlags.js.map +1 -1
- package/dist/cjs/SourceLocation.js +60 -0
- package/dist/cjs/SourceLocation.js.map +1 -0
- package/dist/cjs/Tracer.js +1 -15
- package/dist/cjs/Tracer.js.map +1 -1
- package/dist/cjs/Utils.js +1 -1
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/clock.js +1 -1
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/cjs/internal/core.js +17 -50
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +18 -30
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +16 -65
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/layer/circular.js +1 -5
- package/dist/cjs/internal/layer/circular.js.map +1 -1
- package/dist/cjs/internal/layer.js +1 -3
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/logger.js +25 -2
- package/dist/cjs/internal/logger.js.map +1 -1
- package/dist/cjs/internal/runtimeFlags.js +2 -11
- package/dist/cjs/internal/runtimeFlags.js.map +1 -1
- package/dist/cjs/internal/tracer.js +1 -114
- package/dist/cjs/internal/tracer.js.map +1 -1
- package/dist/dts/Config.d.ts +2 -2
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +8 -29
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/FiberRef.d.ts +12 -0
- package/dist/dts/FiberRef.d.ts.map +1 -1
- package/dist/dts/Layer.d.ts +0 -22
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/RuntimeFlags.d.ts +0 -28
- package/dist/dts/RuntimeFlags.d.ts.map +1 -1
- package/dist/dts/SourceLocation.d.ts +88 -0
- package/dist/dts/SourceLocation.d.ts.map +1 -0
- package/dist/dts/Tracer.d.ts +0 -15
- package/dist/dts/Tracer.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/layer.d.ts.map +1 -1
- package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
- package/dist/esm/Effect.js +0 -26
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/FiberRef.js +11 -0
- package/dist/esm/FiberRef.js.map +1 -1
- package/dist/esm/Layer.js +0 -22
- package/dist/esm/Layer.js.map +1 -1
- package/dist/esm/RuntimeFlags.js +0 -28
- package/dist/esm/RuntimeFlags.js.map +1 -1
- package/dist/esm/SourceLocation.js +51 -0
- package/dist/esm/SourceLocation.js.map +1 -0
- package/dist/esm/Tracer.js +0 -14
- package/dist/esm/Tracer.js.map +1 -1
- package/dist/esm/Utils.js +1 -1
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/clock.js +1 -1
- package/dist/esm/internal/clock.js.map +1 -1
- package/dist/esm/internal/core.js +12 -45
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +18 -30
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +13 -60
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/layer/circular.js +0 -4
- package/dist/esm/internal/layer/circular.js.map +1 -1
- package/dist/esm/internal/layer.js +0 -2
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/logger.js +25 -2
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/runtimeFlags.js +1 -9
- package/dist/esm/internal/runtimeFlags.js.map +1 -1
- package/dist/esm/internal/tracer.js +0 -111
- package/dist/esm/internal/tracer.js.map +1 -1
- package/package.json +12 -1
- package/src/Arbitrary.ts +1101 -0
- package/src/Array.ts +3589 -0
- package/src/BigDecimal.ts +1349 -0
- package/src/BigInt.ts +643 -0
- package/src/Boolean.ts +287 -0
- package/src/Brand.ts +360 -0
- package/src/Cache.ts +281 -0
- package/src/Cause.ts +1555 -0
- package/src/Channel.ts +2355 -0
- package/src/ChildExecutorDecision.ts +146 -0
- package/src/Chunk.ts +1495 -0
- package/src/Clock.ts +111 -0
- package/src/Config.ts +542 -0
- package/src/ConfigError.ts +270 -0
- package/src/ConfigProvider.ts +333 -0
- package/src/ConfigProviderPathPatch.ts +100 -0
- package/src/Console.ts +226 -0
- package/src/Context.ts +585 -0
- package/src/Cron.ts +706 -0
- package/src/Data.ts +596 -0
- package/src/DateTime.ts +1686 -0
- package/src/DefaultServices.ts +34 -0
- package/src/Deferred.ts +301 -0
- package/src/Differ.ts +450 -0
- package/src/Duration.ts +1000 -0
- package/src/Effect.ts +14817 -0
- package/src/Effectable.ts +107 -0
- package/src/Either.ts +1040 -0
- package/src/Encoding.ts +195 -0
- package/src/Equal.ts +98 -0
- package/src/Equivalence.ts +235 -0
- package/src/ExecutionPlan.ts +308 -0
- package/src/ExecutionStrategy.ts +119 -0
- package/src/Exit.ts +467 -0
- package/src/FastCheck.ts +9 -0
- package/src/Fiber.ts +744 -0
- package/src/FiberHandle.ts +540 -0
- package/src/FiberId.ts +195 -0
- package/src/FiberMap.ts +656 -0
- package/src/FiberRef.ts +444 -0
- package/src/FiberRefs.ts +204 -0
- package/src/FiberRefsPatch.ts +105 -0
- package/src/FiberSet.ts +491 -0
- package/src/FiberStatus.ts +108 -0
- package/src/Function.ts +1222 -0
- package/src/GlobalValue.ts +53 -0
- package/src/Graph.ts +3732 -0
- package/src/GroupBy.ts +103 -0
- package/src/HKT.ts +45 -0
- package/src/Hash.ts +195 -0
- package/src/HashMap.ts +519 -0
- package/src/HashRing.ts +317 -0
- package/src/HashSet.ts +2346 -0
- package/src/Inspectable.ts +287 -0
- package/src/Iterable.ts +1119 -0
- package/src/JSONSchema.ts +1044 -0
- package/src/KeyedPool.ts +167 -0
- package/src/Layer.ts +1228 -0
- package/src/LayerMap.ts +436 -0
- package/src/List.ts +977 -0
- package/src/LogLevel.ts +285 -0
- package/src/LogSpan.ts +25 -0
- package/src/Logger.ts +702 -0
- package/src/Mailbox.ts +268 -0
- package/src/ManagedRuntime.ts +180 -0
- package/src/Match.ts +1477 -0
- package/src/MergeDecision.ts +95 -0
- package/src/MergeState.ts +172 -0
- package/src/MergeStrategy.ts +107 -0
- package/src/Metric.ts +780 -0
- package/src/MetricBoundaries.ts +69 -0
- package/src/MetricHook.ts +151 -0
- package/src/MetricKey.ts +224 -0
- package/src/MetricKeyType.ts +262 -0
- package/src/MetricLabel.ts +47 -0
- package/src/MetricPair.ts +71 -0
- package/src/MetricPolling.ts +148 -0
- package/src/MetricRegistry.ts +48 -0
- package/src/MetricState.ts +257 -0
- package/src/Micro.ts +4405 -0
- package/src/ModuleVersion.ts +18 -0
- package/src/MutableHashMap.ts +411 -0
- package/src/MutableHashSet.ts +706 -0
- package/src/MutableList.ts +297 -0
- package/src/MutableQueue.ts +227 -0
- package/src/MutableRef.ts +202 -0
- package/src/NonEmptyIterable.ts +32 -0
- package/src/Number.ts +1071 -0
- package/src/Option.ts +2170 -0
- package/src/Order.ts +373 -0
- package/src/Ordering.ts +111 -0
- package/src/ParseResult.ts +2031 -0
- package/src/PartitionedSemaphore.ts +200 -0
- package/src/Pipeable.ts +566 -0
- package/src/Pool.ts +204 -0
- package/src/Predicate.ts +1405 -0
- package/src/Pretty.ts +205 -0
- package/src/PrimaryKey.ts +23 -0
- package/src/PubSub.ts +182 -0
- package/src/Queue.ts +644 -0
- package/src/Random.ts +204 -0
- package/src/RateLimiter.ts +138 -0
- package/src/RcMap.ts +141 -0
- package/src/RcRef.ts +122 -0
- package/src/Readable.ts +93 -0
- package/src/Record.ts +1274 -0
- package/src/RedBlackTree.ts +421 -0
- package/src/Redacted.ts +144 -0
- package/src/Ref.ts +180 -0
- package/src/RegExp.ts +38 -0
- package/src/Reloadable.ts +127 -0
- package/src/Request.ts +347 -0
- package/src/RequestBlock.ts +118 -0
- package/src/RequestResolver.ts +366 -0
- package/src/Resource.ts +119 -0
- package/src/Runtime.ts +383 -0
- package/src/RuntimeFlags.ts +336 -0
- package/src/RuntimeFlagsPatch.ts +183 -0
- package/src/STM.ts +2045 -0
- package/src/Schedule.ts +2219 -0
- package/src/ScheduleDecision.ts +62 -0
- package/src/ScheduleInterval.ts +151 -0
- package/src/ScheduleIntervals.ts +122 -0
- package/src/Scheduler.ts +353 -0
- package/src/Schema.ts +10914 -0
- package/src/SchemaAST.ts +3043 -0
- package/src/Scope.ts +204 -0
- package/src/ScopedCache.ts +151 -0
- package/src/ScopedRef.ts +117 -0
- package/src/Secret.ts +88 -0
- package/src/SingleProducerAsyncInput.ts +67 -0
- package/src/Sink.ts +1461 -0
- package/src/SortedMap.ts +287 -0
- package/src/SortedSet.ts +390 -0
- package/src/SourceLocation.ts +108 -0
- package/src/Stream.ts +6468 -0
- package/src/StreamEmit.ts +136 -0
- package/src/StreamHaltStrategy.ts +123 -0
- package/src/Streamable.ts +45 -0
- package/src/String.ts +778 -0
- package/src/Struct.ts +243 -0
- package/src/Subscribable.ts +100 -0
- package/src/SubscriptionRef.ts +298 -0
- package/src/Supervisor.ts +240 -0
- package/src/Symbol.ts +29 -0
- package/src/SynchronizedRef.ts +270 -0
- package/src/TArray.ts +495 -0
- package/src/TDeferred.ts +100 -0
- package/src/TMap.ts +515 -0
- package/src/TPriorityQueue.ts +223 -0
- package/src/TPubSub.ts +200 -0
- package/src/TQueue.ts +432 -0
- package/src/TRandom.ts +129 -0
- package/src/TReentrantLock.ts +224 -0
- package/src/TRef.ts +178 -0
- package/src/TSemaphore.ts +129 -0
- package/src/TSet.ts +365 -0
- package/src/TSubscriptionRef.ts +192 -0
- package/src/Take.ts +258 -0
- package/src/TestAnnotation.ts +158 -0
- package/src/TestAnnotationMap.ts +119 -0
- package/src/TestAnnotations.ts +117 -0
- package/src/TestClock.ts +556 -0
- package/src/TestConfig.ts +47 -0
- package/src/TestContext.ts +36 -0
- package/src/TestLive.ts +53 -0
- package/src/TestServices.ts +390 -0
- package/src/TestSized.ts +55 -0
- package/src/Tracer.ts +182 -0
- package/src/Trie.ts +840 -0
- package/src/Tuple.ts +305 -0
- package/src/Types.ts +353 -0
- package/src/Unify.ts +113 -0
- package/src/UpstreamPullRequest.ts +117 -0
- package/src/UpstreamPullStrategy.ts +121 -0
- package/src/Utils.ts +809 -0
- package/src/index.ts +1568 -0
- package/src/internal/array.ts +8 -0
- package/src/internal/blockedRequests.ts +520 -0
- package/src/internal/cache.ts +733 -0
- package/src/internal/cause.ts +1050 -0
- package/src/internal/channel/channelExecutor.ts +1200 -0
- package/src/internal/channel/channelState.ts +134 -0
- package/src/internal/channel/childExecutorDecision.ts +96 -0
- package/src/internal/channel/continuation.ts +200 -0
- package/src/internal/channel/mergeDecision.ts +113 -0
- package/src/internal/channel/mergeState.ts +120 -0
- package/src/internal/channel/mergeStrategy.ts +72 -0
- package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
- package/src/internal/channel/subexecutor.ts +229 -0
- package/src/internal/channel/upstreamPullRequest.ts +84 -0
- package/src/internal/channel/upstreamPullStrategy.ts +87 -0
- package/src/internal/channel.ts +2603 -0
- package/src/internal/clock.ts +95 -0
- package/src/internal/completedRequestMap.ts +9 -0
- package/src/internal/concurrency.ts +54 -0
- package/src/internal/config.ts +716 -0
- package/src/internal/configError.ts +304 -0
- package/src/internal/configProvider/pathPatch.ts +97 -0
- package/src/internal/configProvider.ts +799 -0
- package/src/internal/console.ts +153 -0
- package/src/internal/context.ts +337 -0
- package/src/internal/core-effect.ts +2293 -0
- package/src/internal/core-stream.ts +998 -0
- package/src/internal/core.ts +3189 -0
- package/src/internal/data.ts +36 -0
- package/src/internal/dataSource.ts +327 -0
- package/src/internal/dateTime.ts +1277 -0
- package/src/internal/defaultServices/console.ts +100 -0
- package/src/internal/defaultServices.ts +163 -0
- package/src/internal/deferred.ts +46 -0
- package/src/internal/differ/chunkPatch.ts +211 -0
- package/src/internal/differ/contextPatch.ts +232 -0
- package/src/internal/differ/hashMapPatch.ts +220 -0
- package/src/internal/differ/hashSetPatch.ts +176 -0
- package/src/internal/differ/orPatch.ts +311 -0
- package/src/internal/differ/readonlyArrayPatch.ts +210 -0
- package/src/internal/differ.ts +200 -0
- package/src/internal/doNotation.ts +80 -0
- package/src/internal/effect/circular.ts +895 -0
- package/src/internal/effectable.ts +131 -0
- package/src/internal/either.ts +110 -0
- package/src/internal/encoding/base64.ts +286 -0
- package/src/internal/encoding/base64Url.ts +29 -0
- package/src/internal/encoding/common.ts +51 -0
- package/src/internal/encoding/hex.ts +315 -0
- package/src/internal/errors.ts +7 -0
- package/src/internal/executionPlan.ts +114 -0
- package/src/internal/executionStrategy.ts +74 -0
- package/src/internal/fiber.ts +388 -0
- package/src/internal/fiberId.ts +267 -0
- package/src/internal/fiberMessage.ts +82 -0
- package/src/internal/fiberRefs/patch.ts +144 -0
- package/src/internal/fiberRefs.ts +297 -0
- package/src/internal/fiberRuntime.ts +3842 -0
- package/src/internal/fiberScope.ts +71 -0
- package/src/internal/fiberStatus.ts +119 -0
- package/src/internal/groupBy.ts +530 -0
- package/src/internal/hashMap/array.ts +49 -0
- package/src/internal/hashMap/bitwise.ts +32 -0
- package/src/internal/hashMap/config.ts +14 -0
- package/src/internal/hashMap/keySet.ts +8 -0
- package/src/internal/hashMap/node.ts +391 -0
- package/src/internal/hashMap.ts +586 -0
- package/src/internal/hashSet.ts +323 -0
- package/src/internal/keyedPool.ts +244 -0
- package/src/internal/layer/circular.ts +214 -0
- package/src/internal/layer.ts +1483 -0
- package/src/internal/logSpan.ts +20 -0
- package/src/internal/logger-circular.ts +24 -0
- package/src/internal/logger.ts +522 -0
- package/src/internal/mailbox.ts +561 -0
- package/src/internal/managedRuntime/circular.ts +6 -0
- package/src/internal/managedRuntime.ts +134 -0
- package/src/internal/matcher.ts +652 -0
- package/src/internal/metric/boundaries.ts +75 -0
- package/src/internal/metric/hook.ts +483 -0
- package/src/internal/metric/key.ts +167 -0
- package/src/internal/metric/keyType.ts +238 -0
- package/src/internal/metric/label.ts +41 -0
- package/src/internal/metric/pair.ts +48 -0
- package/src/internal/metric/polling.ts +149 -0
- package/src/internal/metric/registry.ts +187 -0
- package/src/internal/metric/state.ts +290 -0
- package/src/internal/metric.ts +577 -0
- package/src/internal/opCodes/cause.ts +35 -0
- package/src/internal/opCodes/channel.ts +83 -0
- package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
- package/src/internal/opCodes/channelMergeDecision.ts +11 -0
- package/src/internal/opCodes/channelMergeState.ts +17 -0
- package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
- package/src/internal/opCodes/channelState.ts +23 -0
- package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
- package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
- package/src/internal/opCodes/config.ts +65 -0
- package/src/internal/opCodes/configError.ts +35 -0
- package/src/internal/opCodes/continuation.ts +11 -0
- package/src/internal/opCodes/deferred.ts +11 -0
- package/src/internal/opCodes/effect.ts +89 -0
- package/src/internal/opCodes/layer.ts +59 -0
- package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
- package/src/internal/option.ts +80 -0
- package/src/internal/pool.ts +432 -0
- package/src/internal/pubsub.ts +1762 -0
- package/src/internal/query.ts +204 -0
- package/src/internal/queue.ts +766 -0
- package/src/internal/random.ts +161 -0
- package/src/internal/rateLimiter.ts +93 -0
- package/src/internal/rcMap.ts +285 -0
- package/src/internal/rcRef.ts +192 -0
- package/src/internal/redBlackTree/iterator.ts +200 -0
- package/src/internal/redBlackTree/node.ts +68 -0
- package/src/internal/redBlackTree.ts +1245 -0
- package/src/internal/redacted.ts +73 -0
- package/src/internal/ref.ts +171 -0
- package/src/internal/reloadable.ts +140 -0
- package/src/internal/request.ts +177 -0
- package/src/internal/resource.ts +76 -0
- package/src/internal/ringBuffer.ts +68 -0
- package/src/internal/runtime.ts +558 -0
- package/src/internal/runtimeFlags.ts +178 -0
- package/src/internal/runtimeFlagsPatch.ts +103 -0
- package/src/internal/schedule/decision.ts +47 -0
- package/src/internal/schedule/interval.ts +101 -0
- package/src/internal/schedule/intervals.ts +180 -0
- package/src/internal/schedule.ts +2199 -0
- package/src/internal/schema/errors.ts +191 -0
- package/src/internal/schema/schemaId.ts +106 -0
- package/src/internal/schema/util.ts +50 -0
- package/src/internal/scopedCache.ts +644 -0
- package/src/internal/scopedRef.ts +118 -0
- package/src/internal/secret.ts +89 -0
- package/src/internal/singleShotGen.ts +35 -0
- package/src/internal/sink.ts +2120 -0
- package/src/internal/stack.ts +10 -0
- package/src/internal/stm/core.ts +817 -0
- package/src/internal/stm/entry.ts +59 -0
- package/src/internal/stm/journal.ts +123 -0
- package/src/internal/stm/opCodes/stm.ts +71 -0
- package/src/internal/stm/opCodes/stmState.ts +17 -0
- package/src/internal/stm/opCodes/strategy.ts +17 -0
- package/src/internal/stm/opCodes/tExit.ts +29 -0
- package/src/internal/stm/opCodes/tryCommit.ts +11 -0
- package/src/internal/stm/stm.ts +1453 -0
- package/src/internal/stm/stmState.ts +136 -0
- package/src/internal/stm/tArray.ts +550 -0
- package/src/internal/stm/tDeferred.ts +81 -0
- package/src/internal/stm/tExit.ts +190 -0
- package/src/internal/stm/tMap.ts +824 -0
- package/src/internal/stm/tPriorityQueue.ts +267 -0
- package/src/internal/stm/tPubSub.ts +551 -0
- package/src/internal/stm/tQueue.ts +393 -0
- package/src/internal/stm/tRandom.ts +140 -0
- package/src/internal/stm/tReentrantLock.ts +352 -0
- package/src/internal/stm/tRef.ts +195 -0
- package/src/internal/stm/tSemaphore.ts +113 -0
- package/src/internal/stm/tSet.ts +259 -0
- package/src/internal/stm/tSubscriptionRef.ts +286 -0
- package/src/internal/stm/tryCommit.ts +34 -0
- package/src/internal/stm/txnId.ts +14 -0
- package/src/internal/stm/versioned.ts +4 -0
- package/src/internal/stream/debounceState.ts +57 -0
- package/src/internal/stream/emit.ts +123 -0
- package/src/internal/stream/haltStrategy.ts +94 -0
- package/src/internal/stream/handoff.ts +187 -0
- package/src/internal/stream/handoffSignal.ts +59 -0
- package/src/internal/stream/pull.ts +34 -0
- package/src/internal/stream/sinkEndReason.ts +30 -0
- package/src/internal/stream/zipAllState.ts +88 -0
- package/src/internal/stream/zipChunksState.ts +56 -0
- package/src/internal/stream.ts +8801 -0
- package/src/internal/string-utils.ts +107 -0
- package/src/internal/subscriptionRef.ts +138 -0
- package/src/internal/supervisor/patch.ts +190 -0
- package/src/internal/supervisor.ts +303 -0
- package/src/internal/synchronizedRef.ts +114 -0
- package/src/internal/take.ts +199 -0
- package/src/internal/testing/sleep.ts +27 -0
- package/src/internal/testing/suspendedWarningData.ts +85 -0
- package/src/internal/testing/warningData.ts +94 -0
- package/src/internal/tracer.ts +150 -0
- package/src/internal/trie.ts +722 -0
- package/src/internal/version.ts +7 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as FiberId from "./FiberId.js"
|
|
5
|
+
import type * as FiberRef from "./FiberRef.js"
|
|
6
|
+
import type * as FiberRefs from "./FiberRefs.js"
|
|
7
|
+
import * as internal from "./internal/fiberRefs/patch.js"
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A `FiberRefsPatch` captures the changes in `FiberRef` values made by a single
|
|
11
|
+
* fiber as a value. This allows fibers to apply the changes made by a workflow
|
|
12
|
+
* without inheriting all the `FiberRef` values of the fiber that executed the
|
|
13
|
+
* workflow.
|
|
14
|
+
*
|
|
15
|
+
* @since 2.0.0
|
|
16
|
+
* @category models
|
|
17
|
+
*/
|
|
18
|
+
export type FiberRefsPatch = Empty | Add | Remove | Update | AndThen
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @since 2.0.0
|
|
22
|
+
* @category models
|
|
23
|
+
*/
|
|
24
|
+
export interface Empty {
|
|
25
|
+
readonly _tag: "Empty"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @since 2.0.0
|
|
30
|
+
* @category models
|
|
31
|
+
*/
|
|
32
|
+
export interface Add {
|
|
33
|
+
readonly _tag: "Add"
|
|
34
|
+
readonly fiberRef: FiberRef.FiberRef<unknown>
|
|
35
|
+
readonly value: unknown
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @since 2.0.0
|
|
40
|
+
* @category models
|
|
41
|
+
*/
|
|
42
|
+
export interface Remove {
|
|
43
|
+
readonly _tag: "Remove"
|
|
44
|
+
readonly fiberRef: FiberRef.FiberRef<unknown>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @since 2.0.0
|
|
49
|
+
* @category models
|
|
50
|
+
*/
|
|
51
|
+
export interface Update {
|
|
52
|
+
readonly _tag: "Update"
|
|
53
|
+
readonly fiberRef: FiberRef.FiberRef<unknown>
|
|
54
|
+
readonly patch: unknown
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @since 2.0.0
|
|
59
|
+
* @category models
|
|
60
|
+
*/
|
|
61
|
+
export interface AndThen {
|
|
62
|
+
readonly _tag: "AndThen"
|
|
63
|
+
readonly first: FiberRefsPatch
|
|
64
|
+
readonly second: FiberRefsPatch
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @since 2.0.0
|
|
69
|
+
* @category constructors
|
|
70
|
+
*/
|
|
71
|
+
export const empty: FiberRefsPatch = internal.empty
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Constructs a patch that describes the changes between the specified
|
|
75
|
+
* collections of `FiberRef`
|
|
76
|
+
*
|
|
77
|
+
* @since 2.0.0
|
|
78
|
+
* @category constructors
|
|
79
|
+
*/
|
|
80
|
+
export const diff: (oldValue: FiberRefs.FiberRefs, newValue: FiberRefs.FiberRefs) => FiberRefsPatch = internal.diff
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Combines this patch and the specified patch to create a new patch that
|
|
84
|
+
* describes applying the changes from this patch and the specified patch
|
|
85
|
+
* sequentially.
|
|
86
|
+
*
|
|
87
|
+
* @since 2.0.0
|
|
88
|
+
* @category constructors
|
|
89
|
+
*/
|
|
90
|
+
export const combine: {
|
|
91
|
+
(that: FiberRefsPatch): (self: FiberRefsPatch) => FiberRefsPatch
|
|
92
|
+
(self: FiberRefsPatch, that: FiberRefsPatch): FiberRefsPatch
|
|
93
|
+
} = internal.combine
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Applies the changes described by this patch to the specified collection
|
|
97
|
+
* of `FiberRef` values.
|
|
98
|
+
*
|
|
99
|
+
* @since 2.0.0
|
|
100
|
+
* @category destructors
|
|
101
|
+
*/
|
|
102
|
+
export const patch: {
|
|
103
|
+
(fiberId: FiberId.Runtime, oldValue: FiberRefs.FiberRefs): (self: FiberRefsPatch) => FiberRefs.FiberRefs
|
|
104
|
+
(self: FiberRefsPatch, fiberId: FiberId.Runtime, oldValue: FiberRefs.FiberRefs): FiberRefs.FiberRefs
|
|
105
|
+
} = internal.patch
|
package/src/FiberSet.ts
ADDED
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Cause from "./Cause.js"
|
|
5
|
+
import * as Deferred from "./Deferred.js"
|
|
6
|
+
import * as Effect from "./Effect.js"
|
|
7
|
+
import * as Exit from "./Exit.js"
|
|
8
|
+
import * as Fiber from "./Fiber.js"
|
|
9
|
+
import * as FiberId from "./FiberId.js"
|
|
10
|
+
import { constFalse, constVoid, dual } from "./Function.js"
|
|
11
|
+
import * as HashSet from "./HashSet.js"
|
|
12
|
+
import * as Inspectable from "./Inspectable.js"
|
|
13
|
+
import * as Iterable from "./Iterable.js"
|
|
14
|
+
import { type Pipeable, pipeArguments } from "./Pipeable.js"
|
|
15
|
+
import * as Predicate from "./Predicate.js"
|
|
16
|
+
import * as Runtime from "./Runtime.js"
|
|
17
|
+
import type * as Scope from "./Scope.js"
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @since 2.0.0
|
|
21
|
+
* @categories type ids
|
|
22
|
+
*/
|
|
23
|
+
export const TypeId: unique symbol = Symbol.for("effect/FiberSet")
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @since 2.0.0
|
|
27
|
+
* @categories type ids
|
|
28
|
+
*/
|
|
29
|
+
export type TypeId = typeof TypeId
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @since 2.0.0
|
|
33
|
+
* @categories models
|
|
34
|
+
*/
|
|
35
|
+
export interface FiberSet<out A = unknown, out E = unknown>
|
|
36
|
+
extends Pipeable, Inspectable.Inspectable, Iterable<Fiber.RuntimeFiber<A, E>>
|
|
37
|
+
{
|
|
38
|
+
readonly [TypeId]: TypeId
|
|
39
|
+
readonly deferred: Deferred.Deferred<void, unknown>
|
|
40
|
+
/** @internal */
|
|
41
|
+
state: {
|
|
42
|
+
readonly _tag: "Open"
|
|
43
|
+
readonly backing: Set<Fiber.RuntimeFiber<A, E>>
|
|
44
|
+
} | {
|
|
45
|
+
readonly _tag: "Closed"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @since 2.0.0
|
|
51
|
+
* @categories refinements
|
|
52
|
+
*/
|
|
53
|
+
export const isFiberSet = (u: unknown): u is FiberSet<unknown, unknown> => Predicate.hasProperty(u, TypeId)
|
|
54
|
+
|
|
55
|
+
const Proto = {
|
|
56
|
+
[TypeId]: TypeId,
|
|
57
|
+
[Symbol.iterator](this: FiberSet<unknown, unknown>) {
|
|
58
|
+
if (this.state._tag === "Closed") {
|
|
59
|
+
return Iterable.empty()
|
|
60
|
+
}
|
|
61
|
+
return this.state.backing[Symbol.iterator]()
|
|
62
|
+
},
|
|
63
|
+
toString(this: FiberSet<unknown, unknown>) {
|
|
64
|
+
return Inspectable.format(this.toJSON())
|
|
65
|
+
},
|
|
66
|
+
toJSON(this: FiberSet<unknown, unknown>) {
|
|
67
|
+
return {
|
|
68
|
+
_id: "FiberMap",
|
|
69
|
+
state: this.state
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
[Inspectable.NodeInspectSymbol](this: FiberSet<unknown, unknown>) {
|
|
73
|
+
return this.toJSON()
|
|
74
|
+
},
|
|
75
|
+
pipe() {
|
|
76
|
+
return pipeArguments(this, arguments)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const unsafeMake = <A, E>(
|
|
81
|
+
backing: Set<Fiber.RuntimeFiber<A, E>>,
|
|
82
|
+
deferred: Deferred.Deferred<void, unknown>
|
|
83
|
+
): FiberSet<A, E> => {
|
|
84
|
+
const self = Object.create(Proto)
|
|
85
|
+
self.state = { _tag: "Open", backing }
|
|
86
|
+
self.deferred = deferred
|
|
87
|
+
return self
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* A FiberSet can be used to store a collection of fibers.
|
|
92
|
+
* When the associated Scope is closed, all fibers in the set will be interrupted.
|
|
93
|
+
*
|
|
94
|
+
* You can add fibers to the set using `FiberSet.add` or `FiberSet.run`, and the fibers will
|
|
95
|
+
* be automatically removed from the FiberSet when they complete.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* import { Effect, FiberSet } from "effect"
|
|
100
|
+
*
|
|
101
|
+
* Effect.gen(function*() {
|
|
102
|
+
* const set = yield* FiberSet.make()
|
|
103
|
+
*
|
|
104
|
+
* // run some effects and add the fibers to the set
|
|
105
|
+
* yield* FiberSet.run(set, Effect.never)
|
|
106
|
+
* yield* FiberSet.run(set, Effect.never)
|
|
107
|
+
*
|
|
108
|
+
* yield* Effect.sleep(1000)
|
|
109
|
+
* }).pipe(
|
|
110
|
+
* Effect.scoped // The fibers will be interrupted when the scope is closed
|
|
111
|
+
* )
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* @since 2.0.0
|
|
115
|
+
* @categories constructors
|
|
116
|
+
*/
|
|
117
|
+
export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberSet<A, E>, never, Scope.Scope> =>
|
|
118
|
+
Effect.acquireRelease(
|
|
119
|
+
Effect.map(Deferred.make<void, unknown>(), (deferred) => unsafeMake(new Set(), deferred)),
|
|
120
|
+
(set) =>
|
|
121
|
+
Effect.withFiberRuntime((parent) => {
|
|
122
|
+
const state = set.state
|
|
123
|
+
if (state._tag === "Closed") return Effect.void
|
|
124
|
+
set.state = { _tag: "Closed" }
|
|
125
|
+
const fibers = state.backing
|
|
126
|
+
return Fiber.interruptAllAs(fibers, FiberId.combine(parent.id(), internalFiberId)).pipe(
|
|
127
|
+
Effect.intoDeferred(set.deferred)
|
|
128
|
+
)
|
|
129
|
+
})
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Create an Effect run function that is backed by a FiberSet.
|
|
134
|
+
*
|
|
135
|
+
* @since 2.0.0
|
|
136
|
+
* @categories constructors
|
|
137
|
+
*/
|
|
138
|
+
export const makeRuntime = <R = never, A = unknown, E = unknown>(): Effect.Effect<
|
|
139
|
+
<XE extends E, XA extends A>(
|
|
140
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
141
|
+
options?: Runtime.RunForkOptions | undefined
|
|
142
|
+
) => Fiber.RuntimeFiber<XA, XE>,
|
|
143
|
+
never,
|
|
144
|
+
Scope.Scope | R
|
|
145
|
+
> =>
|
|
146
|
+
Effect.flatMap(
|
|
147
|
+
make<A, E>(),
|
|
148
|
+
(self) => runtime(self)<R>()
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Create an Effect run function that is backed by a FiberSet.
|
|
153
|
+
*
|
|
154
|
+
* @since 3.13.0
|
|
155
|
+
* @categories constructors
|
|
156
|
+
*/
|
|
157
|
+
export const makeRuntimePromise = <R = never, A = unknown, E = unknown>(): Effect.Effect<
|
|
158
|
+
<XE extends E, XA extends A>(
|
|
159
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
160
|
+
options?: Runtime.RunForkOptions | undefined
|
|
161
|
+
) => Promise<XA>,
|
|
162
|
+
never,
|
|
163
|
+
Scope.Scope | R
|
|
164
|
+
> =>
|
|
165
|
+
Effect.flatMap(
|
|
166
|
+
make<A, E>(),
|
|
167
|
+
(self) => runtimePromise(self)<R>()
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
const internalFiberIdId = -1
|
|
171
|
+
const internalFiberId = FiberId.make(internalFiberIdId, 0)
|
|
172
|
+
const isInternalInterruption = Cause.reduceWithContext(undefined, {
|
|
173
|
+
emptyCase: constFalse,
|
|
174
|
+
failCase: constFalse,
|
|
175
|
+
dieCase: constFalse,
|
|
176
|
+
interruptCase: (_, fiberId) => HashSet.has(FiberId.ids(fiberId), internalFiberIdId),
|
|
177
|
+
sequentialCase: (_, left, right) => left || right,
|
|
178
|
+
parallelCase: (_, left, right) => left || right
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Add a fiber to the FiberSet. When the fiber completes, it will be removed.
|
|
183
|
+
*
|
|
184
|
+
* @since 2.0.0
|
|
185
|
+
* @categories combinators
|
|
186
|
+
*/
|
|
187
|
+
export const unsafeAdd: {
|
|
188
|
+
<A, E, XE extends E, XA extends A>(
|
|
189
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
190
|
+
options?: {
|
|
191
|
+
readonly interruptAs?: FiberId.FiberId | undefined
|
|
192
|
+
readonly propagateInterruption?: boolean | undefined
|
|
193
|
+
} | undefined
|
|
194
|
+
): (self: FiberSet<A, E>) => void
|
|
195
|
+
<A, E, XE extends E, XA extends A>(
|
|
196
|
+
self: FiberSet<A, E>,
|
|
197
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
198
|
+
options?: {
|
|
199
|
+
readonly interruptAs?: FiberId.FiberId | undefined
|
|
200
|
+
readonly propagateInterruption?: boolean | undefined
|
|
201
|
+
} | undefined
|
|
202
|
+
): void
|
|
203
|
+
} = dual((args) => isFiberSet(args[0]), <A, E, XE extends E, XA extends A>(
|
|
204
|
+
self: FiberSet<A, E>,
|
|
205
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
206
|
+
options?: {
|
|
207
|
+
readonly interruptAs?: FiberId.FiberId | undefined
|
|
208
|
+
readonly propagateInterruption?: boolean | undefined
|
|
209
|
+
} | undefined
|
|
210
|
+
): void => {
|
|
211
|
+
if (self.state._tag === "Closed") {
|
|
212
|
+
fiber.unsafeInterruptAsFork(FiberId.combine(options?.interruptAs ?? FiberId.none, internalFiberId))
|
|
213
|
+
return
|
|
214
|
+
} else if (self.state.backing.has(fiber)) {
|
|
215
|
+
return
|
|
216
|
+
}
|
|
217
|
+
self.state.backing.add(fiber)
|
|
218
|
+
fiber.addObserver((exit) => {
|
|
219
|
+
if (self.state._tag === "Closed") {
|
|
220
|
+
return
|
|
221
|
+
}
|
|
222
|
+
self.state.backing.delete(fiber)
|
|
223
|
+
if (
|
|
224
|
+
Exit.isFailure(exit) &&
|
|
225
|
+
(
|
|
226
|
+
options?.propagateInterruption === true ?
|
|
227
|
+
!isInternalInterruption(exit.cause) :
|
|
228
|
+
!Cause.isInterruptedOnly(exit.cause)
|
|
229
|
+
)
|
|
230
|
+
) {
|
|
231
|
+
Deferred.unsafeDone(self.deferred, exit as any)
|
|
232
|
+
}
|
|
233
|
+
})
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Add a fiber to the FiberSet. When the fiber completes, it will be removed.
|
|
238
|
+
*
|
|
239
|
+
* @since 2.0.0
|
|
240
|
+
* @categories combinators
|
|
241
|
+
*/
|
|
242
|
+
export const add: {
|
|
243
|
+
<A, E, XE extends E, XA extends A>(
|
|
244
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
245
|
+
options?: {
|
|
246
|
+
readonly propagateInterruption?: boolean | undefined
|
|
247
|
+
} | undefined
|
|
248
|
+
): (self: FiberSet<A, E>) => Effect.Effect<void>
|
|
249
|
+
<A, E, XE extends E, XA extends A>(
|
|
250
|
+
self: FiberSet<A, E>,
|
|
251
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
252
|
+
options?: {
|
|
253
|
+
readonly propagateInterruption?: boolean | undefined
|
|
254
|
+
} | undefined
|
|
255
|
+
): Effect.Effect<void>
|
|
256
|
+
} = dual(
|
|
257
|
+
(args) => isFiberSet(args[0]),
|
|
258
|
+
<A, E, XE extends E, XA extends A>(
|
|
259
|
+
self: FiberSet<A, E>,
|
|
260
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
261
|
+
options?: {
|
|
262
|
+
readonly propagateInterruption?: boolean | undefined
|
|
263
|
+
} | undefined
|
|
264
|
+
): Effect.Effect<void> =>
|
|
265
|
+
Effect.fiberIdWith((fiberId) =>
|
|
266
|
+
Effect.sync(() =>
|
|
267
|
+
unsafeAdd(self, fiber, {
|
|
268
|
+
...options,
|
|
269
|
+
interruptAs: fiberId
|
|
270
|
+
})
|
|
271
|
+
)
|
|
272
|
+
)
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @since 2.0.0
|
|
277
|
+
* @categories combinators
|
|
278
|
+
*/
|
|
279
|
+
export const clear = <A, E>(self: FiberSet<A, E>): Effect.Effect<void> =>
|
|
280
|
+
Effect.withFiberRuntime((clearFiber) => {
|
|
281
|
+
if (self.state._tag === "Closed") {
|
|
282
|
+
return Effect.void
|
|
283
|
+
}
|
|
284
|
+
return Effect.forEach(self.state.backing, (fiber) =>
|
|
285
|
+
// will be removed by the observer
|
|
286
|
+
Fiber.interruptAs(fiber, FiberId.combine(clearFiber.id(), internalFiberId)))
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
const constInterruptedFiber = (function() {
|
|
290
|
+
let fiber: Fiber.RuntimeFiber<never, never> | undefined = undefined
|
|
291
|
+
return () => {
|
|
292
|
+
if (fiber === undefined) {
|
|
293
|
+
fiber = Effect.runFork(Effect.interrupt)
|
|
294
|
+
}
|
|
295
|
+
return fiber
|
|
296
|
+
}
|
|
297
|
+
})()
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Fork an Effect and add the forked fiber to the FiberSet.
|
|
301
|
+
* When the fiber completes, it will be removed from the FiberSet.
|
|
302
|
+
*
|
|
303
|
+
* @since 2.0.0
|
|
304
|
+
* @categories combinators
|
|
305
|
+
*/
|
|
306
|
+
export const run: {
|
|
307
|
+
<A, E>(
|
|
308
|
+
self: FiberSet<A, E>,
|
|
309
|
+
options?: {
|
|
310
|
+
readonly propagateInterruption?: boolean | undefined
|
|
311
|
+
} | undefined
|
|
312
|
+
): <R, XE extends E, XA extends A>(
|
|
313
|
+
effect: Effect.Effect<XA, XE, R>
|
|
314
|
+
) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
|
|
315
|
+
<A, E, R, XE extends E, XA extends A>(
|
|
316
|
+
self: FiberSet<A, E>,
|
|
317
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
318
|
+
options?: {
|
|
319
|
+
readonly propagateInterruption?: boolean | undefined
|
|
320
|
+
} | undefined
|
|
321
|
+
): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
|
|
322
|
+
} = function() {
|
|
323
|
+
const self = arguments[0] as FiberSet<any, any>
|
|
324
|
+
if (!Effect.isEffect(arguments[1])) {
|
|
325
|
+
const options = arguments[1]
|
|
326
|
+
return (effect: Effect.Effect<any, any, any>) => runImpl(self, effect, options)
|
|
327
|
+
}
|
|
328
|
+
return runImpl(self, arguments[1], arguments[2]) as any
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const runImpl = <A, E, R, XE extends E, XA extends A>(
|
|
332
|
+
self: FiberSet<A, E>,
|
|
333
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
334
|
+
options?: {
|
|
335
|
+
readonly propagateInterruption?: boolean | undefined
|
|
336
|
+
}
|
|
337
|
+
): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R> =>
|
|
338
|
+
Effect.fiberIdWith((fiberId) => {
|
|
339
|
+
if (self.state._tag === "Closed") {
|
|
340
|
+
return Effect.sync(constInterruptedFiber)
|
|
341
|
+
}
|
|
342
|
+
return Effect.tap(
|
|
343
|
+
Effect.forkDaemon(effect),
|
|
344
|
+
(fiber) =>
|
|
345
|
+
unsafeAdd(self, fiber, {
|
|
346
|
+
...options,
|
|
347
|
+
interruptAs: fiberId
|
|
348
|
+
})
|
|
349
|
+
)
|
|
350
|
+
})
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberSet.
|
|
354
|
+
*
|
|
355
|
+
* @example
|
|
356
|
+
* ```ts
|
|
357
|
+
* import { Context, Effect, FiberSet } from "effect"
|
|
358
|
+
*
|
|
359
|
+
* interface Users {
|
|
360
|
+
* readonly _: unique symbol
|
|
361
|
+
* }
|
|
362
|
+
* const Users = Context.GenericTag<Users, {
|
|
363
|
+
* getAll: Effect.Effect<Array<unknown>>
|
|
364
|
+
* }>("Users")
|
|
365
|
+
*
|
|
366
|
+
* Effect.gen(function*() {
|
|
367
|
+
* const set = yield* FiberSet.make()
|
|
368
|
+
* const run = yield* FiberSet.runtime(set)<Users>()
|
|
369
|
+
*
|
|
370
|
+
* // run some effects and add the fibers to the set
|
|
371
|
+
* run(Effect.andThen(Users, _ => _.getAll))
|
|
372
|
+
* }).pipe(
|
|
373
|
+
* Effect.scoped // The fibers will be interrupted when the scope is closed
|
|
374
|
+
* )
|
|
375
|
+
* ```
|
|
376
|
+
*
|
|
377
|
+
* @since 2.0.0
|
|
378
|
+
* @categories combinators
|
|
379
|
+
*/
|
|
380
|
+
export const runtime: <A, E>(
|
|
381
|
+
self: FiberSet<A, E>
|
|
382
|
+
) => <R = never>() => Effect.Effect<
|
|
383
|
+
<XE extends E, XA extends A>(
|
|
384
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
385
|
+
options?:
|
|
386
|
+
| Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
|
|
387
|
+
| undefined
|
|
388
|
+
) => Fiber.RuntimeFiber<XA, XE>,
|
|
389
|
+
never,
|
|
390
|
+
R
|
|
391
|
+
> = <A, E>(self: FiberSet<A, E>) => <R>() =>
|
|
392
|
+
Effect.map(
|
|
393
|
+
Effect.runtime<R>(),
|
|
394
|
+
(runtime) => {
|
|
395
|
+
const runFork = Runtime.runFork(runtime)
|
|
396
|
+
return <XE extends E, XA extends A>(
|
|
397
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
398
|
+
options?:
|
|
399
|
+
| Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
|
|
400
|
+
| undefined
|
|
401
|
+
) => {
|
|
402
|
+
if (self.state._tag === "Closed") {
|
|
403
|
+
return constInterruptedFiber()
|
|
404
|
+
}
|
|
405
|
+
const fiber = runFork(effect, options)
|
|
406
|
+
unsafeAdd(self, fiber)
|
|
407
|
+
return fiber
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberSet.
|
|
414
|
+
*
|
|
415
|
+
* The returned run function will return Promise's.
|
|
416
|
+
*
|
|
417
|
+
* @since 3.13.0
|
|
418
|
+
* @categories combinators
|
|
419
|
+
*/
|
|
420
|
+
export const runtimePromise = <A, E>(self: FiberSet<A, E>): <R = never>() => Effect.Effect<
|
|
421
|
+
<XE extends E, XA extends A>(
|
|
422
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
423
|
+
options?:
|
|
424
|
+
| Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
|
|
425
|
+
| undefined
|
|
426
|
+
) => Promise<XA>,
|
|
427
|
+
never,
|
|
428
|
+
R
|
|
429
|
+
> =>
|
|
430
|
+
<R>() =>
|
|
431
|
+
Effect.map(
|
|
432
|
+
runtime(self)<R>(),
|
|
433
|
+
(runFork) =>
|
|
434
|
+
<XE extends E, XA extends A>(
|
|
435
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
436
|
+
options?:
|
|
437
|
+
| Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
|
|
438
|
+
| undefined
|
|
439
|
+
): Promise<XA> =>
|
|
440
|
+
new Promise((resolve, reject) =>
|
|
441
|
+
runFork(effect, options).addObserver((exit) => {
|
|
442
|
+
if (Exit.isSuccess(exit)) {
|
|
443
|
+
resolve(exit.value)
|
|
444
|
+
} else {
|
|
445
|
+
reject(Cause.squash(exit.cause))
|
|
446
|
+
}
|
|
447
|
+
})
|
|
448
|
+
)
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* @since 2.0.0
|
|
453
|
+
* @categories combinators
|
|
454
|
+
*/
|
|
455
|
+
export const size = <A, E>(self: FiberSet<A, E>): Effect.Effect<number> =>
|
|
456
|
+
Effect.sync(() => self.state._tag === "Closed" ? 0 : self.state.backing.size)
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Join all fibers in the FiberSet. If any of the Fiber's in the set terminate with a failure,
|
|
460
|
+
* the returned Effect will terminate with the first failure that occurred.
|
|
461
|
+
*
|
|
462
|
+
* @since 2.0.0
|
|
463
|
+
* @categories combinators
|
|
464
|
+
* @example
|
|
465
|
+
* ```ts
|
|
466
|
+
* import { Effect, FiberSet } from "effect";
|
|
467
|
+
*
|
|
468
|
+
* Effect.gen(function* (_) {
|
|
469
|
+
* const set = yield* _(FiberSet.make());
|
|
470
|
+
* yield* _(FiberSet.add(set, Effect.runFork(Effect.fail("error"))));
|
|
471
|
+
*
|
|
472
|
+
* // parent fiber will fail with "error"
|
|
473
|
+
* yield* _(FiberSet.join(set));
|
|
474
|
+
* });
|
|
475
|
+
* ```
|
|
476
|
+
*/
|
|
477
|
+
export const join = <A, E>(self: FiberSet<A, E>): Effect.Effect<void, E> =>
|
|
478
|
+
Deferred.await(self.deferred as Deferred.Deferred<void, E>)
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Wait until the fiber set is empty.
|
|
482
|
+
*
|
|
483
|
+
* @since 3.13.0
|
|
484
|
+
* @categories combinators
|
|
485
|
+
*/
|
|
486
|
+
export const awaitEmpty = <A, E>(self: FiberSet<A, E>): Effect.Effect<void> =>
|
|
487
|
+
Effect.whileLoop({
|
|
488
|
+
while: () => self.state._tag === "Open" && self.state.backing.size > 0,
|
|
489
|
+
body: () => Fiber.await(Iterable.unsafeHead(self)),
|
|
490
|
+
step: constVoid
|
|
491
|
+
})
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Equal from "./Equal.js"
|
|
5
|
+
import type * as FiberId from "./FiberId.js"
|
|
6
|
+
import * as internal from "./internal/fiberStatus.js"
|
|
7
|
+
import type * as RuntimeFlags from "./RuntimeFlags.js"
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @since 2.0.0
|
|
11
|
+
* @category symbols
|
|
12
|
+
*/
|
|
13
|
+
export const FiberStatusTypeId: unique symbol = internal.FiberStatusTypeId
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @since 2.0.0
|
|
17
|
+
* @category symbols
|
|
18
|
+
*/
|
|
19
|
+
export type FiberStatusTypeId = typeof FiberStatusTypeId
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @since 2.0.0
|
|
23
|
+
* @category models
|
|
24
|
+
*/
|
|
25
|
+
export type FiberStatus = Done | Running | Suspended
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @since 2.0.0
|
|
29
|
+
* @category models
|
|
30
|
+
*/
|
|
31
|
+
export interface Done extends Equal.Equal {
|
|
32
|
+
readonly _tag: "Done"
|
|
33
|
+
readonly [FiberStatusTypeId]: FiberStatusTypeId
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @since 2.0.0
|
|
38
|
+
* @category models
|
|
39
|
+
*/
|
|
40
|
+
export interface Running extends Equal.Equal {
|
|
41
|
+
readonly _tag: "Running"
|
|
42
|
+
readonly [FiberStatusTypeId]: FiberStatusTypeId
|
|
43
|
+
readonly runtimeFlags: RuntimeFlags.RuntimeFlags
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @since 2.0.0
|
|
48
|
+
* @category models
|
|
49
|
+
*/
|
|
50
|
+
export interface Suspended extends Equal.Equal {
|
|
51
|
+
readonly _tag: "Suspended"
|
|
52
|
+
readonly [FiberStatusTypeId]: FiberStatusTypeId
|
|
53
|
+
readonly runtimeFlags: RuntimeFlags.RuntimeFlags
|
|
54
|
+
readonly blockingOn: FiberId.FiberId
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @since 2.0.0
|
|
59
|
+
* @category constructors
|
|
60
|
+
*/
|
|
61
|
+
export const done: FiberStatus = internal.done
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @since 2.0.0
|
|
65
|
+
* @category constructors
|
|
66
|
+
*/
|
|
67
|
+
export const running: (runtimeFlags: RuntimeFlags.RuntimeFlags) => FiberStatus = internal.running
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @since 2.0.0
|
|
71
|
+
* @category constructors
|
|
72
|
+
*/
|
|
73
|
+
export const suspended: (runtimeFlags: RuntimeFlags.RuntimeFlags, blockingOn: FiberId.FiberId) => FiberStatus =
|
|
74
|
+
internal.suspended
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Returns `true` if the specified value is a `FiberStatus`, `false` otherwise.
|
|
78
|
+
*
|
|
79
|
+
* @since 2.0.0
|
|
80
|
+
* @category refinements
|
|
81
|
+
*/
|
|
82
|
+
export const isFiberStatus: (u: unknown) => u is FiberStatus = internal.isFiberStatus
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Returns `true` if the specified `FiberStatus` is `Done`, `false` otherwise.
|
|
86
|
+
*
|
|
87
|
+
* @since 2.0.0
|
|
88
|
+
* @category refinements
|
|
89
|
+
*/
|
|
90
|
+
export const isDone: (self: FiberStatus) => self is Done = internal.isDone
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Returns `true` if the specified `FiberStatus` is `Running`, `false`
|
|
94
|
+
* otherwise.
|
|
95
|
+
*
|
|
96
|
+
* @since 2.0.0
|
|
97
|
+
* @category refinements
|
|
98
|
+
*/
|
|
99
|
+
export const isRunning: (self: FiberStatus) => self is Running = internal.isRunning
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Returns `true` if the specified `FiberStatus` is `Suspended`, `false`
|
|
103
|
+
* otherwise.
|
|
104
|
+
*
|
|
105
|
+
* @since 2.0.0
|
|
106
|
+
* @category refinements
|
|
107
|
+
*/
|
|
108
|
+
export const isSuspended: (self: FiberStatus) => self is Suspended = internal.isSuspended
|