@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/Logger.ts
ADDED
|
@@ -0,0 +1,702 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 2.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Cause from "./Cause.js"
|
|
5
|
+
import type { DurationInput } from "./Duration.js"
|
|
6
|
+
import type { Effect } from "./Effect.js"
|
|
7
|
+
import type * as FiberId from "./FiberId.js"
|
|
8
|
+
import type * as FiberRefs from "./FiberRefs.js"
|
|
9
|
+
import type { LazyArg } from "./Function.js"
|
|
10
|
+
import type * as HashMap from "./HashMap.js"
|
|
11
|
+
import * as fiberRuntime from "./internal/fiberRuntime.js"
|
|
12
|
+
import * as circular from "./internal/layer/circular.js"
|
|
13
|
+
import * as internalCircular from "./internal/logger-circular.js"
|
|
14
|
+
import * as internal from "./internal/logger.js"
|
|
15
|
+
import type * as Layer from "./Layer.js"
|
|
16
|
+
import type * as List from "./List.js"
|
|
17
|
+
import type * as LogLevel from "./LogLevel.js"
|
|
18
|
+
import type * as LogSpan from "./LogSpan.js"
|
|
19
|
+
import type * as Option from "./Option.js"
|
|
20
|
+
import type { Pipeable } from "./Pipeable.js"
|
|
21
|
+
import type { Scope } from "./Scope.js"
|
|
22
|
+
import type * as Types from "./Types.js"
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @since 2.0.0
|
|
26
|
+
* @category symbols
|
|
27
|
+
*/
|
|
28
|
+
export const LoggerTypeId: unique symbol = internal.LoggerTypeId
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @since 2.0.0
|
|
32
|
+
* @category symbols
|
|
33
|
+
*/
|
|
34
|
+
export type LoggerTypeId = typeof LoggerTypeId
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @since 2.0.0
|
|
38
|
+
* @category models
|
|
39
|
+
*/
|
|
40
|
+
export interface Logger<in Message, out Output> extends Logger.Variance<Message, Output>, Pipeable {
|
|
41
|
+
log(options: Logger.Options<Message>): Output
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @since 2.0.0
|
|
46
|
+
*/
|
|
47
|
+
export declare namespace Logger {
|
|
48
|
+
/**
|
|
49
|
+
* @since 2.0.0
|
|
50
|
+
* @category models
|
|
51
|
+
*/
|
|
52
|
+
export interface Variance<in Message, out Output> {
|
|
53
|
+
readonly [LoggerTypeId]: {
|
|
54
|
+
readonly _Message: Types.Contravariant<Message>
|
|
55
|
+
readonly _Output: Types.Covariant<Output>
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @since 2.0.0
|
|
61
|
+
* @category models
|
|
62
|
+
*/
|
|
63
|
+
export interface Options<out Message> {
|
|
64
|
+
readonly fiberId: FiberId.FiberId
|
|
65
|
+
readonly logLevel: LogLevel.LogLevel
|
|
66
|
+
readonly message: Message
|
|
67
|
+
readonly cause: Cause.Cause<unknown>
|
|
68
|
+
readonly context: FiberRefs.FiberRefs
|
|
69
|
+
readonly spans: List.List<LogSpan.LogSpan>
|
|
70
|
+
readonly annotations: HashMap.HashMap<string, unknown>
|
|
71
|
+
readonly date: Date
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Creates a custom logger that formats log messages according to the provided
|
|
77
|
+
* function.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```ts
|
|
81
|
+
* import { Effect, Logger, LogLevel } from "effect"
|
|
82
|
+
*
|
|
83
|
+
* const logger = Logger.make(({ logLevel, message }) => {
|
|
84
|
+
* globalThis.console.log(`[${logLevel.label}] ${message}`)
|
|
85
|
+
* })
|
|
86
|
+
*
|
|
87
|
+
* const task1 = Effect.logDebug("task1 done")
|
|
88
|
+
* const task2 = Effect.logDebug("task2 done")
|
|
89
|
+
*
|
|
90
|
+
* const program = Effect.gen(function*() {
|
|
91
|
+
* yield* Effect.log("start")
|
|
92
|
+
* yield* task1
|
|
93
|
+
* yield* task2
|
|
94
|
+
* yield* Effect.log("done")
|
|
95
|
+
* }).pipe(
|
|
96
|
+
* Logger.withMinimumLogLevel(LogLevel.Debug),
|
|
97
|
+
* Effect.provide(Logger.replace(Logger.defaultLogger, logger))
|
|
98
|
+
* )
|
|
99
|
+
*
|
|
100
|
+
* Effect.runFork(program)
|
|
101
|
+
* // [INFO] start
|
|
102
|
+
* // [DEBUG] task1 done
|
|
103
|
+
* // [DEBUG] task2 done
|
|
104
|
+
* // [INFO] done
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @category constructors
|
|
108
|
+
* @since 2.0.0
|
|
109
|
+
*/
|
|
110
|
+
export const make: <Message, Output>(log: (options: Logger.Options<Message>) => Output) => Logger<Message, Output> =
|
|
111
|
+
internal.makeLogger
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* @since 2.0.0
|
|
115
|
+
* @category context
|
|
116
|
+
*/
|
|
117
|
+
export const add: <B>(logger: Logger<unknown, B>) => Layer.Layer<never> = circular.addLogger
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @since 2.0.0
|
|
121
|
+
* @category context
|
|
122
|
+
*/
|
|
123
|
+
export const addEffect: <A, E, R>(effect: Effect<Logger<unknown, A>, E, R>) => Layer.Layer<never, E, R> =
|
|
124
|
+
circular.addLoggerEffect
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @since 2.0.0
|
|
128
|
+
* @category context
|
|
129
|
+
*/
|
|
130
|
+
export const addScoped: <A, E, R>(
|
|
131
|
+
effect: Effect<Logger<unknown, A>, E, R>
|
|
132
|
+
) => Layer.Layer<never, E, Exclude<R, Scope>> = circular.addLoggerScoped
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @since 2.0.0
|
|
136
|
+
* @category mapping
|
|
137
|
+
*/
|
|
138
|
+
export const mapInput: {
|
|
139
|
+
<Message, Message2>(
|
|
140
|
+
f: (message: Message2) => Message
|
|
141
|
+
): <Output>(self: Logger<Message, Output>) => Logger<Message2, Output>
|
|
142
|
+
<Output, Message, Message2>(
|
|
143
|
+
self: Logger<Message, Output>,
|
|
144
|
+
f: (message: Message2) => Message
|
|
145
|
+
): Logger<Message2, Output>
|
|
146
|
+
} = internal.mapInput
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* @since 2.0.0
|
|
150
|
+
* @category mapping
|
|
151
|
+
*/
|
|
152
|
+
export const mapInputOptions: {
|
|
153
|
+
<Message, Message2>(
|
|
154
|
+
f: (options: Logger.Options<Message2>) => Logger.Options<Message>
|
|
155
|
+
): <Output>(self: Logger<Message, Output>) => Logger<Message2, Output>
|
|
156
|
+
<Output, Message, Message2>(
|
|
157
|
+
self: Logger<Message, Output>,
|
|
158
|
+
f: (options: Logger.Options<Message2>) => Logger.Options<Message>
|
|
159
|
+
): Logger<Message2, Output>
|
|
160
|
+
} = internal.mapInputOptions
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Returns a version of this logger that only logs messages when the log level
|
|
164
|
+
* satisfies the specified predicate.
|
|
165
|
+
*
|
|
166
|
+
* @since 2.0.0
|
|
167
|
+
* @category filtering
|
|
168
|
+
*/
|
|
169
|
+
export const filterLogLevel: {
|
|
170
|
+
(
|
|
171
|
+
f: (logLevel: LogLevel.LogLevel) => boolean
|
|
172
|
+
): <Message, Output>(self: Logger<Message, Output>) => Logger<Message, Option.Option<Output>>
|
|
173
|
+
<Message, Output>(
|
|
174
|
+
self: Logger<Message, Output>,
|
|
175
|
+
f: (logLevel: LogLevel.LogLevel) => boolean
|
|
176
|
+
): Logger<Message, Option.Option<Output>>
|
|
177
|
+
} = internal.filterLogLevel
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* @since 2.0.0
|
|
181
|
+
* @category mapping
|
|
182
|
+
*/
|
|
183
|
+
export const map: {
|
|
184
|
+
<Output, Output2>(
|
|
185
|
+
f: (output: Output) => Output2
|
|
186
|
+
): <Message>(self: Logger<Message, Output>) => Logger<Message, Output2>
|
|
187
|
+
<Message, Output, Output2>(
|
|
188
|
+
self: Logger<Message, Output>,
|
|
189
|
+
f: (output: Output) => Output2
|
|
190
|
+
): Logger<Message, Output2>
|
|
191
|
+
} = internal.map
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Creates a batched logger that groups log messages together and processes them
|
|
195
|
+
* in intervals.
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* import { Console, Effect, Logger } from "effect"
|
|
200
|
+
*
|
|
201
|
+
* const LoggerLive = Logger.replaceScoped(
|
|
202
|
+
* Logger.defaultLogger,
|
|
203
|
+
* Logger.logfmtLogger.pipe(
|
|
204
|
+
* Logger.batched("500 millis", (messages) => Console.log("BATCH", `[\n${messages.join("\n")}\n]`))
|
|
205
|
+
* )
|
|
206
|
+
* )
|
|
207
|
+
*
|
|
208
|
+
* const program = Effect.gen(function*() {
|
|
209
|
+
* yield* Effect.log("one")
|
|
210
|
+
* yield* Effect.log("two")
|
|
211
|
+
* yield* Effect.log("three")
|
|
212
|
+
* }).pipe(Effect.provide(LoggerLive))
|
|
213
|
+
*
|
|
214
|
+
* Effect.runFork(program)
|
|
215
|
+
* // BATCH [
|
|
216
|
+
* // timestamp=... level=INFO fiber=#0 message=one
|
|
217
|
+
* // timestamp=... level=INFO fiber=#0 message=two
|
|
218
|
+
* // timestamp=... level=INFO fiber=#0 message=three
|
|
219
|
+
* // ]
|
|
220
|
+
* ```
|
|
221
|
+
*
|
|
222
|
+
* @since 2.0.0
|
|
223
|
+
* @category mapping
|
|
224
|
+
*/
|
|
225
|
+
export const batched: {
|
|
226
|
+
<Output, R>(
|
|
227
|
+
window: DurationInput,
|
|
228
|
+
f: (messages: Array<Types.NoInfer<Output>>) => Effect<void, never, R>
|
|
229
|
+
): <Message>(self: Logger<Message, Output>) => Effect<Logger<Message, void>, never, R | Scope>
|
|
230
|
+
<Message, Output, R>(
|
|
231
|
+
self: Logger<Message, Output>,
|
|
232
|
+
window: DurationInput,
|
|
233
|
+
f: (messages: Array<Types.NoInfer<Output>>) => Effect<void, never, R>
|
|
234
|
+
): Effect<Logger<Message, void>, never, Scope | R>
|
|
235
|
+
} = fiberRuntime.batchedLogger
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* @since 2.0.0
|
|
239
|
+
* @category console
|
|
240
|
+
*/
|
|
241
|
+
export const withConsoleLog: <M, O>(self: Logger<M, O>) => Logger<M, void> = fiberRuntime.loggerWithConsoleLog
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Takes a `Logger<M, O>` and returns a logger that calls the respective `Console` method
|
|
245
|
+
* based on the log level.
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```ts
|
|
249
|
+
* import { Logger, Effect } from "effect"
|
|
250
|
+
*
|
|
251
|
+
* const loggerLayer = Logger.replace(
|
|
252
|
+
* Logger.defaultLogger,
|
|
253
|
+
* Logger.withLeveledConsole(Logger.stringLogger),
|
|
254
|
+
* )
|
|
255
|
+
*
|
|
256
|
+
* Effect.gen(function* () {
|
|
257
|
+
* yield* Effect.logError("an error")
|
|
258
|
+
* yield* Effect.logInfo("an info")
|
|
259
|
+
* }).pipe(Effect.provide(loggerLayer))
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* @since 3.8.0
|
|
263
|
+
* @category console
|
|
264
|
+
*/
|
|
265
|
+
export const withLeveledConsole: <M, O>(self: Logger<M, O>) => Logger<M, void> = fiberRuntime.loggerWithLeveledLog
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* @since 2.0.0
|
|
269
|
+
* @category console
|
|
270
|
+
*/
|
|
271
|
+
export const withConsoleError: <M, O>(self: Logger<M, O>) => Logger<M, void> = fiberRuntime.loggerWithConsoleError
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* A logger that does nothing in response to logging events.
|
|
275
|
+
*
|
|
276
|
+
* @since 2.0.0
|
|
277
|
+
* @category constructors
|
|
278
|
+
*/
|
|
279
|
+
export const none: Logger<unknown, void> = internal.none
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* @since 2.0.0
|
|
283
|
+
* @category context
|
|
284
|
+
*/
|
|
285
|
+
export const remove: <A>(logger: Logger<unknown, A>) => Layer.Layer<never> = circular.removeLogger
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* @since 2.0.0
|
|
289
|
+
* @category context
|
|
290
|
+
*/
|
|
291
|
+
export const replace: {
|
|
292
|
+
<B>(that: Logger<unknown, B>): <A>(self: Logger<unknown, A>) => Layer.Layer<never>
|
|
293
|
+
<A, B>(self: Logger<unknown, A>, that: Logger<unknown, B>): Layer.Layer<never>
|
|
294
|
+
} = circular.replaceLogger
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @since 2.0.0
|
|
298
|
+
* @category context
|
|
299
|
+
*/
|
|
300
|
+
export const replaceEffect: {
|
|
301
|
+
<B, E, R>(that: Effect<Logger<unknown, B>, E, R>): <A>(self: Logger<unknown, A>) => Layer.Layer<never, E, R>
|
|
302
|
+
<A, B, E, R>(self: Logger<unknown, A>, that: Effect<Logger<unknown, B>, E, R>): Layer.Layer<never, E, R>
|
|
303
|
+
} = circular.replaceLoggerEffect
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* @since 2.0.0
|
|
307
|
+
* @category context
|
|
308
|
+
*/
|
|
309
|
+
export const replaceScoped: {
|
|
310
|
+
<B, E, R>(
|
|
311
|
+
that: Effect<Logger<unknown, B>, E, R>
|
|
312
|
+
): <A>(self: Logger<unknown, A>) => Layer.Layer<never, E, Exclude<R, Scope>>
|
|
313
|
+
<A, B, E, R>(
|
|
314
|
+
self: Logger<unknown, A>,
|
|
315
|
+
that: Effect<Logger<unknown, B>, E, R>
|
|
316
|
+
): Layer.Layer<never, E, Exclude<R, Scope>>
|
|
317
|
+
} = circular.replaceLoggerScoped
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* @since 2.0.0
|
|
321
|
+
* @category constructors
|
|
322
|
+
*/
|
|
323
|
+
export const simple: <A, B>(log: (a: A) => B) => Logger<A, B> = internal.simple
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* @since 2.0.0
|
|
327
|
+
* @category constructors
|
|
328
|
+
*/
|
|
329
|
+
export const succeed: <A>(value: A) => Logger<unknown, A> = internal.succeed
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* @since 2.0.0
|
|
333
|
+
* @category constructors
|
|
334
|
+
*/
|
|
335
|
+
export const sync: <A>(evaluate: LazyArg<A>) => Logger<unknown, A> = internal.sync
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* @since 2.0.0
|
|
339
|
+
* @category constructors
|
|
340
|
+
*/
|
|
341
|
+
export const test: {
|
|
342
|
+
<Message>(input: Message): <Output>(self: Logger<Message, Output>) => Output
|
|
343
|
+
<Message, Output>(self: Logger<Message, Output>, input: Message): Output
|
|
344
|
+
} = internalCircular.test
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Sets the minimum log level for subsequent logging operations, allowing
|
|
348
|
+
* control over which log messages are displayed based on their severity.
|
|
349
|
+
*
|
|
350
|
+
* @example
|
|
351
|
+
* ```ts
|
|
352
|
+
* import { Effect, Logger, LogLevel } from "effect"
|
|
353
|
+
*
|
|
354
|
+
* const program = Effect.logDebug("message1").pipe(Logger.withMinimumLogLevel(LogLevel.Debug))
|
|
355
|
+
*
|
|
356
|
+
* Effect.runFork(program)
|
|
357
|
+
* // timestamp=... level=DEBUG fiber=#0 message=message1
|
|
358
|
+
* ```
|
|
359
|
+
*
|
|
360
|
+
* @since 2.0.0
|
|
361
|
+
* @category context
|
|
362
|
+
*/
|
|
363
|
+
export const withMinimumLogLevel: {
|
|
364
|
+
(level: LogLevel.LogLevel): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
|
|
365
|
+
<A, E, R>(self: Effect<A, E, R>, level: LogLevel.LogLevel): Effect<A, E, R>
|
|
366
|
+
} = circular.withMinimumLogLevel
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* @since 2.0.0
|
|
370
|
+
* @category tracing
|
|
371
|
+
*/
|
|
372
|
+
export const withSpanAnnotations: <Message, Output>(self: Logger<Message, Output>) => Logger<Message, Output> =
|
|
373
|
+
fiberRuntime.loggerWithSpanAnnotations
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Combines this logger with the specified logger to produce a new logger that
|
|
377
|
+
* logs to both this logger and that logger.
|
|
378
|
+
*
|
|
379
|
+
* @since 2.0.0
|
|
380
|
+
* @category zipping
|
|
381
|
+
*/
|
|
382
|
+
export const zip: {
|
|
383
|
+
<Message2, Output2>(
|
|
384
|
+
that: Logger<Message2, Output2>
|
|
385
|
+
): <Message, Output>(self: Logger<Message, Output>) => Logger<Message & Message2, [Output, Output2]>
|
|
386
|
+
<Message, Output, Message2, Output2>(
|
|
387
|
+
self: Logger<Message, Output>,
|
|
388
|
+
that: Logger<Message2, Output2>
|
|
389
|
+
): Logger<Message & Message2, [Output, Output2]>
|
|
390
|
+
} = internal.zip
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* @since 2.0.0
|
|
394
|
+
* @category zipping
|
|
395
|
+
*/
|
|
396
|
+
export const zipLeft: {
|
|
397
|
+
<Message2, Output2>(
|
|
398
|
+
that: Logger<Message2, Output2>
|
|
399
|
+
): <Message, Output>(self: Logger<Message, Output>) => Logger<Message & Message2, Output>
|
|
400
|
+
<Message, Output, Message2, Output2>(
|
|
401
|
+
self: Logger<Message, Output>,
|
|
402
|
+
that: Logger<Message2, Output2>
|
|
403
|
+
): Logger<Message & Message2, Output>
|
|
404
|
+
} = internal.zipLeft
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* @since 2.0.0
|
|
408
|
+
* @category zipping
|
|
409
|
+
*/
|
|
410
|
+
export const zipRight: {
|
|
411
|
+
<Message2, Output2>(
|
|
412
|
+
that: Logger<Message2, Output2>
|
|
413
|
+
): <Message, Output>(self: Logger<Message, Output>) => Logger<Message & Message2, Output2>
|
|
414
|
+
<Message, Output, Message2, Output2>(
|
|
415
|
+
self: Logger<Message, Output>,
|
|
416
|
+
that: Logger<Message2, Output2>
|
|
417
|
+
): Logger<Message & Message2, Output2>
|
|
418
|
+
} = internal.zipRight
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* @since 2.0.0
|
|
422
|
+
* @category constructors
|
|
423
|
+
*/
|
|
424
|
+
export const defaultLogger: Logger<unknown, void> = fiberRuntime.defaultLogger
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* The `jsonLogger` logger formats log entries as JSON objects, making them easy to
|
|
428
|
+
* integrate with logging systems that consume JSON data.
|
|
429
|
+
*
|
|
430
|
+
* @example
|
|
431
|
+
* ```ts
|
|
432
|
+
* import { Effect, Logger } from "effect"
|
|
433
|
+
*
|
|
434
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
435
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
436
|
+
* Effect.withLogSpan("myspan")
|
|
437
|
+
* )
|
|
438
|
+
*
|
|
439
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.json)))
|
|
440
|
+
* // {"message":["message1","message2"],"logLevel":"INFO","timestamp":"...","annotations":{"key2":"value2","key1":"value1"},"spans":{"myspan":0},"fiberId":"#0"}
|
|
441
|
+
* ```
|
|
442
|
+
*
|
|
443
|
+
* @since 2.0.0
|
|
444
|
+
* @category constructors
|
|
445
|
+
*/
|
|
446
|
+
export const jsonLogger: Logger<unknown, string> = internal.jsonLogger
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* This logger outputs logs in a human-readable format that is easy to read
|
|
450
|
+
* during development or in a production console.
|
|
451
|
+
*
|
|
452
|
+
* @example
|
|
453
|
+
* ```ts
|
|
454
|
+
* import { Effect, Logger } from "effect"
|
|
455
|
+
*
|
|
456
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
457
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
458
|
+
* Effect.withLogSpan("myspan")
|
|
459
|
+
* )
|
|
460
|
+
*
|
|
461
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.logFmt)))
|
|
462
|
+
* // timestamp=... level=INFO fiber=#0 message=message1 message=message2 myspan=0ms key2=value2 key1=value1
|
|
463
|
+
* ```
|
|
464
|
+
*
|
|
465
|
+
* @since 2.0.0
|
|
466
|
+
* @category constructors
|
|
467
|
+
*/
|
|
468
|
+
export const logfmtLogger: Logger<unknown, string> = internal.logfmtLogger
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* @since 2.0.0
|
|
472
|
+
* @category constructors
|
|
473
|
+
*/
|
|
474
|
+
export const stringLogger: Logger<unknown, string> = internal.stringLogger
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* The pretty logger utilizes the capabilities of the console API to generate
|
|
478
|
+
* visually engaging and color-enhanced log outputs. This feature is
|
|
479
|
+
* particularly useful for improving the readability of log messages during
|
|
480
|
+
* development and debugging processes.
|
|
481
|
+
*
|
|
482
|
+
* @example
|
|
483
|
+
* ```ts
|
|
484
|
+
* import { Effect, Logger } from "effect"
|
|
485
|
+
*
|
|
486
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
487
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
488
|
+
* Effect.withLogSpan("myspan")
|
|
489
|
+
* )
|
|
490
|
+
*
|
|
491
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.pretty)))
|
|
492
|
+
* // green --v v-- bold and cyan
|
|
493
|
+
* // [07:51:54.434] INFO (#0) myspan=1ms: message1
|
|
494
|
+
* // message2
|
|
495
|
+
* // v-- bold
|
|
496
|
+
* // key2: value2
|
|
497
|
+
* // key1: value1
|
|
498
|
+
* ```
|
|
499
|
+
*
|
|
500
|
+
* @since 3.5.0
|
|
501
|
+
* @category constructors
|
|
502
|
+
*/
|
|
503
|
+
export const prettyLogger: (
|
|
504
|
+
options?: {
|
|
505
|
+
readonly colors?: "auto" | boolean | undefined
|
|
506
|
+
readonly stderr?: boolean | undefined
|
|
507
|
+
readonly formatDate?: ((date: Date) => string) | undefined
|
|
508
|
+
readonly mode?: "browser" | "tty" | "auto" | undefined
|
|
509
|
+
}
|
|
510
|
+
) => Logger<unknown, void> = internal.prettyLogger
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* A default version of the pretty logger.
|
|
514
|
+
*
|
|
515
|
+
* @since 3.8.0
|
|
516
|
+
* @category constructors
|
|
517
|
+
*/
|
|
518
|
+
export const prettyLoggerDefault: Logger<unknown, void> = internal.prettyLoggerDefault
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* The structured logger provides detailed log outputs, structured in a way that
|
|
522
|
+
* retains comprehensive traceability of the events, suitable for deeper
|
|
523
|
+
* analysis and troubleshooting.
|
|
524
|
+
*
|
|
525
|
+
* @example
|
|
526
|
+
* ```ts
|
|
527
|
+
* import { Effect, Logger } from "effect"
|
|
528
|
+
*
|
|
529
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
530
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
531
|
+
* Effect.withLogSpan("myspan")
|
|
532
|
+
* )
|
|
533
|
+
*
|
|
534
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.structured)))
|
|
535
|
+
* // {
|
|
536
|
+
* // message: [ 'message1', 'message2' ],
|
|
537
|
+
* // logLevel: 'INFO',
|
|
538
|
+
* // timestamp: '2024-07-09T14:05:41.623Z',
|
|
539
|
+
* // cause: undefined,
|
|
540
|
+
* // annotations: { key2: 'value2', key1: 'value1' },
|
|
541
|
+
* // spans: { myspan: 0 },
|
|
542
|
+
* // fiberId: '#0'
|
|
543
|
+
* // }
|
|
544
|
+
* ```
|
|
545
|
+
*
|
|
546
|
+
* @since 2.0.0
|
|
547
|
+
* @category constructors
|
|
548
|
+
*/
|
|
549
|
+
export const structuredLogger: Logger<
|
|
550
|
+
unknown,
|
|
551
|
+
{
|
|
552
|
+
readonly logLevel: string
|
|
553
|
+
readonly fiberId: string
|
|
554
|
+
readonly timestamp: string
|
|
555
|
+
readonly message: unknown
|
|
556
|
+
readonly cause: string | undefined
|
|
557
|
+
readonly annotations: Record<string, unknown>
|
|
558
|
+
readonly spans: Record<string, number>
|
|
559
|
+
}
|
|
560
|
+
> = internal.structuredLogger
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* @since 2.0.0
|
|
564
|
+
* @category constructors
|
|
565
|
+
*/
|
|
566
|
+
export const tracerLogger: Logger<unknown, void> = fiberRuntime.tracerLogger
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* The `json` logger formats log entries as JSON objects, making them easy to
|
|
570
|
+
* integrate with logging systems that consume JSON data.
|
|
571
|
+
*
|
|
572
|
+
* @example
|
|
573
|
+
* ```ts
|
|
574
|
+
* import { Effect, Logger } from "effect"
|
|
575
|
+
*
|
|
576
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
577
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
578
|
+
* Effect.withLogSpan("myspan")
|
|
579
|
+
* )
|
|
580
|
+
*
|
|
581
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.json)))
|
|
582
|
+
* // {"message":["message1","message2"],"logLevel":"INFO","timestamp":"...","annotations":{"key2":"value2","key1":"value1"},"spans":{"myspan":0},"fiberId":"#0"}
|
|
583
|
+
* ```
|
|
584
|
+
*
|
|
585
|
+
* @since 2.0.0
|
|
586
|
+
* @category constructors
|
|
587
|
+
*/
|
|
588
|
+
export const json: Layer.Layer<never> = replace(fiberRuntime.defaultLogger, fiberRuntime.jsonLogger)
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* This logger outputs logs in a human-readable format that is easy to read
|
|
592
|
+
* during development or in a production console.
|
|
593
|
+
*
|
|
594
|
+
* @example
|
|
595
|
+
* ```ts
|
|
596
|
+
* import { Effect, Logger } from "effect"
|
|
597
|
+
*
|
|
598
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
599
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
600
|
+
* Effect.withLogSpan("myspan")
|
|
601
|
+
* )
|
|
602
|
+
*
|
|
603
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.logFmt)))
|
|
604
|
+
* // timestamp=... level=INFO fiber=#0 message=message1 message=message2 myspan=0ms key2=value2 key1=value1
|
|
605
|
+
* ```
|
|
606
|
+
*
|
|
607
|
+
* @since 2.0.0
|
|
608
|
+
* @category constructors
|
|
609
|
+
*/
|
|
610
|
+
export const logFmt: Layer.Layer<never> = replace(fiberRuntime.defaultLogger, fiberRuntime.logFmtLogger)
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* The pretty logger utilizes the capabilities of the console API to generate
|
|
614
|
+
* visually engaging and color-enhanced log outputs. This feature is
|
|
615
|
+
* particularly useful for improving the readability of log messages during
|
|
616
|
+
* development and debugging processes.
|
|
617
|
+
*
|
|
618
|
+
* @example
|
|
619
|
+
* ```ts
|
|
620
|
+
* import { Effect, Logger } from "effect"
|
|
621
|
+
*
|
|
622
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
623
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
624
|
+
* Effect.withLogSpan("myspan")
|
|
625
|
+
* )
|
|
626
|
+
*
|
|
627
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.pretty)))
|
|
628
|
+
* // green --v v-- bold and cyan
|
|
629
|
+
* // [07:51:54.434] INFO (#0) myspan=1ms: message1
|
|
630
|
+
* // message2
|
|
631
|
+
* // v-- bold
|
|
632
|
+
* // key2: value2
|
|
633
|
+
* // key1: value1
|
|
634
|
+
* ```
|
|
635
|
+
*
|
|
636
|
+
* @since 3.5.0
|
|
637
|
+
* @category constructors
|
|
638
|
+
*/
|
|
639
|
+
export const pretty: Layer.Layer<never> = replace(fiberRuntime.defaultLogger, fiberRuntime.prettyLogger)
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* The structured logger provides detailed log outputs, structured in a way that
|
|
643
|
+
* retains comprehensive traceability of the events, suitable for deeper
|
|
644
|
+
* analysis and troubleshooting.
|
|
645
|
+
*
|
|
646
|
+
* @example
|
|
647
|
+
* ```ts
|
|
648
|
+
* import { Effect, Logger } from "effect"
|
|
649
|
+
*
|
|
650
|
+
* const program = Effect.log("message1", "message2").pipe(
|
|
651
|
+
* Effect.annotateLogs({ key1: "value1", key2: "value2" }),
|
|
652
|
+
* Effect.withLogSpan("myspan")
|
|
653
|
+
* )
|
|
654
|
+
*
|
|
655
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.structured)))
|
|
656
|
+
* // {
|
|
657
|
+
* // message: [ 'message1', 'message2' ],
|
|
658
|
+
* // logLevel: 'INFO',
|
|
659
|
+
* // timestamp: '2024-07-09T14:05:41.623Z',
|
|
660
|
+
* // cause: undefined,
|
|
661
|
+
* // annotations: { key2: 'value2', key1: 'value1' },
|
|
662
|
+
* // spans: { myspan: 0 },
|
|
663
|
+
* // fiberId: '#0'
|
|
664
|
+
* // }
|
|
665
|
+
* ```
|
|
666
|
+
*
|
|
667
|
+
* @since 2.0.0
|
|
668
|
+
* @category constructors
|
|
669
|
+
*/
|
|
670
|
+
export const structured: Layer.Layer<never> = replace(fiberRuntime.defaultLogger, fiberRuntime.structuredLogger)
|
|
671
|
+
|
|
672
|
+
/**
|
|
673
|
+
* Sets the minimum log level for logging operations, allowing control over
|
|
674
|
+
* which log messages are displayed based on their severity.
|
|
675
|
+
*
|
|
676
|
+
* @example
|
|
677
|
+
* ```ts
|
|
678
|
+
* import { Effect, Logger, LogLevel } from "effect"
|
|
679
|
+
*
|
|
680
|
+
* const program = Effect.gen(function*() {
|
|
681
|
+
* yield* Effect.log("Executing task...")
|
|
682
|
+
* yield* Effect.sleep("100 millis")
|
|
683
|
+
* console.log("task done")
|
|
684
|
+
* })
|
|
685
|
+
*
|
|
686
|
+
* // Logging disabled using a layer
|
|
687
|
+
* Effect.runFork(program.pipe(Effect.provide(Logger.minimumLogLevel(LogLevel.None))))
|
|
688
|
+
* // task done
|
|
689
|
+
* ```
|
|
690
|
+
*
|
|
691
|
+
* @since 2.0.0
|
|
692
|
+
* @category context
|
|
693
|
+
*/
|
|
694
|
+
export const minimumLogLevel: (level: LogLevel.LogLevel) => Layer.Layer<never> = circular.minimumLogLevel
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Returns `true` if the specified value is a `Logger`, otherwise returns `false`.
|
|
698
|
+
*
|
|
699
|
+
* @since 1.0.0
|
|
700
|
+
* @category guards
|
|
701
|
+
*/
|
|
702
|
+
export const isLogger: (u: unknown) => u is Logger<unknown, unknown> = internal.isLogger
|