@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/Tuple.ts
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module provides utility functions for working with tuples in TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* @since 2.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Equivalence from "./Equivalence.js"
|
|
7
|
+
import { dual } from "./Function.js"
|
|
8
|
+
import type { TypeLambda } from "./HKT.js"
|
|
9
|
+
import * as order from "./Order.js"
|
|
10
|
+
import type { TupleOf } from "./Types.js"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @category type lambdas
|
|
14
|
+
* @since 2.0.0
|
|
15
|
+
*/
|
|
16
|
+
export interface TupleTypeLambda extends TypeLambda {
|
|
17
|
+
readonly type: [this["Out1"], this["Target"]]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new tuple from the provided values.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import * as assert from "node:assert"
|
|
26
|
+
* import { make } from "effect/Tuple"
|
|
27
|
+
*
|
|
28
|
+
* assert.deepStrictEqual(make(1, 'hello', true), [1, 'hello', true])
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @category constructors
|
|
32
|
+
* @since 2.0.0
|
|
33
|
+
*/
|
|
34
|
+
export const make = <A extends ReadonlyArray<any>>(...elements: A): A => elements
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Return the first element from a tuple with two elements.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* import * as assert from "node:assert"
|
|
42
|
+
* import { getFirst } from "effect/Tuple"
|
|
43
|
+
*
|
|
44
|
+
* assert.deepStrictEqual(getFirst(["hello", 42]), "hello")
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @category getters
|
|
48
|
+
* @since 2.0.0
|
|
49
|
+
*/
|
|
50
|
+
export const getFirst = <L, R>(self: readonly [L, R]): L => self[0]
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Return the second element from a tuple with two elements.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* import * as assert from "node:assert"
|
|
58
|
+
* import { getSecond } from "effect/Tuple"
|
|
59
|
+
*
|
|
60
|
+
* assert.deepStrictEqual(getSecond(["hello", 42]), 42)
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @category getters
|
|
64
|
+
* @since 2.0.0
|
|
65
|
+
*/
|
|
66
|
+
export const getSecond = <L, R>(self: readonly [L, R]): R => self[1]
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Transforms each element of tuple using the given function, treating tuple homomorphically
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* import * as assert from "node:assert"
|
|
74
|
+
* import { pipe, Tuple } from "effect"
|
|
75
|
+
*
|
|
76
|
+
* const result = pipe(
|
|
77
|
+
* ["a", 1, false] as const,
|
|
78
|
+
* Tuple.map((el) => el.toString().toUpperCase())
|
|
79
|
+
* )
|
|
80
|
+
* assert.deepStrictEqual(result, ['A', '1', 'FALSE'])
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @category mapping
|
|
84
|
+
* @since 3.9.0
|
|
85
|
+
*/
|
|
86
|
+
export const map: {
|
|
87
|
+
<T extends ReadonlyArray<any> | [], B>(
|
|
88
|
+
fn: (element: T[number]) => B
|
|
89
|
+
): (self: T) => TupleOf<T["length"], B>
|
|
90
|
+
<B, T extends ReadonlyArray<any> | []>(
|
|
91
|
+
self: T,
|
|
92
|
+
fn: (element: T[number]) => B
|
|
93
|
+
): TupleOf<T["length"], B>
|
|
94
|
+
} = dual(
|
|
95
|
+
2,
|
|
96
|
+
<N extends number, A, B>(
|
|
97
|
+
self: TupleOf<N, A>,
|
|
98
|
+
fn: (element: A) => B
|
|
99
|
+
): TupleOf<N, B> => self.map((element) => fn(element)) as TupleOf<N, B>
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Transforms both elements of a tuple with two elements using the given functions.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* import * as assert from "node:assert"
|
|
108
|
+
* import { mapBoth } from "effect/Tuple"
|
|
109
|
+
*
|
|
110
|
+
* assert.deepStrictEqual(
|
|
111
|
+
* mapBoth(["hello", 42], { onFirst: s => s.toUpperCase(), onSecond: n => n.toString() }),
|
|
112
|
+
* ["HELLO", "42"]
|
|
113
|
+
* )
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @category mapping
|
|
117
|
+
* @since 2.0.0
|
|
118
|
+
*/
|
|
119
|
+
export const mapBoth: {
|
|
120
|
+
<L1, L2, R1, R2>(options: {
|
|
121
|
+
readonly onFirst: (e: L1) => L2
|
|
122
|
+
readonly onSecond: (a: R1) => R2
|
|
123
|
+
}): (self: readonly [L1, R1]) => [L2, R2]
|
|
124
|
+
<L1, R1, L2, R2>(self: readonly [L1, R1], options: {
|
|
125
|
+
readonly onFirst: (e: L1) => L2
|
|
126
|
+
readonly onSecond: (a: R1) => R2
|
|
127
|
+
}): [L2, R2]
|
|
128
|
+
} = dual(
|
|
129
|
+
2,
|
|
130
|
+
<L1, R1, L2, R2>(
|
|
131
|
+
self: readonly [L1, R1],
|
|
132
|
+
{ onFirst, onSecond }: {
|
|
133
|
+
readonly onFirst: (e: L1) => L2
|
|
134
|
+
readonly onSecond: (a: R1) => R2
|
|
135
|
+
}
|
|
136
|
+
): [L2, R2] => [onFirst(self[0]), onSecond(self[1])]
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Transforms the first component of a tuple with two elements using a given function.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```ts
|
|
144
|
+
* import * as assert from "node:assert"
|
|
145
|
+
* import { mapFirst } from "effect/Tuple"
|
|
146
|
+
*
|
|
147
|
+
* assert.deepStrictEqual(
|
|
148
|
+
* mapFirst(["hello", 42], s => s.toUpperCase()),
|
|
149
|
+
* ["HELLO", 42]
|
|
150
|
+
* )
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* @category mapping
|
|
154
|
+
* @since 2.0.0
|
|
155
|
+
*/
|
|
156
|
+
export const mapFirst: {
|
|
157
|
+
<L1, L2>(f: (left: L1) => L2): <R>(self: readonly [L1, R]) => [L2, R]
|
|
158
|
+
<L1, R, L2>(self: readonly [L1, R], f: (left: L1) => L2): [L2, R]
|
|
159
|
+
} = dual(2, <L1, R, L2>(self: readonly [L1, R], f: (left: L1) => L2): [L2, R] => [f(self[0]), self[1]])
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Transforms the second component of a tuple with two elements using a given function.
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```ts
|
|
166
|
+
* import * as assert from "node:assert"
|
|
167
|
+
* import { mapSecond } from "effect/Tuple"
|
|
168
|
+
*
|
|
169
|
+
* assert.deepStrictEqual(
|
|
170
|
+
* mapSecond(["hello", 42], n => n.toString()),
|
|
171
|
+
* ["hello", "42"]
|
|
172
|
+
* )
|
|
173
|
+
* ```
|
|
174
|
+
*
|
|
175
|
+
* @category mapping
|
|
176
|
+
* @since 2.0.0
|
|
177
|
+
*/
|
|
178
|
+
export const mapSecond: {
|
|
179
|
+
<R1, R2>(f: (right: R1) => R2): <L>(self: readonly [L, R1]) => [L, R2]
|
|
180
|
+
<L, R1, R2>(self: readonly [L, R1], f: (right: R1) => R2): [L, R2]
|
|
181
|
+
} = dual(2, <L, R1, R2>(self: readonly [L, R1], f: (right: R1) => R2): [L, R2] => [self[0], f(self[1])])
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Swaps the elements of a tuple with two elements.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```ts
|
|
188
|
+
* import * as assert from "node:assert"
|
|
189
|
+
* import { swap } from "effect/Tuple"
|
|
190
|
+
*
|
|
191
|
+
* assert.deepStrictEqual(swap(["hello", 42]), [42, "hello"])
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @since 2.0.0
|
|
195
|
+
*/
|
|
196
|
+
export const swap = <L, R>(self: readonly [L, R]): [R, L] => [self[1], self[0]]
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Given a tuple of `Equivalence`s returns a new `Equivalence` that compares values of a tuple
|
|
200
|
+
* by applying each `Equivalence` to the corresponding element of the tuple.
|
|
201
|
+
*
|
|
202
|
+
* @category combinators
|
|
203
|
+
* @since 2.0.0
|
|
204
|
+
*/
|
|
205
|
+
export const getEquivalence: <T extends ReadonlyArray<Equivalence.Equivalence<any>>>(
|
|
206
|
+
...isEquivalents: T
|
|
207
|
+
) => Equivalence.Equivalence<
|
|
208
|
+
Readonly<{ [I in keyof T]: [T[I]] extends [Equivalence.Equivalence<infer A>] ? A : never }>
|
|
209
|
+
> = Equivalence.tuple
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* This function creates and returns a new `Order` for a tuple of values based on the given `Order`s for each element in the tuple.
|
|
213
|
+
* The returned `Order` compares two tuples of the same type by applying the corresponding `Order` to each element in the tuple.
|
|
214
|
+
* It is useful when you need to compare two tuples of the same type and you have a specific way of comparing each element
|
|
215
|
+
* of the tuple.
|
|
216
|
+
*
|
|
217
|
+
* @category combinators
|
|
218
|
+
* @since 2.0.0
|
|
219
|
+
*/
|
|
220
|
+
export const getOrder: <T extends ReadonlyArray<order.Order<any>>>(
|
|
221
|
+
...elements: T
|
|
222
|
+
) => order.Order<{ [I in keyof T]: [T[I]] extends [order.Order<infer A>] ? A : never }> = order.tuple
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Appends an element to the end of a tuple.
|
|
226
|
+
*
|
|
227
|
+
* @category concatenating
|
|
228
|
+
* @since 2.0.0
|
|
229
|
+
*/
|
|
230
|
+
export const appendElement: {
|
|
231
|
+
<B>(that: B): <A extends ReadonlyArray<unknown>>(self: A) => [...A, B]
|
|
232
|
+
<A extends ReadonlyArray<unknown>, B>(self: A, that: B): [...A, B]
|
|
233
|
+
} = dual(2, <A extends ReadonlyArray<unknown>, B>(self: A, that: B): [...A, B] => [...self, that])
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Retrieves the element at a specified index from a tuple.
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```ts
|
|
240
|
+
* import * as assert from "node:assert"
|
|
241
|
+
* import { Tuple } from "effect"
|
|
242
|
+
*
|
|
243
|
+
* assert.deepStrictEqual(Tuple.at([1, 'hello', true], 1), 'hello')
|
|
244
|
+
* ```
|
|
245
|
+
*
|
|
246
|
+
* @category getters
|
|
247
|
+
* @since 3.4.0
|
|
248
|
+
*/
|
|
249
|
+
export const at: {
|
|
250
|
+
<N extends number>(index: N): <A extends ReadonlyArray<unknown>>(self: A) => A[N]
|
|
251
|
+
<A extends ReadonlyArray<unknown>, N extends number>(self: A, index: N): A[N]
|
|
252
|
+
} = dual(2, <A extends ReadonlyArray<unknown>, N extends number>(self: A, index: N): A[N] => self[index])
|
|
253
|
+
|
|
254
|
+
export {
|
|
255
|
+
/**
|
|
256
|
+
* Determine if an `Array` is a tuple with exactly `N` elements, narrowing down the type to `TupleOf`.
|
|
257
|
+
*
|
|
258
|
+
* An `Array` is considered to be a `TupleOf` if its length is exactly `N`.
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* ```ts
|
|
262
|
+
* import * as assert from "node:assert"
|
|
263
|
+
* import { isTupleOf } from "effect/Tuple"
|
|
264
|
+
*
|
|
265
|
+
* assert.deepStrictEqual(isTupleOf([1, 2, 3], 3), true);
|
|
266
|
+
* assert.deepStrictEqual(isTupleOf([1, 2, 3], 2), false);
|
|
267
|
+
* assert.deepStrictEqual(isTupleOf([1, 2, 3], 4), false);
|
|
268
|
+
*
|
|
269
|
+
* const arr: number[] = [1, 2, 3];
|
|
270
|
+
* if (isTupleOf(arr, 3)) {
|
|
271
|
+
* console.log(arr);
|
|
272
|
+
* // ^? [number, number, number]
|
|
273
|
+
* }
|
|
274
|
+
*
|
|
275
|
+
* ```
|
|
276
|
+
* @category guards
|
|
277
|
+
* @since 3.3.0
|
|
278
|
+
*/
|
|
279
|
+
isTupleOf,
|
|
280
|
+
/**
|
|
281
|
+
* Determine if an `Array` is a tuple with at least `N` elements, narrowing down the type to `TupleOfAtLeast`.
|
|
282
|
+
*
|
|
283
|
+
* An `Array` is considered to be a `TupleOfAtLeast` if its length is at least `N`.
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* ```ts
|
|
287
|
+
* import * as assert from "node:assert"
|
|
288
|
+
* import { isTupleOfAtLeast } from "effect/Tuple"
|
|
289
|
+
*
|
|
290
|
+
* assert.deepStrictEqual(isTupleOfAtLeast([1, 2, 3], 3), true);
|
|
291
|
+
* assert.deepStrictEqual(isTupleOfAtLeast([1, 2, 3], 2), true);
|
|
292
|
+
* assert.deepStrictEqual(isTupleOfAtLeast([1, 2, 3], 4), false);
|
|
293
|
+
*
|
|
294
|
+
* const arr: number[] = [1, 2, 3, 4];
|
|
295
|
+
* if (isTupleOfAtLeast(arr, 3)) {
|
|
296
|
+
* console.log(arr);
|
|
297
|
+
* // ^? [number, number, number, ...number[]]
|
|
298
|
+
* }
|
|
299
|
+
*
|
|
300
|
+
* ```
|
|
301
|
+
* @category guards
|
|
302
|
+
* @since 3.3.0
|
|
303
|
+
*/
|
|
304
|
+
isTupleOfAtLeast
|
|
305
|
+
} from "./Predicate.js"
|
package/src/Types.ts
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A collection of types that are commonly used types.
|
|
3
|
+
*
|
|
4
|
+
* @since 2.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
type _TupleOf<T, N extends number, R extends Array<unknown>> = `${N}` extends `-${number}` ? never
|
|
8
|
+
: R["length"] extends N ? R
|
|
9
|
+
: _TupleOf<T, N, [T, ...R]>
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Represents a tuple with a fixed number of elements of type `T`.
|
|
13
|
+
*
|
|
14
|
+
* This type constructs a tuple that has exactly `N` elements of type `T`.
|
|
15
|
+
*
|
|
16
|
+
* @typeParam N - The number of elements in the tuple.
|
|
17
|
+
* @typeParam T - The type of elements in the tuple.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { TupleOf } from "effect/Types"
|
|
22
|
+
*
|
|
23
|
+
* // A tuple with exactly 3 numbers
|
|
24
|
+
* const example1: TupleOf<3, number> = [1, 2, 3]; // valid
|
|
25
|
+
* // @ts-expect-error
|
|
26
|
+
* const example2: TupleOf<3, number> = [1, 2]; // invalid
|
|
27
|
+
* // @ts-expect-error
|
|
28
|
+
* const example3: TupleOf<3, number> = [1, 2, 3, 4]; // invalid
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @category tuples
|
|
32
|
+
* @since 3.3.0
|
|
33
|
+
*/
|
|
34
|
+
export type TupleOf<N extends number, T> = N extends N ? number extends N ? Array<T> : _TupleOf<T, N, []> : never
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Represents a tuple with at least `N` elements of type `T`.
|
|
38
|
+
*
|
|
39
|
+
* This type constructs a tuple that has a fixed number of elements `N` of type `T` at the start,
|
|
40
|
+
* followed by any number (including zero) of additional elements of the same type `T`.
|
|
41
|
+
*
|
|
42
|
+
* @typeParam N - The minimum number of elements in the tuple.
|
|
43
|
+
* @typeParam T - The type of elements in the tuple.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { TupleOfAtLeast } from "effect/Types"
|
|
48
|
+
*
|
|
49
|
+
* // A tuple with at least 3 numbers
|
|
50
|
+
* const example1: TupleOfAtLeast<3, number> = [1, 2, 3]; // valid
|
|
51
|
+
* const example2: TupleOfAtLeast<3, number> = [1, 2, 3, 4, 5]; // valid
|
|
52
|
+
* // @ts-expect-error
|
|
53
|
+
* const example3: TupleOfAtLeast<3, number> = [1, 2]; // invalid
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @category tuples
|
|
57
|
+
* @since 3.3.0
|
|
58
|
+
*/
|
|
59
|
+
export type TupleOfAtLeast<N extends number, T> = [...TupleOf<N, T>, ...Array<T>]
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Returns the tags in a type.
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* import type { Types } from "effect"
|
|
66
|
+
*
|
|
67
|
+
* type Res = Types.Tags<string | { _tag: "a" } | { _tag: "b" } > // "a" | "b"
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @category types
|
|
71
|
+
* @since 2.0.0
|
|
72
|
+
*/
|
|
73
|
+
export type Tags<E> = E extends { _tag: string } ? E["_tag"] : never
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Excludes the tagged object from the type.
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* import type { Types } from "effect"
|
|
80
|
+
*
|
|
81
|
+
* type Res = Types.ExcludeTag<string | { _tag: "a" } | { _tag: "b" }, "a"> // string | { _tag: "b" }
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @category types
|
|
85
|
+
* @since 2.0.0
|
|
86
|
+
*/
|
|
87
|
+
export type ExcludeTag<E, K extends Tags<E>> = Exclude<E, { _tag: K }>
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Extracts the type of the given tag.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* import type { Types } from "effect"
|
|
95
|
+
*
|
|
96
|
+
* type Res = Types.ExtractTag<{ _tag: "a", a: number } | { _tag: "b", b: number }, "b"> // { _tag: "b", b: number }
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @category types
|
|
100
|
+
* @since 2.0.0
|
|
101
|
+
*/
|
|
102
|
+
export type ExtractTag<E, K extends Tags<E>> = Extract<E, { _tag: K }>
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* A utility type that transforms a union type `T` into an intersection type.
|
|
106
|
+
*
|
|
107
|
+
* @since 2.0.0
|
|
108
|
+
* @category types
|
|
109
|
+
*/
|
|
110
|
+
export type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R
|
|
111
|
+
: never
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Simplifies the type signature of a type.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* import type { Types } from "effect"
|
|
119
|
+
*
|
|
120
|
+
* type Res = Types.Simplify<{ a: number } & { b: number }> // { a: number; b: number; }
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* @since 2.0.0
|
|
124
|
+
* @category types
|
|
125
|
+
*/
|
|
126
|
+
export type Simplify<A> = {
|
|
127
|
+
[K in keyof A]: A[K]
|
|
128
|
+
} extends infer B ? B : never
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Determines if two types are equal.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts
|
|
135
|
+
* import type { Types } from "effect"
|
|
136
|
+
*
|
|
137
|
+
* type Res1 = Types.Equals<{ a: number }, { a: number }> // true
|
|
138
|
+
* type Res2 = Types.Equals<{ a: number }, { b: number }> // false
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @since 2.0.0
|
|
142
|
+
* @category models
|
|
143
|
+
*/
|
|
144
|
+
export type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
|
|
145
|
+
T
|
|
146
|
+
>() => T extends Y ? 1 : 2 ? true
|
|
147
|
+
: false
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Determines if two types are equal, allowing to specify the return types.
|
|
151
|
+
*
|
|
152
|
+
* @since 3.15.0
|
|
153
|
+
* @category models
|
|
154
|
+
*/
|
|
155
|
+
export type EqualsWith<A, B, Y, N> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Y : N
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Determines if a record contains any of the given keys.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```ts
|
|
162
|
+
* import type { Types } from "effect"
|
|
163
|
+
*
|
|
164
|
+
* type Res1 = Types.Has<{ a: number }, "a" | "b"> // true
|
|
165
|
+
* type Res2 = Types.Has<{ c: number }, "a" | "b"> // false
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @since 2.0.0
|
|
169
|
+
* @category models
|
|
170
|
+
*/
|
|
171
|
+
export type Has<A, Key extends string> = (Key extends infer K ? K extends keyof A ? true : never : never) extends never
|
|
172
|
+
? false
|
|
173
|
+
: true
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Merges two object where the keys of the left object take precedence in the case of a conflict.
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* import type { Types } from "effect"
|
|
181
|
+
* type MergeLeft = Types.MergeLeft<{ a: number, b: number; }, { a: string }> // { a: number; b: number; }
|
|
182
|
+
* ```
|
|
183
|
+
*
|
|
184
|
+
* @since 2.0.0
|
|
185
|
+
* @category models
|
|
186
|
+
*/
|
|
187
|
+
export type MergeLeft<Source, Target> = MergeRight<Target, Source>
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Merges two object where the keys of the right object take precedence in the case of a conflict.
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* ```ts
|
|
194
|
+
* import type { Types } from "effect"
|
|
195
|
+
* type MergeRight = Types.MergeRight<{ a: number, b: number; }, { a: string }> // { a: string; b: number; }
|
|
196
|
+
* ```
|
|
197
|
+
*
|
|
198
|
+
* @since 2.0.0
|
|
199
|
+
* @category models
|
|
200
|
+
*/
|
|
201
|
+
export type MergeRight<Target, Source> = Simplify<
|
|
202
|
+
& Source
|
|
203
|
+
& {
|
|
204
|
+
[Key in keyof Target as Key extends keyof Source ? never : Key]: Target[Key]
|
|
205
|
+
}
|
|
206
|
+
>
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* @since 2.0.0
|
|
210
|
+
* @category models
|
|
211
|
+
*/
|
|
212
|
+
export type MergeRecord<Source, Target> = MergeLeft<Source, Target>
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Describes the concurrency to use when executing multiple Effect's.
|
|
216
|
+
*
|
|
217
|
+
* @since 2.0.0
|
|
218
|
+
* @category models
|
|
219
|
+
*/
|
|
220
|
+
export type Concurrency = number | "unbounded" | "inherit"
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Make all properties in `T` mutable. Supports arrays, tuples, and records as well.
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```ts
|
|
227
|
+
* import type { Types } from "effect"
|
|
228
|
+
*
|
|
229
|
+
* type MutableStruct = Types.Mutable<{ readonly a: string; readonly b: number }> // { a: string; b: number; }
|
|
230
|
+
*
|
|
231
|
+
* type MutableArray = Types.Mutable<ReadonlyArray<string>> // string[]
|
|
232
|
+
*
|
|
233
|
+
* type MutableTuple = Types.Mutable<readonly [string, number]> // [string, number]
|
|
234
|
+
*
|
|
235
|
+
* type MutableRecord = Types.Mutable<{ readonly [_: string]: number }> // { [x: string]: number; }
|
|
236
|
+
* ```
|
|
237
|
+
*
|
|
238
|
+
* @since 2.0.0
|
|
239
|
+
* @category types
|
|
240
|
+
*/
|
|
241
|
+
export type Mutable<T> = {
|
|
242
|
+
-readonly [P in keyof T]: T[P]
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Like `Types.Mutable`, but works recursively.
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* ```ts
|
|
250
|
+
* import type { Types } from "effect"
|
|
251
|
+
*
|
|
252
|
+
* type DeepMutableStruct = Types.DeepMutable<{
|
|
253
|
+
* readonly a: string;
|
|
254
|
+
* readonly b: readonly string[]
|
|
255
|
+
* }>
|
|
256
|
+
* // { a: string; b: string[] }
|
|
257
|
+
* ```
|
|
258
|
+
*
|
|
259
|
+
* @since 3.1.0
|
|
260
|
+
* @category types
|
|
261
|
+
*/
|
|
262
|
+
export type DeepMutable<T> = T extends ReadonlyMap<infer K, infer V> ? Map<DeepMutable<K>, DeepMutable<V>>
|
|
263
|
+
: T extends ReadonlySet<infer V> ? Set<DeepMutable<V>>
|
|
264
|
+
: T extends string | number | boolean | bigint | symbol | Function ? T
|
|
265
|
+
: { -readonly [K in keyof T]: DeepMutable<T[K]> }
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Avoid inference on a specific parameter
|
|
269
|
+
*
|
|
270
|
+
* @since 2.0.0
|
|
271
|
+
* @category models
|
|
272
|
+
*/
|
|
273
|
+
export type NoInfer<A> = [A][A extends any ? 0 : never]
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Invariant helper.
|
|
277
|
+
*
|
|
278
|
+
* @since 2.0.0
|
|
279
|
+
* @category models
|
|
280
|
+
*/
|
|
281
|
+
export type Invariant<A> = (_: A) => A
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* @since 3.9.0
|
|
285
|
+
* @category models
|
|
286
|
+
*/
|
|
287
|
+
export declare namespace Invariant {
|
|
288
|
+
/**
|
|
289
|
+
* @since 3.9.0
|
|
290
|
+
* @category models
|
|
291
|
+
*/
|
|
292
|
+
export type Type<A> = A extends Invariant<infer U> ? U : never
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Covariant helper.
|
|
297
|
+
*
|
|
298
|
+
* @since 2.0.0
|
|
299
|
+
* @category models
|
|
300
|
+
*/
|
|
301
|
+
export type Covariant<A> = (_: never) => A
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* @since 3.9.0
|
|
305
|
+
* @category models
|
|
306
|
+
*/
|
|
307
|
+
export declare namespace Covariant {
|
|
308
|
+
/**
|
|
309
|
+
* @since 3.9.0
|
|
310
|
+
* @category models
|
|
311
|
+
*/
|
|
312
|
+
export type Type<A> = A extends Covariant<infer U> ? U : never
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Contravariant helper.
|
|
317
|
+
*
|
|
318
|
+
* @since 2.0.0
|
|
319
|
+
* @category models
|
|
320
|
+
*/
|
|
321
|
+
export type Contravariant<A> = (_: A) => void
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* @since 3.9.0
|
|
325
|
+
* @category models
|
|
326
|
+
*/
|
|
327
|
+
export declare namespace Contravariant {
|
|
328
|
+
/**
|
|
329
|
+
* @since 3.9.0
|
|
330
|
+
* @category models
|
|
331
|
+
*/
|
|
332
|
+
export type Type<A> = A extends Contravariant<infer U> ? U : never
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* @since 2.0.0
|
|
337
|
+
*/
|
|
338
|
+
export type MatchRecord<S, onTrue, onFalse> = {} extends S ? onTrue : onFalse
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* @since 2.0.0
|
|
342
|
+
*/
|
|
343
|
+
export type NotFunction<T> = T extends Function ? never : T
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* @since 3.9.0
|
|
347
|
+
*/
|
|
348
|
+
export type NoExcessProperties<T, U> = T & { readonly [K in Exclude<keyof U, keyof T>]: never }
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* @since 3.15.0
|
|
352
|
+
*/
|
|
353
|
+
export type Ctor<T = {}> = new(...args: Array<any>) => T
|