@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
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import * as Arr from "../../Array.js"
|
|
2
|
+
import type * as Duration from "../../Duration.js"
|
|
3
|
+
import * as Equal from "../../Equal.js"
|
|
4
|
+
import { dual, pipe } from "../../Function.js"
|
|
5
|
+
import * as Hash from "../../Hash.js"
|
|
6
|
+
import type * as MetricBoundaries from "../../MetricBoundaries.js"
|
|
7
|
+
import type * as MetricKey from "../../MetricKey.js"
|
|
8
|
+
import type * as MetricKeyType from "../../MetricKeyType.js"
|
|
9
|
+
import type * as MetricLabel from "../../MetricLabel.js"
|
|
10
|
+
import * as Option from "../../Option.js"
|
|
11
|
+
import { pipeArguments } from "../../Pipeable.js"
|
|
12
|
+
import { hasProperty } from "../../Predicate.js"
|
|
13
|
+
import * as metricKeyType from "./keyType.js"
|
|
14
|
+
import * as metricLabel from "./label.js"
|
|
15
|
+
|
|
16
|
+
/** @internal */
|
|
17
|
+
const MetricKeySymbolKey = "effect/MetricKey"
|
|
18
|
+
|
|
19
|
+
/** @internal */
|
|
20
|
+
export const MetricKeyTypeId: MetricKey.MetricKeyTypeId = Symbol.for(
|
|
21
|
+
MetricKeySymbolKey
|
|
22
|
+
) as MetricKey.MetricKeyTypeId
|
|
23
|
+
|
|
24
|
+
const metricKeyVariance = {
|
|
25
|
+
/* c8 ignore next */
|
|
26
|
+
_Type: (_: never) => _
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const arrayEquivilence = Arr.getEquivalence(Equal.equals)
|
|
30
|
+
|
|
31
|
+
/** @internal */
|
|
32
|
+
class MetricKeyImpl<out Type extends MetricKeyType.MetricKeyType<any, any>> implements MetricKey.MetricKey<Type> {
|
|
33
|
+
readonly [MetricKeyTypeId] = metricKeyVariance
|
|
34
|
+
constructor(
|
|
35
|
+
readonly name: string,
|
|
36
|
+
readonly keyType: Type,
|
|
37
|
+
readonly description: Option.Option<string>,
|
|
38
|
+
readonly tags: ReadonlyArray<MetricLabel.MetricLabel> = []
|
|
39
|
+
) {
|
|
40
|
+
this._hash = pipe(
|
|
41
|
+
Hash.string(this.name + this.description),
|
|
42
|
+
Hash.combine(Hash.hash(this.keyType)),
|
|
43
|
+
Hash.combine(Hash.array(this.tags))
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
readonly _hash: number;
|
|
47
|
+
[Hash.symbol](): number {
|
|
48
|
+
return this._hash
|
|
49
|
+
}
|
|
50
|
+
[Equal.symbol](u: unknown): boolean {
|
|
51
|
+
return isMetricKey(u) &&
|
|
52
|
+
this.name === u.name &&
|
|
53
|
+
Equal.equals(this.keyType, u.keyType) &&
|
|
54
|
+
Equal.equals(this.description, u.description) &&
|
|
55
|
+
arrayEquivilence(this.tags, u.tags)
|
|
56
|
+
}
|
|
57
|
+
pipe() {
|
|
58
|
+
return pipeArguments(this, arguments)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** @internal */
|
|
63
|
+
export const isMetricKey = (u: unknown): u is MetricKey.MetricKey<MetricKeyType.MetricKeyType<unknown, unknown>> =>
|
|
64
|
+
hasProperty(u, MetricKeyTypeId)
|
|
65
|
+
|
|
66
|
+
/** @internal */
|
|
67
|
+
export const counter: {
|
|
68
|
+
(name: string, options?: {
|
|
69
|
+
readonly description?: string | undefined
|
|
70
|
+
readonly bigint?: false | undefined
|
|
71
|
+
readonly incremental?: boolean | undefined
|
|
72
|
+
}): MetricKey.MetricKey.Counter<number>
|
|
73
|
+
(name: string, options: {
|
|
74
|
+
readonly description?: string | undefined
|
|
75
|
+
readonly bigint: true
|
|
76
|
+
readonly incremental?: boolean | undefined
|
|
77
|
+
}): MetricKey.MetricKey.Counter<bigint>
|
|
78
|
+
} = (name: string, options) =>
|
|
79
|
+
new MetricKeyImpl(
|
|
80
|
+
name,
|
|
81
|
+
metricKeyType.counter(options as any),
|
|
82
|
+
Option.fromNullable(options?.description)
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
/** @internal */
|
|
86
|
+
export const frequency = (name: string, options?: {
|
|
87
|
+
readonly description?: string | undefined
|
|
88
|
+
readonly preregisteredWords?: ReadonlyArray<string> | undefined
|
|
89
|
+
}): MetricKey.MetricKey.Frequency =>
|
|
90
|
+
new MetricKeyImpl(name, metricKeyType.frequency(options), Option.fromNullable(options?.description))
|
|
91
|
+
|
|
92
|
+
/** @internal */
|
|
93
|
+
export const gauge: {
|
|
94
|
+
(name: string, options?: {
|
|
95
|
+
readonly description?: string | undefined
|
|
96
|
+
readonly bigint?: false | undefined
|
|
97
|
+
}): MetricKey.MetricKey.Gauge<number>
|
|
98
|
+
(name: string, options: {
|
|
99
|
+
readonly description?: string | undefined
|
|
100
|
+
readonly bigint: true
|
|
101
|
+
}): MetricKey.MetricKey.Gauge<bigint>
|
|
102
|
+
} = (name, options) =>
|
|
103
|
+
new MetricKeyImpl(
|
|
104
|
+
name,
|
|
105
|
+
metricKeyType.gauge(options as any),
|
|
106
|
+
Option.fromNullable(options?.description)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
/** @internal */
|
|
110
|
+
export const histogram = (
|
|
111
|
+
name: string,
|
|
112
|
+
boundaries: MetricBoundaries.MetricBoundaries,
|
|
113
|
+
description?: string
|
|
114
|
+
): MetricKey.MetricKey.Histogram =>
|
|
115
|
+
new MetricKeyImpl(
|
|
116
|
+
name,
|
|
117
|
+
metricKeyType.histogram(boundaries),
|
|
118
|
+
Option.fromNullable(description)
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
/** @internal */
|
|
122
|
+
export const summary = (
|
|
123
|
+
options: {
|
|
124
|
+
readonly name: string
|
|
125
|
+
readonly maxAge: Duration.DurationInput
|
|
126
|
+
readonly maxSize: number
|
|
127
|
+
readonly error: number
|
|
128
|
+
readonly quantiles: ReadonlyArray<number>
|
|
129
|
+
readonly description?: string | undefined
|
|
130
|
+
}
|
|
131
|
+
): MetricKey.MetricKey.Summary =>
|
|
132
|
+
new MetricKeyImpl(
|
|
133
|
+
options.name,
|
|
134
|
+
metricKeyType.summary(options),
|
|
135
|
+
Option.fromNullable(options.description)
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
/** @internal */
|
|
139
|
+
export const tagged = dual<
|
|
140
|
+
(
|
|
141
|
+
key: string,
|
|
142
|
+
value: string
|
|
143
|
+
) => <Type extends MetricKeyType.MetricKeyType<any, any>>(
|
|
144
|
+
self: MetricKey.MetricKey<Type>
|
|
145
|
+
) => MetricKey.MetricKey<Type>,
|
|
146
|
+
<Type extends MetricKeyType.MetricKeyType<any, any>>(
|
|
147
|
+
self: MetricKey.MetricKey<Type>,
|
|
148
|
+
key: string,
|
|
149
|
+
value: string
|
|
150
|
+
) => MetricKey.MetricKey<Type>
|
|
151
|
+
>(3, (self, key, value) => taggedWithLabels(self, [metricLabel.make(key, value)]))
|
|
152
|
+
|
|
153
|
+
/** @internal */
|
|
154
|
+
export const taggedWithLabels = dual<
|
|
155
|
+
(
|
|
156
|
+
extraTags: ReadonlyArray<MetricLabel.MetricLabel>
|
|
157
|
+
) => <Type extends MetricKeyType.MetricKeyType<any, any>>(
|
|
158
|
+
self: MetricKey.MetricKey<Type>
|
|
159
|
+
) => MetricKey.MetricKey<Type>,
|
|
160
|
+
<Type extends MetricKeyType.MetricKeyType<any, any>>(
|
|
161
|
+
self: MetricKey.MetricKey<Type>,
|
|
162
|
+
extraTags: ReadonlyArray<MetricLabel.MetricLabel>
|
|
163
|
+
) => MetricKey.MetricKey<Type>
|
|
164
|
+
>(2, (self, extraTags) =>
|
|
165
|
+
extraTags.length === 0
|
|
166
|
+
? self
|
|
167
|
+
: new MetricKeyImpl(self.name, self.keyType, self.description, Arr.union(self.tags, extraTags)))
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import * as Duration from "../../Duration.js"
|
|
2
|
+
import * as Equal from "../../Equal.js"
|
|
3
|
+
import { pipe } from "../../Function.js"
|
|
4
|
+
import * as Hash from "../../Hash.js"
|
|
5
|
+
import type * as MetricBoundaries from "../../MetricBoundaries.js"
|
|
6
|
+
import type * as MetricKeyType from "../../MetricKeyType.js"
|
|
7
|
+
import { pipeArguments } from "../../Pipeable.js"
|
|
8
|
+
import { hasProperty } from "../../Predicate.js"
|
|
9
|
+
|
|
10
|
+
/** @internal */
|
|
11
|
+
const MetricKeyTypeSymbolKey = "effect/MetricKeyType"
|
|
12
|
+
|
|
13
|
+
/** @internal */
|
|
14
|
+
export const MetricKeyTypeTypeId: MetricKeyType.MetricKeyTypeTypeId = Symbol.for(
|
|
15
|
+
MetricKeyTypeSymbolKey
|
|
16
|
+
) as MetricKeyType.MetricKeyTypeTypeId
|
|
17
|
+
|
|
18
|
+
/** @internal */
|
|
19
|
+
const CounterKeyTypeSymbolKey = "effect/MetricKeyType/Counter"
|
|
20
|
+
|
|
21
|
+
/** @internal */
|
|
22
|
+
export const CounterKeyTypeTypeId: MetricKeyType.CounterKeyTypeTypeId = Symbol.for(
|
|
23
|
+
CounterKeyTypeSymbolKey
|
|
24
|
+
) as MetricKeyType.CounterKeyTypeTypeId
|
|
25
|
+
|
|
26
|
+
/** @internal */
|
|
27
|
+
const FrequencyKeyTypeSymbolKey = "effect/MetricKeyType/Frequency"
|
|
28
|
+
|
|
29
|
+
/** @internal */
|
|
30
|
+
export const FrequencyKeyTypeTypeId: MetricKeyType.FrequencyKeyTypeTypeId = Symbol.for(
|
|
31
|
+
FrequencyKeyTypeSymbolKey
|
|
32
|
+
) as MetricKeyType.FrequencyKeyTypeTypeId
|
|
33
|
+
|
|
34
|
+
/** @internal */
|
|
35
|
+
const GaugeKeyTypeSymbolKey = "effect/MetricKeyType/Gauge"
|
|
36
|
+
|
|
37
|
+
/** @internal */
|
|
38
|
+
export const GaugeKeyTypeTypeId: MetricKeyType.GaugeKeyTypeTypeId = Symbol.for(
|
|
39
|
+
GaugeKeyTypeSymbolKey
|
|
40
|
+
) as MetricKeyType.GaugeKeyTypeTypeId
|
|
41
|
+
|
|
42
|
+
/** @internal */
|
|
43
|
+
const HistogramKeyTypeSymbolKey = "effect/MetricKeyType/Histogram"
|
|
44
|
+
|
|
45
|
+
/** @internal */
|
|
46
|
+
export const HistogramKeyTypeTypeId: MetricKeyType.HistogramKeyTypeTypeId = Symbol.for(
|
|
47
|
+
HistogramKeyTypeSymbolKey
|
|
48
|
+
) as MetricKeyType.HistogramKeyTypeTypeId
|
|
49
|
+
|
|
50
|
+
/** @internal */
|
|
51
|
+
const SummaryKeyTypeSymbolKey = "effect/MetricKeyType/Summary"
|
|
52
|
+
|
|
53
|
+
/** @internal */
|
|
54
|
+
export const SummaryKeyTypeTypeId: MetricKeyType.SummaryKeyTypeTypeId = Symbol.for(
|
|
55
|
+
SummaryKeyTypeSymbolKey
|
|
56
|
+
) as MetricKeyType.SummaryKeyTypeTypeId
|
|
57
|
+
|
|
58
|
+
const metricKeyTypeVariance = {
|
|
59
|
+
/* c8 ignore next */
|
|
60
|
+
_In: (_: unknown) => _,
|
|
61
|
+
/* c8 ignore next */
|
|
62
|
+
_Out: (_: never) => _
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** @internal */
|
|
66
|
+
class CounterKeyType<A extends (number | bigint)> implements MetricKeyType.MetricKeyType.Counter<A> {
|
|
67
|
+
readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
|
|
68
|
+
readonly [CounterKeyTypeTypeId]: MetricKeyType.CounterKeyTypeTypeId = CounterKeyTypeTypeId
|
|
69
|
+
constructor(readonly incremental: boolean, readonly bigint: boolean) {
|
|
70
|
+
this._hash = Hash.string(CounterKeyTypeSymbolKey)
|
|
71
|
+
}
|
|
72
|
+
readonly _hash: number;
|
|
73
|
+
[Hash.symbol](): number {
|
|
74
|
+
return this._hash
|
|
75
|
+
}
|
|
76
|
+
[Equal.symbol](that: unknown): boolean {
|
|
77
|
+
return isCounterKey(that)
|
|
78
|
+
}
|
|
79
|
+
pipe() {
|
|
80
|
+
return pipeArguments(this, arguments)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const FrequencyKeyTypeHash = Hash.string(FrequencyKeyTypeSymbolKey)
|
|
85
|
+
|
|
86
|
+
/** @internal */
|
|
87
|
+
class FrequencyKeyType implements MetricKeyType.MetricKeyType.Frequency {
|
|
88
|
+
readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
|
|
89
|
+
readonly [FrequencyKeyTypeTypeId]: MetricKeyType.FrequencyKeyTypeTypeId = FrequencyKeyTypeTypeId
|
|
90
|
+
constructor(readonly preregisteredWords: ReadonlyArray<string>) {}
|
|
91
|
+
[Hash.symbol](): number {
|
|
92
|
+
return FrequencyKeyTypeHash
|
|
93
|
+
}
|
|
94
|
+
[Equal.symbol](that: unknown): boolean {
|
|
95
|
+
return isFrequencyKey(that)
|
|
96
|
+
}
|
|
97
|
+
pipe() {
|
|
98
|
+
return pipeArguments(this, arguments)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const GaugeKeyTypeHash = Hash.string(GaugeKeyTypeSymbolKey)
|
|
103
|
+
|
|
104
|
+
/** @internal */
|
|
105
|
+
class GaugeKeyType<A extends (number | bigint)> implements MetricKeyType.MetricKeyType.Gauge<A> {
|
|
106
|
+
readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
|
|
107
|
+
readonly [GaugeKeyTypeTypeId]: MetricKeyType.GaugeKeyTypeTypeId = GaugeKeyTypeTypeId
|
|
108
|
+
constructor(readonly bigint: boolean) {}
|
|
109
|
+
[Hash.symbol](): number {
|
|
110
|
+
return GaugeKeyTypeHash
|
|
111
|
+
}
|
|
112
|
+
[Equal.symbol](that: unknown): boolean {
|
|
113
|
+
return isGaugeKey(that)
|
|
114
|
+
}
|
|
115
|
+
pipe() {
|
|
116
|
+
return pipeArguments(this, arguments)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** @internal */
|
|
121
|
+
export class HistogramKeyType implements MetricKeyType.MetricKeyType.Histogram {
|
|
122
|
+
readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
|
|
123
|
+
readonly [HistogramKeyTypeTypeId]: MetricKeyType.HistogramKeyTypeTypeId = HistogramKeyTypeTypeId
|
|
124
|
+
constructor(readonly boundaries: MetricBoundaries.MetricBoundaries) {
|
|
125
|
+
this._hash = pipe(
|
|
126
|
+
Hash.string(HistogramKeyTypeSymbolKey),
|
|
127
|
+
Hash.combine(Hash.hash(this.boundaries))
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
readonly _hash: number;
|
|
131
|
+
[Hash.symbol](): number {
|
|
132
|
+
return this._hash
|
|
133
|
+
}
|
|
134
|
+
[Equal.symbol](that: unknown): boolean {
|
|
135
|
+
return isHistogramKey(that) && Equal.equals(this.boundaries, that.boundaries)
|
|
136
|
+
}
|
|
137
|
+
pipe() {
|
|
138
|
+
return pipeArguments(this, arguments)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** @internal */
|
|
143
|
+
class SummaryKeyType implements MetricKeyType.MetricKeyType.Summary {
|
|
144
|
+
readonly [MetricKeyTypeTypeId] = metricKeyTypeVariance
|
|
145
|
+
readonly [SummaryKeyTypeTypeId]: MetricKeyType.SummaryKeyTypeTypeId = SummaryKeyTypeTypeId
|
|
146
|
+
constructor(
|
|
147
|
+
readonly maxAge: Duration.Duration,
|
|
148
|
+
readonly maxSize: number,
|
|
149
|
+
readonly error: number,
|
|
150
|
+
readonly quantiles: ReadonlyArray<number>
|
|
151
|
+
) {
|
|
152
|
+
this._hash = pipe(
|
|
153
|
+
Hash.string(SummaryKeyTypeSymbolKey),
|
|
154
|
+
Hash.combine(Hash.hash(this.maxAge)),
|
|
155
|
+
Hash.combine(Hash.hash(this.maxSize)),
|
|
156
|
+
Hash.combine(Hash.hash(this.error)),
|
|
157
|
+
Hash.combine(Hash.array(this.quantiles))
|
|
158
|
+
)
|
|
159
|
+
}
|
|
160
|
+
readonly _hash: number;
|
|
161
|
+
[Hash.symbol](): number {
|
|
162
|
+
return this._hash
|
|
163
|
+
}
|
|
164
|
+
[Equal.symbol](that: unknown): boolean {
|
|
165
|
+
return isSummaryKey(that) &&
|
|
166
|
+
Equal.equals(this.maxAge, that.maxAge) &&
|
|
167
|
+
this.maxSize === that.maxSize &&
|
|
168
|
+
this.error === that.error &&
|
|
169
|
+
Equal.equals(this.quantiles, that.quantiles)
|
|
170
|
+
}
|
|
171
|
+
pipe() {
|
|
172
|
+
return pipeArguments(this, arguments)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** @internal */
|
|
177
|
+
export const counter: <A extends number | bigint>(options?: {
|
|
178
|
+
readonly bigint: boolean
|
|
179
|
+
readonly incremental: boolean
|
|
180
|
+
}) => CounterKeyType<A> = (options) =>
|
|
181
|
+
new CounterKeyType(
|
|
182
|
+
options?.incremental ?? false,
|
|
183
|
+
options?.bigint ?? false
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
/** @internal */
|
|
187
|
+
export const frequency = (options?: {
|
|
188
|
+
readonly preregisteredWords?: ReadonlyArray<string> | undefined
|
|
189
|
+
}): MetricKeyType.MetricKeyType.Frequency => new FrequencyKeyType(options?.preregisteredWords ?? [])
|
|
190
|
+
|
|
191
|
+
/** @internal */
|
|
192
|
+
export const gauge: <A extends number | bigint>(options?: {
|
|
193
|
+
readonly bigint: boolean
|
|
194
|
+
}) => GaugeKeyType<A> = (options) =>
|
|
195
|
+
new GaugeKeyType(
|
|
196
|
+
options?.bigint ?? false
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
/** @internal */
|
|
200
|
+
export const histogram = (boundaries: MetricBoundaries.MetricBoundaries): MetricKeyType.MetricKeyType.Histogram => {
|
|
201
|
+
return new HistogramKeyType(boundaries)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** @internal */
|
|
205
|
+
export const summary = (
|
|
206
|
+
options: {
|
|
207
|
+
readonly maxAge: Duration.DurationInput
|
|
208
|
+
readonly maxSize: number
|
|
209
|
+
readonly error: number
|
|
210
|
+
readonly quantiles: ReadonlyArray<number>
|
|
211
|
+
}
|
|
212
|
+
): MetricKeyType.MetricKeyType.Summary => {
|
|
213
|
+
return new SummaryKeyType(Duration.decode(options.maxAge), options.maxSize, options.error, options.quantiles)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** @internal */
|
|
217
|
+
export const isMetricKeyType = (u: unknown): u is MetricKeyType.MetricKeyType<unknown, unknown> =>
|
|
218
|
+
hasProperty(u, MetricKeyTypeTypeId)
|
|
219
|
+
|
|
220
|
+
/** @internal */
|
|
221
|
+
export const isCounterKey = (u: unknown): u is MetricKeyType.MetricKeyType.Counter<number | bigint> =>
|
|
222
|
+
hasProperty(u, CounterKeyTypeTypeId)
|
|
223
|
+
|
|
224
|
+
/** @internal */
|
|
225
|
+
export const isFrequencyKey = (u: unknown): u is MetricKeyType.MetricKeyType.Frequency =>
|
|
226
|
+
hasProperty(u, FrequencyKeyTypeTypeId)
|
|
227
|
+
|
|
228
|
+
/** @internal */
|
|
229
|
+
export const isGaugeKey = (u: unknown): u is MetricKeyType.MetricKeyType.Gauge<number | bigint> =>
|
|
230
|
+
hasProperty(u, GaugeKeyTypeTypeId)
|
|
231
|
+
|
|
232
|
+
/** @internal */
|
|
233
|
+
export const isHistogramKey = (u: unknown): u is MetricKeyType.MetricKeyType.Histogram =>
|
|
234
|
+
hasProperty(u, HistogramKeyTypeTypeId)
|
|
235
|
+
|
|
236
|
+
/** @internal */
|
|
237
|
+
export const isSummaryKey = (u: unknown): u is MetricKeyType.MetricKeyType.Summary =>
|
|
238
|
+
hasProperty(u, SummaryKeyTypeTypeId)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as Equal from "../../Equal.js"
|
|
2
|
+
import * as Hash from "../../Hash.js"
|
|
3
|
+
import type * as MetricLabel from "../../MetricLabel.js"
|
|
4
|
+
import { pipeArguments } from "../../Pipeable.js"
|
|
5
|
+
import { hasProperty } from "../../Predicate.js"
|
|
6
|
+
|
|
7
|
+
/** @internal */
|
|
8
|
+
const MetricLabelSymbolKey = "effect/MetricLabel"
|
|
9
|
+
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const MetricLabelTypeId: MetricLabel.MetricLabelTypeId = Symbol.for(
|
|
12
|
+
MetricLabelSymbolKey
|
|
13
|
+
) as MetricLabel.MetricLabelTypeId
|
|
14
|
+
|
|
15
|
+
/** @internal */
|
|
16
|
+
class MetricLabelImpl implements MetricLabel.MetricLabel {
|
|
17
|
+
readonly [MetricLabelTypeId]: MetricLabel.MetricLabelTypeId = MetricLabelTypeId
|
|
18
|
+
readonly _hash: number
|
|
19
|
+
constructor(readonly key: string, readonly value: string) {
|
|
20
|
+
this._hash = Hash.string(MetricLabelSymbolKey + this.key + this.value)
|
|
21
|
+
}
|
|
22
|
+
[Hash.symbol](): number {
|
|
23
|
+
return this._hash
|
|
24
|
+
}
|
|
25
|
+
[Equal.symbol](that: unknown): boolean {
|
|
26
|
+
return isMetricLabel(that) &&
|
|
27
|
+
this.key === that.key &&
|
|
28
|
+
this.value === that.value
|
|
29
|
+
}
|
|
30
|
+
pipe() {
|
|
31
|
+
return pipeArguments(this, arguments)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** @internal */
|
|
36
|
+
export const make = (key: string, value: string): MetricLabel.MetricLabel => {
|
|
37
|
+
return new MetricLabelImpl(key, value)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** @internal */
|
|
41
|
+
export const isMetricLabel = (u: unknown): u is MetricLabel.MetricLabel => hasProperty(u, MetricLabelTypeId)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type * as MetricKey from "../../MetricKey.js"
|
|
2
|
+
import type * as MetricKeyType from "../../MetricKeyType.js"
|
|
3
|
+
import type * as MetricPair from "../../MetricPair.js"
|
|
4
|
+
import type * as MetricState from "../../MetricState.js"
|
|
5
|
+
import { pipeArguments } from "../../Pipeable.js"
|
|
6
|
+
|
|
7
|
+
/** @internal */
|
|
8
|
+
const MetricPairSymbolKey = "effect/MetricPair"
|
|
9
|
+
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const MetricPairTypeId: MetricPair.MetricPairTypeId = Symbol.for(
|
|
12
|
+
MetricPairSymbolKey
|
|
13
|
+
) as MetricPair.MetricPairTypeId
|
|
14
|
+
|
|
15
|
+
const metricPairVariance = {
|
|
16
|
+
/* c8 ignore next */
|
|
17
|
+
_Type: (_: never) => _
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** @internal */
|
|
21
|
+
export const make = <Type extends MetricKeyType.MetricKeyType<any, any>>(
|
|
22
|
+
metricKey: MetricKey.MetricKey<Type>,
|
|
23
|
+
metricState: MetricState.MetricState<MetricKeyType.MetricKeyType.OutType<Type>>
|
|
24
|
+
): MetricPair.MetricPair.Untyped => {
|
|
25
|
+
return {
|
|
26
|
+
[MetricPairTypeId]: metricPairVariance,
|
|
27
|
+
metricKey,
|
|
28
|
+
metricState,
|
|
29
|
+
pipe() {
|
|
30
|
+
return pipeArguments(this, arguments)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** @internal */
|
|
36
|
+
export const unsafeMake = <Type extends MetricKeyType.MetricKeyType<any, any>>(
|
|
37
|
+
metricKey: MetricKey.MetricKey<Type>,
|
|
38
|
+
metricState: MetricState.MetricState.Untyped
|
|
39
|
+
): MetricPair.MetricPair.Untyped => {
|
|
40
|
+
return {
|
|
41
|
+
[MetricPairTypeId]: metricPairVariance,
|
|
42
|
+
metricKey,
|
|
43
|
+
metricState,
|
|
44
|
+
pipe() {
|
|
45
|
+
return pipeArguments(this, arguments)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type * as Effect from "../../Effect.js"
|
|
2
|
+
import type * as Fiber from "../../Fiber.js"
|
|
3
|
+
import { dual, pipe } from "../../Function.js"
|
|
4
|
+
import type * as Metric from "../../Metric.js"
|
|
5
|
+
import type * as MetricPolling from "../../MetricPolling.js"
|
|
6
|
+
import { pipeArguments } from "../../Pipeable.js"
|
|
7
|
+
import type * as Schedule from "../../Schedule.js"
|
|
8
|
+
import type * as Scope from "../../Scope.js"
|
|
9
|
+
import * as core from "../core.js"
|
|
10
|
+
import * as metric from "../metric.js"
|
|
11
|
+
import * as schedule_ from "../schedule.js"
|
|
12
|
+
|
|
13
|
+
/** @internal */
|
|
14
|
+
const MetricPollingSymbolKey = "effect/MetricPolling"
|
|
15
|
+
|
|
16
|
+
/** @internal */
|
|
17
|
+
export const MetricPollingTypeId: MetricPolling.MetricPollingTypeId = Symbol.for(
|
|
18
|
+
MetricPollingSymbolKey
|
|
19
|
+
) as MetricPolling.MetricPollingTypeId
|
|
20
|
+
|
|
21
|
+
/** @internal */
|
|
22
|
+
export const make = <Type, In, Out, R, E>(
|
|
23
|
+
metric: Metric.Metric<Type, In, Out>,
|
|
24
|
+
poll: Effect.Effect<In, E, R>
|
|
25
|
+
): MetricPolling.MetricPolling<Type, In, R, E, Out> => {
|
|
26
|
+
return {
|
|
27
|
+
[MetricPollingTypeId]: MetricPollingTypeId,
|
|
28
|
+
pipe() {
|
|
29
|
+
return pipeArguments(this, arguments)
|
|
30
|
+
},
|
|
31
|
+
metric,
|
|
32
|
+
poll
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** @internal */
|
|
37
|
+
export const collectAll = <R, E, Out>(
|
|
38
|
+
iterable: Iterable<MetricPolling.MetricPolling<any, any, R, E, Out>>
|
|
39
|
+
): MetricPolling.MetricPolling<Array<any>, Array<any>, R, E, Array<Out>> => {
|
|
40
|
+
const metrics = Array.from(iterable)
|
|
41
|
+
return {
|
|
42
|
+
[MetricPollingTypeId]: MetricPollingTypeId,
|
|
43
|
+
pipe() {
|
|
44
|
+
return pipeArguments(this, arguments)
|
|
45
|
+
},
|
|
46
|
+
metric: metric.make(
|
|
47
|
+
Array.of<any>(void 0) as Array<any>,
|
|
48
|
+
(inputs: Array<any>, extraTags) => {
|
|
49
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
50
|
+
const pollingMetric = metrics[i]!
|
|
51
|
+
const input = pipe(inputs, (x) => x[i])
|
|
52
|
+
pollingMetric.metric.unsafeUpdate(input, extraTags)
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
(extraTags) =>
|
|
56
|
+
Array.from(
|
|
57
|
+
metrics.map((pollingMetric) => pollingMetric.metric.unsafeValue(extraTags))
|
|
58
|
+
),
|
|
59
|
+
(inputs: Array<any>, extraTags) => {
|
|
60
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
61
|
+
const pollingMetric = metrics[i]!
|
|
62
|
+
const input = pipe(inputs, (x) => x[i])
|
|
63
|
+
pollingMetric.metric.unsafeModify(input, extraTags)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
),
|
|
67
|
+
poll: core.forEachSequential(metrics, (metric) => metric.poll)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** @internal */
|
|
72
|
+
export const launch = dual<
|
|
73
|
+
<A2, R2>(
|
|
74
|
+
schedule: Schedule.Schedule<A2, unknown, R2>
|
|
75
|
+
) => <Type, In, R, E, Out>(
|
|
76
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>
|
|
77
|
+
) => Effect.Effect<Fiber.Fiber<A2, E>, never, R | R2 | Scope.Scope>,
|
|
78
|
+
<Type, In, R, E, Out, A2, R2>(
|
|
79
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>,
|
|
80
|
+
schedule: Schedule.Schedule<A2, unknown, R2>
|
|
81
|
+
) => Effect.Effect<Fiber.Fiber<A2, E>, never, R | R2 | Scope.Scope>
|
|
82
|
+
>(2, (self, schedule) =>
|
|
83
|
+
pipe(
|
|
84
|
+
pollAndUpdate(self),
|
|
85
|
+
core.zipRight(metric.value(self.metric)),
|
|
86
|
+
schedule_.scheduleForked(schedule)
|
|
87
|
+
))
|
|
88
|
+
|
|
89
|
+
/** @internal */
|
|
90
|
+
export const poll = <Type, In, R, E, Out>(
|
|
91
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>
|
|
92
|
+
): Effect.Effect<In, E, R> => self.poll
|
|
93
|
+
|
|
94
|
+
/** @internal */
|
|
95
|
+
export const pollAndUpdate = <Type, In, R, E, Out>(
|
|
96
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>
|
|
97
|
+
): Effect.Effect<void, E, R> => core.flatMap(self.poll, (value) => metric.update(self.metric, value))
|
|
98
|
+
|
|
99
|
+
/** @internal */
|
|
100
|
+
export const retry = dual<
|
|
101
|
+
<X, E, R2>(
|
|
102
|
+
policy: Schedule.Schedule<X, E, R2>
|
|
103
|
+
) => <Type, In, R, Out>(
|
|
104
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>
|
|
105
|
+
) => MetricPolling.MetricPolling<Type, In, R | R2, E, Out>,
|
|
106
|
+
<Type, In, R, E, Out, X, R2>(
|
|
107
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>,
|
|
108
|
+
policy: Schedule.Schedule<X, E, R2>
|
|
109
|
+
) => MetricPolling.MetricPolling<Type, In, R | R2, E, Out>
|
|
110
|
+
>(2, (self, policy) => ({
|
|
111
|
+
[MetricPollingTypeId]: MetricPollingTypeId,
|
|
112
|
+
pipe() {
|
|
113
|
+
return pipeArguments(this, arguments)
|
|
114
|
+
},
|
|
115
|
+
metric: self.metric,
|
|
116
|
+
poll: schedule_.retry_Effect(self.poll, policy)
|
|
117
|
+
}))
|
|
118
|
+
|
|
119
|
+
/** @internal */
|
|
120
|
+
export const zip = dual<
|
|
121
|
+
<Type2, In2, R2, E2, Out2>(
|
|
122
|
+
that: MetricPolling.MetricPolling<Type2, In2, R2, E2, Out2>
|
|
123
|
+
) => <Type, In, R, E, Out>(
|
|
124
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>
|
|
125
|
+
) => MetricPolling.MetricPolling<
|
|
126
|
+
readonly [Type, Type2],
|
|
127
|
+
readonly [In, In2],
|
|
128
|
+
R | R2,
|
|
129
|
+
E | E2,
|
|
130
|
+
[Out, Out2]
|
|
131
|
+
>,
|
|
132
|
+
<Type, In, R, E, Out, Type2, In2, R2, E2, Out2>(
|
|
133
|
+
self: MetricPolling.MetricPolling<Type, In, R, E, Out>,
|
|
134
|
+
that: MetricPolling.MetricPolling<Type2, In2, R2, E2, Out2>
|
|
135
|
+
) => MetricPolling.MetricPolling<
|
|
136
|
+
readonly [Type, Type2],
|
|
137
|
+
readonly [In, In2],
|
|
138
|
+
R | R2,
|
|
139
|
+
E | E2,
|
|
140
|
+
[Out, Out2]
|
|
141
|
+
>
|
|
142
|
+
>(2, (self, that) => ({
|
|
143
|
+
[MetricPollingTypeId]: MetricPollingTypeId,
|
|
144
|
+
pipe() {
|
|
145
|
+
return pipeArguments(this, arguments)
|
|
146
|
+
},
|
|
147
|
+
metric: pipe(self.metric, metric.zip(that.metric)),
|
|
148
|
+
poll: core.zip(self.poll, that.poll)
|
|
149
|
+
}))
|