@clayroach/effect 3.19.14-source-capture.8 → 3.19.14-source-trace.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SourceLocation/package.json +6 -0
- package/dist/cjs/Effect.js +2 -28
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/FiberRef.js +12 -1
- package/dist/cjs/FiberRef.js.map +1 -1
- package/dist/cjs/Layer.js +2 -24
- package/dist/cjs/Layer.js.map +1 -1
- package/dist/cjs/RuntimeFlags.js +1 -29
- package/dist/cjs/RuntimeFlags.js.map +1 -1
- package/dist/cjs/SourceLocation.js +60 -0
- package/dist/cjs/SourceLocation.js.map +1 -0
- package/dist/cjs/Tracer.js +1 -15
- package/dist/cjs/Tracer.js.map +1 -1
- package/dist/cjs/Utils.js +1 -1
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/clock.js +1 -1
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/cjs/internal/core.js +17 -50
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +18 -30
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +16 -65
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/layer/circular.js +1 -5
- package/dist/cjs/internal/layer/circular.js.map +1 -1
- package/dist/cjs/internal/layer.js +1 -3
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/logger.js +25 -2
- package/dist/cjs/internal/logger.js.map +1 -1
- package/dist/cjs/internal/runtimeFlags.js +2 -11
- package/dist/cjs/internal/runtimeFlags.js.map +1 -1
- package/dist/cjs/internal/tracer.js +1 -114
- package/dist/cjs/internal/tracer.js.map +1 -1
- package/dist/dts/Config.d.ts +2 -2
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +8 -29
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/FiberRef.d.ts +12 -0
- package/dist/dts/FiberRef.d.ts.map +1 -1
- package/dist/dts/Layer.d.ts +0 -22
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/RuntimeFlags.d.ts +0 -28
- package/dist/dts/RuntimeFlags.d.ts.map +1 -1
- package/dist/dts/SourceLocation.d.ts +88 -0
- package/dist/dts/SourceLocation.d.ts.map +1 -0
- package/dist/dts/Tracer.d.ts +0 -15
- package/dist/dts/Tracer.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/layer.d.ts.map +1 -1
- package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
- package/dist/esm/Effect.js +0 -26
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/FiberRef.js +11 -0
- package/dist/esm/FiberRef.js.map +1 -1
- package/dist/esm/Layer.js +0 -22
- package/dist/esm/Layer.js.map +1 -1
- package/dist/esm/RuntimeFlags.js +0 -28
- package/dist/esm/RuntimeFlags.js.map +1 -1
- package/dist/esm/SourceLocation.js +51 -0
- package/dist/esm/SourceLocation.js.map +1 -0
- package/dist/esm/Tracer.js +0 -14
- package/dist/esm/Tracer.js.map +1 -1
- package/dist/esm/Utils.js +1 -1
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/clock.js +1 -1
- package/dist/esm/internal/clock.js.map +1 -1
- package/dist/esm/internal/core.js +12 -45
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +18 -30
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +13 -60
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/layer/circular.js +0 -4
- package/dist/esm/internal/layer/circular.js.map +1 -1
- package/dist/esm/internal/layer.js +0 -2
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/logger.js +25 -2
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/runtimeFlags.js +1 -9
- package/dist/esm/internal/runtimeFlags.js.map +1 -1
- package/dist/esm/internal/tracer.js +0 -111
- package/dist/esm/internal/tracer.js.map +1 -1
- package/package.json +12 -1
- package/src/Arbitrary.ts +1101 -0
- package/src/Array.ts +3589 -0
- package/src/BigDecimal.ts +1349 -0
- package/src/BigInt.ts +643 -0
- package/src/Boolean.ts +287 -0
- package/src/Brand.ts +360 -0
- package/src/Cache.ts +281 -0
- package/src/Cause.ts +1555 -0
- package/src/Channel.ts +2355 -0
- package/src/ChildExecutorDecision.ts +146 -0
- package/src/Chunk.ts +1495 -0
- package/src/Clock.ts +111 -0
- package/src/Config.ts +542 -0
- package/src/ConfigError.ts +270 -0
- package/src/ConfigProvider.ts +333 -0
- package/src/ConfigProviderPathPatch.ts +100 -0
- package/src/Console.ts +226 -0
- package/src/Context.ts +585 -0
- package/src/Cron.ts +706 -0
- package/src/Data.ts +596 -0
- package/src/DateTime.ts +1686 -0
- package/src/DefaultServices.ts +34 -0
- package/src/Deferred.ts +301 -0
- package/src/Differ.ts +450 -0
- package/src/Duration.ts +1000 -0
- package/src/Effect.ts +14817 -0
- package/src/Effectable.ts +107 -0
- package/src/Either.ts +1040 -0
- package/src/Encoding.ts +195 -0
- package/src/Equal.ts +98 -0
- package/src/Equivalence.ts +235 -0
- package/src/ExecutionPlan.ts +308 -0
- package/src/ExecutionStrategy.ts +119 -0
- package/src/Exit.ts +467 -0
- package/src/FastCheck.ts +9 -0
- package/src/Fiber.ts +744 -0
- package/src/FiberHandle.ts +540 -0
- package/src/FiberId.ts +195 -0
- package/src/FiberMap.ts +656 -0
- package/src/FiberRef.ts +444 -0
- package/src/FiberRefs.ts +204 -0
- package/src/FiberRefsPatch.ts +105 -0
- package/src/FiberSet.ts +491 -0
- package/src/FiberStatus.ts +108 -0
- package/src/Function.ts +1222 -0
- package/src/GlobalValue.ts +53 -0
- package/src/Graph.ts +3732 -0
- package/src/GroupBy.ts +103 -0
- package/src/HKT.ts +45 -0
- package/src/Hash.ts +195 -0
- package/src/HashMap.ts +519 -0
- package/src/HashRing.ts +317 -0
- package/src/HashSet.ts +2346 -0
- package/src/Inspectable.ts +287 -0
- package/src/Iterable.ts +1119 -0
- package/src/JSONSchema.ts +1044 -0
- package/src/KeyedPool.ts +167 -0
- package/src/Layer.ts +1228 -0
- package/src/LayerMap.ts +436 -0
- package/src/List.ts +977 -0
- package/src/LogLevel.ts +285 -0
- package/src/LogSpan.ts +25 -0
- package/src/Logger.ts +702 -0
- package/src/Mailbox.ts +268 -0
- package/src/ManagedRuntime.ts +180 -0
- package/src/Match.ts +1477 -0
- package/src/MergeDecision.ts +95 -0
- package/src/MergeState.ts +172 -0
- package/src/MergeStrategy.ts +107 -0
- package/src/Metric.ts +780 -0
- package/src/MetricBoundaries.ts +69 -0
- package/src/MetricHook.ts +151 -0
- package/src/MetricKey.ts +224 -0
- package/src/MetricKeyType.ts +262 -0
- package/src/MetricLabel.ts +47 -0
- package/src/MetricPair.ts +71 -0
- package/src/MetricPolling.ts +148 -0
- package/src/MetricRegistry.ts +48 -0
- package/src/MetricState.ts +257 -0
- package/src/Micro.ts +4405 -0
- package/src/ModuleVersion.ts +18 -0
- package/src/MutableHashMap.ts +411 -0
- package/src/MutableHashSet.ts +706 -0
- package/src/MutableList.ts +297 -0
- package/src/MutableQueue.ts +227 -0
- package/src/MutableRef.ts +202 -0
- package/src/NonEmptyIterable.ts +32 -0
- package/src/Number.ts +1071 -0
- package/src/Option.ts +2170 -0
- package/src/Order.ts +373 -0
- package/src/Ordering.ts +111 -0
- package/src/ParseResult.ts +2031 -0
- package/src/PartitionedSemaphore.ts +200 -0
- package/src/Pipeable.ts +566 -0
- package/src/Pool.ts +204 -0
- package/src/Predicate.ts +1405 -0
- package/src/Pretty.ts +205 -0
- package/src/PrimaryKey.ts +23 -0
- package/src/PubSub.ts +182 -0
- package/src/Queue.ts +644 -0
- package/src/Random.ts +204 -0
- package/src/RateLimiter.ts +138 -0
- package/src/RcMap.ts +141 -0
- package/src/RcRef.ts +122 -0
- package/src/Readable.ts +93 -0
- package/src/Record.ts +1274 -0
- package/src/RedBlackTree.ts +421 -0
- package/src/Redacted.ts +144 -0
- package/src/Ref.ts +180 -0
- package/src/RegExp.ts +38 -0
- package/src/Reloadable.ts +127 -0
- package/src/Request.ts +347 -0
- package/src/RequestBlock.ts +118 -0
- package/src/RequestResolver.ts +366 -0
- package/src/Resource.ts +119 -0
- package/src/Runtime.ts +383 -0
- package/src/RuntimeFlags.ts +336 -0
- package/src/RuntimeFlagsPatch.ts +183 -0
- package/src/STM.ts +2045 -0
- package/src/Schedule.ts +2219 -0
- package/src/ScheduleDecision.ts +62 -0
- package/src/ScheduleInterval.ts +151 -0
- package/src/ScheduleIntervals.ts +122 -0
- package/src/Scheduler.ts +353 -0
- package/src/Schema.ts +10914 -0
- package/src/SchemaAST.ts +3043 -0
- package/src/Scope.ts +204 -0
- package/src/ScopedCache.ts +151 -0
- package/src/ScopedRef.ts +117 -0
- package/src/Secret.ts +88 -0
- package/src/SingleProducerAsyncInput.ts +67 -0
- package/src/Sink.ts +1461 -0
- package/src/SortedMap.ts +287 -0
- package/src/SortedSet.ts +390 -0
- package/src/SourceLocation.ts +108 -0
- package/src/Stream.ts +6468 -0
- package/src/StreamEmit.ts +136 -0
- package/src/StreamHaltStrategy.ts +123 -0
- package/src/Streamable.ts +45 -0
- package/src/String.ts +778 -0
- package/src/Struct.ts +243 -0
- package/src/Subscribable.ts +100 -0
- package/src/SubscriptionRef.ts +298 -0
- package/src/Supervisor.ts +240 -0
- package/src/Symbol.ts +29 -0
- package/src/SynchronizedRef.ts +270 -0
- package/src/TArray.ts +495 -0
- package/src/TDeferred.ts +100 -0
- package/src/TMap.ts +515 -0
- package/src/TPriorityQueue.ts +223 -0
- package/src/TPubSub.ts +200 -0
- package/src/TQueue.ts +432 -0
- package/src/TRandom.ts +129 -0
- package/src/TReentrantLock.ts +224 -0
- package/src/TRef.ts +178 -0
- package/src/TSemaphore.ts +129 -0
- package/src/TSet.ts +365 -0
- package/src/TSubscriptionRef.ts +192 -0
- package/src/Take.ts +258 -0
- package/src/TestAnnotation.ts +158 -0
- package/src/TestAnnotationMap.ts +119 -0
- package/src/TestAnnotations.ts +117 -0
- package/src/TestClock.ts +556 -0
- package/src/TestConfig.ts +47 -0
- package/src/TestContext.ts +36 -0
- package/src/TestLive.ts +53 -0
- package/src/TestServices.ts +390 -0
- package/src/TestSized.ts +55 -0
- package/src/Tracer.ts +182 -0
- package/src/Trie.ts +840 -0
- package/src/Tuple.ts +305 -0
- package/src/Types.ts +353 -0
- package/src/Unify.ts +113 -0
- package/src/UpstreamPullRequest.ts +117 -0
- package/src/UpstreamPullStrategy.ts +121 -0
- package/src/Utils.ts +809 -0
- package/src/index.ts +1568 -0
- package/src/internal/array.ts +8 -0
- package/src/internal/blockedRequests.ts +520 -0
- package/src/internal/cache.ts +733 -0
- package/src/internal/cause.ts +1050 -0
- package/src/internal/channel/channelExecutor.ts +1200 -0
- package/src/internal/channel/channelState.ts +134 -0
- package/src/internal/channel/childExecutorDecision.ts +96 -0
- package/src/internal/channel/continuation.ts +200 -0
- package/src/internal/channel/mergeDecision.ts +113 -0
- package/src/internal/channel/mergeState.ts +120 -0
- package/src/internal/channel/mergeStrategy.ts +72 -0
- package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
- package/src/internal/channel/subexecutor.ts +229 -0
- package/src/internal/channel/upstreamPullRequest.ts +84 -0
- package/src/internal/channel/upstreamPullStrategy.ts +87 -0
- package/src/internal/channel.ts +2603 -0
- package/src/internal/clock.ts +95 -0
- package/src/internal/completedRequestMap.ts +9 -0
- package/src/internal/concurrency.ts +54 -0
- package/src/internal/config.ts +716 -0
- package/src/internal/configError.ts +304 -0
- package/src/internal/configProvider/pathPatch.ts +97 -0
- package/src/internal/configProvider.ts +799 -0
- package/src/internal/console.ts +153 -0
- package/src/internal/context.ts +337 -0
- package/src/internal/core-effect.ts +2293 -0
- package/src/internal/core-stream.ts +998 -0
- package/src/internal/core.ts +3189 -0
- package/src/internal/data.ts +36 -0
- package/src/internal/dataSource.ts +327 -0
- package/src/internal/dateTime.ts +1277 -0
- package/src/internal/defaultServices/console.ts +100 -0
- package/src/internal/defaultServices.ts +163 -0
- package/src/internal/deferred.ts +46 -0
- package/src/internal/differ/chunkPatch.ts +211 -0
- package/src/internal/differ/contextPatch.ts +232 -0
- package/src/internal/differ/hashMapPatch.ts +220 -0
- package/src/internal/differ/hashSetPatch.ts +176 -0
- package/src/internal/differ/orPatch.ts +311 -0
- package/src/internal/differ/readonlyArrayPatch.ts +210 -0
- package/src/internal/differ.ts +200 -0
- package/src/internal/doNotation.ts +80 -0
- package/src/internal/effect/circular.ts +895 -0
- package/src/internal/effectable.ts +131 -0
- package/src/internal/either.ts +110 -0
- package/src/internal/encoding/base64.ts +286 -0
- package/src/internal/encoding/base64Url.ts +29 -0
- package/src/internal/encoding/common.ts +51 -0
- package/src/internal/encoding/hex.ts +315 -0
- package/src/internal/errors.ts +7 -0
- package/src/internal/executionPlan.ts +114 -0
- package/src/internal/executionStrategy.ts +74 -0
- package/src/internal/fiber.ts +388 -0
- package/src/internal/fiberId.ts +267 -0
- package/src/internal/fiberMessage.ts +82 -0
- package/src/internal/fiberRefs/patch.ts +144 -0
- package/src/internal/fiberRefs.ts +297 -0
- package/src/internal/fiberRuntime.ts +3842 -0
- package/src/internal/fiberScope.ts +71 -0
- package/src/internal/fiberStatus.ts +119 -0
- package/src/internal/groupBy.ts +530 -0
- package/src/internal/hashMap/array.ts +49 -0
- package/src/internal/hashMap/bitwise.ts +32 -0
- package/src/internal/hashMap/config.ts +14 -0
- package/src/internal/hashMap/keySet.ts +8 -0
- package/src/internal/hashMap/node.ts +391 -0
- package/src/internal/hashMap.ts +586 -0
- package/src/internal/hashSet.ts +323 -0
- package/src/internal/keyedPool.ts +244 -0
- package/src/internal/layer/circular.ts +214 -0
- package/src/internal/layer.ts +1483 -0
- package/src/internal/logSpan.ts +20 -0
- package/src/internal/logger-circular.ts +24 -0
- package/src/internal/logger.ts +522 -0
- package/src/internal/mailbox.ts +561 -0
- package/src/internal/managedRuntime/circular.ts +6 -0
- package/src/internal/managedRuntime.ts +134 -0
- package/src/internal/matcher.ts +652 -0
- package/src/internal/metric/boundaries.ts +75 -0
- package/src/internal/metric/hook.ts +483 -0
- package/src/internal/metric/key.ts +167 -0
- package/src/internal/metric/keyType.ts +238 -0
- package/src/internal/metric/label.ts +41 -0
- package/src/internal/metric/pair.ts +48 -0
- package/src/internal/metric/polling.ts +149 -0
- package/src/internal/metric/registry.ts +187 -0
- package/src/internal/metric/state.ts +290 -0
- package/src/internal/metric.ts +577 -0
- package/src/internal/opCodes/cause.ts +35 -0
- package/src/internal/opCodes/channel.ts +83 -0
- package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
- package/src/internal/opCodes/channelMergeDecision.ts +11 -0
- package/src/internal/opCodes/channelMergeState.ts +17 -0
- package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
- package/src/internal/opCodes/channelState.ts +23 -0
- package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
- package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
- package/src/internal/opCodes/config.ts +65 -0
- package/src/internal/opCodes/configError.ts +35 -0
- package/src/internal/opCodes/continuation.ts +11 -0
- package/src/internal/opCodes/deferred.ts +11 -0
- package/src/internal/opCodes/effect.ts +89 -0
- package/src/internal/opCodes/layer.ts +59 -0
- package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
- package/src/internal/option.ts +80 -0
- package/src/internal/pool.ts +432 -0
- package/src/internal/pubsub.ts +1762 -0
- package/src/internal/query.ts +204 -0
- package/src/internal/queue.ts +766 -0
- package/src/internal/random.ts +161 -0
- package/src/internal/rateLimiter.ts +93 -0
- package/src/internal/rcMap.ts +285 -0
- package/src/internal/rcRef.ts +192 -0
- package/src/internal/redBlackTree/iterator.ts +200 -0
- package/src/internal/redBlackTree/node.ts +68 -0
- package/src/internal/redBlackTree.ts +1245 -0
- package/src/internal/redacted.ts +73 -0
- package/src/internal/ref.ts +171 -0
- package/src/internal/reloadable.ts +140 -0
- package/src/internal/request.ts +177 -0
- package/src/internal/resource.ts +76 -0
- package/src/internal/ringBuffer.ts +68 -0
- package/src/internal/runtime.ts +558 -0
- package/src/internal/runtimeFlags.ts +178 -0
- package/src/internal/runtimeFlagsPatch.ts +103 -0
- package/src/internal/schedule/decision.ts +47 -0
- package/src/internal/schedule/interval.ts +101 -0
- package/src/internal/schedule/intervals.ts +180 -0
- package/src/internal/schedule.ts +2199 -0
- package/src/internal/schema/errors.ts +191 -0
- package/src/internal/schema/schemaId.ts +106 -0
- package/src/internal/schema/util.ts +50 -0
- package/src/internal/scopedCache.ts +644 -0
- package/src/internal/scopedRef.ts +118 -0
- package/src/internal/secret.ts +89 -0
- package/src/internal/singleShotGen.ts +35 -0
- package/src/internal/sink.ts +2120 -0
- package/src/internal/stack.ts +10 -0
- package/src/internal/stm/core.ts +817 -0
- package/src/internal/stm/entry.ts +59 -0
- package/src/internal/stm/journal.ts +123 -0
- package/src/internal/stm/opCodes/stm.ts +71 -0
- package/src/internal/stm/opCodes/stmState.ts +17 -0
- package/src/internal/stm/opCodes/strategy.ts +17 -0
- package/src/internal/stm/opCodes/tExit.ts +29 -0
- package/src/internal/stm/opCodes/tryCommit.ts +11 -0
- package/src/internal/stm/stm.ts +1453 -0
- package/src/internal/stm/stmState.ts +136 -0
- package/src/internal/stm/tArray.ts +550 -0
- package/src/internal/stm/tDeferred.ts +81 -0
- package/src/internal/stm/tExit.ts +190 -0
- package/src/internal/stm/tMap.ts +824 -0
- package/src/internal/stm/tPriorityQueue.ts +267 -0
- package/src/internal/stm/tPubSub.ts +551 -0
- package/src/internal/stm/tQueue.ts +393 -0
- package/src/internal/stm/tRandom.ts +140 -0
- package/src/internal/stm/tReentrantLock.ts +352 -0
- package/src/internal/stm/tRef.ts +195 -0
- package/src/internal/stm/tSemaphore.ts +113 -0
- package/src/internal/stm/tSet.ts +259 -0
- package/src/internal/stm/tSubscriptionRef.ts +286 -0
- package/src/internal/stm/tryCommit.ts +34 -0
- package/src/internal/stm/txnId.ts +14 -0
- package/src/internal/stm/versioned.ts +4 -0
- package/src/internal/stream/debounceState.ts +57 -0
- package/src/internal/stream/emit.ts +123 -0
- package/src/internal/stream/haltStrategy.ts +94 -0
- package/src/internal/stream/handoff.ts +187 -0
- package/src/internal/stream/handoffSignal.ts +59 -0
- package/src/internal/stream/pull.ts +34 -0
- package/src/internal/stream/sinkEndReason.ts +30 -0
- package/src/internal/stream/zipAllState.ts +88 -0
- package/src/internal/stream/zipChunksState.ts +56 -0
- package/src/internal/stream.ts +8801 -0
- package/src/internal/string-utils.ts +107 -0
- package/src/internal/subscriptionRef.ts +138 -0
- package/src/internal/supervisor/patch.ts +190 -0
- package/src/internal/supervisor.ts +303 -0
- package/src/internal/synchronizedRef.ts +114 -0
- package/src/internal/take.ts +199 -0
- package/src/internal/testing/sleep.ts +27 -0
- package/src/internal/testing/suspendedWarningData.ts +85 -0
- package/src/internal/testing/warningData.ts +94 -0
- package/src/internal/tracer.ts +150 -0
- package/src/internal/trie.ts +722 -0
- package/src/internal/version.ts +7 -0
package/src/Data.ts
ADDED
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Cause from "./Cause.js"
|
|
5
|
+
import * as core from "./internal/core.js"
|
|
6
|
+
import * as internal from "./internal/data.js"
|
|
7
|
+
import { StructuralPrototype } from "./internal/effectable.js"
|
|
8
|
+
import * as Predicate from "./Predicate.js"
|
|
9
|
+
import type * as Types from "./Types.js"
|
|
10
|
+
import type { Unify } from "./Unify.js"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @since 2.0.0
|
|
14
|
+
*/
|
|
15
|
+
export declare namespace Case {
|
|
16
|
+
/**
|
|
17
|
+
* @since 2.0.0
|
|
18
|
+
* @category models
|
|
19
|
+
*/
|
|
20
|
+
export interface Constructor<A, Tag extends keyof A = never> {
|
|
21
|
+
(
|
|
22
|
+
args: Types.Equals<Omit<A, Tag>, {}> extends true ? void
|
|
23
|
+
: { readonly [P in keyof A as P extends Tag ? never : P]: A[P] }
|
|
24
|
+
): A
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* import * as assert from "node:assert"
|
|
32
|
+
* import { Data, Equal } from "effect"
|
|
33
|
+
*
|
|
34
|
+
* const alice = Data.struct({ name: "Alice", age: 30 })
|
|
35
|
+
*
|
|
36
|
+
* const bob = Data.struct({ name: "Bob", age: 40 })
|
|
37
|
+
*
|
|
38
|
+
* assert.deepStrictEqual(Equal.equals(alice, alice), true)
|
|
39
|
+
* assert.deepStrictEqual(Equal.equals(alice, Data.struct({ name: "Alice", age: 30 })), true)
|
|
40
|
+
*
|
|
41
|
+
* assert.deepStrictEqual(Equal.equals(alice, { name: "Alice", age: 30 }), false)
|
|
42
|
+
* assert.deepStrictEqual(Equal.equals(alice, bob), false)
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @category constructors
|
|
46
|
+
* @since 2.0.0
|
|
47
|
+
*/
|
|
48
|
+
export const struct: <A extends Record<string, any>>(a: A) => { readonly [P in keyof A]: A[P] } = internal.struct
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @category constructors
|
|
52
|
+
* @since 2.0.0
|
|
53
|
+
*/
|
|
54
|
+
export const unsafeStruct = <A extends Record<string, any>>(as: A): { readonly [P in keyof A]: A[P] } =>
|
|
55
|
+
Object.setPrototypeOf(as, StructuralPrototype)
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* import * as assert from "node:assert"
|
|
61
|
+
* import { Data, Equal } from "effect"
|
|
62
|
+
*
|
|
63
|
+
* const alice = Data.tuple("Alice", 30)
|
|
64
|
+
*
|
|
65
|
+
* const bob = Data.tuple("Bob", 40)
|
|
66
|
+
*
|
|
67
|
+
* assert.deepStrictEqual(Equal.equals(alice, alice), true)
|
|
68
|
+
* assert.deepStrictEqual(Equal.equals(alice, Data.tuple("Alice", 30)), true)
|
|
69
|
+
*
|
|
70
|
+
* assert.deepStrictEqual(Equal.equals(alice, ["Alice", 30]), false)
|
|
71
|
+
* assert.deepStrictEqual(Equal.equals(alice, bob), false)
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* @category constructors
|
|
75
|
+
* @since 2.0.0
|
|
76
|
+
*/
|
|
77
|
+
export const tuple = <As extends ReadonlyArray<any>>(...as: As): Readonly<As> => unsafeArray(as)
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* import * as assert from "node:assert"
|
|
83
|
+
* import { Data, Equal } from "effect"
|
|
84
|
+
*
|
|
85
|
+
* const alice = Data.struct({ name: "Alice", age: 30 })
|
|
86
|
+
* const bob = Data.struct({ name: "Bob", age: 40 })
|
|
87
|
+
*
|
|
88
|
+
* const persons = Data.array([alice, bob])
|
|
89
|
+
*
|
|
90
|
+
* assert.deepStrictEqual(
|
|
91
|
+
* Equal.equals(
|
|
92
|
+
* persons,
|
|
93
|
+
* Data.array([
|
|
94
|
+
* Data.struct({ name: "Alice", age: 30 }),
|
|
95
|
+
* Data.struct({ name: "Bob", age: 40 })
|
|
96
|
+
* ])
|
|
97
|
+
* ),
|
|
98
|
+
* true
|
|
99
|
+
* )
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @category constructors
|
|
103
|
+
* @since 2.0.0
|
|
104
|
+
*/
|
|
105
|
+
export const array = <As extends ReadonlyArray<any>>(as: As): Readonly<As> => unsafeArray(as.slice(0) as unknown as As)
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @category constructors
|
|
109
|
+
* @since 2.0.0
|
|
110
|
+
*/
|
|
111
|
+
export const unsafeArray = <As extends ReadonlyArray<any>>(as: As): Readonly<As> =>
|
|
112
|
+
Object.setPrototypeOf(as, internal.ArrayProto)
|
|
113
|
+
|
|
114
|
+
const _case = <A>(): Case.Constructor<A> => (args) =>
|
|
115
|
+
(args === undefined ? Object.create(StructuralPrototype) : struct(args)) as any
|
|
116
|
+
|
|
117
|
+
export {
|
|
118
|
+
/**
|
|
119
|
+
* Provides a constructor for the specified `Case`.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* import * as assert from "node:assert"
|
|
124
|
+
* import { Data, Equal } from "effect"
|
|
125
|
+
*
|
|
126
|
+
* interface Person {
|
|
127
|
+
* readonly name: string
|
|
128
|
+
* }
|
|
129
|
+
*
|
|
130
|
+
* // Creating a constructor for the specified Case
|
|
131
|
+
* const Person = Data.case<Person>()
|
|
132
|
+
*
|
|
133
|
+
* // Creating instances of Person
|
|
134
|
+
* const mike1 = Person({ name: "Mike" })
|
|
135
|
+
* const mike2 = Person({ name: "Mike" })
|
|
136
|
+
* const john = Person({ name: "John" })
|
|
137
|
+
*
|
|
138
|
+
* // Checking equality
|
|
139
|
+
* assert.deepStrictEqual(Equal.equals(mike1, mike2), true)
|
|
140
|
+
* assert.deepStrictEqual(Equal.equals(mike1, john), false)
|
|
141
|
+
*
|
|
142
|
+
* ```
|
|
143
|
+
* @since 2.0.0
|
|
144
|
+
* @category constructors
|
|
145
|
+
*/
|
|
146
|
+
_case as case
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Provides a tagged constructor for the specified `Case`.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```ts
|
|
154
|
+
* import * as assert from "node:assert"
|
|
155
|
+
* import { Data } from "effect"
|
|
156
|
+
*
|
|
157
|
+
* interface Person {
|
|
158
|
+
* readonly _tag: "Person" // the tag
|
|
159
|
+
* readonly name: string
|
|
160
|
+
* }
|
|
161
|
+
*
|
|
162
|
+
* const Person = Data.tagged<Person>("Person")
|
|
163
|
+
*
|
|
164
|
+
* const mike = Person({ name: "Mike" })
|
|
165
|
+
*
|
|
166
|
+
* assert.deepEqual(mike, { _tag: "Person", name: "Mike" })
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @since 2.0.0
|
|
170
|
+
* @category constructors
|
|
171
|
+
*/
|
|
172
|
+
export const tagged = <A extends { readonly _tag: string }>(
|
|
173
|
+
tag: A["_tag"]
|
|
174
|
+
): Case.Constructor<A, "_tag"> =>
|
|
175
|
+
(args) => {
|
|
176
|
+
const value = args === undefined ? Object.create(StructuralPrototype) : struct(args)
|
|
177
|
+
value._tag = tag
|
|
178
|
+
return value
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Provides a constructor for a Case Class.
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```ts
|
|
186
|
+
* import * as assert from "node:assert"
|
|
187
|
+
* import { Data, Equal } from "effect"
|
|
188
|
+
*
|
|
189
|
+
* class Person extends Data.Class<{ readonly name: string }> {}
|
|
190
|
+
*
|
|
191
|
+
* // Creating instances of Person
|
|
192
|
+
* const mike1 = new Person({ name: "Mike" })
|
|
193
|
+
* const mike2 = new Person({ name: "Mike" })
|
|
194
|
+
* const john = new Person({ name: "John" })
|
|
195
|
+
*
|
|
196
|
+
* // Checking equality
|
|
197
|
+
* assert.deepStrictEqual(Equal.equals(mike1, mike2), true)
|
|
198
|
+
* assert.deepStrictEqual(Equal.equals(mike1, john), false)
|
|
199
|
+
* ```
|
|
200
|
+
*
|
|
201
|
+
* @since 2.0.0
|
|
202
|
+
* @category constructors
|
|
203
|
+
*/
|
|
204
|
+
export const Class: new<A extends Record<string, any> = {}>(
|
|
205
|
+
args: Types.Equals<A, {}> extends true ? void
|
|
206
|
+
: { readonly [P in keyof A]: A[P] }
|
|
207
|
+
) => Readonly<A> = internal.Structural as any
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Provides a Tagged constructor for a Case Class.
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* ```ts
|
|
214
|
+
* import * as assert from "node:assert"
|
|
215
|
+
* import { Data, Equal } from "effect"
|
|
216
|
+
*
|
|
217
|
+
* class Person extends Data.TaggedClass("Person")<{ readonly name: string }> {}
|
|
218
|
+
*
|
|
219
|
+
* // Creating instances of Person
|
|
220
|
+
* const mike1 = new Person({ name: "Mike" })
|
|
221
|
+
* const mike2 = new Person({ name: "Mike" })
|
|
222
|
+
* const john = new Person({ name: "John" })
|
|
223
|
+
*
|
|
224
|
+
* // Checking equality
|
|
225
|
+
* assert.deepStrictEqual(Equal.equals(mike1, mike2), true)
|
|
226
|
+
* assert.deepStrictEqual(Equal.equals(mike1, john), false)
|
|
227
|
+
*
|
|
228
|
+
* assert.deepStrictEqual(mike1._tag, "Person")
|
|
229
|
+
* ```
|
|
230
|
+
*
|
|
231
|
+
* @since 2.0.0
|
|
232
|
+
* @category constructors
|
|
233
|
+
*/
|
|
234
|
+
export const TaggedClass = <Tag extends string>(
|
|
235
|
+
tag: Tag
|
|
236
|
+
): new<A extends Record<string, any> = {}>(
|
|
237
|
+
args: Types.Equals<A, {}> extends true ? void
|
|
238
|
+
: { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }
|
|
239
|
+
) => Readonly<A> & { readonly _tag: Tag } => {
|
|
240
|
+
class Base extends Class<any> {
|
|
241
|
+
readonly _tag = tag
|
|
242
|
+
}
|
|
243
|
+
return Base as any
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* @since 2.0.0
|
|
248
|
+
* @category constructors
|
|
249
|
+
*/
|
|
250
|
+
export const Structural: new<A>(
|
|
251
|
+
args: Types.Equals<A, {}> extends true ? void
|
|
252
|
+
: { readonly [P in keyof A]: A[P] }
|
|
253
|
+
) => {} = internal.Structural as any
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Create a tagged enum data type, which is a union of `Data` structs.
|
|
257
|
+
*
|
|
258
|
+
* ```ts
|
|
259
|
+
* import * as assert from "node:assert"
|
|
260
|
+
* import { Data } from "effect"
|
|
261
|
+
*
|
|
262
|
+
* type HttpError = Data.TaggedEnum<{
|
|
263
|
+
* BadRequest: { readonly status: 400, readonly message: string }
|
|
264
|
+
* NotFound: { readonly status: 404, readonly message: string }
|
|
265
|
+
* }>
|
|
266
|
+
*
|
|
267
|
+
* // Equivalent to:
|
|
268
|
+
* type HttpErrorPlain =
|
|
269
|
+
* | {
|
|
270
|
+
* readonly _tag: "BadRequest"
|
|
271
|
+
* readonly status: 400
|
|
272
|
+
* readonly message: string
|
|
273
|
+
* }
|
|
274
|
+
* | {
|
|
275
|
+
* readonly _tag: "NotFound"
|
|
276
|
+
* readonly status: 404
|
|
277
|
+
* readonly message: string
|
|
278
|
+
* }
|
|
279
|
+
* ```
|
|
280
|
+
*
|
|
281
|
+
* @since 2.0.0
|
|
282
|
+
* @category models
|
|
283
|
+
*/
|
|
284
|
+
export type TaggedEnum<
|
|
285
|
+
A extends Record<string, Record<string, any>> & UntaggedChildren<A>
|
|
286
|
+
> = keyof A extends infer Tag ?
|
|
287
|
+
Tag extends keyof A ? Types.Simplify<{ readonly _tag: Tag } & { readonly [K in keyof A[Tag]]: A[Tag][K] }>
|
|
288
|
+
: never
|
|
289
|
+
: never
|
|
290
|
+
|
|
291
|
+
type ChildrenAreTagged<A> = keyof A extends infer K ? K extends keyof A ? "_tag" extends keyof A[K] ? true
|
|
292
|
+
: false
|
|
293
|
+
: never
|
|
294
|
+
: never
|
|
295
|
+
|
|
296
|
+
type UntaggedChildren<A> = true extends ChildrenAreTagged<A>
|
|
297
|
+
? "It looks like you're trying to create a tagged enum, but one or more of its members already has a `_tag` property."
|
|
298
|
+
: unknown
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @since 2.0.0
|
|
302
|
+
*/
|
|
303
|
+
export declare namespace TaggedEnum {
|
|
304
|
+
/**
|
|
305
|
+
* @since 2.0.0
|
|
306
|
+
* @category models
|
|
307
|
+
*/
|
|
308
|
+
export interface WithGenerics<Count extends number> {
|
|
309
|
+
readonly taggedEnum: { readonly _tag: string }
|
|
310
|
+
readonly numberOfGenerics: Count
|
|
311
|
+
|
|
312
|
+
readonly A: unknown
|
|
313
|
+
readonly B: unknown
|
|
314
|
+
readonly C: unknown
|
|
315
|
+
readonly D: unknown
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* @since 2.0.0
|
|
320
|
+
* @category models
|
|
321
|
+
*/
|
|
322
|
+
export type Kind<
|
|
323
|
+
Z extends WithGenerics<number>,
|
|
324
|
+
A = unknown,
|
|
325
|
+
B = unknown,
|
|
326
|
+
C = unknown,
|
|
327
|
+
D = unknown
|
|
328
|
+
> = (Z & {
|
|
329
|
+
readonly A: A
|
|
330
|
+
readonly B: B
|
|
331
|
+
readonly C: C
|
|
332
|
+
readonly D: D
|
|
333
|
+
})["taggedEnum"]
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* @since 2.0.0
|
|
337
|
+
*/
|
|
338
|
+
export type Args<
|
|
339
|
+
A extends { readonly _tag: string },
|
|
340
|
+
K extends A["_tag"],
|
|
341
|
+
E = Extract<A, { readonly _tag: K }>
|
|
342
|
+
> = { readonly [K in keyof E as K extends "_tag" ? never : K]: E[K] } extends infer T ? {} extends T ? void : T
|
|
343
|
+
: never
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* @since 2.0.0
|
|
347
|
+
*/
|
|
348
|
+
export type Value<
|
|
349
|
+
A extends { readonly _tag: string },
|
|
350
|
+
K extends A["_tag"]
|
|
351
|
+
> = Extract<A, { readonly _tag: K }>
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* @since 3.1.0
|
|
355
|
+
*/
|
|
356
|
+
export type Constructor<A extends { readonly _tag: string }> = Types.Simplify<
|
|
357
|
+
& {
|
|
358
|
+
readonly [Tag in A["_tag"]]: Case.Constructor<Extract<A, { readonly _tag: Tag }>, "_tag">
|
|
359
|
+
}
|
|
360
|
+
& {
|
|
361
|
+
readonly $is: <Tag extends A["_tag"]>(tag: Tag) => (u: unknown) => u is Extract<A, { readonly _tag: Tag }>
|
|
362
|
+
readonly $match: {
|
|
363
|
+
<
|
|
364
|
+
const Cases extends {
|
|
365
|
+
readonly [Tag in A["_tag"]]: (args: Extract<A, { readonly _tag: Tag }>) => any
|
|
366
|
+
}
|
|
367
|
+
>(
|
|
368
|
+
cases: Cases & { [K in Exclude<keyof Cases, A["_tag"]>]: never }
|
|
369
|
+
): (value: A) => Unify<ReturnType<Cases[A["_tag"]]>>
|
|
370
|
+
<
|
|
371
|
+
const Cases extends {
|
|
372
|
+
readonly [Tag in A["_tag"]]: (args: Extract<A, { readonly _tag: Tag }>) => any
|
|
373
|
+
}
|
|
374
|
+
>(
|
|
375
|
+
value: A,
|
|
376
|
+
cases: Cases & { [K in Exclude<keyof Cases, A["_tag"]>]: never }
|
|
377
|
+
): Unify<ReturnType<Cases[A["_tag"]]>>
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
>
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* @since 3.2.0
|
|
384
|
+
*/
|
|
385
|
+
export interface GenericMatchers<Z extends WithGenerics<number>> {
|
|
386
|
+
readonly $is: <Tag extends Z["taggedEnum"]["_tag"]>(
|
|
387
|
+
tag: Tag
|
|
388
|
+
) => {
|
|
389
|
+
<T extends TaggedEnum.Kind<Z, any, any, any, any>>(
|
|
390
|
+
u: T
|
|
391
|
+
): u is T & { readonly _tag: Tag }
|
|
392
|
+
(u: unknown): u is Extract<TaggedEnum.Kind<Z>, { readonly _tag: Tag }>
|
|
393
|
+
}
|
|
394
|
+
readonly $match: {
|
|
395
|
+
<
|
|
396
|
+
A,
|
|
397
|
+
B,
|
|
398
|
+
C,
|
|
399
|
+
D,
|
|
400
|
+
Cases extends {
|
|
401
|
+
readonly [Tag in Z["taggedEnum"]["_tag"]]: (
|
|
402
|
+
args: Extract<TaggedEnum.Kind<Z, A, B, C, D>, { readonly _tag: Tag }>
|
|
403
|
+
) => any
|
|
404
|
+
}
|
|
405
|
+
>(
|
|
406
|
+
cases: Cases & { [K in Exclude<keyof Cases, Z["taggedEnum"]["_tag"]>]: never }
|
|
407
|
+
): (self: TaggedEnum.Kind<Z, A, B, C, D>) => Unify<ReturnType<Cases[Z["taggedEnum"]["_tag"]]>>
|
|
408
|
+
<
|
|
409
|
+
A,
|
|
410
|
+
B,
|
|
411
|
+
C,
|
|
412
|
+
D,
|
|
413
|
+
Cases extends {
|
|
414
|
+
readonly [Tag in Z["taggedEnum"]["_tag"]]: (
|
|
415
|
+
args: Extract<TaggedEnum.Kind<Z, A, B, C, D>, { readonly _tag: Tag }>
|
|
416
|
+
) => any
|
|
417
|
+
}
|
|
418
|
+
>(
|
|
419
|
+
self: TaggedEnum.Kind<Z, A, B, C, D>,
|
|
420
|
+
cases: Cases & { [K in Exclude<keyof Cases, Z["taggedEnum"]["_tag"]>]: never }
|
|
421
|
+
): Unify<ReturnType<Cases[Z["taggedEnum"]["_tag"]]>>
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Create a constructor for a tagged union of `Data` structs.
|
|
428
|
+
*
|
|
429
|
+
* You can also pass a `TaggedEnum.WithGenerics` if you want to add generics to
|
|
430
|
+
* the constructor.
|
|
431
|
+
*
|
|
432
|
+
* @example
|
|
433
|
+
* ```ts
|
|
434
|
+
* import { Data } from "effect"
|
|
435
|
+
*
|
|
436
|
+
* const { BadRequest, NotFound } = Data.taggedEnum<
|
|
437
|
+
* | { readonly _tag: "BadRequest"; readonly status: 400; readonly message: string }
|
|
438
|
+
* | { readonly _tag: "NotFound"; readonly status: 404; readonly message: string }
|
|
439
|
+
* >()
|
|
440
|
+
*
|
|
441
|
+
* const notFound = NotFound({ status: 404, message: "Not Found" })
|
|
442
|
+
* ```
|
|
443
|
+
*
|
|
444
|
+
* @example
|
|
445
|
+
* import { Data } from "effect"
|
|
446
|
+
*
|
|
447
|
+
* type MyResult<E, A> = Data.TaggedEnum<{
|
|
448
|
+
* Failure: { readonly error: E }
|
|
449
|
+
* Success: { readonly value: A }
|
|
450
|
+
* }>
|
|
451
|
+
* interface MyResultDefinition extends Data.TaggedEnum.WithGenerics<2> {
|
|
452
|
+
* readonly taggedEnum: MyResult<this["A"], this["B"]>
|
|
453
|
+
* }
|
|
454
|
+
* const { Failure, Success } = Data.taggedEnum<MyResultDefinition>()
|
|
455
|
+
*
|
|
456
|
+
* const success = Success({ value: 1 })
|
|
457
|
+
*
|
|
458
|
+
* @category constructors
|
|
459
|
+
* @since 2.0.0
|
|
460
|
+
*/
|
|
461
|
+
export const taggedEnum: {
|
|
462
|
+
<Z extends TaggedEnum.WithGenerics<1>>(): Types.Simplify<
|
|
463
|
+
{
|
|
464
|
+
readonly [Tag in Z["taggedEnum"]["_tag"]]: <A>(
|
|
465
|
+
args: TaggedEnum.Args<
|
|
466
|
+
TaggedEnum.Kind<Z, A>,
|
|
467
|
+
Tag,
|
|
468
|
+
Extract<TaggedEnum.Kind<Z, A>, { readonly _tag: Tag }>
|
|
469
|
+
>
|
|
470
|
+
) => TaggedEnum.Value<TaggedEnum.Kind<Z, A>, Tag>
|
|
471
|
+
} & TaggedEnum.GenericMatchers<Z>
|
|
472
|
+
>
|
|
473
|
+
|
|
474
|
+
<Z extends TaggedEnum.WithGenerics<2>>(): Types.Simplify<
|
|
475
|
+
{
|
|
476
|
+
readonly [Tag in Z["taggedEnum"]["_tag"]]: <A, B>(
|
|
477
|
+
args: TaggedEnum.Args<
|
|
478
|
+
TaggedEnum.Kind<Z, A, B>,
|
|
479
|
+
Tag,
|
|
480
|
+
Extract<TaggedEnum.Kind<Z, A, B>, { readonly _tag: Tag }>
|
|
481
|
+
>
|
|
482
|
+
) => TaggedEnum.Value<TaggedEnum.Kind<Z, A, B>, Tag>
|
|
483
|
+
} & TaggedEnum.GenericMatchers<Z>
|
|
484
|
+
>
|
|
485
|
+
|
|
486
|
+
<Z extends TaggedEnum.WithGenerics<3>>(): Types.Simplify<
|
|
487
|
+
{
|
|
488
|
+
readonly [Tag in Z["taggedEnum"]["_tag"]]: <A, B, C>(
|
|
489
|
+
args: TaggedEnum.Args<
|
|
490
|
+
TaggedEnum.Kind<Z, A, B, C>,
|
|
491
|
+
Tag,
|
|
492
|
+
Extract<TaggedEnum.Kind<Z, A, B, C>, { readonly _tag: Tag }>
|
|
493
|
+
>
|
|
494
|
+
) => TaggedEnum.Value<TaggedEnum.Kind<Z, A, B, C>, Tag>
|
|
495
|
+
} & TaggedEnum.GenericMatchers<Z>
|
|
496
|
+
>
|
|
497
|
+
|
|
498
|
+
<Z extends TaggedEnum.WithGenerics<4>>(): Types.Simplify<
|
|
499
|
+
{
|
|
500
|
+
readonly [Tag in Z["taggedEnum"]["_tag"]]: <A, B, C, D>(
|
|
501
|
+
args: TaggedEnum.Args<
|
|
502
|
+
TaggedEnum.Kind<Z, A, B, C, D>,
|
|
503
|
+
Tag,
|
|
504
|
+
Extract<TaggedEnum.Kind<Z, A, B, C, D>, { readonly _tag: Tag }>
|
|
505
|
+
>
|
|
506
|
+
) => TaggedEnum.Value<TaggedEnum.Kind<Z, A, B, C, D>, Tag>
|
|
507
|
+
} & TaggedEnum.GenericMatchers<Z>
|
|
508
|
+
>
|
|
509
|
+
|
|
510
|
+
<A extends { readonly _tag: string }>(): TaggedEnum.Constructor<A>
|
|
511
|
+
} = () =>
|
|
512
|
+
new Proxy({}, {
|
|
513
|
+
get(_target, tag, _receiver) {
|
|
514
|
+
if (tag === "$is") {
|
|
515
|
+
return Predicate.isTagged
|
|
516
|
+
} else if (tag === "$match") {
|
|
517
|
+
return taggedMatch
|
|
518
|
+
}
|
|
519
|
+
return tagged(tag as string)
|
|
520
|
+
}
|
|
521
|
+
}) as any
|
|
522
|
+
|
|
523
|
+
function taggedMatch<
|
|
524
|
+
A extends { readonly _tag: string },
|
|
525
|
+
Cases extends {
|
|
526
|
+
readonly [K in A["_tag"]]: (args: Extract<A, { readonly _tag: K }>) => any
|
|
527
|
+
}
|
|
528
|
+
>(self: A, cases: Cases): ReturnType<Cases[A["_tag"]]>
|
|
529
|
+
function taggedMatch<
|
|
530
|
+
A extends { readonly _tag: string },
|
|
531
|
+
Cases extends {
|
|
532
|
+
readonly [K in A["_tag"]]: (args: Extract<A, { readonly _tag: K }>) => any
|
|
533
|
+
}
|
|
534
|
+
>(cases: Cases): (value: A) => ReturnType<Cases[A["_tag"]]>
|
|
535
|
+
function taggedMatch<
|
|
536
|
+
A extends { readonly _tag: string },
|
|
537
|
+
Cases extends {
|
|
538
|
+
readonly [K in A["_tag"]]: (args: Extract<A, { readonly _tag: K }>) => any
|
|
539
|
+
}
|
|
540
|
+
>(): any {
|
|
541
|
+
if (arguments.length === 1) {
|
|
542
|
+
const cases = arguments[0] as Cases
|
|
543
|
+
return function(value: A): ReturnType<Cases[A["_tag"]]> {
|
|
544
|
+
return cases[value._tag as A["_tag"]](value as any)
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
const value = arguments[0] as A
|
|
548
|
+
const cases = arguments[1] as Cases
|
|
549
|
+
return cases[value._tag as A["_tag"]](value as any)
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* Provides a constructor for a Case Class.
|
|
554
|
+
*
|
|
555
|
+
* @since 2.0.0
|
|
556
|
+
* @category constructors
|
|
557
|
+
*/
|
|
558
|
+
export const Error: new<A extends Record<string, any> = {}>(
|
|
559
|
+
args: Types.Equals<A, {}> extends true ? void
|
|
560
|
+
: { readonly [P in keyof A]: A[P] }
|
|
561
|
+
) => Cause.YieldableError & Readonly<A> = (function() {
|
|
562
|
+
const plainArgsSymbol = Symbol.for("effect/Data/Error/plainArgs")
|
|
563
|
+
const O = {
|
|
564
|
+
BaseEffectError: class extends core.YieldableError {
|
|
565
|
+
constructor(args: any) {
|
|
566
|
+
super(args?.message, args?.cause ? { cause: args.cause } : undefined)
|
|
567
|
+
if (args) {
|
|
568
|
+
Object.assign(this, args)
|
|
569
|
+
// @effect-diagnostics-next-line floatingEffect:off
|
|
570
|
+
Object.defineProperty(this, plainArgsSymbol, { value: args, enumerable: false })
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
toJSON() {
|
|
574
|
+
return { ...(this as any)[plainArgsSymbol], ...this }
|
|
575
|
+
}
|
|
576
|
+
} as any
|
|
577
|
+
}
|
|
578
|
+
return O.BaseEffectError
|
|
579
|
+
})()
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* @since 2.0.0
|
|
583
|
+
* @category constructors
|
|
584
|
+
*/
|
|
585
|
+
export const TaggedError = <Tag extends string>(tag: Tag): new<A extends Record<string, any> = {}>(
|
|
586
|
+
args: Types.Equals<A, {}> extends true ? void
|
|
587
|
+
: { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }
|
|
588
|
+
) => Cause.YieldableError & { readonly _tag: Tag } & Readonly<A> => {
|
|
589
|
+
const O = {
|
|
590
|
+
BaseEffectError: class extends Error<{}> {
|
|
591
|
+
readonly _tag = tag
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
;(O.BaseEffectError.prototype as any).name = tag
|
|
595
|
+
return O.BaseEffectError as any
|
|
596
|
+
}
|