@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/Order.ts
ADDED
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module provides an implementation of the `Order` type class which is used to define a total ordering on some type `A`.
|
|
3
|
+
* An order is defined by a relation `<=`, which obeys the following laws:
|
|
4
|
+
*
|
|
5
|
+
* - either `x <= y` or `y <= x` (totality)
|
|
6
|
+
* - if `x <= y` and `y <= x`, then `x == y` (antisymmetry)
|
|
7
|
+
* - if `x <= y` and `y <= z`, then `x <= z` (transitivity)
|
|
8
|
+
*
|
|
9
|
+
* The truth table for compare is defined as follows:
|
|
10
|
+
*
|
|
11
|
+
* | `x <= y` | `x >= y` | Ordering | |
|
|
12
|
+
* | -------- | -------- | -------- | --------------------- |
|
|
13
|
+
* | `true` | `true` | `0` | corresponds to x == y |
|
|
14
|
+
* | `true` | `false` | `< 0` | corresponds to x < y |
|
|
15
|
+
* | `false` | `true` | `> 0` | corresponds to x > y |
|
|
16
|
+
*
|
|
17
|
+
* @since 2.0.0
|
|
18
|
+
*/
|
|
19
|
+
import { dual } from "./Function.js"
|
|
20
|
+
import type { TypeLambda } from "./HKT.js"
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @category type class
|
|
24
|
+
* @since 2.0.0
|
|
25
|
+
*/
|
|
26
|
+
export interface Order<in A> {
|
|
27
|
+
(self: A, that: A): -1 | 0 | 1
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @category type lambdas
|
|
32
|
+
* @since 2.0.0
|
|
33
|
+
*/
|
|
34
|
+
export interface OrderTypeLambda extends TypeLambda {
|
|
35
|
+
readonly type: Order<this["Target"]>
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @category constructors
|
|
40
|
+
* @since 2.0.0
|
|
41
|
+
*/
|
|
42
|
+
export const make = <A>(
|
|
43
|
+
compare: (self: A, that: A) => -1 | 0 | 1
|
|
44
|
+
): Order<A> =>
|
|
45
|
+
(self, that) => self === that ? 0 : compare(self, that)
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @category instances
|
|
49
|
+
* @since 2.0.0
|
|
50
|
+
*/
|
|
51
|
+
export const string: Order<string> = make((self, that) => self < that ? -1 : 1)
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @category instances
|
|
55
|
+
* @since 2.0.0
|
|
56
|
+
*/
|
|
57
|
+
export const number: Order<number> = make((self, that) => self < that ? -1 : 1)
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @category instances
|
|
61
|
+
* @since 2.0.0
|
|
62
|
+
*/
|
|
63
|
+
export const boolean: Order<boolean> = make((self, that) => self < that ? -1 : 1)
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @category instances
|
|
67
|
+
* @since 2.0.0
|
|
68
|
+
*/
|
|
69
|
+
export const bigint: Order<bigint> = make((self, that) => self < that ? -1 : 1)
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @since 2.0.0
|
|
73
|
+
*/
|
|
74
|
+
export const reverse = <A>(O: Order<A>): Order<A> => make((self, that) => O(that, self))
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @category combining
|
|
78
|
+
* @since 2.0.0
|
|
79
|
+
*/
|
|
80
|
+
export const combine: {
|
|
81
|
+
<A>(that: Order<A>): (self: Order<A>) => Order<A>
|
|
82
|
+
<A>(self: Order<A>, that: Order<A>): Order<A>
|
|
83
|
+
} = dual(2, <A>(self: Order<A>, that: Order<A>): Order<A> =>
|
|
84
|
+
make((a1, a2) => {
|
|
85
|
+
const out = self(a1, a2)
|
|
86
|
+
if (out !== 0) {
|
|
87
|
+
return out
|
|
88
|
+
}
|
|
89
|
+
return that(a1, a2)
|
|
90
|
+
}))
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @category combining
|
|
94
|
+
* @since 2.0.0
|
|
95
|
+
*/
|
|
96
|
+
export const combineMany: {
|
|
97
|
+
<A>(collection: Iterable<Order<A>>): (self: Order<A>) => Order<A>
|
|
98
|
+
<A>(self: Order<A>, collection: Iterable<Order<A>>): Order<A>
|
|
99
|
+
} = dual(2, <A>(self: Order<A>, collection: Iterable<Order<A>>): Order<A> =>
|
|
100
|
+
make((a1, a2) => {
|
|
101
|
+
let out = self(a1, a2)
|
|
102
|
+
if (out !== 0) {
|
|
103
|
+
return out
|
|
104
|
+
}
|
|
105
|
+
for (const O of collection) {
|
|
106
|
+
out = O(a1, a2)
|
|
107
|
+
if (out !== 0) {
|
|
108
|
+
return out
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return out
|
|
112
|
+
}))
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @since 2.0.0
|
|
116
|
+
*/
|
|
117
|
+
export const empty = <A>(): Order<A> => make(() => 0)
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @category combining
|
|
121
|
+
* @since 2.0.0
|
|
122
|
+
*/
|
|
123
|
+
export const combineAll = <A>(collection: Iterable<Order<A>>): Order<A> => combineMany(empty(), collection)
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @category mapping
|
|
127
|
+
* @since 2.0.0
|
|
128
|
+
*/
|
|
129
|
+
export const mapInput: {
|
|
130
|
+
<B, A>(f: (b: B) => A): (self: Order<A>) => Order<B>
|
|
131
|
+
<A, B>(self: Order<A>, f: (b: B) => A): Order<B>
|
|
132
|
+
} = dual(
|
|
133
|
+
2,
|
|
134
|
+
<A, B>(self: Order<A>, f: (b: B) => A): Order<B> => make((b1, b2) => self(f(b1), f(b2)))
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @category instances
|
|
139
|
+
* @since 2.0.0
|
|
140
|
+
*/
|
|
141
|
+
export const Date: Order<Date> = mapInput(number, (date) => date.getTime())
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @category combining
|
|
145
|
+
* @since 2.0.0
|
|
146
|
+
*/
|
|
147
|
+
export const product: {
|
|
148
|
+
<B>(that: Order<B>): <A>(self: Order<A>) => Order<readonly [A, B]> // readonly because invariant
|
|
149
|
+
<A, B>(self: Order<A>, that: Order<B>): Order<readonly [A, B]> // readonly because invariant
|
|
150
|
+
} = dual(2, <A, B>(self: Order<A>, that: Order<B>): Order<readonly [A, B]> =>
|
|
151
|
+
make(([xa, xb], [ya, yb]) => {
|
|
152
|
+
const o = self(xa, ya)
|
|
153
|
+
return o !== 0 ? o : that(xb, yb)
|
|
154
|
+
}))
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @category combining
|
|
158
|
+
* @since 2.0.0
|
|
159
|
+
*/
|
|
160
|
+
export const all = <A>(collection: Iterable<Order<A>>): Order<ReadonlyArray<A>> => {
|
|
161
|
+
return make((x, y) => {
|
|
162
|
+
const len = Math.min(x.length, y.length)
|
|
163
|
+
let collectionLength = 0
|
|
164
|
+
for (const O of collection) {
|
|
165
|
+
if (collectionLength >= len) {
|
|
166
|
+
break
|
|
167
|
+
}
|
|
168
|
+
const o = O(x[collectionLength], y[collectionLength])
|
|
169
|
+
if (o !== 0) {
|
|
170
|
+
return o
|
|
171
|
+
}
|
|
172
|
+
collectionLength++
|
|
173
|
+
}
|
|
174
|
+
return 0
|
|
175
|
+
})
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @category combining
|
|
180
|
+
* @since 2.0.0
|
|
181
|
+
*/
|
|
182
|
+
export const productMany: {
|
|
183
|
+
<A>(collection: Iterable<Order<A>>): (self: Order<A>) => Order<readonly [A, ...Array<A>]> // readonly because invariant
|
|
184
|
+
<A>(self: Order<A>, collection: Iterable<Order<A>>): Order<readonly [A, ...Array<A>]> // readonly because invariant
|
|
185
|
+
} = dual(2, <A>(self: Order<A>, collection: Iterable<Order<A>>): Order<readonly [A, ...Array<A>]> => {
|
|
186
|
+
const O = all(collection)
|
|
187
|
+
return make((x, y) => {
|
|
188
|
+
const o = self(x[0], y[0])
|
|
189
|
+
return o !== 0 ? o : O(x.slice(1), y.slice(1))
|
|
190
|
+
})
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Similar to `Promise.all` but operates on `Order`s.
|
|
195
|
+
*
|
|
196
|
+
* ```
|
|
197
|
+
* [Order<A>, Order<B>, ...] -> Order<[A, B, ...]>
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* 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.
|
|
201
|
+
* The returned `Order` compares two tuples of the same type by applying the corresponding `Order` to each element in the tuple.
|
|
202
|
+
* It is useful when you need to compare two tuples of the same type and you have a specific way of comparing each element
|
|
203
|
+
* of the tuple.
|
|
204
|
+
*
|
|
205
|
+
* @category combinators
|
|
206
|
+
* @since 2.0.0
|
|
207
|
+
*/
|
|
208
|
+
export const tuple = <T extends ReadonlyArray<Order<any>>>(
|
|
209
|
+
...elements: T
|
|
210
|
+
): Order<Readonly<{ [I in keyof T]: [T[I]] extends [Order<infer A>] ? A : never }>> => all(elements) as any
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* This function creates and returns a new `Order` for an array of values based on a given `Order` for the elements of the array.
|
|
214
|
+
* The returned `Order` compares two arrays by applying the given `Order` to each element in the arrays.
|
|
215
|
+
* If all elements are equal, the arrays are then compared based on their length.
|
|
216
|
+
* It is useful when you need to compare two arrays of the same type and you have a specific way of comparing each element of the array.
|
|
217
|
+
*
|
|
218
|
+
* @category combinators
|
|
219
|
+
* @since 2.0.0
|
|
220
|
+
*/
|
|
221
|
+
export const array = <A>(O: Order<A>): Order<ReadonlyArray<A>> =>
|
|
222
|
+
make((self, that) => {
|
|
223
|
+
const aLen = self.length
|
|
224
|
+
const bLen = that.length
|
|
225
|
+
const len = Math.min(aLen, bLen)
|
|
226
|
+
for (let i = 0; i < len; i++) {
|
|
227
|
+
const o = O(self[i], that[i])
|
|
228
|
+
if (o !== 0) {
|
|
229
|
+
return o
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return number(aLen, bLen)
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* This function creates and returns a new `Order` for a struct of values based on the given `Order`s
|
|
237
|
+
* for each property in the struct.
|
|
238
|
+
*
|
|
239
|
+
* @category combinators
|
|
240
|
+
* @since 2.0.0
|
|
241
|
+
*/
|
|
242
|
+
export const struct = <R extends { readonly [x: string]: Order<any> }>(
|
|
243
|
+
fields: R
|
|
244
|
+
): Order<{ [K in keyof R]: [R[K]] extends [Order<infer A>] ? A : never }> => {
|
|
245
|
+
const keys = Object.keys(fields)
|
|
246
|
+
return make((self, that) => {
|
|
247
|
+
for (const key of keys) {
|
|
248
|
+
const o = fields[key](self[key], that[key])
|
|
249
|
+
if (o !== 0) {
|
|
250
|
+
return o
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return 0
|
|
254
|
+
})
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Test whether one value is _strictly less than_ another.
|
|
259
|
+
*
|
|
260
|
+
* @since 2.0.0
|
|
261
|
+
*/
|
|
262
|
+
export const lessThan = <A>(O: Order<A>): {
|
|
263
|
+
(that: A): (self: A) => boolean
|
|
264
|
+
(self: A, that: A): boolean
|
|
265
|
+
} => dual(2, (self: A, that: A) => O(self, that) === -1)
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Test whether one value is _strictly greater than_ another.
|
|
269
|
+
*
|
|
270
|
+
* @since 2.0.0
|
|
271
|
+
*/
|
|
272
|
+
export const greaterThan = <A>(O: Order<A>): {
|
|
273
|
+
(that: A): (self: A) => boolean
|
|
274
|
+
(self: A, that: A): boolean
|
|
275
|
+
} => dual(2, (self: A, that: A) => O(self, that) === 1)
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Test whether one value is _non-strictly less than_ another.
|
|
279
|
+
*
|
|
280
|
+
* @since 2.0.0
|
|
281
|
+
*/
|
|
282
|
+
export const lessThanOrEqualTo = <A>(O: Order<A>): {
|
|
283
|
+
(that: A): (self: A) => boolean
|
|
284
|
+
(self: A, that: A): boolean
|
|
285
|
+
} => dual(2, (self: A, that: A) => O(self, that) !== 1)
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Test whether one value is _non-strictly greater than_ another.
|
|
289
|
+
*
|
|
290
|
+
* @since 2.0.0
|
|
291
|
+
*/
|
|
292
|
+
export const greaterThanOrEqualTo = <A>(O: Order<A>): {
|
|
293
|
+
(that: A): (self: A) => boolean
|
|
294
|
+
(self: A, that: A): boolean
|
|
295
|
+
} => dual(2, (self: A, that: A) => O(self, that) !== -1)
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Take the minimum of two values. If they are considered equal, the first argument is chosen.
|
|
299
|
+
*
|
|
300
|
+
* @since 2.0.0
|
|
301
|
+
*/
|
|
302
|
+
export const min = <A>(O: Order<A>): {
|
|
303
|
+
(that: A): (self: A) => A
|
|
304
|
+
(self: A, that: A): A
|
|
305
|
+
} => dual(2, (self: A, that: A) => self === that || O(self, that) < 1 ? self : that)
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Take the maximum of two values. If they are considered equal, the first argument is chosen.
|
|
309
|
+
*
|
|
310
|
+
* @since 2.0.0
|
|
311
|
+
*/
|
|
312
|
+
export const max = <A>(O: Order<A>): {
|
|
313
|
+
(that: A): (self: A) => A
|
|
314
|
+
(self: A, that: A): A
|
|
315
|
+
} => dual(2, (self: A, that: A) => self === that || O(self, that) > -1 ? self : that)
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Clamp a value between a minimum and a maximum.
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```ts
|
|
322
|
+
* import * as assert from "node:assert"
|
|
323
|
+
* import { Order, Number } from "effect"
|
|
324
|
+
*
|
|
325
|
+
* const clamp = Order.clamp(Number.Order)({ minimum: 1, maximum: 5 })
|
|
326
|
+
*
|
|
327
|
+
* assert.equal(clamp(3), 3)
|
|
328
|
+
* assert.equal(clamp(0), 1)
|
|
329
|
+
* assert.equal(clamp(6), 5)
|
|
330
|
+
* ```
|
|
331
|
+
*
|
|
332
|
+
* @since 2.0.0
|
|
333
|
+
*/
|
|
334
|
+
export const clamp = <A>(O: Order<A>): {
|
|
335
|
+
(options: {
|
|
336
|
+
minimum: A
|
|
337
|
+
maximum: A
|
|
338
|
+
}): (self: A) => A
|
|
339
|
+
(self: A, options: {
|
|
340
|
+
minimum: A
|
|
341
|
+
maximum: A
|
|
342
|
+
}): A
|
|
343
|
+
} =>
|
|
344
|
+
dual(
|
|
345
|
+
2,
|
|
346
|
+
(self: A, options: {
|
|
347
|
+
minimum: A
|
|
348
|
+
maximum: A
|
|
349
|
+
}): A => min(O)(options.maximum, max(O)(options.minimum, self))
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Test whether a value is between a minimum and a maximum (inclusive).
|
|
354
|
+
*
|
|
355
|
+
* @since 2.0.0
|
|
356
|
+
*/
|
|
357
|
+
export const between = <A>(O: Order<A>): {
|
|
358
|
+
(options: {
|
|
359
|
+
minimum: A
|
|
360
|
+
maximum: A
|
|
361
|
+
}): (self: A) => boolean
|
|
362
|
+
(self: A, options: {
|
|
363
|
+
minimum: A
|
|
364
|
+
maximum: A
|
|
365
|
+
}): boolean
|
|
366
|
+
} =>
|
|
367
|
+
dual(
|
|
368
|
+
2,
|
|
369
|
+
(self: A, options: {
|
|
370
|
+
minimum: A
|
|
371
|
+
maximum: A
|
|
372
|
+
}): boolean => !lessThan(O)(self, options.minimum) && !greaterThan(O)(self, options.maximum)
|
|
373
|
+
)
|
package/src/Ordering.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type { LazyArg } from "./Function.js"
|
|
5
|
+
import { dual } from "./Function.js"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @category model
|
|
9
|
+
* @since 2.0.0
|
|
10
|
+
*/
|
|
11
|
+
export type Ordering = -1 | 0 | 1
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Inverts the ordering of the input `Ordering`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import * as assert from "node:assert"
|
|
19
|
+
* import { reverse } from "effect/Ordering"
|
|
20
|
+
*
|
|
21
|
+
* assert.deepStrictEqual(reverse(1), -1)
|
|
22
|
+
* assert.deepStrictEqual(reverse(-1), 1)
|
|
23
|
+
* assert.deepStrictEqual(reverse(0), 0)
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @since 2.0.0
|
|
27
|
+
*/
|
|
28
|
+
export const reverse = (o: Ordering): Ordering => (o === -1 ? 1 : o === 1 ? -1 : 0)
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Depending on the `Ordering` parameter given to it, returns a value produced by one of the 3 functions provided as parameters.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* import * as assert from "node:assert"
|
|
36
|
+
* import { Ordering } from "effect"
|
|
37
|
+
* import { constant } from "effect/Function"
|
|
38
|
+
*
|
|
39
|
+
* const toMessage = Ordering.match({
|
|
40
|
+
* onLessThan: constant('less than'),
|
|
41
|
+
* onEqual: constant('equal'),
|
|
42
|
+
* onGreaterThan: constant('greater than')
|
|
43
|
+
* })
|
|
44
|
+
*
|
|
45
|
+
* assert.deepStrictEqual(toMessage(-1), "less than")
|
|
46
|
+
* assert.deepStrictEqual(toMessage(0), "equal")
|
|
47
|
+
* assert.deepStrictEqual(toMessage(1), "greater than")
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @category pattern matching
|
|
51
|
+
* @since 2.0.0
|
|
52
|
+
*/
|
|
53
|
+
export const match: {
|
|
54
|
+
<A, B, C = B>(
|
|
55
|
+
options: {
|
|
56
|
+
readonly onLessThan: LazyArg<A>
|
|
57
|
+
readonly onEqual: LazyArg<B>
|
|
58
|
+
readonly onGreaterThan: LazyArg<C>
|
|
59
|
+
}
|
|
60
|
+
): (self: Ordering) => A | B | C
|
|
61
|
+
<A, B, C = B>(
|
|
62
|
+
o: Ordering,
|
|
63
|
+
options: {
|
|
64
|
+
readonly onLessThan: LazyArg<A>
|
|
65
|
+
readonly onEqual: LazyArg<B>
|
|
66
|
+
readonly onGreaterThan: LazyArg<C>
|
|
67
|
+
}
|
|
68
|
+
): A | B | C
|
|
69
|
+
} = dual(2, <A, B, C = B>(
|
|
70
|
+
self: Ordering,
|
|
71
|
+
{ onEqual, onGreaterThan, onLessThan }: {
|
|
72
|
+
readonly onLessThan: LazyArg<A>
|
|
73
|
+
readonly onEqual: LazyArg<B>
|
|
74
|
+
readonly onGreaterThan: LazyArg<C>
|
|
75
|
+
}
|
|
76
|
+
): A | B | C => self === -1 ? onLessThan() : self === 0 ? onEqual() : onGreaterThan())
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @category combining
|
|
80
|
+
* @since 2.0.0
|
|
81
|
+
*/
|
|
82
|
+
export const combine: {
|
|
83
|
+
(that: Ordering): (self: Ordering) => Ordering
|
|
84
|
+
(self: Ordering, that: Ordering): Ordering
|
|
85
|
+
} = dual(2, (self: Ordering, that: Ordering): Ordering => self !== 0 ? self : that)
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @category combining
|
|
89
|
+
* @since 2.0.0
|
|
90
|
+
*/
|
|
91
|
+
export const combineMany: {
|
|
92
|
+
(collection: Iterable<Ordering>): (self: Ordering) => Ordering
|
|
93
|
+
(self: Ordering, collection: Iterable<Ordering>): Ordering
|
|
94
|
+
} = dual(2, (self: Ordering, collection: Iterable<Ordering>): Ordering => {
|
|
95
|
+
let ordering = self
|
|
96
|
+
if (ordering !== 0) {
|
|
97
|
+
return ordering
|
|
98
|
+
}
|
|
99
|
+
for (ordering of collection) {
|
|
100
|
+
if (ordering !== 0) {
|
|
101
|
+
return ordering
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return ordering
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @category combining
|
|
109
|
+
* @since 2.0.0
|
|
110
|
+
*/
|
|
111
|
+
export const combineAll = (collection: Iterable<Ordering>): Ordering => combineMany(0, collection)
|