@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
package/src/Take.ts
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Cause from "./Cause.js"
|
|
5
|
+
import type * as Chunk from "./Chunk.js"
|
|
6
|
+
import type * as Effect from "./Effect.js"
|
|
7
|
+
import type * as Exit from "./Exit.js"
|
|
8
|
+
import * as internal from "./internal/take.js"
|
|
9
|
+
import type * as Option from "./Option.js"
|
|
10
|
+
import type { Pipeable } from "./Pipeable.js"
|
|
11
|
+
import type * as Types from "./Types.js"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @since 2.0.0
|
|
15
|
+
* @category symbols
|
|
16
|
+
*/
|
|
17
|
+
export const TakeTypeId: unique symbol = internal.TakeTypeId
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @since 2.0.0
|
|
21
|
+
* @category symbols
|
|
22
|
+
*/
|
|
23
|
+
export type TakeTypeId = typeof TakeTypeId
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A `Take<A, E>` represents a single `take` from a queue modeling a stream of
|
|
27
|
+
* values. A `Take` may be a failure cause `Cause<E>`, a chunk value `Chunk<A>`,
|
|
28
|
+
* or an end-of-stream marker.
|
|
29
|
+
*
|
|
30
|
+
* @since 2.0.0
|
|
31
|
+
* @category models
|
|
32
|
+
*/
|
|
33
|
+
export interface Take<out A, out E = never> extends Take.Variance<A, E>, Pipeable {
|
|
34
|
+
/** @internal */
|
|
35
|
+
readonly exit: Exit.Exit<Chunk.Chunk<A>, Option.Option<E>>
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @since 2.0.0
|
|
40
|
+
*/
|
|
41
|
+
export declare namespace Take {
|
|
42
|
+
/**
|
|
43
|
+
* @since 2.0.0
|
|
44
|
+
* @category models
|
|
45
|
+
*/
|
|
46
|
+
export interface Variance<out A, out E> {
|
|
47
|
+
readonly [TakeTypeId]: {
|
|
48
|
+
readonly _A: Types.Covariant<A>
|
|
49
|
+
readonly _E: Types.Covariant<E>
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Creates a `Take` with the specified chunk.
|
|
56
|
+
*
|
|
57
|
+
* @since 2.0.0
|
|
58
|
+
* @category constructors
|
|
59
|
+
*/
|
|
60
|
+
export const chunk: <A>(chunk: Chunk.Chunk<A>) => Take<A> = internal.chunk
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Creates a failing `Take` with the specified defect.
|
|
64
|
+
*
|
|
65
|
+
* @since 2.0.0
|
|
66
|
+
* @category constructors
|
|
67
|
+
*/
|
|
68
|
+
export const die: (defect: unknown) => Take<never> = internal.die
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Creates a failing `Take` with the specified error message.
|
|
72
|
+
*
|
|
73
|
+
* @since 2.0.0
|
|
74
|
+
* @category constructors
|
|
75
|
+
*/
|
|
76
|
+
export const dieMessage: (message: string) => Take<never> = internal.dieMessage
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Transforms a `Take<A, E>` to an `Effect<A, E>`.
|
|
80
|
+
*
|
|
81
|
+
* @since 2.0.0
|
|
82
|
+
* @category destructors
|
|
83
|
+
*/
|
|
84
|
+
export const done: <A, E>(self: Take<A, E>) => Effect.Effect<Chunk.Chunk<A>, Option.Option<E>> = internal.done
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Represents the end-of-stream marker.
|
|
88
|
+
*
|
|
89
|
+
* @since 2.0.0
|
|
90
|
+
* @category constructors
|
|
91
|
+
*/
|
|
92
|
+
export const end: Take<never> = internal.end
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Creates a failing `Take` with the specified error.
|
|
96
|
+
*
|
|
97
|
+
* @since 2.0.0
|
|
98
|
+
* @category constructors
|
|
99
|
+
*/
|
|
100
|
+
export const fail: <E>(error: E) => Take<never, E> = internal.fail
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Creates a failing `Take` with the specified cause.
|
|
104
|
+
*
|
|
105
|
+
* @since 2.0.0
|
|
106
|
+
* @category constructors
|
|
107
|
+
*/
|
|
108
|
+
export const failCause: <E>(cause: Cause.Cause<E>) => Take<never, E> = internal.failCause
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Creates an effect from `Effect<A, E, R>` that does not fail, but succeeds with
|
|
112
|
+
* the `Take<A, E>`. Error from stream when pulling is converted to
|
|
113
|
+
* `Take.failCause`. Creates a single value chunk.
|
|
114
|
+
*
|
|
115
|
+
* @since 2.0.0
|
|
116
|
+
* @category constructors
|
|
117
|
+
*/
|
|
118
|
+
export const fromEffect: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<Take<A, E>, never, R> =
|
|
119
|
+
internal.fromEffect
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Creates a `Take` from an `Exit`.
|
|
123
|
+
*
|
|
124
|
+
* @since 2.0.0
|
|
125
|
+
* @category constructors
|
|
126
|
+
*/
|
|
127
|
+
export const fromExit: <A, E>(exit: Exit.Exit<A, E>) => Take<A, E> = internal.fromExit
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Creates effect from `Effect<Chunk<A>, Option<E>, R>` that does not fail, but
|
|
131
|
+
* succeeds with the `Take<A, E>`. Errors from stream when pulling are converted
|
|
132
|
+
* to `Take.failCause`, and the end-of-stream is converted to `Take.end`.
|
|
133
|
+
*
|
|
134
|
+
* @since 2.0.0
|
|
135
|
+
* @category constructors
|
|
136
|
+
*/
|
|
137
|
+
export const fromPull: <A, E, R>(
|
|
138
|
+
pull: Effect.Effect<Chunk.Chunk<A>, Option.Option<E>, R>
|
|
139
|
+
) => Effect.Effect<Take<A, E>, never, R> = internal.fromPull
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Checks if this `take` is done (`Take.end`).
|
|
143
|
+
*
|
|
144
|
+
* @since 2.0.0
|
|
145
|
+
* @category getters
|
|
146
|
+
*/
|
|
147
|
+
export const isDone: <A, E>(self: Take<A, E>) => boolean = internal.isDone
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Checks if this `take` is a failure.
|
|
151
|
+
*
|
|
152
|
+
* @since 2.0.0
|
|
153
|
+
* @category getters
|
|
154
|
+
*/
|
|
155
|
+
export const isFailure: <A, E>(self: Take<A, E>) => boolean = internal.isFailure
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Checks if this `take` is a success.
|
|
159
|
+
*
|
|
160
|
+
* @since 2.0.0
|
|
161
|
+
* @category getters
|
|
162
|
+
*/
|
|
163
|
+
export const isSuccess: <A, E>(self: Take<A, E>) => boolean = internal.isSuccess
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Constructs a `Take`.
|
|
167
|
+
*
|
|
168
|
+
* @since 2.0.0
|
|
169
|
+
* @category constructors
|
|
170
|
+
*/
|
|
171
|
+
export const make: <A, E>(exit: Exit.Exit<Chunk.Chunk<A>, Option.Option<E>>) => Take<A, E> = internal.make
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Transforms `Take<A, E>` to `Take<B, A>` by applying function `f`.
|
|
175
|
+
*
|
|
176
|
+
* @since 2.0.0
|
|
177
|
+
* @category mapping
|
|
178
|
+
*/
|
|
179
|
+
export const map: {
|
|
180
|
+
<A, B>(f: (a: A) => B): <E>(self: Take<A, E>) => Take<B, E>
|
|
181
|
+
<A, E, B>(self: Take<A, E>, f: (a: A) => B): Take<B, E>
|
|
182
|
+
} = internal.map
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Folds over the failure cause, success value and end-of-stream marker to
|
|
186
|
+
* yield a value.
|
|
187
|
+
*
|
|
188
|
+
* @since 2.0.0
|
|
189
|
+
* @category destructors
|
|
190
|
+
*/
|
|
191
|
+
export const match: {
|
|
192
|
+
<Z, E, Z2, A, Z3>(
|
|
193
|
+
options: {
|
|
194
|
+
readonly onEnd: () => Z
|
|
195
|
+
readonly onFailure: (cause: Cause.Cause<E>) => Z2
|
|
196
|
+
readonly onSuccess: (chunk: Chunk.Chunk<A>) => Z3
|
|
197
|
+
}
|
|
198
|
+
): (self: Take<A, E>) => Z | Z2 | Z3
|
|
199
|
+
<A, E, Z, Z2, Z3>(
|
|
200
|
+
self: Take<A, E>,
|
|
201
|
+
options: {
|
|
202
|
+
readonly onEnd: () => Z
|
|
203
|
+
readonly onFailure: (cause: Cause.Cause<E>) => Z2
|
|
204
|
+
readonly onSuccess: (chunk: Chunk.Chunk<A>) => Z3
|
|
205
|
+
}
|
|
206
|
+
): Z | Z2 | Z3
|
|
207
|
+
} = internal.match
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Effectful version of `Take.fold`.
|
|
211
|
+
*
|
|
212
|
+
* Folds over the failure cause, success value and end-of-stream marker to
|
|
213
|
+
* yield an effect.
|
|
214
|
+
*
|
|
215
|
+
* @since 2.0.0
|
|
216
|
+
* @category destructors
|
|
217
|
+
*/
|
|
218
|
+
export const matchEffect: {
|
|
219
|
+
<Z, E2, R, E, Z2, R2, A, Z3, E3, R3>(
|
|
220
|
+
options: {
|
|
221
|
+
readonly onEnd: Effect.Effect<Z, E2, R>
|
|
222
|
+
readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<Z2, E2, R2>
|
|
223
|
+
readonly onSuccess: (chunk: Chunk.Chunk<A>) => Effect.Effect<Z3, E3, R3>
|
|
224
|
+
}
|
|
225
|
+
): (self: Take<A, E>) => Effect.Effect<Z | Z2 | Z3, E2 | E | E3, R | R2 | R3>
|
|
226
|
+
<A, E, Z, E2, R, Z2, R2, Z3, E3, R3>(
|
|
227
|
+
self: Take<A, E>,
|
|
228
|
+
options: {
|
|
229
|
+
readonly onEnd: Effect.Effect<Z, E2, R>
|
|
230
|
+
readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<Z2, E2, R2>
|
|
231
|
+
readonly onSuccess: (chunk: Chunk.Chunk<A>) => Effect.Effect<Z3, E3, R3>
|
|
232
|
+
}
|
|
233
|
+
): Effect.Effect<Z | Z2 | Z3, E | E2 | E3, R | R2 | R3>
|
|
234
|
+
} = internal.matchEffect
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Creates a `Take` with a single value chunk.
|
|
238
|
+
*
|
|
239
|
+
* @since 2.0.0
|
|
240
|
+
* @category constructors
|
|
241
|
+
*/
|
|
242
|
+
export const of: <A>(value: A) => Take<A> = internal.of
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Returns an effect that effectfully "peeks" at the success of this take.
|
|
246
|
+
*
|
|
247
|
+
* @since 2.0.0
|
|
248
|
+
* @category sequencing
|
|
249
|
+
*/
|
|
250
|
+
export const tap: {
|
|
251
|
+
<A, X, E2, R>(
|
|
252
|
+
f: (chunk: Chunk.Chunk<A>) => Effect.Effect<X, E2, R>
|
|
253
|
+
): <E>(self: Take<A, E>) => Effect.Effect<void, E2 | E, R>
|
|
254
|
+
<A, E, X, E2, R>(
|
|
255
|
+
self: Take<A, E>,
|
|
256
|
+
f: (chunk: Chunk.Chunk<A>) => Effect.Effect<X, E2, R>
|
|
257
|
+
): Effect.Effect<void, E | E2, R>
|
|
258
|
+
} = internal.tap
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Chunk from "./Chunk.js"
|
|
5
|
+
import * as Either from "./Either.js"
|
|
6
|
+
import * as Equal from "./Equal.js"
|
|
7
|
+
import type * as Fiber from "./Fiber.js"
|
|
8
|
+
import { pipe } from "./Function.js"
|
|
9
|
+
import * as Hash from "./Hash.js"
|
|
10
|
+
import * as HashSet from "./HashSet.js"
|
|
11
|
+
import { getBugErrorMessage } from "./internal/errors.js"
|
|
12
|
+
import type * as MutableRef from "./MutableRef.js"
|
|
13
|
+
import { hasProperty } from "./Predicate.js"
|
|
14
|
+
import type * as SortedSet from "./SortedSet.js"
|
|
15
|
+
import type * as Types from "./Types.js"
|
|
16
|
+
|
|
17
|
+
/** @internal */
|
|
18
|
+
const TestAnnotationSymbolKey = "effect/TestAnnotation"
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @since 2.0.0
|
|
22
|
+
*/
|
|
23
|
+
export const TestAnnotationTypeId: unique symbol = Symbol.for(TestAnnotationSymbolKey)
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @since 2.0.0
|
|
27
|
+
*/
|
|
28
|
+
export type TestAnnotationTypeId = typeof TestAnnotationTypeId
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @since 2.0.0
|
|
32
|
+
*/
|
|
33
|
+
export interface TestAnnotation<in out A> extends Equal.Equal {
|
|
34
|
+
readonly [TestAnnotationTypeId]: {
|
|
35
|
+
readonly _A: Types.Invariant<A>
|
|
36
|
+
}
|
|
37
|
+
readonly identifier: string
|
|
38
|
+
readonly initial: A
|
|
39
|
+
combine(a: A, b: A): A
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** @internal */
|
|
43
|
+
class TestAnnotationImpl<A> implements Equal.Equal {
|
|
44
|
+
readonly [TestAnnotationTypeId] = {
|
|
45
|
+
_A: (_: any) => _
|
|
46
|
+
}
|
|
47
|
+
constructor(
|
|
48
|
+
readonly identifier: string,
|
|
49
|
+
readonly initial: A,
|
|
50
|
+
readonly combine: (a: A, b: A) => A
|
|
51
|
+
) {}
|
|
52
|
+
[Hash.symbol](): number {
|
|
53
|
+
return pipe(
|
|
54
|
+
Hash.hash(TestAnnotationSymbolKey),
|
|
55
|
+
Hash.combine(Hash.hash(this.identifier)),
|
|
56
|
+
Hash.cached(this)
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
[Equal.symbol](that: unknown): boolean {
|
|
60
|
+
return isTestAnnotation(that) &&
|
|
61
|
+
this.identifier === that.identifier
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @since 2.0.0
|
|
67
|
+
*/
|
|
68
|
+
export const isTestAnnotation = (u: unknown): u is TestAnnotation<unknown> => hasProperty(u, TestAnnotationTypeId)
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @since 2.0.0
|
|
72
|
+
*/
|
|
73
|
+
export const make = <A>(
|
|
74
|
+
identifier: string,
|
|
75
|
+
initial: A,
|
|
76
|
+
combine: (a: A, b: A) => A
|
|
77
|
+
): TestAnnotation<A> => {
|
|
78
|
+
return new TestAnnotationImpl<A>(identifier, initial, combine)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @since 2.0.0
|
|
83
|
+
*/
|
|
84
|
+
export const compose = <A>(
|
|
85
|
+
left: Either.Either<Chunk.Chunk<A>, number>,
|
|
86
|
+
right: Either.Either<Chunk.Chunk<A>, number>
|
|
87
|
+
): Either.Either<Chunk.Chunk<A>, number> => {
|
|
88
|
+
if (Either.isLeft(left) && Either.isLeft(right)) {
|
|
89
|
+
return Either.left(left.left + right.left)
|
|
90
|
+
}
|
|
91
|
+
if (Either.isRight(left) && Either.isRight(right)) {
|
|
92
|
+
return Either.right(pipe(left.right, Chunk.appendAll(right.right)))
|
|
93
|
+
}
|
|
94
|
+
if (Either.isRight(left) && Either.isLeft(right)) {
|
|
95
|
+
return right
|
|
96
|
+
}
|
|
97
|
+
if (Either.isLeft(left) && Either.isRight(right)) {
|
|
98
|
+
return right
|
|
99
|
+
}
|
|
100
|
+
throw new Error(getBugErrorMessage("TestAnnotation.compose"))
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @since 2.0.0
|
|
105
|
+
*/
|
|
106
|
+
export const fibers: TestAnnotation<
|
|
107
|
+
Either.Either<Chunk.Chunk<MutableRef.MutableRef<SortedSet.SortedSet<Fiber.RuntimeFiber<unknown, unknown>>>>, number>
|
|
108
|
+
> = make<
|
|
109
|
+
Either.Either<Chunk.Chunk<MutableRef.MutableRef<SortedSet.SortedSet<Fiber.RuntimeFiber<unknown, unknown>>>>, number>
|
|
110
|
+
>(
|
|
111
|
+
"fibers",
|
|
112
|
+
Either.left(0),
|
|
113
|
+
compose
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* An annotation which counts ignored tests.
|
|
118
|
+
*
|
|
119
|
+
* @since 2.0.0
|
|
120
|
+
*/
|
|
121
|
+
export const ignored: TestAnnotation<number> = make(
|
|
122
|
+
"ignored",
|
|
123
|
+
0,
|
|
124
|
+
(a, b) => a + b
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* An annotation which counts repeated tests.
|
|
129
|
+
*
|
|
130
|
+
* @since 2.0.0
|
|
131
|
+
*/
|
|
132
|
+
export const repeated: TestAnnotation<number> = make(
|
|
133
|
+
"repeated",
|
|
134
|
+
0,
|
|
135
|
+
(a, b) => a + b
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* An annotation which counts retried tests.
|
|
140
|
+
*
|
|
141
|
+
* @since 2.0.0
|
|
142
|
+
*/
|
|
143
|
+
export const retried: TestAnnotation<number> = make(
|
|
144
|
+
"retried",
|
|
145
|
+
0,
|
|
146
|
+
(a, b) => a + b
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* An annotation which tags tests with strings.
|
|
151
|
+
*
|
|
152
|
+
* @since 2.0.0
|
|
153
|
+
*/
|
|
154
|
+
export const tagged: TestAnnotation<HashSet.HashSet<string>> = make(
|
|
155
|
+
"tagged",
|
|
156
|
+
HashSet.empty(),
|
|
157
|
+
(a, b) => pipe(a, HashSet.union(b))
|
|
158
|
+
)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import { dual } from "./Function.js"
|
|
5
|
+
import * as HashMap from "./HashMap.js"
|
|
6
|
+
import { hasProperty } from "./Predicate.js"
|
|
7
|
+
import type * as TestAnnotation from "./TestAnnotation.js"
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @since 2.0.0
|
|
11
|
+
*/
|
|
12
|
+
export const TestAnnotationMapTypeId: unique symbol = Symbol.for("effect/TestAnnotationMap")
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @since 2.0.0
|
|
16
|
+
*/
|
|
17
|
+
export type TestAnnotationMapTypeId = typeof TestAnnotationMapTypeId
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* An annotation map keeps track of annotations of different types.
|
|
21
|
+
*
|
|
22
|
+
* @since 2.0.0
|
|
23
|
+
*/
|
|
24
|
+
export interface TestAnnotationMap {
|
|
25
|
+
readonly [TestAnnotationMapTypeId]: TestAnnotationMapTypeId
|
|
26
|
+
/** @internal */
|
|
27
|
+
readonly map: HashMap.HashMap<TestAnnotation.TestAnnotation<any>, any>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @internal */
|
|
31
|
+
class TestAnnotationMapImpl implements TestAnnotationMap {
|
|
32
|
+
readonly [TestAnnotationMapTypeId]: TestAnnotationMapTypeId = TestAnnotationMapTypeId
|
|
33
|
+
constructor(readonly map: HashMap.HashMap<TestAnnotation.TestAnnotation<any>, any>) {
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @since 2.0.0
|
|
39
|
+
*/
|
|
40
|
+
export const isTestAnnotationMap = (u: unknown): u is TestAnnotationMap => hasProperty(u, TestAnnotationMapTypeId)
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @since 2.0.0
|
|
44
|
+
*/
|
|
45
|
+
export const empty: (_: void) => TestAnnotationMap = () => new TestAnnotationMapImpl(HashMap.empty())
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @since 2.0.0
|
|
49
|
+
*/
|
|
50
|
+
export const make = (map: HashMap.HashMap<TestAnnotation.TestAnnotation<any>, any>): TestAnnotationMap => {
|
|
51
|
+
return new TestAnnotationMapImpl(map)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @since 2.0.0
|
|
56
|
+
*/
|
|
57
|
+
export const overwrite = dual<
|
|
58
|
+
<A>(key: TestAnnotation.TestAnnotation<A>, value: A) => (self: TestAnnotationMap) => TestAnnotationMap,
|
|
59
|
+
<A>(self: TestAnnotationMap, key: TestAnnotation.TestAnnotation<A>, value: A) => TestAnnotationMap
|
|
60
|
+
>(3, (self, key, value) => make(HashMap.set(self.map, key, value)))
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @since 2.0.0
|
|
64
|
+
*/
|
|
65
|
+
export const update = dual<
|
|
66
|
+
<A>(key: TestAnnotation.TestAnnotation<A>, f: (value: A) => A) => (self: TestAnnotationMap) => TestAnnotationMap,
|
|
67
|
+
<A>(self: TestAnnotationMap, key: TestAnnotation.TestAnnotation<A>, f: (value: A) => A) => TestAnnotationMap
|
|
68
|
+
>(3, <A>(self: TestAnnotationMap, key: TestAnnotation.TestAnnotation<A>, f: (value: A) => A) => {
|
|
69
|
+
let value = key.initial
|
|
70
|
+
if (HashMap.has(self.map, key)) {
|
|
71
|
+
value = HashMap.unsafeGet(self.map, key) as A
|
|
72
|
+
}
|
|
73
|
+
return overwrite(self, key, f(value))
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Retrieves the annotation of the specified type, or its default value if
|
|
78
|
+
* there is none.
|
|
79
|
+
*
|
|
80
|
+
* @since 2.0.0
|
|
81
|
+
*/
|
|
82
|
+
export const get = dual<
|
|
83
|
+
<A>(key: TestAnnotation.TestAnnotation<A>) => (self: TestAnnotationMap) => A,
|
|
84
|
+
<A>(self: TestAnnotationMap, key: TestAnnotation.TestAnnotation<A>) => A
|
|
85
|
+
>(2, <A>(self: TestAnnotationMap, key: TestAnnotation.TestAnnotation<A>) => {
|
|
86
|
+
if (HashMap.has(self.map, key)) {
|
|
87
|
+
return HashMap.unsafeGet(self.map, key) as A
|
|
88
|
+
}
|
|
89
|
+
return key.initial
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Appends the specified annotation to the annotation map.
|
|
94
|
+
*
|
|
95
|
+
* @since 2.0.0
|
|
96
|
+
*/
|
|
97
|
+
export const annotate = dual<
|
|
98
|
+
<A>(key: TestAnnotation.TestAnnotation<A>, value: A) => (self: TestAnnotationMap) => TestAnnotationMap,
|
|
99
|
+
<A>(self: TestAnnotationMap, key: TestAnnotation.TestAnnotation<A>, value: A) => TestAnnotationMap
|
|
100
|
+
>(3, (self, key, value) => update(self, key, (_) => key.combine(_, value)))
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @since 2.0.0
|
|
104
|
+
*/
|
|
105
|
+
export const combine = dual<
|
|
106
|
+
(that: TestAnnotationMap) => (self: TestAnnotationMap) => TestAnnotationMap,
|
|
107
|
+
(self: TestAnnotationMap, that: TestAnnotationMap) => TestAnnotationMap
|
|
108
|
+
>(2, (self, that) => {
|
|
109
|
+
let result = self.map
|
|
110
|
+
for (const entry of that.map) {
|
|
111
|
+
if (HashMap.has(result, entry[0])) {
|
|
112
|
+
const value = HashMap.get(result, entry[0])!
|
|
113
|
+
result = HashMap.set(result, entry[0], entry[0].combine(value, entry[1]))
|
|
114
|
+
} else {
|
|
115
|
+
result = HashMap.set(result, entry[0], entry[1])
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return make(result)
|
|
119
|
+
})
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as RA from "./Array.js"
|
|
5
|
+
import * as Context from "./Context.js"
|
|
6
|
+
import type * as Effect from "./Effect.js"
|
|
7
|
+
import * as Equal from "./Equal.js"
|
|
8
|
+
import type * as Fiber from "./Fiber.js"
|
|
9
|
+
import { pipe } from "./Function.js"
|
|
10
|
+
import * as effect from "./internal/core-effect.js"
|
|
11
|
+
import * as core from "./internal/core.js"
|
|
12
|
+
import * as fiber from "./internal/fiber.js"
|
|
13
|
+
import * as MutableRef from "./MutableRef.js"
|
|
14
|
+
import { hasProperty } from "./Predicate.js"
|
|
15
|
+
import * as Ref from "./Ref.js"
|
|
16
|
+
import * as SortedSet from "./SortedSet.js"
|
|
17
|
+
import * as TestAnnotation from "./TestAnnotation.js"
|
|
18
|
+
import * as TestAnnotationMap from "./TestAnnotationMap.js"
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @since 2.0.0
|
|
22
|
+
*/
|
|
23
|
+
export const TestAnnotationsTypeId: unique symbol = Symbol.for("effect/TestAnnotations")
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @since 2.0.0
|
|
27
|
+
*/
|
|
28
|
+
export type TestAnnotationsTypeId = typeof TestAnnotationsTypeId
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The `Annotations` trait provides access to an annotation map that tests can
|
|
32
|
+
* add arbitrary annotations to. Each annotation consists of a string
|
|
33
|
+
* identifier, an initial value, and a function for combining two values.
|
|
34
|
+
* Annotations form monoids and you can think of `Annotations` as a more
|
|
35
|
+
* structured logging service or as a super polymorphic version of the writer
|
|
36
|
+
* monad effect.
|
|
37
|
+
*
|
|
38
|
+
* @since 2.0.0
|
|
39
|
+
*/
|
|
40
|
+
export interface TestAnnotations {
|
|
41
|
+
readonly [TestAnnotationsTypeId]: TestAnnotationsTypeId
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A ref containing the bacnking map for all annotations
|
|
45
|
+
*/
|
|
46
|
+
readonly ref: Ref.Ref<TestAnnotationMap.TestAnnotationMap>
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Accesses an `Annotations` instance in the context and retrieves the
|
|
50
|
+
* annotation of the specified type, or its default value if there is none.
|
|
51
|
+
*/
|
|
52
|
+
get<A>(key: TestAnnotation.TestAnnotation<A>): Effect.Effect<A>
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Accesses an `Annotations` instance in the context and appends the
|
|
56
|
+
* specified annotation to the annotation map.
|
|
57
|
+
*/
|
|
58
|
+
annotate<A>(key: TestAnnotation.TestAnnotation<A>, value: A): Effect.Effect<void>
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Returns the set of all fibers in this test.
|
|
62
|
+
*/
|
|
63
|
+
readonly supervisedFibers: Effect.Effect<
|
|
64
|
+
SortedSet.SortedSet<Fiber.RuntimeFiber<unknown, unknown>>
|
|
65
|
+
>
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** @internal */
|
|
69
|
+
class AnnotationsImpl implements TestAnnotations {
|
|
70
|
+
readonly [TestAnnotationsTypeId]: TestAnnotationsTypeId = TestAnnotationsTypeId
|
|
71
|
+
constructor(readonly ref: Ref.Ref<TestAnnotationMap.TestAnnotationMap>) {
|
|
72
|
+
}
|
|
73
|
+
get<A>(key: TestAnnotation.TestAnnotation<A>): Effect.Effect<A> {
|
|
74
|
+
return core.map(Ref.get(this.ref), TestAnnotationMap.get(key))
|
|
75
|
+
}
|
|
76
|
+
annotate<A>(key: TestAnnotation.TestAnnotation<A>, value: A): Effect.Effect<void> {
|
|
77
|
+
return Ref.update(this.ref, TestAnnotationMap.annotate(key, value))
|
|
78
|
+
}
|
|
79
|
+
get supervisedFibers(): Effect.Effect<SortedSet.SortedSet<Fiber.RuntimeFiber<unknown, unknown>>> {
|
|
80
|
+
return effect.descriptorWith((descriptor) =>
|
|
81
|
+
core.flatMap(this.get(TestAnnotation.fibers), (either) => {
|
|
82
|
+
switch (either._tag) {
|
|
83
|
+
case "Left": {
|
|
84
|
+
return core.succeed(SortedSet.empty(fiber.Order))
|
|
85
|
+
}
|
|
86
|
+
case "Right": {
|
|
87
|
+
return pipe(
|
|
88
|
+
either.right,
|
|
89
|
+
core.forEachSequential((ref) => core.sync(() => MutableRef.get(ref))),
|
|
90
|
+
core.map(RA.reduce(SortedSet.empty(fiber.Order), (a, b) => SortedSet.union(a, b))),
|
|
91
|
+
core.map(SortedSet.filter((fiber) => !Equal.equals(fiber.id(), descriptor.id)))
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
})
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @since 2.0.0
|
|
102
|
+
*/
|
|
103
|
+
export const TestAnnotations: Context.Tag<TestAnnotations, TestAnnotations> = Context.GenericTag<TestAnnotations>(
|
|
104
|
+
"effect/Annotations"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @since 2.0.0
|
|
109
|
+
*/
|
|
110
|
+
export const isTestAnnotations = (u: unknown): u is TestAnnotations => hasProperty(u, TestAnnotationsTypeId)
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @since 2.0.0
|
|
114
|
+
*/
|
|
115
|
+
export const make = (
|
|
116
|
+
ref: Ref.Ref<TestAnnotationMap.TestAnnotationMap>
|
|
117
|
+
): TestAnnotations => new AnnotationsImpl(ref)
|