@clayroach/effect 3.19.14-source-capture.8 → 3.19.14-source-trace.2
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,540 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type { NoSuchElementException } from "./Cause.js"
|
|
5
|
+
import * as Cause from "./Cause.js"
|
|
6
|
+
import * as Deferred from "./Deferred.js"
|
|
7
|
+
import * as Effect from "./Effect.js"
|
|
8
|
+
import * as Exit from "./Exit.js"
|
|
9
|
+
import * as Fiber from "./Fiber.js"
|
|
10
|
+
import * as FiberId from "./FiberId.js"
|
|
11
|
+
import { constFalse, dual } from "./Function.js"
|
|
12
|
+
import * as HashSet from "./HashSet.js"
|
|
13
|
+
import * as Inspectable from "./Inspectable.js"
|
|
14
|
+
import * as Option from "./Option.js"
|
|
15
|
+
import { type Pipeable, pipeArguments } from "./Pipeable.js"
|
|
16
|
+
import * as Predicate from "./Predicate.js"
|
|
17
|
+
import * as Runtime from "./Runtime.js"
|
|
18
|
+
import type * as Scope from "./Scope.js"
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @since 2.0.0
|
|
22
|
+
* @categories type ids
|
|
23
|
+
*/
|
|
24
|
+
export const TypeId: unique symbol = Symbol.for("effect/FiberHandle")
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @since 2.0.0
|
|
28
|
+
* @categories type ids
|
|
29
|
+
*/
|
|
30
|
+
export type TypeId = typeof TypeId
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @since 2.0.0
|
|
34
|
+
* @categories models
|
|
35
|
+
*/
|
|
36
|
+
export interface FiberHandle<out A = unknown, out E = unknown> extends Pipeable, Inspectable.Inspectable {
|
|
37
|
+
readonly [TypeId]: TypeId
|
|
38
|
+
readonly deferred: Deferred.Deferred<void, unknown>
|
|
39
|
+
/** @internal */
|
|
40
|
+
state: {
|
|
41
|
+
readonly _tag: "Open"
|
|
42
|
+
fiber: Fiber.RuntimeFiber<A, E> | undefined
|
|
43
|
+
} | {
|
|
44
|
+
readonly _tag: "Closed"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @since 2.0.0
|
|
50
|
+
* @categories refinements
|
|
51
|
+
*/
|
|
52
|
+
export const isFiberHandle = (u: unknown): u is FiberHandle => Predicate.hasProperty(u, TypeId)
|
|
53
|
+
|
|
54
|
+
const Proto = {
|
|
55
|
+
[TypeId]: TypeId,
|
|
56
|
+
toString(this: FiberHandle) {
|
|
57
|
+
return Inspectable.format(this.toJSON())
|
|
58
|
+
},
|
|
59
|
+
toJSON(this: FiberHandle) {
|
|
60
|
+
return {
|
|
61
|
+
_id: "FiberHandle",
|
|
62
|
+
state: this.state
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
[Inspectable.NodeInspectSymbol](this: FiberHandle) {
|
|
66
|
+
return this.toJSON()
|
|
67
|
+
},
|
|
68
|
+
pipe() {
|
|
69
|
+
return pipeArguments(this, arguments)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const unsafeMake = <A = unknown, E = unknown>(
|
|
74
|
+
deferred: Deferred.Deferred<void, E>
|
|
75
|
+
): FiberHandle<A, E> => {
|
|
76
|
+
const self = Object.create(Proto)
|
|
77
|
+
self.state = { _tag: "Open", fiber: undefined }
|
|
78
|
+
self.deferred = deferred
|
|
79
|
+
return self
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* A FiberHandle can be used to store a single fiber.
|
|
84
|
+
* When the associated Scope is closed, the contained fiber will be interrupted.
|
|
85
|
+
*
|
|
86
|
+
* You can add a fiber to the handle using `FiberHandle.run`, and the fiber will
|
|
87
|
+
* be automatically removed from the FiberHandle when it completes.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* import { Effect, FiberHandle } from "effect"
|
|
92
|
+
*
|
|
93
|
+
* Effect.gen(function*() {
|
|
94
|
+
* const handle = yield* FiberHandle.make()
|
|
95
|
+
*
|
|
96
|
+
* // run some effects
|
|
97
|
+
* yield* FiberHandle.run(handle, Effect.never)
|
|
98
|
+
* // this will interrupt the previous fiber
|
|
99
|
+
* yield* FiberHandle.run(handle, Effect.never)
|
|
100
|
+
*
|
|
101
|
+
* yield* Effect.sleep(1000)
|
|
102
|
+
* }).pipe(
|
|
103
|
+
* Effect.scoped // The fiber will be interrupted when the scope is closed
|
|
104
|
+
* )
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @since 2.0.0
|
|
108
|
+
* @categories constructors
|
|
109
|
+
*/
|
|
110
|
+
export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope> =>
|
|
111
|
+
Effect.acquireRelease(
|
|
112
|
+
Effect.map(Deferred.make<void, E>(), (deferred) => unsafeMake<A, E>(deferred)),
|
|
113
|
+
(handle) =>
|
|
114
|
+
Effect.withFiberRuntime((parent) => {
|
|
115
|
+
const state = handle.state
|
|
116
|
+
if (state._tag === "Closed") return Effect.void
|
|
117
|
+
handle.state = { _tag: "Closed" }
|
|
118
|
+
return state.fiber ?
|
|
119
|
+
Effect.intoDeferred(
|
|
120
|
+
Effect.asVoid(Fiber.interruptAs(state.fiber, FiberId.combine(parent.id(), internalFiberId))),
|
|
121
|
+
handle.deferred
|
|
122
|
+
) :
|
|
123
|
+
Deferred.done(handle.deferred, Exit.void)
|
|
124
|
+
})
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Create an Effect run function that is backed by a FiberHandle.
|
|
129
|
+
*
|
|
130
|
+
* @since 2.0.0
|
|
131
|
+
* @categories constructors
|
|
132
|
+
*/
|
|
133
|
+
export const makeRuntime = <R, E = unknown, A = unknown>(): Effect.Effect<
|
|
134
|
+
<XE extends E, XA extends A>(
|
|
135
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
136
|
+
options?:
|
|
137
|
+
| Runtime.RunForkOptions & {
|
|
138
|
+
readonly onlyIfMissing?: boolean | undefined
|
|
139
|
+
}
|
|
140
|
+
| undefined
|
|
141
|
+
) => Fiber.RuntimeFiber<XA, XE>,
|
|
142
|
+
never,
|
|
143
|
+
Scope.Scope | R
|
|
144
|
+
> =>
|
|
145
|
+
Effect.flatMap(
|
|
146
|
+
make<A, E>(),
|
|
147
|
+
(self) => runtime(self)<R>()
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Create an Effect run function that is backed by a FiberHandle.
|
|
152
|
+
*
|
|
153
|
+
* @since 3.13.0
|
|
154
|
+
* @categories constructors
|
|
155
|
+
*/
|
|
156
|
+
export const makeRuntimePromise = <R = never, A = unknown, E = unknown>(): Effect.Effect<
|
|
157
|
+
<XE extends E, XA extends A>(
|
|
158
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
159
|
+
options?: Runtime.RunForkOptions | undefined
|
|
160
|
+
) => Promise<XA>,
|
|
161
|
+
never,
|
|
162
|
+
Scope.Scope | R
|
|
163
|
+
> =>
|
|
164
|
+
Effect.flatMap(
|
|
165
|
+
make<A, E>(),
|
|
166
|
+
(self) => runtimePromise(self)<R>()
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
const internalFiberIdId = -1
|
|
170
|
+
const internalFiberId = FiberId.make(internalFiberIdId, 0)
|
|
171
|
+
const isInternalInterruption = Cause.reduceWithContext(undefined, {
|
|
172
|
+
emptyCase: constFalse,
|
|
173
|
+
failCase: constFalse,
|
|
174
|
+
dieCase: constFalse,
|
|
175
|
+
interruptCase: (_, fiberId) => HashSet.has(FiberId.ids(fiberId), internalFiberIdId),
|
|
176
|
+
sequentialCase: (_, left, right) => left || right,
|
|
177
|
+
parallelCase: (_, left, right) => left || right
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Set the fiber in a FiberHandle. When the fiber completes, it will be removed from the FiberHandle.
|
|
182
|
+
* If a fiber is already running, it will be interrupted unless `options.onlyIfMissing` is set.
|
|
183
|
+
*
|
|
184
|
+
* @since 2.0.0
|
|
185
|
+
* @categories combinators
|
|
186
|
+
*/
|
|
187
|
+
export const unsafeSet: {
|
|
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 onlyIfMissing?: boolean | undefined
|
|
193
|
+
readonly propagateInterruption?: boolean | undefined
|
|
194
|
+
}
|
|
195
|
+
): (self: FiberHandle<A, E>) => void
|
|
196
|
+
<A, E, XE extends E, XA extends A>(
|
|
197
|
+
self: FiberHandle<A, E>,
|
|
198
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
199
|
+
options?: {
|
|
200
|
+
readonly interruptAs?: FiberId.FiberId | undefined
|
|
201
|
+
readonly onlyIfMissing?: boolean | undefined
|
|
202
|
+
readonly propagateInterruption?: boolean | undefined
|
|
203
|
+
}
|
|
204
|
+
): void
|
|
205
|
+
} = dual((args) => isFiberHandle(args[0]), <A, E, XE extends E, XA extends A>(
|
|
206
|
+
self: FiberHandle<A, E>,
|
|
207
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
208
|
+
options?: {
|
|
209
|
+
readonly interruptAs?: FiberId.FiberId | undefined
|
|
210
|
+
readonly onlyIfMissing?: boolean | undefined
|
|
211
|
+
readonly propagateInterruption?: boolean | undefined
|
|
212
|
+
}
|
|
213
|
+
): void => {
|
|
214
|
+
if (self.state._tag === "Closed") {
|
|
215
|
+
fiber.unsafeInterruptAsFork(FiberId.combine(options?.interruptAs ?? FiberId.none, internalFiberId))
|
|
216
|
+
return
|
|
217
|
+
} else if (self.state.fiber !== undefined) {
|
|
218
|
+
if (options?.onlyIfMissing === true) {
|
|
219
|
+
fiber.unsafeInterruptAsFork(FiberId.combine(options?.interruptAs ?? FiberId.none, internalFiberId))
|
|
220
|
+
return
|
|
221
|
+
} else if (self.state.fiber === fiber) {
|
|
222
|
+
return
|
|
223
|
+
}
|
|
224
|
+
self.state.fiber.unsafeInterruptAsFork(FiberId.combine(options?.interruptAs ?? FiberId.none, internalFiberId))
|
|
225
|
+
self.state.fiber = undefined
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
self.state.fiber = fiber
|
|
229
|
+
fiber.addObserver((exit) => {
|
|
230
|
+
if (self.state._tag === "Open" && fiber === self.state.fiber) {
|
|
231
|
+
self.state.fiber = undefined
|
|
232
|
+
}
|
|
233
|
+
if (
|
|
234
|
+
Exit.isFailure(exit) &&
|
|
235
|
+
(
|
|
236
|
+
options?.propagateInterruption === true ?
|
|
237
|
+
!isInternalInterruption(exit.cause) :
|
|
238
|
+
!Cause.isInterruptedOnly(exit.cause)
|
|
239
|
+
)
|
|
240
|
+
) {
|
|
241
|
+
Deferred.unsafeDone(self.deferred, exit as any)
|
|
242
|
+
}
|
|
243
|
+
})
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Set the fiber in the FiberHandle. When the fiber completes, it will be removed from the FiberHandle.
|
|
248
|
+
* If a fiber already exists in the FiberHandle, it will be interrupted unless `options.onlyIfMissing` is set.
|
|
249
|
+
*
|
|
250
|
+
* @since 2.0.0
|
|
251
|
+
* @categories combinators
|
|
252
|
+
*/
|
|
253
|
+
export const set: {
|
|
254
|
+
<A, E, XE extends E, XA extends A>(
|
|
255
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
256
|
+
options?: {
|
|
257
|
+
readonly onlyIfMissing?: boolean
|
|
258
|
+
readonly propagateInterruption?: boolean | undefined
|
|
259
|
+
}
|
|
260
|
+
): (self: FiberHandle<A, E>) => Effect.Effect<void>
|
|
261
|
+
<A, E, XE extends E, XA extends A>(
|
|
262
|
+
self: FiberHandle<A, E>,
|
|
263
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
264
|
+
options?: {
|
|
265
|
+
readonly onlyIfMissing?: boolean
|
|
266
|
+
readonly propagateInterruption?: boolean | undefined
|
|
267
|
+
}
|
|
268
|
+
): Effect.Effect<void>
|
|
269
|
+
} = dual((args) => isFiberHandle(args[0]), <A, E, XE extends E, XA extends A>(
|
|
270
|
+
self: FiberHandle<A, E>,
|
|
271
|
+
fiber: Fiber.RuntimeFiber<XA, XE>,
|
|
272
|
+
options?: {
|
|
273
|
+
readonly onlyIfMissing?: boolean
|
|
274
|
+
readonly propagateInterruption?: boolean | undefined
|
|
275
|
+
}
|
|
276
|
+
): Effect.Effect<void> =>
|
|
277
|
+
Effect.fiberIdWith(
|
|
278
|
+
(fiberId) =>
|
|
279
|
+
Effect.sync(() =>
|
|
280
|
+
unsafeSet(self, fiber, {
|
|
281
|
+
interruptAs: fiberId,
|
|
282
|
+
onlyIfMissing: options?.onlyIfMissing,
|
|
283
|
+
propagateInterruption: options?.propagateInterruption
|
|
284
|
+
})
|
|
285
|
+
)
|
|
286
|
+
))
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Retrieve the fiber from the FiberHandle.
|
|
290
|
+
*
|
|
291
|
+
* @since 2.0.0
|
|
292
|
+
* @categories combinators
|
|
293
|
+
*/
|
|
294
|
+
export const unsafeGet = <A, E>(self: FiberHandle<A, E>): Option.Option<Fiber.RuntimeFiber<A, E>> =>
|
|
295
|
+
self.state._tag === "Closed" ? Option.none() : Option.fromNullable(self.state.fiber)
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Retrieve the fiber from the FiberHandle.
|
|
299
|
+
*
|
|
300
|
+
* @since 2.0.0
|
|
301
|
+
* @categories combinators
|
|
302
|
+
*/
|
|
303
|
+
export const get = <A, E>(self: FiberHandle<A, E>): Effect.Effect<Fiber.RuntimeFiber<A, E>, NoSuchElementException> =>
|
|
304
|
+
Effect.suspend(() => unsafeGet(self))
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* @since 2.0.0
|
|
308
|
+
* @categories combinators
|
|
309
|
+
*/
|
|
310
|
+
export const clear = <A, E>(self: FiberHandle<A, E>): Effect.Effect<void> =>
|
|
311
|
+
Effect.uninterruptibleMask((restore) =>
|
|
312
|
+
Effect.withFiberRuntime((fiber) => {
|
|
313
|
+
if (self.state._tag === "Closed" || self.state.fiber === undefined) {
|
|
314
|
+
return Effect.void
|
|
315
|
+
}
|
|
316
|
+
return Effect.zipRight(
|
|
317
|
+
restore(Fiber.interruptAs(self.state.fiber, FiberId.combine(fiber.id(), internalFiberId))),
|
|
318
|
+
Effect.sync(() => {
|
|
319
|
+
if (self.state._tag === "Open") {
|
|
320
|
+
self.state.fiber = undefined
|
|
321
|
+
}
|
|
322
|
+
})
|
|
323
|
+
)
|
|
324
|
+
})
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
const constInterruptedFiber = (function() {
|
|
328
|
+
let fiber: Fiber.RuntimeFiber<never, never> | undefined = undefined
|
|
329
|
+
return () => {
|
|
330
|
+
if (fiber === undefined) {
|
|
331
|
+
fiber = Effect.runFork(Effect.interrupt)
|
|
332
|
+
}
|
|
333
|
+
return fiber
|
|
334
|
+
}
|
|
335
|
+
})()
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Run an Effect and add the forked fiber to the FiberHandle.
|
|
339
|
+
* When the fiber completes, it will be removed from the FiberHandle.
|
|
340
|
+
*
|
|
341
|
+
* @since 2.0.0
|
|
342
|
+
* @categories combinators
|
|
343
|
+
*/
|
|
344
|
+
export const run: {
|
|
345
|
+
<A, E>(
|
|
346
|
+
self: FiberHandle<A, E>,
|
|
347
|
+
options?: {
|
|
348
|
+
readonly onlyIfMissing?: boolean
|
|
349
|
+
readonly propagateInterruption?: boolean | undefined
|
|
350
|
+
}
|
|
351
|
+
): <R, XE extends E, XA extends A>(
|
|
352
|
+
effect: Effect.Effect<XA, XE, R>
|
|
353
|
+
) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
|
|
354
|
+
<A, E, R, XE extends E, XA extends A>(
|
|
355
|
+
self: FiberHandle<A, E>,
|
|
356
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
357
|
+
options?: {
|
|
358
|
+
readonly onlyIfMissing?: boolean
|
|
359
|
+
readonly propagateInterruption?: boolean | undefined
|
|
360
|
+
}
|
|
361
|
+
): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
|
|
362
|
+
} = function() {
|
|
363
|
+
const self = arguments[0] as FiberHandle
|
|
364
|
+
if (Effect.isEffect(arguments[1])) {
|
|
365
|
+
return runImpl(self, arguments[1], arguments[2]) as any
|
|
366
|
+
}
|
|
367
|
+
const options = arguments[1]
|
|
368
|
+
return (effect: Effect.Effect<unknown, unknown, any>) => runImpl(self, effect, options)
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const runImpl = <A, E, R, XE extends E, XA extends A>(
|
|
372
|
+
self: FiberHandle<A, E>,
|
|
373
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
374
|
+
options?: {
|
|
375
|
+
readonly onlyIfMissing?: boolean
|
|
376
|
+
readonly propagateInterruption?: boolean | undefined
|
|
377
|
+
}
|
|
378
|
+
): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R> =>
|
|
379
|
+
Effect.withFiberRuntime((parent) => {
|
|
380
|
+
if (self.state._tag === "Closed") {
|
|
381
|
+
return Effect.interrupt
|
|
382
|
+
} else if (self.state.fiber !== undefined && options?.onlyIfMissing === true) {
|
|
383
|
+
return Effect.sync(constInterruptedFiber)
|
|
384
|
+
}
|
|
385
|
+
const runtime = Runtime.make<R>({
|
|
386
|
+
context: parent.currentContext as any,
|
|
387
|
+
fiberRefs: parent.getFiberRefs(),
|
|
388
|
+
runtimeFlags: Runtime.defaultRuntime.runtimeFlags
|
|
389
|
+
})
|
|
390
|
+
const fiber = Runtime.runFork(runtime)(effect)
|
|
391
|
+
unsafeSet(self, fiber, { ...options, interruptAs: parent.id() })
|
|
392
|
+
return Effect.succeed(fiber)
|
|
393
|
+
})
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberHandle.
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```ts
|
|
400
|
+
* import { Context, Effect, FiberHandle } from "effect"
|
|
401
|
+
*
|
|
402
|
+
* interface Users {
|
|
403
|
+
* readonly _: unique symbol
|
|
404
|
+
* }
|
|
405
|
+
* const Users = Context.GenericTag<Users, {
|
|
406
|
+
* getAll: Effect.Effect<Array<unknown>>
|
|
407
|
+
* }>("Users")
|
|
408
|
+
*
|
|
409
|
+
* Effect.gen(function*() {
|
|
410
|
+
* const handle = yield* FiberHandle.make()
|
|
411
|
+
* const run = yield* FiberHandle.runtime(handle)<Users>()
|
|
412
|
+
*
|
|
413
|
+
* // run an effect and set the fiber in the handle
|
|
414
|
+
* run(Effect.andThen(Users, _ => _.getAll))
|
|
415
|
+
*
|
|
416
|
+
* // this will interrupt the previous fiber
|
|
417
|
+
* run(Effect.andThen(Users, _ => _.getAll))
|
|
418
|
+
* }).pipe(
|
|
419
|
+
* Effect.scoped // The fiber will be interrupted when the scope is closed
|
|
420
|
+
* )
|
|
421
|
+
* ```
|
|
422
|
+
*
|
|
423
|
+
* @since 2.0.0
|
|
424
|
+
* @categories combinators
|
|
425
|
+
*/
|
|
426
|
+
export const runtime: <A, E>(
|
|
427
|
+
self: FiberHandle<A, E>
|
|
428
|
+
) => <R = never>() => Effect.Effect<
|
|
429
|
+
<XE extends E, XA extends A>(
|
|
430
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
431
|
+
options?:
|
|
432
|
+
| Runtime.RunForkOptions & {
|
|
433
|
+
readonly onlyIfMissing?: boolean | undefined
|
|
434
|
+
readonly propagateInterruption?: boolean | undefined
|
|
435
|
+
}
|
|
436
|
+
| undefined
|
|
437
|
+
) => Fiber.RuntimeFiber<XA, XE>,
|
|
438
|
+
never,
|
|
439
|
+
R
|
|
440
|
+
> = <A, E>(self: FiberHandle<A, E>) => <R>() =>
|
|
441
|
+
Effect.map(
|
|
442
|
+
Effect.runtime<R>(),
|
|
443
|
+
(runtime) => {
|
|
444
|
+
const runFork = Runtime.runFork(runtime)
|
|
445
|
+
return <XE extends E, XA extends A>(
|
|
446
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
447
|
+
options?:
|
|
448
|
+
| Runtime.RunForkOptions & {
|
|
449
|
+
readonly onlyIfMissing?: boolean | undefined
|
|
450
|
+
readonly propagateInterruption?: boolean | undefined
|
|
451
|
+
}
|
|
452
|
+
| undefined
|
|
453
|
+
) => {
|
|
454
|
+
if (self.state._tag === "Closed") {
|
|
455
|
+
return constInterruptedFiber()
|
|
456
|
+
} else if (self.state.fiber !== undefined && options?.onlyIfMissing === true) {
|
|
457
|
+
return constInterruptedFiber()
|
|
458
|
+
}
|
|
459
|
+
const fiber = runFork(effect, options)
|
|
460
|
+
unsafeSet(self, fiber, options)
|
|
461
|
+
return fiber
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
)
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberHandle.
|
|
468
|
+
*
|
|
469
|
+
* The returned run function will return Promise's that will resolve when the
|
|
470
|
+
* fiber completes.
|
|
471
|
+
*
|
|
472
|
+
* @since 3.13.0
|
|
473
|
+
* @categories combinators
|
|
474
|
+
*/
|
|
475
|
+
export const runtimePromise = <A, E>(self: FiberHandle<A, E>): <R = never>() => Effect.Effect<
|
|
476
|
+
<XE extends E, XA extends A>(
|
|
477
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
478
|
+
options?:
|
|
479
|
+
| Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
|
|
480
|
+
| undefined
|
|
481
|
+
) => Promise<XA>,
|
|
482
|
+
never,
|
|
483
|
+
R
|
|
484
|
+
> =>
|
|
485
|
+
<R>() =>
|
|
486
|
+
Effect.map(
|
|
487
|
+
runtime(self)<R>(),
|
|
488
|
+
(runFork) =>
|
|
489
|
+
<XE extends E, XA extends A>(
|
|
490
|
+
effect: Effect.Effect<XA, XE, R>,
|
|
491
|
+
options?:
|
|
492
|
+
| Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
|
|
493
|
+
| undefined
|
|
494
|
+
): Promise<XA> =>
|
|
495
|
+
new Promise((resolve, reject) =>
|
|
496
|
+
runFork(effect, options).addObserver((exit) => {
|
|
497
|
+
if (Exit.isSuccess(exit)) {
|
|
498
|
+
resolve(exit.value)
|
|
499
|
+
} else {
|
|
500
|
+
reject(Cause.squash(exit.cause))
|
|
501
|
+
}
|
|
502
|
+
})
|
|
503
|
+
)
|
|
504
|
+
)
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* If any of the Fiber's in the handle terminate with a failure,
|
|
508
|
+
* the returned Effect will terminate with the first failure that occurred.
|
|
509
|
+
*
|
|
510
|
+
* @since 2.0.0
|
|
511
|
+
* @categories combinators
|
|
512
|
+
* @example
|
|
513
|
+
* ```ts
|
|
514
|
+
* import { Effect, FiberHandle } from "effect";
|
|
515
|
+
*
|
|
516
|
+
* Effect.gen(function* (_) {
|
|
517
|
+
* const handle = yield* _(FiberHandle.make());
|
|
518
|
+
* yield* _(FiberHandle.set(handle, Effect.runFork(Effect.fail("error"))));
|
|
519
|
+
*
|
|
520
|
+
* // parent fiber will fail with "error"
|
|
521
|
+
* yield* _(FiberHandle.join(handle));
|
|
522
|
+
* });
|
|
523
|
+
* ```
|
|
524
|
+
*/
|
|
525
|
+
export const join = <A, E>(self: FiberHandle<A, E>): Effect.Effect<void, E> =>
|
|
526
|
+
Deferred.await(self.deferred as Deferred.Deferred<void, E>)
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* Wait for the fiber in the FiberHandle to complete.
|
|
530
|
+
*
|
|
531
|
+
* @since 3.13.0
|
|
532
|
+
* @categories combinators
|
|
533
|
+
*/
|
|
534
|
+
export const awaitEmpty = <A, E>(self: FiberHandle<A, E>): Effect.Effect<void, E> =>
|
|
535
|
+
Effect.suspend(() => {
|
|
536
|
+
if (self.state._tag === "Closed" || self.state.fiber === undefined) {
|
|
537
|
+
return Effect.void
|
|
538
|
+
}
|
|
539
|
+
return Fiber.await(self.state.fiber)
|
|
540
|
+
})
|