@clayroach/effect 3.19.14-source-capture.8 → 3.19.14-source-trace.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SourceLocation/package.json +6 -0
- package/dist/cjs/Effect.js +2 -28
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/FiberRef.js +12 -1
- package/dist/cjs/FiberRef.js.map +1 -1
- package/dist/cjs/Layer.js +2 -24
- package/dist/cjs/Layer.js.map +1 -1
- package/dist/cjs/RuntimeFlags.js +1 -29
- package/dist/cjs/RuntimeFlags.js.map +1 -1
- package/dist/cjs/SourceLocation.js +60 -0
- package/dist/cjs/SourceLocation.js.map +1 -0
- package/dist/cjs/Tracer.js +1 -15
- package/dist/cjs/Tracer.js.map +1 -1
- package/dist/cjs/Utils.js +1 -1
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/clock.js +1 -1
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/cjs/internal/core.js +17 -50
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +18 -30
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +16 -65
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/layer/circular.js +1 -5
- package/dist/cjs/internal/layer/circular.js.map +1 -1
- package/dist/cjs/internal/layer.js +1 -3
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/logger.js +25 -2
- package/dist/cjs/internal/logger.js.map +1 -1
- package/dist/cjs/internal/runtimeFlags.js +2 -11
- package/dist/cjs/internal/runtimeFlags.js.map +1 -1
- package/dist/cjs/internal/tracer.js +1 -114
- package/dist/cjs/internal/tracer.js.map +1 -1
- package/dist/dts/Config.d.ts +2 -2
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +8 -29
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/FiberRef.d.ts +12 -0
- package/dist/dts/FiberRef.d.ts.map +1 -1
- package/dist/dts/Layer.d.ts +0 -22
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/RuntimeFlags.d.ts +0 -28
- package/dist/dts/RuntimeFlags.d.ts.map +1 -1
- package/dist/dts/SourceLocation.d.ts +88 -0
- package/dist/dts/SourceLocation.d.ts.map +1 -0
- package/dist/dts/Tracer.d.ts +0 -15
- package/dist/dts/Tracer.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/layer.d.ts.map +1 -1
- package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
- package/dist/esm/Effect.js +0 -26
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/FiberRef.js +11 -0
- package/dist/esm/FiberRef.js.map +1 -1
- package/dist/esm/Layer.js +0 -22
- package/dist/esm/Layer.js.map +1 -1
- package/dist/esm/RuntimeFlags.js +0 -28
- package/dist/esm/RuntimeFlags.js.map +1 -1
- package/dist/esm/SourceLocation.js +51 -0
- package/dist/esm/SourceLocation.js.map +1 -0
- package/dist/esm/Tracer.js +0 -14
- package/dist/esm/Tracer.js.map +1 -1
- package/dist/esm/Utils.js +1 -1
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/clock.js +1 -1
- package/dist/esm/internal/clock.js.map +1 -1
- package/dist/esm/internal/core.js +12 -45
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +18 -30
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +13 -60
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/layer/circular.js +0 -4
- package/dist/esm/internal/layer/circular.js.map +1 -1
- package/dist/esm/internal/layer.js +0 -2
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/logger.js +25 -2
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/runtimeFlags.js +1 -9
- package/dist/esm/internal/runtimeFlags.js.map +1 -1
- package/dist/esm/internal/tracer.js +0 -111
- package/dist/esm/internal/tracer.js.map +1 -1
- package/package.json +12 -1
- package/src/Arbitrary.ts +1101 -0
- package/src/Array.ts +3589 -0
- package/src/BigDecimal.ts +1349 -0
- package/src/BigInt.ts +643 -0
- package/src/Boolean.ts +287 -0
- package/src/Brand.ts +360 -0
- package/src/Cache.ts +281 -0
- package/src/Cause.ts +1555 -0
- package/src/Channel.ts +2355 -0
- package/src/ChildExecutorDecision.ts +146 -0
- package/src/Chunk.ts +1495 -0
- package/src/Clock.ts +111 -0
- package/src/Config.ts +542 -0
- package/src/ConfigError.ts +270 -0
- package/src/ConfigProvider.ts +333 -0
- package/src/ConfigProviderPathPatch.ts +100 -0
- package/src/Console.ts +226 -0
- package/src/Context.ts +585 -0
- package/src/Cron.ts +706 -0
- package/src/Data.ts +596 -0
- package/src/DateTime.ts +1686 -0
- package/src/DefaultServices.ts +34 -0
- package/src/Deferred.ts +301 -0
- package/src/Differ.ts +450 -0
- package/src/Duration.ts +1000 -0
- package/src/Effect.ts +14817 -0
- package/src/Effectable.ts +107 -0
- package/src/Either.ts +1040 -0
- package/src/Encoding.ts +195 -0
- package/src/Equal.ts +98 -0
- package/src/Equivalence.ts +235 -0
- package/src/ExecutionPlan.ts +308 -0
- package/src/ExecutionStrategy.ts +119 -0
- package/src/Exit.ts +467 -0
- package/src/FastCheck.ts +9 -0
- package/src/Fiber.ts +744 -0
- package/src/FiberHandle.ts +540 -0
- package/src/FiberId.ts +195 -0
- package/src/FiberMap.ts +656 -0
- package/src/FiberRef.ts +444 -0
- package/src/FiberRefs.ts +204 -0
- package/src/FiberRefsPatch.ts +105 -0
- package/src/FiberSet.ts +491 -0
- package/src/FiberStatus.ts +108 -0
- package/src/Function.ts +1222 -0
- package/src/GlobalValue.ts +53 -0
- package/src/Graph.ts +3732 -0
- package/src/GroupBy.ts +103 -0
- package/src/HKT.ts +45 -0
- package/src/Hash.ts +195 -0
- package/src/HashMap.ts +519 -0
- package/src/HashRing.ts +317 -0
- package/src/HashSet.ts +2346 -0
- package/src/Inspectable.ts +287 -0
- package/src/Iterable.ts +1119 -0
- package/src/JSONSchema.ts +1044 -0
- package/src/KeyedPool.ts +167 -0
- package/src/Layer.ts +1228 -0
- package/src/LayerMap.ts +436 -0
- package/src/List.ts +977 -0
- package/src/LogLevel.ts +285 -0
- package/src/LogSpan.ts +25 -0
- package/src/Logger.ts +702 -0
- package/src/Mailbox.ts +268 -0
- package/src/ManagedRuntime.ts +180 -0
- package/src/Match.ts +1477 -0
- package/src/MergeDecision.ts +95 -0
- package/src/MergeState.ts +172 -0
- package/src/MergeStrategy.ts +107 -0
- package/src/Metric.ts +780 -0
- package/src/MetricBoundaries.ts +69 -0
- package/src/MetricHook.ts +151 -0
- package/src/MetricKey.ts +224 -0
- package/src/MetricKeyType.ts +262 -0
- package/src/MetricLabel.ts +47 -0
- package/src/MetricPair.ts +71 -0
- package/src/MetricPolling.ts +148 -0
- package/src/MetricRegistry.ts +48 -0
- package/src/MetricState.ts +257 -0
- package/src/Micro.ts +4405 -0
- package/src/ModuleVersion.ts +18 -0
- package/src/MutableHashMap.ts +411 -0
- package/src/MutableHashSet.ts +706 -0
- package/src/MutableList.ts +297 -0
- package/src/MutableQueue.ts +227 -0
- package/src/MutableRef.ts +202 -0
- package/src/NonEmptyIterable.ts +32 -0
- package/src/Number.ts +1071 -0
- package/src/Option.ts +2170 -0
- package/src/Order.ts +373 -0
- package/src/Ordering.ts +111 -0
- package/src/ParseResult.ts +2031 -0
- package/src/PartitionedSemaphore.ts +200 -0
- package/src/Pipeable.ts +566 -0
- package/src/Pool.ts +204 -0
- package/src/Predicate.ts +1405 -0
- package/src/Pretty.ts +205 -0
- package/src/PrimaryKey.ts +23 -0
- package/src/PubSub.ts +182 -0
- package/src/Queue.ts +644 -0
- package/src/Random.ts +204 -0
- package/src/RateLimiter.ts +138 -0
- package/src/RcMap.ts +141 -0
- package/src/RcRef.ts +122 -0
- package/src/Readable.ts +93 -0
- package/src/Record.ts +1274 -0
- package/src/RedBlackTree.ts +421 -0
- package/src/Redacted.ts +144 -0
- package/src/Ref.ts +180 -0
- package/src/RegExp.ts +38 -0
- package/src/Reloadable.ts +127 -0
- package/src/Request.ts +347 -0
- package/src/RequestBlock.ts +118 -0
- package/src/RequestResolver.ts +366 -0
- package/src/Resource.ts +119 -0
- package/src/Runtime.ts +383 -0
- package/src/RuntimeFlags.ts +336 -0
- package/src/RuntimeFlagsPatch.ts +183 -0
- package/src/STM.ts +2045 -0
- package/src/Schedule.ts +2219 -0
- package/src/ScheduleDecision.ts +62 -0
- package/src/ScheduleInterval.ts +151 -0
- package/src/ScheduleIntervals.ts +122 -0
- package/src/Scheduler.ts +353 -0
- package/src/Schema.ts +10914 -0
- package/src/SchemaAST.ts +3043 -0
- package/src/Scope.ts +204 -0
- package/src/ScopedCache.ts +151 -0
- package/src/ScopedRef.ts +117 -0
- package/src/Secret.ts +88 -0
- package/src/SingleProducerAsyncInput.ts +67 -0
- package/src/Sink.ts +1461 -0
- package/src/SortedMap.ts +287 -0
- package/src/SortedSet.ts +390 -0
- package/src/SourceLocation.ts +108 -0
- package/src/Stream.ts +6468 -0
- package/src/StreamEmit.ts +136 -0
- package/src/StreamHaltStrategy.ts +123 -0
- package/src/Streamable.ts +45 -0
- package/src/String.ts +778 -0
- package/src/Struct.ts +243 -0
- package/src/Subscribable.ts +100 -0
- package/src/SubscriptionRef.ts +298 -0
- package/src/Supervisor.ts +240 -0
- package/src/Symbol.ts +29 -0
- package/src/SynchronizedRef.ts +270 -0
- package/src/TArray.ts +495 -0
- package/src/TDeferred.ts +100 -0
- package/src/TMap.ts +515 -0
- package/src/TPriorityQueue.ts +223 -0
- package/src/TPubSub.ts +200 -0
- package/src/TQueue.ts +432 -0
- package/src/TRandom.ts +129 -0
- package/src/TReentrantLock.ts +224 -0
- package/src/TRef.ts +178 -0
- package/src/TSemaphore.ts +129 -0
- package/src/TSet.ts +365 -0
- package/src/TSubscriptionRef.ts +192 -0
- package/src/Take.ts +258 -0
- package/src/TestAnnotation.ts +158 -0
- package/src/TestAnnotationMap.ts +119 -0
- package/src/TestAnnotations.ts +117 -0
- package/src/TestClock.ts +556 -0
- package/src/TestConfig.ts +47 -0
- package/src/TestContext.ts +36 -0
- package/src/TestLive.ts +53 -0
- package/src/TestServices.ts +390 -0
- package/src/TestSized.ts +55 -0
- package/src/Tracer.ts +182 -0
- package/src/Trie.ts +840 -0
- package/src/Tuple.ts +305 -0
- package/src/Types.ts +353 -0
- package/src/Unify.ts +113 -0
- package/src/UpstreamPullRequest.ts +117 -0
- package/src/UpstreamPullStrategy.ts +121 -0
- package/src/Utils.ts +809 -0
- package/src/index.ts +1568 -0
- package/src/internal/array.ts +8 -0
- package/src/internal/blockedRequests.ts +520 -0
- package/src/internal/cache.ts +733 -0
- package/src/internal/cause.ts +1050 -0
- package/src/internal/channel/channelExecutor.ts +1200 -0
- package/src/internal/channel/channelState.ts +134 -0
- package/src/internal/channel/childExecutorDecision.ts +96 -0
- package/src/internal/channel/continuation.ts +200 -0
- package/src/internal/channel/mergeDecision.ts +113 -0
- package/src/internal/channel/mergeState.ts +120 -0
- package/src/internal/channel/mergeStrategy.ts +72 -0
- package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
- package/src/internal/channel/subexecutor.ts +229 -0
- package/src/internal/channel/upstreamPullRequest.ts +84 -0
- package/src/internal/channel/upstreamPullStrategy.ts +87 -0
- package/src/internal/channel.ts +2603 -0
- package/src/internal/clock.ts +95 -0
- package/src/internal/completedRequestMap.ts +9 -0
- package/src/internal/concurrency.ts +54 -0
- package/src/internal/config.ts +716 -0
- package/src/internal/configError.ts +304 -0
- package/src/internal/configProvider/pathPatch.ts +97 -0
- package/src/internal/configProvider.ts +799 -0
- package/src/internal/console.ts +153 -0
- package/src/internal/context.ts +337 -0
- package/src/internal/core-effect.ts +2293 -0
- package/src/internal/core-stream.ts +998 -0
- package/src/internal/core.ts +3189 -0
- package/src/internal/data.ts +36 -0
- package/src/internal/dataSource.ts +327 -0
- package/src/internal/dateTime.ts +1277 -0
- package/src/internal/defaultServices/console.ts +100 -0
- package/src/internal/defaultServices.ts +163 -0
- package/src/internal/deferred.ts +46 -0
- package/src/internal/differ/chunkPatch.ts +211 -0
- package/src/internal/differ/contextPatch.ts +232 -0
- package/src/internal/differ/hashMapPatch.ts +220 -0
- package/src/internal/differ/hashSetPatch.ts +176 -0
- package/src/internal/differ/orPatch.ts +311 -0
- package/src/internal/differ/readonlyArrayPatch.ts +210 -0
- package/src/internal/differ.ts +200 -0
- package/src/internal/doNotation.ts +80 -0
- package/src/internal/effect/circular.ts +895 -0
- package/src/internal/effectable.ts +131 -0
- package/src/internal/either.ts +110 -0
- package/src/internal/encoding/base64.ts +286 -0
- package/src/internal/encoding/base64Url.ts +29 -0
- package/src/internal/encoding/common.ts +51 -0
- package/src/internal/encoding/hex.ts +315 -0
- package/src/internal/errors.ts +7 -0
- package/src/internal/executionPlan.ts +114 -0
- package/src/internal/executionStrategy.ts +74 -0
- package/src/internal/fiber.ts +388 -0
- package/src/internal/fiberId.ts +267 -0
- package/src/internal/fiberMessage.ts +82 -0
- package/src/internal/fiberRefs/patch.ts +144 -0
- package/src/internal/fiberRefs.ts +297 -0
- package/src/internal/fiberRuntime.ts +3842 -0
- package/src/internal/fiberScope.ts +71 -0
- package/src/internal/fiberStatus.ts +119 -0
- package/src/internal/groupBy.ts +530 -0
- package/src/internal/hashMap/array.ts +49 -0
- package/src/internal/hashMap/bitwise.ts +32 -0
- package/src/internal/hashMap/config.ts +14 -0
- package/src/internal/hashMap/keySet.ts +8 -0
- package/src/internal/hashMap/node.ts +391 -0
- package/src/internal/hashMap.ts +586 -0
- package/src/internal/hashSet.ts +323 -0
- package/src/internal/keyedPool.ts +244 -0
- package/src/internal/layer/circular.ts +214 -0
- package/src/internal/layer.ts +1483 -0
- package/src/internal/logSpan.ts +20 -0
- package/src/internal/logger-circular.ts +24 -0
- package/src/internal/logger.ts +522 -0
- package/src/internal/mailbox.ts +561 -0
- package/src/internal/managedRuntime/circular.ts +6 -0
- package/src/internal/managedRuntime.ts +134 -0
- package/src/internal/matcher.ts +652 -0
- package/src/internal/metric/boundaries.ts +75 -0
- package/src/internal/metric/hook.ts +483 -0
- package/src/internal/metric/key.ts +167 -0
- package/src/internal/metric/keyType.ts +238 -0
- package/src/internal/metric/label.ts +41 -0
- package/src/internal/metric/pair.ts +48 -0
- package/src/internal/metric/polling.ts +149 -0
- package/src/internal/metric/registry.ts +187 -0
- package/src/internal/metric/state.ts +290 -0
- package/src/internal/metric.ts +577 -0
- package/src/internal/opCodes/cause.ts +35 -0
- package/src/internal/opCodes/channel.ts +83 -0
- package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
- package/src/internal/opCodes/channelMergeDecision.ts +11 -0
- package/src/internal/opCodes/channelMergeState.ts +17 -0
- package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
- package/src/internal/opCodes/channelState.ts +23 -0
- package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
- package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
- package/src/internal/opCodes/config.ts +65 -0
- package/src/internal/opCodes/configError.ts +35 -0
- package/src/internal/opCodes/continuation.ts +11 -0
- package/src/internal/opCodes/deferred.ts +11 -0
- package/src/internal/opCodes/effect.ts +89 -0
- package/src/internal/opCodes/layer.ts +59 -0
- package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
- package/src/internal/option.ts +80 -0
- package/src/internal/pool.ts +432 -0
- package/src/internal/pubsub.ts +1762 -0
- package/src/internal/query.ts +204 -0
- package/src/internal/queue.ts +766 -0
- package/src/internal/random.ts +161 -0
- package/src/internal/rateLimiter.ts +93 -0
- package/src/internal/rcMap.ts +285 -0
- package/src/internal/rcRef.ts +192 -0
- package/src/internal/redBlackTree/iterator.ts +200 -0
- package/src/internal/redBlackTree/node.ts +68 -0
- package/src/internal/redBlackTree.ts +1245 -0
- package/src/internal/redacted.ts +73 -0
- package/src/internal/ref.ts +171 -0
- package/src/internal/reloadable.ts +140 -0
- package/src/internal/request.ts +177 -0
- package/src/internal/resource.ts +76 -0
- package/src/internal/ringBuffer.ts +68 -0
- package/src/internal/runtime.ts +558 -0
- package/src/internal/runtimeFlags.ts +178 -0
- package/src/internal/runtimeFlagsPatch.ts +103 -0
- package/src/internal/schedule/decision.ts +47 -0
- package/src/internal/schedule/interval.ts +101 -0
- package/src/internal/schedule/intervals.ts +180 -0
- package/src/internal/schedule.ts +2199 -0
- package/src/internal/schema/errors.ts +191 -0
- package/src/internal/schema/schemaId.ts +106 -0
- package/src/internal/schema/util.ts +50 -0
- package/src/internal/scopedCache.ts +644 -0
- package/src/internal/scopedRef.ts +118 -0
- package/src/internal/secret.ts +89 -0
- package/src/internal/singleShotGen.ts +35 -0
- package/src/internal/sink.ts +2120 -0
- package/src/internal/stack.ts +10 -0
- package/src/internal/stm/core.ts +817 -0
- package/src/internal/stm/entry.ts +59 -0
- package/src/internal/stm/journal.ts +123 -0
- package/src/internal/stm/opCodes/stm.ts +71 -0
- package/src/internal/stm/opCodes/stmState.ts +17 -0
- package/src/internal/stm/opCodes/strategy.ts +17 -0
- package/src/internal/stm/opCodes/tExit.ts +29 -0
- package/src/internal/stm/opCodes/tryCommit.ts +11 -0
- package/src/internal/stm/stm.ts +1453 -0
- package/src/internal/stm/stmState.ts +136 -0
- package/src/internal/stm/tArray.ts +550 -0
- package/src/internal/stm/tDeferred.ts +81 -0
- package/src/internal/stm/tExit.ts +190 -0
- package/src/internal/stm/tMap.ts +824 -0
- package/src/internal/stm/tPriorityQueue.ts +267 -0
- package/src/internal/stm/tPubSub.ts +551 -0
- package/src/internal/stm/tQueue.ts +393 -0
- package/src/internal/stm/tRandom.ts +140 -0
- package/src/internal/stm/tReentrantLock.ts +352 -0
- package/src/internal/stm/tRef.ts +195 -0
- package/src/internal/stm/tSemaphore.ts +113 -0
- package/src/internal/stm/tSet.ts +259 -0
- package/src/internal/stm/tSubscriptionRef.ts +286 -0
- package/src/internal/stm/tryCommit.ts +34 -0
- package/src/internal/stm/txnId.ts +14 -0
- package/src/internal/stm/versioned.ts +4 -0
- package/src/internal/stream/debounceState.ts +57 -0
- package/src/internal/stream/emit.ts +123 -0
- package/src/internal/stream/haltStrategy.ts +94 -0
- package/src/internal/stream/handoff.ts +187 -0
- package/src/internal/stream/handoffSignal.ts +59 -0
- package/src/internal/stream/pull.ts +34 -0
- package/src/internal/stream/sinkEndReason.ts +30 -0
- package/src/internal/stream/zipAllState.ts +88 -0
- package/src/internal/stream/zipChunksState.ts +56 -0
- package/src/internal/stream.ts +8801 -0
- package/src/internal/string-utils.ts +107 -0
- package/src/internal/subscriptionRef.ts +138 -0
- package/src/internal/supervisor/patch.ts +190 -0
- package/src/internal/supervisor.ts +303 -0
- package/src/internal/synchronizedRef.ts +114 -0
- package/src/internal/take.ts +199 -0
- package/src/internal/testing/sleep.ts +27 -0
- package/src/internal/testing/suspendedWarningData.ts +85 -0
- package/src/internal/testing/warningData.ts +94 -0
- package/src/internal/tracer.ts +150 -0
- package/src/internal/trie.ts +722 -0
- package/src/internal/version.ts +7 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as RequestBlock_ from "./internal/blockedRequests.js"
|
|
5
|
+
import type * as Request from "./Request.js"
|
|
6
|
+
import type * as RequestResolver from "./RequestResolver.js"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* `RequestBlock` captures a collection of blocked requests as a data
|
|
10
|
+
* structure. By doing this the library is able to preserve information about
|
|
11
|
+
* which requests must be performed sequentially and which can be performed in
|
|
12
|
+
* parallel, allowing for maximum possible batching and pipelining while
|
|
13
|
+
* preserving ordering guarantees.
|
|
14
|
+
*
|
|
15
|
+
* @since 2.0.0
|
|
16
|
+
* @category models
|
|
17
|
+
*/
|
|
18
|
+
export type RequestBlock = Empty | Par | Seq | Single
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @since 2.0.0
|
|
22
|
+
* @category models
|
|
23
|
+
*/
|
|
24
|
+
export declare namespace RequestBlock {
|
|
25
|
+
/**
|
|
26
|
+
* @since 2.0.0
|
|
27
|
+
* @category models
|
|
28
|
+
*/
|
|
29
|
+
export interface Reducer<in out Z> {
|
|
30
|
+
emptyCase(): Z
|
|
31
|
+
parCase(left: Z, right: Z): Z
|
|
32
|
+
singleCase(
|
|
33
|
+
dataSource: RequestResolver.RequestResolver<unknown>,
|
|
34
|
+
blockedRequest: Request.Entry<unknown>
|
|
35
|
+
): Z
|
|
36
|
+
seqCase(left: Z, right: Z): Z
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @since 2.0.0
|
|
42
|
+
* @category models
|
|
43
|
+
*/
|
|
44
|
+
export interface Empty {
|
|
45
|
+
readonly _tag: "Empty"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @since 2.0.0
|
|
50
|
+
* @category models
|
|
51
|
+
*/
|
|
52
|
+
export interface Par {
|
|
53
|
+
readonly _tag: "Par"
|
|
54
|
+
readonly left: RequestBlock
|
|
55
|
+
readonly right: RequestBlock
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @since 2.0.0
|
|
60
|
+
* @category models
|
|
61
|
+
*/
|
|
62
|
+
export interface Seq {
|
|
63
|
+
readonly _tag: "Seq"
|
|
64
|
+
readonly left: RequestBlock
|
|
65
|
+
readonly right: RequestBlock
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @since 2.0.0
|
|
70
|
+
* @category models
|
|
71
|
+
*/
|
|
72
|
+
export interface Single {
|
|
73
|
+
readonly _tag: "Single"
|
|
74
|
+
readonly dataSource: RequestResolver.RequestResolver<unknown>
|
|
75
|
+
readonly blockedRequest: Request.Entry<unknown>
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @since 2.0.0
|
|
80
|
+
* @category constructors
|
|
81
|
+
*/
|
|
82
|
+
export const single: <A>(
|
|
83
|
+
dataSource: RequestResolver.RequestResolver<A>,
|
|
84
|
+
blockedRequest: Request.Entry<A>
|
|
85
|
+
) => RequestBlock = RequestBlock_.single
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @since 2.0.0
|
|
89
|
+
* @category constructors
|
|
90
|
+
*/
|
|
91
|
+
export const empty: RequestBlock = RequestBlock_.empty
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @since 2.0.0
|
|
95
|
+
* @category constructors
|
|
96
|
+
*/
|
|
97
|
+
export const mapRequestResolvers: <A>(
|
|
98
|
+
self: RequestBlock,
|
|
99
|
+
f: (dataSource: RequestResolver.RequestResolver<A>) => RequestResolver.RequestResolver<A>
|
|
100
|
+
) => RequestBlock = RequestBlock_.mapRequestResolvers
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @since 2.0.0
|
|
104
|
+
* @category constructors
|
|
105
|
+
*/
|
|
106
|
+
export const parallel: (self: RequestBlock, that: RequestBlock) => RequestBlock = RequestBlock_.par
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @since 2.0.0
|
|
110
|
+
* @category constructors
|
|
111
|
+
*/
|
|
112
|
+
export const reduce: <Z>(self: RequestBlock, reducer: RequestBlock.Reducer<Z>) => Z = RequestBlock_.reduce
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @since 2.0.0
|
|
116
|
+
* @category constructors
|
|
117
|
+
*/
|
|
118
|
+
export const sequential: (self: RequestBlock, that: RequestBlock) => RequestBlock = RequestBlock_.seq
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { NonEmptyArray } from "./Array.js"
|
|
6
|
+
import * as Context from "./Context.js"
|
|
7
|
+
import * as Effect from "./Effect.js"
|
|
8
|
+
import type * as Either from "./Either.js"
|
|
9
|
+
import type * as Equal from "./Equal.js"
|
|
10
|
+
import type { FiberRef } from "./FiberRef.js"
|
|
11
|
+
import * as core from "./internal/core.js"
|
|
12
|
+
import * as internal from "./internal/dataSource.js"
|
|
13
|
+
import type { Pipeable } from "./Pipeable.js"
|
|
14
|
+
import type * as Request from "./Request.js"
|
|
15
|
+
import type * as Types from "./Types.js"
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @since 2.0.0
|
|
19
|
+
* @category symbols
|
|
20
|
+
*/
|
|
21
|
+
export const RequestResolverTypeId: unique symbol = core.RequestResolverTypeId
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @since 2.0.0
|
|
25
|
+
* @category symbols
|
|
26
|
+
*/
|
|
27
|
+
export type RequestResolverTypeId = typeof RequestResolverTypeId
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The `RequestResolver<A, R>` interface requires an environment `R` and handles
|
|
31
|
+
* the execution of requests of type `A`.
|
|
32
|
+
*
|
|
33
|
+
* Implementations must provide a `runAll` method, which processes a collection
|
|
34
|
+
* of requests and produces an effect that fulfills these requests. Requests are
|
|
35
|
+
* organized into a `Array<Array<A>>`, where the outer `Array` groups requests
|
|
36
|
+
* into batches that are executed sequentially, and each inner `Array` contains
|
|
37
|
+
* requests that can be executed in parallel. This structure allows
|
|
38
|
+
* implementations to analyze all incoming requests collectively and optimize
|
|
39
|
+
* query execution accordingly.
|
|
40
|
+
*
|
|
41
|
+
* Implementations are typically specialized for a subtype of `Request<A, E>`.
|
|
42
|
+
* However, they are not strictly limited to these subtypes as long as they can
|
|
43
|
+
* map any given request type to `Request<A, E>`. Implementations should inspect
|
|
44
|
+
* the collection of requests to identify the needed information and execute the
|
|
45
|
+
* corresponding queries. It is imperative that implementations resolve all the
|
|
46
|
+
* requests they receive. Failing to do so will lead to a `QueryFailure` error
|
|
47
|
+
* during query execution.
|
|
48
|
+
*
|
|
49
|
+
* @since 2.0.0
|
|
50
|
+
* @category models
|
|
51
|
+
*/
|
|
52
|
+
export interface RequestResolver<in A, out R = never> extends RequestResolver.Variance<A, R>, Equal.Equal, Pipeable {
|
|
53
|
+
/**
|
|
54
|
+
* Execute a collection of requests. The outer `Array` represents batches
|
|
55
|
+
* of requests that must be performed sequentially. The inner `Array`
|
|
56
|
+
* represents a batch of requests that can be performed in parallel.
|
|
57
|
+
*/
|
|
58
|
+
runAll(requests: Array<Array<Request.Entry<A>>>): Effect.Effect<void, never, R>
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Identify the data source using the specific identifier
|
|
62
|
+
*/
|
|
63
|
+
identified(...identifiers: Array<unknown>): RequestResolver<A, R>
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @since 2.0.0
|
|
68
|
+
*/
|
|
69
|
+
export declare namespace RequestResolver {
|
|
70
|
+
/**
|
|
71
|
+
* @since 2.0.0
|
|
72
|
+
* @category models
|
|
73
|
+
*/
|
|
74
|
+
export interface Variance<in A, out R> {
|
|
75
|
+
readonly [RequestResolverTypeId]: {
|
|
76
|
+
readonly _A: Types.Contravariant<A>
|
|
77
|
+
readonly _R: Types.Covariant<R>
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @since 2.0.0
|
|
84
|
+
* @category utils
|
|
85
|
+
*/
|
|
86
|
+
export const contextFromEffect = <R, A extends Request.Request<any, any>>(self: RequestResolver<A, R>) =>
|
|
87
|
+
Effect.contextWith((_: Context.Context<R>) => provideContext(self, _))
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @since 2.0.0
|
|
91
|
+
* @category utils
|
|
92
|
+
*/
|
|
93
|
+
export const contextFromServices =
|
|
94
|
+
<Services extends Array<Context.Tag<any, any>>>(...services: Services) =>
|
|
95
|
+
<R, A extends Request.Request<any, any>>(
|
|
96
|
+
self: RequestResolver<A, R>
|
|
97
|
+
): Effect.Effect<
|
|
98
|
+
RequestResolver<A, Exclude<R, { [k in keyof Services]: Effect.Effect.Context<Services[k]> }[number]>>,
|
|
99
|
+
never,
|
|
100
|
+
{ [k in keyof Services]: Effect.Effect.Context<Services[k]> }[number]
|
|
101
|
+
> => Effect.contextWith((_) => provideContext(self as any, Context.pick(...services)(_ as any)))
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Returns `true` if the specified value is a `RequestResolver`, `false` otherwise.
|
|
105
|
+
*
|
|
106
|
+
* @since 2.0.0
|
|
107
|
+
* @category refinements
|
|
108
|
+
*/
|
|
109
|
+
export const isRequestResolver: (u: unknown) => u is RequestResolver<unknown, unknown> = core.isRequestResolver
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Constructs a data source with the specified identifier and method to run
|
|
113
|
+
* requests.
|
|
114
|
+
*
|
|
115
|
+
* @since 2.0.0
|
|
116
|
+
* @category constructors
|
|
117
|
+
*/
|
|
118
|
+
export const make: <A, R>(
|
|
119
|
+
runAll: (requests: Array<Array<A>>) => Effect.Effect<void, never, R>
|
|
120
|
+
) => RequestResolver<A, R> = internal.make
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Constructs a data source with the specified identifier and method to run
|
|
124
|
+
* requests.
|
|
125
|
+
*
|
|
126
|
+
* @since 2.0.0
|
|
127
|
+
* @category constructors
|
|
128
|
+
*/
|
|
129
|
+
export const makeWithEntry: <A, R>(
|
|
130
|
+
runAll: (requests: Array<Array<Request.Entry<A>>>) => Effect.Effect<void, never, R>
|
|
131
|
+
) => RequestResolver<A, R> = internal.makeWithEntry
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Constructs a data source from a function taking a collection of requests.
|
|
135
|
+
*
|
|
136
|
+
* @since 2.0.0
|
|
137
|
+
* @category constructors
|
|
138
|
+
*/
|
|
139
|
+
export const makeBatched: <A extends Request.Request<any, any>, R>(
|
|
140
|
+
run: (requests: NonEmptyArray<A>) => Effect.Effect<void, never, R>
|
|
141
|
+
) => RequestResolver<A, R> = internal.makeBatched
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* A data source aspect that executes requests between two effects, `before`
|
|
145
|
+
* and `after`, where the result of `before` can be used by `after`.
|
|
146
|
+
*
|
|
147
|
+
* @since 2.0.0
|
|
148
|
+
* @category combinators
|
|
149
|
+
*/
|
|
150
|
+
export const around: {
|
|
151
|
+
<A2, R2, X, R3>(
|
|
152
|
+
before: Effect.Effect<A2, never, R2>,
|
|
153
|
+
after: (a: A2) => Effect.Effect<X, never, R3>
|
|
154
|
+
): <A, R>(self: RequestResolver<A, R>) => RequestResolver<A, R2 | R3 | R>
|
|
155
|
+
<A, R, A2, R2, X, R3>(
|
|
156
|
+
self: RequestResolver<A, R>,
|
|
157
|
+
before: Effect.Effect<A2, never, R2>,
|
|
158
|
+
after: (a: A2) => Effect.Effect<X, never, R3>
|
|
159
|
+
): RequestResolver<A, R | R2 | R3>
|
|
160
|
+
} = internal.around
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* A data source aspect that executes requests between two effects, `before`
|
|
164
|
+
* and `after`, where the result of `before` can be used by `after`.
|
|
165
|
+
*
|
|
166
|
+
* The `before` and `after` effects are provided with the requests being executed.
|
|
167
|
+
*
|
|
168
|
+
* @since 2.0.0
|
|
169
|
+
* @category combinators
|
|
170
|
+
* @example
|
|
171
|
+
* ```ts
|
|
172
|
+
* import { Effect, Request, RequestResolver } from "effect"
|
|
173
|
+
*
|
|
174
|
+
* interface GetUserById extends Request.Request<unknown> {
|
|
175
|
+
* readonly id: number
|
|
176
|
+
* }
|
|
177
|
+
*
|
|
178
|
+
* const resolver = RequestResolver.fromFunction(
|
|
179
|
+
* (request: GetUserById) => ({ id: request.id, name: "John" })
|
|
180
|
+
* )
|
|
181
|
+
*
|
|
182
|
+
* RequestResolver.aroundRequests(
|
|
183
|
+
* resolver,
|
|
184
|
+
* (requests) => Effect.log(`got ${requests.length} requests`),
|
|
185
|
+
* (requests, _) => Effect.log(`finised running ${requests.length} requests`)
|
|
186
|
+
* )
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export const aroundRequests: {
|
|
190
|
+
<A, A2, R2, X, R3>(
|
|
191
|
+
before: (requests: ReadonlyArray<Types.NoInfer<A>>) => Effect.Effect<A2, never, R2>,
|
|
192
|
+
after: (requests: ReadonlyArray<Types.NoInfer<A>>, _: A2) => Effect.Effect<X, never, R3>
|
|
193
|
+
): <R>(self: RequestResolver<A, R>) => RequestResolver<A, R2 | R3 | R>
|
|
194
|
+
<A, R, A2, R2, X, R3>(
|
|
195
|
+
self: RequestResolver<A, R>,
|
|
196
|
+
before: (requests: ReadonlyArray<Types.NoInfer<A>>) => Effect.Effect<A2, never, R2>,
|
|
197
|
+
after: (requests: ReadonlyArray<Types.NoInfer<A>>, _: A2) => Effect.Effect<X, never, R3>
|
|
198
|
+
): RequestResolver<A, R | R2 | R3>
|
|
199
|
+
} = internal.aroundRequests
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Returns a data source that executes at most `n` requests in parallel.
|
|
203
|
+
*
|
|
204
|
+
* @since 2.0.0
|
|
205
|
+
* @category combinators
|
|
206
|
+
*/
|
|
207
|
+
export const batchN: {
|
|
208
|
+
(n: number): <A, R>(self: RequestResolver<A, R>) => RequestResolver<A, R>
|
|
209
|
+
<A, R>(self: RequestResolver<A, R>, n: number): RequestResolver<A, R>
|
|
210
|
+
} = internal.batchN
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Provides this data source with part of its required context.
|
|
214
|
+
*
|
|
215
|
+
* @since 2.0.0
|
|
216
|
+
* @category context
|
|
217
|
+
*/
|
|
218
|
+
export const mapInputContext: {
|
|
219
|
+
<R0, R>(
|
|
220
|
+
f: (context: Context.Context<R0>) => Context.Context<R>
|
|
221
|
+
): <A extends Request.Request<any, any>>(self: RequestResolver<A, R>) => RequestResolver<A, R0>
|
|
222
|
+
<R, A extends Request.Request<any, any>, R0>(
|
|
223
|
+
self: RequestResolver<A, R>,
|
|
224
|
+
f: (context: Context.Context<R0>) => Context.Context<R>
|
|
225
|
+
): RequestResolver<A, R0>
|
|
226
|
+
} = internal.mapInputContext
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Returns a new data source that executes requests of type `C` using the
|
|
230
|
+
* specified function to transform `C` requests into requests that either this
|
|
231
|
+
* data source or that data source can execute.
|
|
232
|
+
*
|
|
233
|
+
* @since 2.0.0
|
|
234
|
+
* @category combinators
|
|
235
|
+
*/
|
|
236
|
+
export const eitherWith: {
|
|
237
|
+
<A extends Request.Request<any, any>, R2, B extends Request.Request<any, any>, C extends Request.Request<any, any>>(
|
|
238
|
+
that: RequestResolver<B, R2>,
|
|
239
|
+
f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
|
|
240
|
+
): <R>(self: RequestResolver<A, R>) => RequestResolver<C, R2 | R>
|
|
241
|
+
<
|
|
242
|
+
R,
|
|
243
|
+
A extends Request.Request<any, any>,
|
|
244
|
+
R2,
|
|
245
|
+
B extends Request.Request<any, any>,
|
|
246
|
+
C extends Request.Request<any, any>
|
|
247
|
+
>(
|
|
248
|
+
self: RequestResolver<A, R>,
|
|
249
|
+
that: RequestResolver<B, R2>,
|
|
250
|
+
f: (_: Request.Entry<C>) => Either.Either<Request.Entry<B>, Request.Entry<A>>
|
|
251
|
+
): RequestResolver<C, R | R2>
|
|
252
|
+
} = internal.eitherWith
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Constructs a data source from a pure function.
|
|
256
|
+
*
|
|
257
|
+
* @since 2.0.0
|
|
258
|
+
* @category constructors
|
|
259
|
+
*/
|
|
260
|
+
export const fromFunction: <A extends Request.Request<any>>(
|
|
261
|
+
f: (request: A) => Request.Request.Success<A>
|
|
262
|
+
) => RequestResolver<A> = internal.fromFunction
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Constructs a data source from a pure function that takes a list of requests
|
|
266
|
+
* and returns a list of results of the same size. Each item in the result
|
|
267
|
+
* list must correspond to the item at the same index in the request list.
|
|
268
|
+
*
|
|
269
|
+
* @since 2.0.0
|
|
270
|
+
* @category constructors
|
|
271
|
+
*/
|
|
272
|
+
export const fromFunctionBatched: <A extends Request.Request<any>>(
|
|
273
|
+
f: (chunk: NonEmptyArray<A>) => Iterable<Request.Request.Success<A>>
|
|
274
|
+
) => RequestResolver<A> = internal.fromFunctionBatched
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Constructs a data source from an effectual function.
|
|
278
|
+
*
|
|
279
|
+
* @since 2.0.0
|
|
280
|
+
* @category constructors
|
|
281
|
+
*/
|
|
282
|
+
export const fromEffect: <R, A extends Request.Request<any, any>>(
|
|
283
|
+
f: (a: A) => Effect.Effect<Request.Request.Success<A>, Request.Request.Error<A>, R>
|
|
284
|
+
) => RequestResolver<A, R> = internal.fromEffect
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Constructs a data source from a list of tags paired to functions, that takes
|
|
288
|
+
* a list of requests and returns a list of results of the same size. Each item
|
|
289
|
+
* in the result list must correspond to the item at the same index in the
|
|
290
|
+
* request list.
|
|
291
|
+
*
|
|
292
|
+
* @since 2.0.0
|
|
293
|
+
* @category constructors
|
|
294
|
+
*/
|
|
295
|
+
export const fromEffectTagged: <A extends Request.Request<any, any> & { readonly _tag: string }>() => <
|
|
296
|
+
Fns extends {
|
|
297
|
+
readonly [Tag in A["_tag"]]: [Extract<A, { readonly _tag: Tag }>] extends [infer Req]
|
|
298
|
+
? Req extends Request.Request<infer ReqA, infer ReqE>
|
|
299
|
+
? (requests: Array<Req>) => Effect.Effect<Iterable<ReqA>, ReqE, any>
|
|
300
|
+
: never
|
|
301
|
+
: never
|
|
302
|
+
}
|
|
303
|
+
>(
|
|
304
|
+
fns: Fns
|
|
305
|
+
) => RequestResolver<A, ReturnType<Fns[keyof Fns]> extends Effect.Effect<infer _A, infer _E, infer R> ? R : never> =
|
|
306
|
+
internal.fromEffectTagged
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* A data source that never executes requests.
|
|
310
|
+
*
|
|
311
|
+
* @since 2.0.0
|
|
312
|
+
* @category constructors
|
|
313
|
+
*/
|
|
314
|
+
export const never: RequestResolver<never> = internal.never
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Provides this data source with its required context.
|
|
318
|
+
*
|
|
319
|
+
* @since 2.0.0
|
|
320
|
+
* @category context
|
|
321
|
+
*/
|
|
322
|
+
export const provideContext: {
|
|
323
|
+
<R>(
|
|
324
|
+
context: Context.Context<R>
|
|
325
|
+
): <A extends Request.Request<any, any>>(self: RequestResolver<A, R>) => RequestResolver<A>
|
|
326
|
+
<R, A extends Request.Request<any, any>>(
|
|
327
|
+
self: RequestResolver<A, R>,
|
|
328
|
+
context: Context.Context<R>
|
|
329
|
+
): RequestResolver<A>
|
|
330
|
+
} = internal.provideContext
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Returns a new data source that executes requests by sending them to this
|
|
334
|
+
* data source and that data source, returning the results from the first data
|
|
335
|
+
* source to complete and safely interrupting the loser.
|
|
336
|
+
*
|
|
337
|
+
* @since 2.0.0
|
|
338
|
+
* @category combinators
|
|
339
|
+
*/
|
|
340
|
+
export const race: {
|
|
341
|
+
<A2 extends Request.Request<any, any>, R2>(
|
|
342
|
+
that: RequestResolver<A2, R2>
|
|
343
|
+
): <A extends Request.Request<any, any>, R>(self: RequestResolver<A, R>) => RequestResolver<A2 | A, R2 | R>
|
|
344
|
+
<A extends Request.Request<any, any>, R, A2 extends Request.Request<any, any>, R2>(
|
|
345
|
+
self: RequestResolver<A, R>,
|
|
346
|
+
that: RequestResolver<A2, R2>
|
|
347
|
+
): RequestResolver<A | A2, R | R2>
|
|
348
|
+
} = internal.race
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Returns a new data source with a localized FiberRef
|
|
352
|
+
*
|
|
353
|
+
* @since 2.0.0
|
|
354
|
+
* @category combinators
|
|
355
|
+
*/
|
|
356
|
+
export const locally: {
|
|
357
|
+
<A>(
|
|
358
|
+
self: FiberRef<A>,
|
|
359
|
+
value: A
|
|
360
|
+
): <R, B extends Request.Request<any, any>>(use: RequestResolver<B, R>) => RequestResolver<B, R>
|
|
361
|
+
<R, B extends Request.Request<any, any>, A>(
|
|
362
|
+
use: RequestResolver<B, R>,
|
|
363
|
+
self: FiberRef<A>,
|
|
364
|
+
value: A
|
|
365
|
+
): RequestResolver<B, R>
|
|
366
|
+
} = core.resolverLocally
|
package/src/Resource.ts
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Effect from "./Effect.js"
|
|
5
|
+
import type * as Exit from "./Exit.js"
|
|
6
|
+
import * as internal from "./internal/resource.js"
|
|
7
|
+
import type * as Schedule from "./Schedule.js"
|
|
8
|
+
import type * as Scope from "./Scope.js"
|
|
9
|
+
import type * as ScopedRef from "./ScopedRef.js"
|
|
10
|
+
import type * as Types from "./Types.js"
|
|
11
|
+
import type * as Unify from "./Unify.js"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @since 2.0.0
|
|
15
|
+
* @category symbols
|
|
16
|
+
*/
|
|
17
|
+
export const ResourceTypeId: unique symbol = internal.ResourceTypeId
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @since 2.0.0
|
|
21
|
+
* @category symbols
|
|
22
|
+
*/
|
|
23
|
+
export type ResourceTypeId = typeof ResourceTypeId
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A `Resource` is a possibly resourceful value that is loaded into memory, and
|
|
27
|
+
* which can be refreshed either manually or automatically.
|
|
28
|
+
*
|
|
29
|
+
* @since 2.0.0
|
|
30
|
+
* @category models
|
|
31
|
+
*/
|
|
32
|
+
export interface Resource<in out A, in out E = never> extends Effect.Effect<A, E>, Resource.Variance<A, E> {
|
|
33
|
+
/** @internal */
|
|
34
|
+
readonly scopedRef: ScopedRef.ScopedRef<Exit.Exit<A, E>>
|
|
35
|
+
/** @internal */
|
|
36
|
+
readonly acquire: Effect.Effect<A, E, Scope.Scope>
|
|
37
|
+
|
|
38
|
+
readonly [Unify.typeSymbol]?: unknown
|
|
39
|
+
readonly [Unify.unifySymbol]?: ResourceUnify<this>
|
|
40
|
+
readonly [Unify.ignoreSymbol]?: ResourceUnifyIgnore
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @category models
|
|
45
|
+
* @since 3.9.0
|
|
46
|
+
*/
|
|
47
|
+
export interface ResourceUnify<A extends { [Unify.typeSymbol]?: any }> extends Effect.EffectUnify<A> {
|
|
48
|
+
Resource?: () => Extract<A[Unify.typeSymbol], Resource<any, any>>
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @category models
|
|
53
|
+
* @since 3.9.0
|
|
54
|
+
*/
|
|
55
|
+
export interface ResourceUnifyIgnore extends Effect.EffectUnifyIgnore {
|
|
56
|
+
Effect?: true
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @since 2.0.0
|
|
61
|
+
*/
|
|
62
|
+
export declare namespace Resource {
|
|
63
|
+
/**
|
|
64
|
+
* @since 2.0.0
|
|
65
|
+
* @category models
|
|
66
|
+
*/
|
|
67
|
+
export interface Variance<in out A, in out E> {
|
|
68
|
+
readonly [ResourceTypeId]: {
|
|
69
|
+
_A: Types.Invariant<A>
|
|
70
|
+
_E: Types.Invariant<E>
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Creates a new `Resource` value that is automatically refreshed according to
|
|
77
|
+
* the specified policy. Note that error retrying is not performed
|
|
78
|
+
* automatically, so if you want to retry on errors, you should first apply
|
|
79
|
+
* retry policies to the acquisition effect before passing it to this
|
|
80
|
+
* constructor.
|
|
81
|
+
*
|
|
82
|
+
* @since 2.0.0
|
|
83
|
+
* @category constructors
|
|
84
|
+
*/
|
|
85
|
+
export const auto: <A, E, R, Out, R2>(
|
|
86
|
+
acquire: Effect.Effect<A, E, R>,
|
|
87
|
+
policy: Schedule.Schedule<Out, unknown, R2>
|
|
88
|
+
) => Effect.Effect<Resource<A, E>, never, R | R2 | Scope.Scope> = internal.auto
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Retrieves the current value stored in the cache.
|
|
92
|
+
*
|
|
93
|
+
* @since 2.0.0
|
|
94
|
+
* @category getters
|
|
95
|
+
*/
|
|
96
|
+
export const get: <A, E>(self: Resource<A, E>) => Effect.Effect<A, E> = internal.get
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Creates a new `Resource` value that must be manually refreshed by calling
|
|
100
|
+
* the refresh method. Note that error retrying is not performed
|
|
101
|
+
* automatically, so if you want to retry on errors, you should first apply
|
|
102
|
+
* retry policies to the acquisition effect before passing it to this
|
|
103
|
+
* constructor.
|
|
104
|
+
*
|
|
105
|
+
* @since 2.0.0
|
|
106
|
+
* @category constructors
|
|
107
|
+
*/
|
|
108
|
+
export const manual: <A, E, R>(
|
|
109
|
+
acquire: Effect.Effect<A, E, R>
|
|
110
|
+
) => Effect.Effect<Resource<A, E>, never, Scope.Scope | R> = internal.manual
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Refreshes the cache. This method will not return until either the refresh
|
|
114
|
+
* is successful, or the refresh operation fails.
|
|
115
|
+
*
|
|
116
|
+
* @since 2.0.0
|
|
117
|
+
* @category utils
|
|
118
|
+
*/
|
|
119
|
+
export const refresh: <A, E>(self: Resource<A, E>) => Effect.Effect<void, E> = internal.refresh
|