@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
package/src/LayerMap.ts
ADDED
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 3.14.0
|
|
3
|
+
* @experimental
|
|
4
|
+
*/
|
|
5
|
+
import * as Context from "./Context.js"
|
|
6
|
+
import type * as Duration from "./Duration.js"
|
|
7
|
+
import * as Effect from "./Effect.js"
|
|
8
|
+
import * as FiberRefsPatch from "./FiberRefsPatch.js"
|
|
9
|
+
import { identity } from "./Function.js"
|
|
10
|
+
import * as core from "./internal/core.js"
|
|
11
|
+
import * as Layer from "./Layer.js"
|
|
12
|
+
import * as RcMap from "./RcMap.js"
|
|
13
|
+
import * as Runtime from "./Runtime.js"
|
|
14
|
+
import * as Scope from "./Scope.js"
|
|
15
|
+
import type { Mutable, NoExcessProperties } from "./Types.js"
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @since 3.14.0
|
|
19
|
+
* @category Symbols
|
|
20
|
+
*/
|
|
21
|
+
export const TypeId: unique symbol = Symbol.for("effect/LayerMap")
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @since 3.14.0
|
|
25
|
+
* @category Symbols
|
|
26
|
+
*/
|
|
27
|
+
export type TypeId = typeof TypeId
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @since 3.14.0
|
|
31
|
+
* @category Models
|
|
32
|
+
* @experimental
|
|
33
|
+
*/
|
|
34
|
+
export interface LayerMap<in K, in out I, out E = never> {
|
|
35
|
+
readonly [TypeId]: TypeId
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The internal RcMap that stores the resources.
|
|
39
|
+
*/
|
|
40
|
+
readonly rcMap: RcMap.RcMap<K, {
|
|
41
|
+
readonly layer: Layer.Layer<I, E>
|
|
42
|
+
readonly runtimeEffect: Effect.Effect<Runtime.Runtime<I>, E, Scope.Scope>
|
|
43
|
+
}, E>
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Retrieves a Layer for the resources associated with the key.
|
|
47
|
+
*/
|
|
48
|
+
get(key: K): Layer.Layer<I, E>
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Retrieves a Runtime for the resources associated with the key.
|
|
52
|
+
*/
|
|
53
|
+
runtime(key: K): Effect.Effect<Runtime.Runtime<I>, E, Scope.Scope>
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Invalidates the resource associated with the key.
|
|
57
|
+
*/
|
|
58
|
+
invalidate(key: K): Effect.Effect<void>
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @since 3.14.0
|
|
63
|
+
* @category Constructors
|
|
64
|
+
* @experimental
|
|
65
|
+
*
|
|
66
|
+
* A `LayerMap` allows you to create a map of Layer's that can be used to
|
|
67
|
+
* dynamically access resources based on a key.
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* import { NodeRuntime } from "@effect/platform-node"
|
|
71
|
+
* import { Context, Effect, FiberRef, Layer, LayerMap } from "effect"
|
|
72
|
+
*
|
|
73
|
+
* class Greeter extends Context.Tag("Greeter")<Greeter, {
|
|
74
|
+
* greet: Effect.Effect<string>
|
|
75
|
+
* }>() {}
|
|
76
|
+
*
|
|
77
|
+
* // create a service that wraps a LayerMap
|
|
78
|
+
* class GreeterMap extends LayerMap.Service<GreeterMap>()("GreeterMap", {
|
|
79
|
+
* // define the lookup function for the layer map
|
|
80
|
+
* //
|
|
81
|
+
* // The returned Layer will be used to provide the Greeter service for the
|
|
82
|
+
* // given name.
|
|
83
|
+
* lookup: (name: string) =>
|
|
84
|
+
* Layer.succeed(Greeter, {
|
|
85
|
+
* greet: Effect.succeed(`Hello, ${name}!`)
|
|
86
|
+
* }).pipe(
|
|
87
|
+
* Layer.merge(Layer.locallyScoped(FiberRef.currentConcurrency, 123))
|
|
88
|
+
* ),
|
|
89
|
+
*
|
|
90
|
+
* // If a layer is not used for a certain amount of time, it can be removed
|
|
91
|
+
* idleTimeToLive: "5 seconds",
|
|
92
|
+
*
|
|
93
|
+
* // Supply the dependencies for the layers in the LayerMap
|
|
94
|
+
* dependencies: []
|
|
95
|
+
* }) {}
|
|
96
|
+
*
|
|
97
|
+
* // usage
|
|
98
|
+
* const program: Effect.Effect<void, never, GreeterMap> = Effect.gen(function*() {
|
|
99
|
+
* // access and use the Greeter service
|
|
100
|
+
* const greeter = yield* Greeter
|
|
101
|
+
* yield* Effect.log(yield* greeter.greet)
|
|
102
|
+
* }).pipe(
|
|
103
|
+
* // use the GreeterMap service to provide a variant of the Greeter service
|
|
104
|
+
* Effect.provide(GreeterMap.get("John"))
|
|
105
|
+
* )
|
|
106
|
+
*
|
|
107
|
+
* // run the program
|
|
108
|
+
* program.pipe(
|
|
109
|
+
* Effect.provide(GreeterMap.Default),
|
|
110
|
+
* NodeRuntime.runMain
|
|
111
|
+
* )
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export const make: <
|
|
115
|
+
K,
|
|
116
|
+
L extends Layer.Layer<any, any, any>,
|
|
117
|
+
PreloadKeys extends Iterable<K> | undefined = undefined
|
|
118
|
+
>(
|
|
119
|
+
lookup: (key: K) => L,
|
|
120
|
+
options?: {
|
|
121
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
122
|
+
readonly preloadKeys?: PreloadKeys
|
|
123
|
+
} | undefined
|
|
124
|
+
) => Effect.Effect<
|
|
125
|
+
LayerMap<
|
|
126
|
+
K,
|
|
127
|
+
L extends Layer.Layer<infer _A, infer _E, infer _R> ? _A : never,
|
|
128
|
+
L extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never
|
|
129
|
+
>,
|
|
130
|
+
PreloadKeys extends undefined ? never : L extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never,
|
|
131
|
+
Scope.Scope | (L extends Layer.Layer<infer _A, infer _E, infer _R> ? _R : never)
|
|
132
|
+
> = Effect.fnUntraced(function*<I, K, EL, RL>(
|
|
133
|
+
lookup: (key: K) => Layer.Layer<I, EL, RL>,
|
|
134
|
+
options?: {
|
|
135
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
136
|
+
readonly preloadKeys?: Iterable<K> | undefined
|
|
137
|
+
} | undefined
|
|
138
|
+
) {
|
|
139
|
+
const context = yield* Effect.context<never>()
|
|
140
|
+
|
|
141
|
+
// If we are inside another layer build, use the current memo map,
|
|
142
|
+
// otherwise create a new one.
|
|
143
|
+
const memoMap = context.unsafeMap.has(Layer.CurrentMemoMap.key)
|
|
144
|
+
? Context.get(context, Layer.CurrentMemoMap)
|
|
145
|
+
: yield* Layer.makeMemoMap
|
|
146
|
+
|
|
147
|
+
const rcMap = yield* RcMap.make({
|
|
148
|
+
lookup: (key: K) =>
|
|
149
|
+
Effect.scopeWith((scope) => Effect.diffFiberRefs(Layer.buildWithMemoMap(lookup(key), memoMap, scope))).pipe(
|
|
150
|
+
Effect.map(([patch, context]) => ({
|
|
151
|
+
layer: Layer.scopedContext(
|
|
152
|
+
core.withFiberRuntime<Context.Context<I>, any, Scope.Scope>((fiber) => {
|
|
153
|
+
const scope = Context.unsafeGet(fiber.currentContext, Scope.Scope)
|
|
154
|
+
const oldRefs = fiber.getFiberRefs()
|
|
155
|
+
const newRefs = FiberRefsPatch.patch(patch, fiber.id(), oldRefs)
|
|
156
|
+
const revert = FiberRefsPatch.diff(newRefs, oldRefs)
|
|
157
|
+
fiber.setFiberRefs(newRefs)
|
|
158
|
+
return Effect.as(
|
|
159
|
+
Scope.addFinalizerExit(scope, () => {
|
|
160
|
+
fiber.setFiberRefs(FiberRefsPatch.patch(revert, fiber.id(), fiber.getFiberRefs()))
|
|
161
|
+
return Effect.void
|
|
162
|
+
}),
|
|
163
|
+
context
|
|
164
|
+
)
|
|
165
|
+
})
|
|
166
|
+
),
|
|
167
|
+
runtimeEffect: Effect.withFiberRuntime<Runtime.Runtime<I>, any, Scope.Scope>((fiber) => {
|
|
168
|
+
const fiberRefs = FiberRefsPatch.patch(patch, fiber.id(), fiber.getFiberRefs())
|
|
169
|
+
return Effect.succeed(Runtime.make({
|
|
170
|
+
context,
|
|
171
|
+
fiberRefs,
|
|
172
|
+
runtimeFlags: Runtime.defaultRuntime.runtimeFlags
|
|
173
|
+
}))
|
|
174
|
+
})
|
|
175
|
+
} as const))
|
|
176
|
+
),
|
|
177
|
+
idleTimeToLive: options?.idleTimeToLive
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
if (options?.preloadKeys) {
|
|
181
|
+
for (const key of options.preloadKeys) {
|
|
182
|
+
yield* (RcMap.get(rcMap, key) as Effect.Effect<any, EL, RL | Scope.Scope>)
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return identity<LayerMap<K, Exclude<I, Scope.Scope>, any>>({
|
|
187
|
+
[TypeId]: TypeId,
|
|
188
|
+
rcMap,
|
|
189
|
+
get: (key) => Layer.unwrapScoped(Effect.map(RcMap.get(rcMap, key), ({ layer }) => layer)),
|
|
190
|
+
runtime: (key) => Effect.flatMap(RcMap.get(rcMap, key), ({ runtimeEffect }) => runtimeEffect),
|
|
191
|
+
invalidate: (key) => RcMap.invalidate(rcMap, key)
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @since 3.14.0
|
|
197
|
+
* @category Constructors
|
|
198
|
+
* @experimental
|
|
199
|
+
*/
|
|
200
|
+
export const fromRecord = <
|
|
201
|
+
const Layers extends Record<string, Layer.Layer<any, any, any>>,
|
|
202
|
+
const Preload extends boolean = false
|
|
203
|
+
>(
|
|
204
|
+
layers: Layers,
|
|
205
|
+
options?: {
|
|
206
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
207
|
+
readonly preload?: Preload | undefined
|
|
208
|
+
} | undefined
|
|
209
|
+
): Effect.Effect<
|
|
210
|
+
LayerMap<
|
|
211
|
+
keyof Layers,
|
|
212
|
+
Layers[keyof Layers] extends Layer.Layer<infer _A, infer _E, infer _R> ? _A : never,
|
|
213
|
+
Preload extends true ? never : Layers[keyof Layers] extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never
|
|
214
|
+
>,
|
|
215
|
+
Preload extends true ? never : Layers[keyof Layers] extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never,
|
|
216
|
+
Scope.Scope | (Layers[keyof Layers] extends Layer.Layer<infer _A, infer _E, infer _R> ? _R : never)
|
|
217
|
+
> =>
|
|
218
|
+
make((key: keyof Layers) => layers[key], {
|
|
219
|
+
...options,
|
|
220
|
+
preloadKeys: options?.preload ? Object.keys(layers) : undefined
|
|
221
|
+
}) as any
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* @since 3.14.0
|
|
225
|
+
* @category Service
|
|
226
|
+
*/
|
|
227
|
+
export interface TagClass<
|
|
228
|
+
in out Self,
|
|
229
|
+
in out Id extends string,
|
|
230
|
+
in out K,
|
|
231
|
+
in out I,
|
|
232
|
+
in out E,
|
|
233
|
+
in out R,
|
|
234
|
+
in out LE,
|
|
235
|
+
in out Deps extends Layer.Layer<any, any, any>
|
|
236
|
+
> extends Context.TagClass<Self, Id, LayerMap<K, I, E>> {
|
|
237
|
+
/**
|
|
238
|
+
* A default layer for the `LayerMap` service.
|
|
239
|
+
*/
|
|
240
|
+
readonly Default: Layer.Layer<
|
|
241
|
+
Self,
|
|
242
|
+
(Deps extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never) | LE,
|
|
243
|
+
| Exclude<R, (Deps extends Layer.Layer<infer _A, infer _E, infer _R> ? _A : never)>
|
|
244
|
+
| (Deps extends Layer.Layer<infer _A, infer _E, infer _R> ? _R : never)
|
|
245
|
+
>
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* A default layer for the `LayerMap` service without the dependencies provided.
|
|
249
|
+
*/
|
|
250
|
+
readonly DefaultWithoutDependencies: Layer.Layer<Self, LE, R>
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Retrieves a Layer for the resources associated with the key.
|
|
254
|
+
*/
|
|
255
|
+
readonly get: (key: K) => Layer.Layer<I, E, Self>
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Retrieves a Runtime for the resources associated with the key.
|
|
259
|
+
*/
|
|
260
|
+
readonly runtime: (key: K) => Effect.Effect<Runtime.Runtime<I>, E, Scope.Scope | Self>
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Invalidates the resource associated with the key.
|
|
264
|
+
*/
|
|
265
|
+
readonly invalidate: (key: K) => Effect.Effect<void, never, Self>
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* @since 3.14.0
|
|
270
|
+
* @category Service
|
|
271
|
+
* @experimental
|
|
272
|
+
*
|
|
273
|
+
* Create a `LayerMap` service that provides a dynamic set of resources based on
|
|
274
|
+
* a key.
|
|
275
|
+
*
|
|
276
|
+
* ```ts
|
|
277
|
+
* import { NodeRuntime } from "@effect/platform-node"
|
|
278
|
+
* import { Context, Effect, FiberRef, Layer, LayerMap } from "effect"
|
|
279
|
+
*
|
|
280
|
+
* class Greeter extends Context.Tag("Greeter")<Greeter, {
|
|
281
|
+
* greet: Effect.Effect<string>
|
|
282
|
+
* }>() {}
|
|
283
|
+
*
|
|
284
|
+
* // create a service that wraps a LayerMap
|
|
285
|
+
* class GreeterMap extends LayerMap.Service<GreeterMap>()("GreeterMap", {
|
|
286
|
+
* // define the lookup function for the layer map
|
|
287
|
+
* //
|
|
288
|
+
* // The returned Layer will be used to provide the Greeter service for the
|
|
289
|
+
* // given name.
|
|
290
|
+
* lookup: (name: string) =>
|
|
291
|
+
* Layer.succeed(Greeter, {
|
|
292
|
+
* greet: Effect.succeed(`Hello, ${name}!`)
|
|
293
|
+
* }).pipe(
|
|
294
|
+
* Layer.merge(Layer.locallyScoped(FiberRef.currentConcurrency, 123))
|
|
295
|
+
* ),
|
|
296
|
+
*
|
|
297
|
+
* // If a layer is not used for a certain amount of time, it can be removed
|
|
298
|
+
* idleTimeToLive: "5 seconds",
|
|
299
|
+
*
|
|
300
|
+
* // Supply the dependencies for the layers in the LayerMap
|
|
301
|
+
* dependencies: []
|
|
302
|
+
* }) {}
|
|
303
|
+
*
|
|
304
|
+
* // usage
|
|
305
|
+
* const program: Effect.Effect<void, never, GreeterMap> = Effect.gen(function*() {
|
|
306
|
+
* // access and use the Greeter service
|
|
307
|
+
* const greeter = yield* Greeter
|
|
308
|
+
* yield* Effect.log(yield* greeter.greet)
|
|
309
|
+
* }).pipe(
|
|
310
|
+
* // use the GreeterMap service to provide a variant of the Greeter service
|
|
311
|
+
* Effect.provide(GreeterMap.get("John"))
|
|
312
|
+
* )
|
|
313
|
+
*
|
|
314
|
+
* // run the program
|
|
315
|
+
* program.pipe(
|
|
316
|
+
* Effect.provide(GreeterMap.Default),
|
|
317
|
+
* NodeRuntime.runMain
|
|
318
|
+
* )
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
export const Service = <Self>() =>
|
|
322
|
+
<
|
|
323
|
+
const Id extends string,
|
|
324
|
+
Options extends
|
|
325
|
+
| NoExcessProperties<
|
|
326
|
+
{
|
|
327
|
+
readonly lookup: (key: any) => Layer.Layer<any, any, any>
|
|
328
|
+
readonly dependencies?: ReadonlyArray<Layer.Layer<any, any, any>>
|
|
329
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
330
|
+
readonly preloadKeys?:
|
|
331
|
+
| Iterable<Options extends { readonly lookup: (key: infer K) => any } ? K : never>
|
|
332
|
+
| undefined
|
|
333
|
+
},
|
|
334
|
+
Options
|
|
335
|
+
>
|
|
336
|
+
| NoExcessProperties<{
|
|
337
|
+
readonly layers: Record<string, Layer.Layer<any, any, any>>
|
|
338
|
+
readonly dependencies?: ReadonlyArray<Layer.Layer<any, any, any>>
|
|
339
|
+
readonly idleTimeToLive?: Duration.DurationInput | undefined
|
|
340
|
+
readonly preload?: boolean
|
|
341
|
+
}, Options>
|
|
342
|
+
>(
|
|
343
|
+
id: Id,
|
|
344
|
+
options: Options
|
|
345
|
+
): TagClass<
|
|
346
|
+
Self,
|
|
347
|
+
Id,
|
|
348
|
+
Options extends { readonly lookup: (key: infer K) => any } ? K
|
|
349
|
+
: Options extends { readonly layers: infer Layers } ? keyof Layers
|
|
350
|
+
: never,
|
|
351
|
+
Service.Success<Options>,
|
|
352
|
+
Options extends { readonly preload: true } ? never : Service.Error<Options>,
|
|
353
|
+
Service.Context<Options>,
|
|
354
|
+
Options extends { readonly preload: true } ? Service.Error<Options>
|
|
355
|
+
: Options extends { readonly preloadKey: Iterable<any> } ? Service.Error<Options>
|
|
356
|
+
: never,
|
|
357
|
+
Options extends { readonly dependencies: ReadonlyArray<any> } ? Options["dependencies"][number] : never
|
|
358
|
+
> => {
|
|
359
|
+
const Err = globalThis.Error as any
|
|
360
|
+
const limit = Err.stackTraceLimit
|
|
361
|
+
Err.stackTraceLimit = 2
|
|
362
|
+
const creationError = new Err()
|
|
363
|
+
Err.stackTraceLimit = limit
|
|
364
|
+
|
|
365
|
+
function TagClass() {}
|
|
366
|
+
const TagClass_ = TagClass as any as Mutable<TagClass<Self, Id, string, any, any, any, any, any>>
|
|
367
|
+
Object.setPrototypeOf(TagClass, Object.getPrototypeOf(Context.GenericTag<Self, any>(id)))
|
|
368
|
+
TagClass.key = id
|
|
369
|
+
Object.defineProperty(TagClass, "stack", {
|
|
370
|
+
get() {
|
|
371
|
+
return creationError.stack
|
|
372
|
+
}
|
|
373
|
+
})
|
|
374
|
+
|
|
375
|
+
TagClass_.DefaultWithoutDependencies = Layer.scoped(
|
|
376
|
+
TagClass_,
|
|
377
|
+
"lookup" in options
|
|
378
|
+
? make(options.lookup, options)
|
|
379
|
+
: fromRecord(options.layers as any, options)
|
|
380
|
+
)
|
|
381
|
+
TagClass_.Default = options.dependencies && options.dependencies.length > 0 ?
|
|
382
|
+
Layer.provide(TagClass_.DefaultWithoutDependencies, options.dependencies as any) :
|
|
383
|
+
TagClass_.DefaultWithoutDependencies
|
|
384
|
+
|
|
385
|
+
TagClass_.get = (key: string) => Layer.unwrapScoped(Effect.map(TagClass_, (layerMap) => layerMap.get(key)))
|
|
386
|
+
TagClass_.runtime = (key: string) => Effect.flatMap(TagClass_, (layerMap) => layerMap.runtime(key))
|
|
387
|
+
TagClass_.invalidate = (key: string) => Effect.flatMap(TagClass_, (layerMap) => layerMap.invalidate(key))
|
|
388
|
+
|
|
389
|
+
return TagClass as any
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* @since 3.14.0
|
|
394
|
+
* @category Service
|
|
395
|
+
* @experimental
|
|
396
|
+
*/
|
|
397
|
+
export declare namespace Service {
|
|
398
|
+
/**
|
|
399
|
+
* @since 3.14.0
|
|
400
|
+
* @category Service
|
|
401
|
+
* @experimental
|
|
402
|
+
*/
|
|
403
|
+
export type Key<Options> = Options extends { readonly lookup: (key: infer K) => any } ? K
|
|
404
|
+
: Options extends { readonly layers: infer Layers } ? keyof Layers
|
|
405
|
+
: never
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* @since 3.14.0
|
|
409
|
+
* @category Service
|
|
410
|
+
* @experimental
|
|
411
|
+
*/
|
|
412
|
+
export type Layers<Options> = Options extends { readonly lookup: (key: infer _K) => infer Layers } ? Layers
|
|
413
|
+
: Options extends { readonly layers: infer Layers } ? Layers[keyof Layers]
|
|
414
|
+
: never
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* @since 3.14.0
|
|
418
|
+
* @category Service
|
|
419
|
+
* @experimental
|
|
420
|
+
*/
|
|
421
|
+
export type Success<Options> = Layers<Options> extends Layer.Layer<infer _A, infer _E, infer _R> ? _A : never
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* @since 3.14.0
|
|
425
|
+
* @category Service
|
|
426
|
+
* @experimental
|
|
427
|
+
*/
|
|
428
|
+
export type Error<Options> = Layers<Options> extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* @since 3.14.0
|
|
432
|
+
* @category Service
|
|
433
|
+
* @experimental
|
|
434
|
+
*/
|
|
435
|
+
export type Context<Options> = Layers<Options> extends Layer.Layer<infer _A, infer _E, infer _R> ? _R : never
|
|
436
|
+
}
|