@smthrs/observability 0.35.0 → 1.0.0-rc.13

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.
Files changed (363) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/LICENSE +1 -1
  3. package/README.md +87 -0
  4. package/dist/cjs/BrowserOtel.d.ts +37 -0
  5. package/dist/cjs/BrowserOtel.d.ts.map +1 -0
  6. package/dist/cjs/BrowserOtel.js +47 -0
  7. package/dist/cjs/BrowserOtel.js.map +7 -0
  8. package/dist/cjs/Endpoint.d.ts +70 -0
  9. package/dist/cjs/Endpoint.d.ts.map +1 -0
  10. package/dist/cjs/Endpoint.js +85 -0
  11. package/dist/cjs/Endpoint.js.map +7 -0
  12. package/dist/cjs/JournalLogger.d.ts +232 -0
  13. package/dist/cjs/JournalLogger.d.ts.map +1 -0
  14. package/dist/cjs/JournalLogger.js +415 -0
  15. package/dist/cjs/JournalLogger.js.map +7 -0
  16. package/dist/cjs/Logger.d.ts +56 -0
  17. package/dist/cjs/Logger.d.ts.map +1 -0
  18. package/dist/cjs/Logger.js +72 -0
  19. package/dist/cjs/Logger.js.map +7 -0
  20. package/dist/cjs/Metric.d.ts +67 -0
  21. package/dist/cjs/Metric.d.ts.map +1 -0
  22. package/dist/cjs/Metric.js +68 -0
  23. package/dist/cjs/Metric.js.map +7 -0
  24. package/dist/cjs/NodeOtel.d.ts +42 -0
  25. package/dist/cjs/NodeOtel.d.ts.map +1 -0
  26. package/dist/cjs/NodeOtel.js +78 -0
  27. package/dist/cjs/NodeOtel.js.map +7 -0
  28. package/dist/cjs/Otel.d.ts +63 -0
  29. package/dist/cjs/Otel.d.ts.map +1 -0
  30. package/dist/cjs/Otel.js +75 -0
  31. package/dist/cjs/Otel.js.map +7 -0
  32. package/dist/cjs/Otlp.d.ts +203 -0
  33. package/dist/cjs/Otlp.d.ts.map +1 -0
  34. package/dist/cjs/Otlp.js +251 -0
  35. package/dist/cjs/Otlp.js.map +7 -0
  36. package/dist/cjs/Resource.d.ts +163 -0
  37. package/dist/cjs/Resource.d.ts.map +1 -0
  38. package/dist/cjs/Resource.js +186 -0
  39. package/dist/cjs/Resource.js.map +7 -0
  40. package/dist/cjs/index.d.ts +61 -0
  41. package/dist/cjs/index.d.ts.map +1 -0
  42. package/dist/cjs/index.js +47 -0
  43. package/dist/cjs/index.js.map +7 -0
  44. package/dist/cjs/internal/schemaIssuePath.d.ts +31 -0
  45. package/dist/cjs/internal/schemaIssuePath.d.ts.map +1 -0
  46. package/dist/cjs/internal/schemaIssuePath.js +49 -0
  47. package/dist/cjs/internal/schemaIssuePath.js.map +7 -0
  48. package/dist/cjs/package.json +1 -0
  49. package/dist/esm/BrowserOtel.d.ts +37 -0
  50. package/dist/esm/BrowserOtel.d.ts.map +1 -0
  51. package/dist/esm/BrowserOtel.js +24 -0
  52. package/dist/esm/BrowserOtel.js.map +1 -0
  53. package/dist/esm/Endpoint.d.ts +70 -0
  54. package/dist/esm/Endpoint.d.ts.map +1 -0
  55. package/dist/esm/Endpoint.js +110 -0
  56. package/dist/esm/Endpoint.js.map +1 -0
  57. package/dist/esm/JournalLogger.d.ts +232 -0
  58. package/dist/esm/JournalLogger.d.ts.map +1 -0
  59. package/dist/esm/JournalLogger.js +520 -0
  60. package/dist/esm/JournalLogger.js.map +1 -0
  61. package/dist/esm/Logger.d.ts +56 -0
  62. package/dist/esm/Logger.d.ts.map +1 -0
  63. package/dist/esm/Logger.js +61 -0
  64. package/dist/esm/Logger.js.map +1 -0
  65. package/dist/esm/Metric.d.ts +67 -0
  66. package/dist/esm/Metric.d.ts.map +1 -0
  67. package/dist/esm/Metric.js +80 -0
  68. package/dist/esm/Metric.js.map +1 -0
  69. package/dist/esm/NodeOtel.d.ts +42 -0
  70. package/dist/esm/NodeOtel.d.ts.map +1 -0
  71. package/dist/esm/NodeOtel.js +56 -0
  72. package/dist/esm/NodeOtel.js.map +1 -0
  73. package/dist/esm/Otel.d.ts +63 -0
  74. package/dist/esm/Otel.d.ts.map +1 -0
  75. package/dist/esm/Otel.js +52 -0
  76. package/dist/esm/Otel.js.map +1 -0
  77. package/dist/esm/Otlp.d.ts +203 -0
  78. package/dist/esm/Otlp.d.ts.map +1 -0
  79. package/dist/esm/Otlp.js +384 -0
  80. package/dist/esm/Otlp.js.map +1 -0
  81. package/dist/esm/Resource.d.ts +163 -0
  82. package/dist/esm/Resource.d.ts.map +1 -0
  83. package/dist/esm/Resource.js +238 -0
  84. package/dist/esm/Resource.js.map +1 -0
  85. package/dist/esm/index.d.ts +61 -0
  86. package/dist/esm/index.d.ts.map +1 -0
  87. package/dist/esm/index.js +61 -0
  88. package/dist/esm/index.js.map +1 -0
  89. package/dist/esm/internal/schemaIssuePath.d.ts +31 -0
  90. package/dist/esm/internal/schemaIssuePath.d.ts.map +1 -0
  91. package/dist/esm/internal/schemaIssuePath.js +59 -0
  92. package/dist/esm/internal/schemaIssuePath.js.map +1 -0
  93. package/docs/README.md +164 -0
  94. package/docs/api.md +780 -0
  95. package/docs/concepts/instrumentation-and-export.md +98 -0
  96. package/docs/concepts/layer-map.md +73 -0
  97. package/docs/concepts/validated-acquisition.md +106 -0
  98. package/docs/guides/export-to-a-collector.md +190 -0
  99. package/docs/guides/forward-logs-to-the-journal.md +226 -0
  100. package/docs/guides/install-a-logger.md +111 -0
  101. package/docs/guides/read-runtime-metrics.md +83 -0
  102. package/docs/guides/testing.md +134 -0
  103. package/docs/guides/wire-an-opentelemetry-sdk.md +226 -0
  104. package/docs/installation.md +102 -0
  105. package/docs/quickstart.md +145 -0
  106. package/docs/troubleshooting.md +168 -0
  107. package/package.json +221 -32
  108. package/src/BrowserOtel.ts +51 -0
  109. package/src/Endpoint.ts +131 -0
  110. package/src/JournalLogger.ts +635 -0
  111. package/src/Logger.ts +107 -0
  112. package/src/Metric.ts +88 -0
  113. package/src/NodeOtel.ts +90 -0
  114. package/src/Otel.ts +118 -0
  115. package/src/Otlp.ts +514 -0
  116. package/src/Resource.ts +325 -0
  117. package/src/index.ts +67 -0
  118. package/src/internal/schemaIssuePath.ts +65 -0
  119. package/docker-compose.otel.yml +0 -104
  120. package/grafana/dashboards/smithers-dashboard.json +0 -453
  121. package/grafana/provisioning/dashboards/dashboards.yml +0 -12
  122. package/grafana/provisioning/datasources/datasources.yml +0 -49
  123. package/loki/loki-config.yaml +0 -35
  124. package/otel-collector-config.yml +0 -38
  125. package/prometheus/prometheus.yml +0 -8
  126. package/src/MetricName.ts +0 -1
  127. package/src/MetricsServiceLive.js +0 -9
  128. package/src/README.md +0 -28
  129. package/src/ResolvedSmithersObservabilityOptions.ts +0 -12
  130. package/src/SmithersEvent.ts +0 -843
  131. package/src/SmithersLogFormat.ts +0 -1
  132. package/src/SmithersMetricDefinition.ts +0 -15
  133. package/src/SmithersMetricType.ts +0 -1
  134. package/src/SmithersMetricUnit.ts +0 -1
  135. package/src/SmithersObservability.js +0 -15
  136. package/src/SmithersObservabilityOptions.ts +0 -12
  137. package/src/SmithersObservabilityService.ts +0 -13
  138. package/src/_coreCorrelation/CorrelationContext.ts +0 -10
  139. package/src/_coreCorrelation/CorrelationContextLive.js +0 -11
  140. package/src/_coreCorrelation/CorrelationContextService.js +0 -15
  141. package/src/_coreCorrelation/CorrelationContextServiceShape.ts +0 -12
  142. package/src/_coreCorrelation/CorrelationPatch.ts +0 -3
  143. package/src/_coreCorrelation/README.md +0 -20
  144. package/src/_coreCorrelation/_correlationStorage.js +0 -4
  145. package/src/_coreCorrelation/correlationContextFiberRef.js +0 -5
  146. package/src/_coreCorrelation/correlationContextToLogAnnotations.js +0 -18
  147. package/src/_coreCorrelation/getCurrentCorrelationContext.js +0 -9
  148. package/src/_coreCorrelation/getCurrentCorrelationContextEffect.js +0 -11
  149. package/src/_coreCorrelation/index.js +0 -14
  150. package/src/_coreCorrelation/mergeCorrelationContext.js +0 -51
  151. package/src/_coreCorrelation/runWithCorrelationContext.js +0 -14
  152. package/src/_coreCorrelation/updateCurrentCorrelationContext.js +0 -17
  153. package/src/_coreCorrelation/withCorrelationContext.js +0 -38
  154. package/src/_coreCorrelation/withCurrentCorrelationContext.js +0 -11
  155. package/src/_coreMetrics.js +0 -14
  156. package/src/_coreMetricsShape.ts +0 -44
  157. package/src/_corePrometheus.js +0 -91
  158. package/src/_corePrometheusShape.ts +0 -11
  159. package/src/_coreTracing.js +0 -132
  160. package/src/_coreTracingShape.ts +0 -17
  161. package/src/_otelLogBuilders.js +0 -102
  162. package/src/_sessionFileResolvers.js +0 -164
  163. package/src/_smithersSpanAttributeAliases.js +0 -19
  164. package/src/_smithersTraceSpanStorage.js +0 -3
  165. package/src/_traceEventNormalizers.js +0 -499
  166. package/src/_traceRedaction.js +0 -162
  167. package/src/agentSessionEventToOtelLogRecord.js +0 -55
  168. package/src/agentTrace.ts +0 -144
  169. package/src/agentTraceCapabilities.js +0 -151
  170. package/src/annotateSmithersTrace.js +0 -11
  171. package/src/canonicalTraceEventToOtelLogRecord.js +0 -55
  172. package/src/correlation.js +0 -56
  173. package/src/createSmithersObservabilityLayer.js +0 -59
  174. package/src/createSmithersOtelLayer.js +0 -23
  175. package/src/createSmithersRuntimeLayer.js +0 -2
  176. package/src/detectAgentFamily.js +0 -26
  177. package/src/detectCaptureMode.js +0 -29
  178. package/src/emitOtelLogRecord.js +0 -19
  179. package/src/getCurrentSmithersTraceAnnotations.js +0 -14
  180. package/src/getCurrentSmithersTraceSpan.js +0 -7
  181. package/src/index.d.ts +0 -1392
  182. package/src/index.js +0 -137
  183. package/src/kindPhase.js +0 -17
  184. package/src/logging.js +0 -264
  185. package/src/makeSmithersSpanAttributes.js +0 -20
  186. package/src/metrics/README.md +0 -22
  187. package/src/metrics/SmithersMetricDefinition.ts +0 -17
  188. package/src/metrics/SmithersMetricType.ts +0 -1
  189. package/src/metrics/SmithersMetricUnit.ts +0 -1
  190. package/src/metrics/_asyncExternalWaitCounts.js +0 -4
  191. package/src/metrics/_buckets.js +0 -37
  192. package/src/metrics/_incrementGauge.js +0 -11
  193. package/src/metrics/_processStartMs.js +0 -1
  194. package/src/metrics/activeNodes.js +0 -2
  195. package/src/metrics/activeRuns.js +0 -2
  196. package/src/metrics/agentActionsTotal.js +0 -2
  197. package/src/metrics/agentDurationMs.js +0 -3
  198. package/src/metrics/agentErrorsTotal.js +0 -2
  199. package/src/metrics/agentEventsTotal.js +0 -2
  200. package/src/metrics/agentInvocationsTotal.js +0 -2
  201. package/src/metrics/agentRetriesTotal.js +0 -2
  202. package/src/metrics/agentSessionsTotal.js +0 -2
  203. package/src/metrics/agentTokensTotal.js +0 -2
  204. package/src/metrics/alertDeliveriesAttempted.js +0 -2
  205. package/src/metrics/alertDeliveriesSuppressed.js +0 -2
  206. package/src/metrics/alertsAcknowledgedTotal.js +0 -2
  207. package/src/metrics/alertsActive.js +0 -2
  208. package/src/metrics/alertsEscalatedTotal.js +0 -2
  209. package/src/metrics/alertsFiredTotal.js +0 -2
  210. package/src/metrics/alertsReopenedTotal.js +0 -2
  211. package/src/metrics/alertsResolvedTotal.js +0 -2
  212. package/src/metrics/alertsSilencedTotal.js +0 -2
  213. package/src/metrics/approvalPending.js +0 -2
  214. package/src/metrics/approvalWaitDuration.js +0 -5
  215. package/src/metrics/approvalsDenied.js +0 -2
  216. package/src/metrics/approvalsGranted.js +0 -2
  217. package/src/metrics/approvalsRequested.js +0 -2
  218. package/src/metrics/attemptDuration.js +0 -3
  219. package/src/metrics/attentionBacklog.js +0 -2
  220. package/src/metrics/cacheHits.js +0 -2
  221. package/src/metrics/cacheMisses.js +0 -2
  222. package/src/metrics/dbQueryDuration.js +0 -3
  223. package/src/metrics/dbRetries.js +0 -2
  224. package/src/metrics/dbTransactionDuration.js +0 -3
  225. package/src/metrics/dbTransactionRetries.js +0 -2
  226. package/src/metrics/dbTransactionRollbacks.js +0 -2
  227. package/src/metrics/devtoolsActiveSubscribers.js +0 -2
  228. package/src/metrics/devtoolsBackpressureDisconnectTotal.js +0 -2
  229. package/src/metrics/devtoolsDeltaBuildMs.js +0 -3
  230. package/src/metrics/devtoolsEventBytes.js +0 -3
  231. package/src/metrics/devtoolsEventTotal.js +0 -2
  232. package/src/metrics/devtoolsSnapshotBuildMs.js +0 -5
  233. package/src/metrics/devtoolsSubscribeTotal.js +0 -2
  234. package/src/metrics/errorsTotal.js +0 -2
  235. package/src/metrics/eventsEmittedTotal.js +0 -2
  236. package/src/metrics/externalWaitAsyncPending.js +0 -2
  237. package/src/metrics/gatewayApprovalDecisionsTotal.js +0 -2
  238. package/src/metrics/gatewayAuthEventsTotal.js +0 -2
  239. package/src/metrics/gatewayConnectionsActive.js +0 -2
  240. package/src/metrics/gatewayConnectionsClosedTotal.js +0 -2
  241. package/src/metrics/gatewayConnectionsTotal.js +0 -2
  242. package/src/metrics/gatewayCronTriggersTotal.js +0 -2
  243. package/src/metrics/gatewayErrorsTotal.js +0 -2
  244. package/src/metrics/gatewayHeartbeatTicksTotal.js +0 -2
  245. package/src/metrics/gatewayMessagesReceivedTotal.js +0 -2
  246. package/src/metrics/gatewayMessagesSentTotal.js +0 -2
  247. package/src/metrics/gatewayRpcCallsTotal.js +0 -2
  248. package/src/metrics/gatewayRpcDuration.js +0 -3
  249. package/src/metrics/gatewayRunEventBackpressureDisconnectTotal.js +0 -4
  250. package/src/metrics/gatewayRunsCompletedTotal.js +0 -2
  251. package/src/metrics/gatewayRunsStartedTotal.js +0 -2
  252. package/src/metrics/gatewaySignalsTotal.js +0 -2
  253. package/src/metrics/gatewayWebhooksReceivedTotal.js +0 -2
  254. package/src/metrics/gatewayWebhooksRejectedTotal.js +0 -2
  255. package/src/metrics/gatewayWebhooksVerifiedTotal.js +0 -2
  256. package/src/metrics/heartbeatDataSizeBytes.js +0 -5
  257. package/src/metrics/heartbeatIntervalMs.js +0 -3
  258. package/src/metrics/hotReloadDuration.js +0 -3
  259. package/src/metrics/hotReloadFailures.js +0 -2
  260. package/src/metrics/hotReloads.js +0 -2
  261. package/src/metrics/httpRequestDuration.js +0 -3
  262. package/src/metrics/httpRequests.js +0 -2
  263. package/src/metrics/index.d.ts +0 -1222
  264. package/src/metrics/index.js +0 -168
  265. package/src/metrics/memoryFactReads.js +0 -3
  266. package/src/metrics/memoryFactWrites.js +0 -3
  267. package/src/metrics/memoryMessageSaves.js +0 -3
  268. package/src/metrics/memoryRecallDuration.js +0 -11
  269. package/src/metrics/memoryRecallQueries.js +0 -3
  270. package/src/metrics/metricsServiceAdapter.js +0 -181
  271. package/src/metrics/nodeDuration.js +0 -3
  272. package/src/metrics/nodeRetriesTotal.js +0 -2
  273. package/src/metrics/nodesFailed.js +0 -2
  274. package/src/metrics/nodesFinished.js +0 -2
  275. package/src/metrics/nodesStarted.js +0 -2
  276. package/src/metrics/openApiToolCallErrorsTotal.js +0 -3
  277. package/src/metrics/openApiToolCallsTotal.js +0 -3
  278. package/src/metrics/openApiToolDuration.js +0 -9
  279. package/src/metrics/processHeapUsedBytes.js +0 -2
  280. package/src/metrics/processMemoryRssBytes.js +0 -2
  281. package/src/metrics/processUptimeSeconds.js +0 -2
  282. package/src/metrics/promptSizeBytes.js +0 -3
  283. package/src/metrics/replaysStarted.js +0 -3
  284. package/src/metrics/responseSizeBytes.js +0 -3
  285. package/src/metrics/rewindDurationMs.js +0 -3
  286. package/src/metrics/rewindFramesDeleted.js +0 -3
  287. package/src/metrics/rewindRollbackTotal.js +0 -2
  288. package/src/metrics/rewindSandboxesReverted.js +0 -3
  289. package/src/metrics/rewindTotal.js +0 -2
  290. package/src/metrics/runDuration.js +0 -3
  291. package/src/metrics/runForksCreated.js +0 -3
  292. package/src/metrics/runsAncestryDepth.js +0 -3
  293. package/src/metrics/runsCancelledTotal.js +0 -2
  294. package/src/metrics/runsCarriedStateBytes.js +0 -5
  295. package/src/metrics/runsContinuedTotal.js +0 -2
  296. package/src/metrics/runsFailedTotal.js +0 -2
  297. package/src/metrics/runsFinishedTotal.js +0 -2
  298. package/src/metrics/runsResumedTotal.js +0 -2
  299. package/src/metrics/runsTotal.js +0 -2
  300. package/src/metrics/sandboxActive.js +0 -2
  301. package/src/metrics/sandboxBundleSizeBytes.js +0 -5
  302. package/src/metrics/sandboxCompletedTotal.js +0 -2
  303. package/src/metrics/sandboxCreatedTotal.js +0 -2
  304. package/src/metrics/sandboxDurationMs.js +0 -3
  305. package/src/metrics/sandboxPatchCount.js +0 -3
  306. package/src/metrics/sandboxTransportDurationMs.js +0 -5
  307. package/src/metrics/schedulerConcurrencyUtilization.js +0 -2
  308. package/src/metrics/schedulerQueueDepth.js +0 -2
  309. package/src/metrics/schedulerWaitDuration.js +0 -5
  310. package/src/metrics/scorerDuration.js +0 -9
  311. package/src/metrics/scorerEventsFailed.js +0 -2
  312. package/src/metrics/scorerEventsFinished.js +0 -2
  313. package/src/metrics/scorerEventsStarted.js +0 -2
  314. package/src/metrics/scorersFailed.js +0 -3
  315. package/src/metrics/scorersFinished.js +0 -3
  316. package/src/metrics/scorersStarted.js +0 -3
  317. package/src/metrics/smithersMetricCatalog.js +0 -893
  318. package/src/metrics/smithersMetricCatalogByKey.js +0 -2
  319. package/src/metrics/smithersMetricCatalogByName.js +0 -2
  320. package/src/metrics/smithersMetricCatalogByPrometheusName.js +0 -4
  321. package/src/metrics/snapshotDuration.js +0 -9
  322. package/src/metrics/snapshotsCaptured.js +0 -3
  323. package/src/metrics/supervisorPollDuration.js +0 -5
  324. package/src/metrics/supervisorPollsTotal.js +0 -2
  325. package/src/metrics/supervisorResumeLag.js +0 -5
  326. package/src/metrics/supervisorResumedTotal.js +0 -2
  327. package/src/metrics/supervisorSkippedTotal.js +0 -2
  328. package/src/metrics/supervisorStaleDetected.js +0 -2
  329. package/src/metrics/taskHeartbeatTimeoutTotal.js +0 -2
  330. package/src/metrics/taskHeartbeatsTotal.js +0 -2
  331. package/src/metrics/timerDelayDuration.js +0 -3
  332. package/src/metrics/timersCancelled.js +0 -2
  333. package/src/metrics/timersCreated.js +0 -2
  334. package/src/metrics/timersFired.js +0 -2
  335. package/src/metrics/timersPending.js +0 -2
  336. package/src/metrics/toPrometheusMetricName.js +0 -8
  337. package/src/metrics/tokensCacheReadTotal.js +0 -2
  338. package/src/metrics/tokensCacheWriteTotal.js +0 -2
  339. package/src/metrics/tokensContextWindowBucketTotal.js +0 -2
  340. package/src/metrics/tokensContextWindowPerCall.js +0 -5
  341. package/src/metrics/tokensInputPerCall.js +0 -3
  342. package/src/metrics/tokensInputTotal.js +0 -2
  343. package/src/metrics/tokensOutputPerCall.js +0 -3
  344. package/src/metrics/tokensOutputTotal.js +0 -2
  345. package/src/metrics/tokensReasoningTotal.js +0 -2
  346. package/src/metrics/toolCallErrorsTotal.js +0 -2
  347. package/src/metrics/toolCallsTotal.js +0 -2
  348. package/src/metrics/toolDuration.js +0 -3
  349. package/src/metrics/toolOutputTruncatedTotal.js +0 -2
  350. package/src/metrics/trackEvent.js +0 -608
  351. package/src/metrics/updateAsyncExternalWaitPending.js +0 -18
  352. package/src/metrics/updateProcessMetrics.js +0 -20
  353. package/src/metrics/vcsDuration.js +0 -3
  354. package/src/normalizeStructuredEvent.js +0 -15
  355. package/src/prometheusContentType.js +0 -1
  356. package/src/renderPrometheusMetrics.js +0 -212
  357. package/src/resolveAgentTraceCapabilities.js +0 -59
  358. package/src/resolveSmithersObservabilityOptions.js +0 -109
  359. package/src/smithersMetrics.js +0 -2
  360. package/src/smithersSpanNames.js +0 -6
  361. package/src/unsupportedKindsForCapabilities.js +0 -32
  362. package/src/withSmithersSpan.js +0 -17
  363. package/tempo/tempo.yml +0 -17
@@ -0,0 +1,520 @@
1
+ /**
2
+ * Non-blocking forwarding of bounded operational logs to the durable journal.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as Journal from "@smthrs/journal/Journal";
7
+ import * as JournalEvent from "@smthrs/journal/JournalEvent";
8
+ import * as Redaction from "@smthrs/journal/Redaction";
9
+ import * as Cause from "effect/Cause";
10
+ import * as Context from "effect/Context";
11
+ import * as Effect from "effect/Effect";
12
+ import * as Layer from "effect/Layer";
13
+ import * as Logger from "effect/Logger";
14
+ import * as EffectMetric from "effect/Metric";
15
+ import * as Option from "effect/Option";
16
+ import * as Queue from "effect/Queue";
17
+ import * as References from "effect/References";
18
+ import * as Schema from "effect/Schema";
19
+ import * as Tracer from "effect/Tracer";
20
+ import { schemaIssuePath } from "./internal/schemaIssuePath.js";
21
+ import { droppedLogRecords } from "./Metric.js";
22
+ /**
23
+ * Largest queue accepted by the forwarding logger.
24
+ *
25
+ * @category constants
26
+ * @since 1.0.0-rc.0
27
+ */
28
+ export const maximumCapacity = 65_536;
29
+ /**
30
+ * Largest detached log payload admitted to the asynchronous queue.
31
+ *
32
+ * @category constants
33
+ * @since 1.0.0-rc.0
34
+ */
35
+ export const maximumSnapshotBytes = 1024 * 1024;
36
+ /**
37
+ * Largest number of container members copied into one detached log payload.
38
+ *
39
+ * @category constants
40
+ * @since 1.0.0-rc.0
41
+ */
42
+ export const maximumSnapshotMembers = 4_096;
43
+ /**
44
+ * Deepest container path copied into one detached log payload.
45
+ *
46
+ * @category constants
47
+ * @since 1.0.0-rc.0
48
+ */
49
+ export const maximumSnapshotDepth = 64;
50
+ /**
51
+ * What a hostile or unreadable logged value becomes.
52
+ *
53
+ * @category constants
54
+ * @since 1.0.0-rc.0
55
+ */
56
+ export const unrenderableMarker = "[Unrenderable]";
57
+ /**
58
+ * What a value beyond a logger resource ceiling becomes.
59
+ *
60
+ * @category constants
61
+ * @since 1.0.0-rc.0
62
+ */
63
+ export const truncatedMarker = "[Truncated]";
64
+ /**
65
+ * A stable logger configuration refusal.
66
+ *
67
+ * @category errors
68
+ * @since 1.0.0-rc.0
69
+ */
70
+ export class InvalidJournalLoggerOptions extends Schema.TaggedError()("@smthrs/observability/InvalidJournalLoggerOptions", {
71
+ code: Schema.Literal("invalid_journal_logger_options"),
72
+ path: Schema.String,
73
+ message: Schema.String
74
+ }) {
75
+ }
76
+ /**
77
+ * One typed failure retained from an Effect cause.
78
+ *
79
+ * @category schemas
80
+ * @since 1.0.0-rc.0
81
+ */
82
+ export const TelemetryFail = Schema.Struct({
83
+ _tag: Schema.Literal("Fail"),
84
+ error: Schema.Unknown
85
+ });
86
+ /**
87
+ * One unexpected defect retained from an Effect cause.
88
+ *
89
+ * @category schemas
90
+ * @since 1.0.0-rc.0
91
+ */
92
+ export const TelemetryDie = Schema.Struct({
93
+ _tag: Schema.Literal("Die"),
94
+ defect: Schema.Unknown
95
+ });
96
+ /**
97
+ * One interruption retained from an Effect cause.
98
+ *
99
+ * @category schemas
100
+ * @since 1.0.0-rc.0
101
+ */
102
+ export const TelemetryInterrupt = Schema.Struct({
103
+ _tag: Schema.Literal("Interrupt"),
104
+ fiberId: Schema.NullOr(Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)))
105
+ });
106
+ /**
107
+ * One reason in a persisted telemetry cause.
108
+ *
109
+ * @category schemas
110
+ * @since 1.0.0-rc.0
111
+ */
112
+ export const TelemetryCauseReason = Schema.Union([TelemetryFail, TelemetryDie, TelemetryInterrupt]);
113
+ /**
114
+ * A versioned structural Effect cause.
115
+ *
116
+ * Effect 4 stores composed failures as an ordered reason list. The projection
117
+ * preserves that order and each fail, defect, or interrupt discriminator.
118
+ *
119
+ * @category schemas
120
+ * @since 1.0.0-rc.0
121
+ */
122
+ export const TelemetryCause = Schema.Struct({
123
+ version: Schema.Literal(1),
124
+ reasons: Schema.Array(TelemetryCauseReason)
125
+ });
126
+ /**
127
+ * Runtime schema for the operational log payload written to the journal.
128
+ *
129
+ * @category schemas
130
+ * @since 1.0.0-rc.0
131
+ */
132
+ export const TelemetryLog = Schema.Struct({
133
+ version: Schema.Literal(1),
134
+ level: Schema.Literals(["All", "Fatal", "Error", "Warn", "Info", "Debug", "Trace", "None"]),
135
+ message: Schema.Unknown,
136
+ annotations: Schema.Record(Schema.String, Schema.Unknown),
137
+ cause: TelemetryCause,
138
+ fiberId: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
139
+ traceId: Schema.optionalKey(Schema.String),
140
+ spanId: Schema.optionalKey(Schema.String),
141
+ timestamp: Schema.String
142
+ });
143
+ const sourceId = "flows/observability/logger";
144
+ const encoder = new TextEncoder();
145
+ const OptionsSchema = Schema.Struct({
146
+ runId: JournalEvent.RunId,
147
+ capacity: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(maximumCapacity))),
148
+ minimumLogLevel: Schema.optional(Schema.Literals(["All", "Fatal", "Error", "Warn", "Info", "Debug", "Trace", "None"])),
149
+ mergeWithExisting: Schema.optional(Schema.Boolean)
150
+ });
151
+ const validateOptions = (options) => Schema.decodeUnknownEffect(OptionsSchema)(options).pipe(Effect.mapError((cause) => {
152
+ const path = schemaIssuePath(cause, "options");
153
+ return new InvalidJournalLoggerOptions({
154
+ code: "invalid_journal_logger_options",
155
+ path,
156
+ message: `journal logger ${path} is invalid`
157
+ });
158
+ }));
159
+ const reserve = (budget, bytes) => {
160
+ if (bytes > budget.bytes)
161
+ return false;
162
+ budget.bytes -= bytes;
163
+ return true;
164
+ };
165
+ const textBytes = (value) => encoder.encode(JSON.stringify(value)).byteLength;
166
+ const shortEscapes = new Set([0x08, 0x09, 0x0a, 0x0c, 0x0d]);
167
+ /** Bytes one non-surrogate code unit occupies inside a JSON string body. */
168
+ const unitBytes = (code) => {
169
+ if (code === 0x22 || code === 0x5c)
170
+ return 2;
171
+ if (code < 0x20)
172
+ return shortEscapes.has(code) ? 2 : 6;
173
+ if (code < 0x80)
174
+ return 1;
175
+ if (code < 0x800)
176
+ return 2;
177
+ return 3;
178
+ };
179
+ const isLowSurrogate = (code) => code >= 0xdc00 && code <= 0xdfff;
180
+ /** Code units that occupy exactly one byte inside a JSON string body. */
181
+ const plainRun = /[\x20\x21\x23-\x5b\x5d-\x7f]*/y;
182
+ /** One-byte units read one at a time before the rest of their run is matched natively. */
183
+ const plainStreak = 16;
184
+ /**
185
+ * The longest prefix whose JSON string body fits `limit` bytes, measured in one
186
+ * forward pass. A surrogate pair is admitted or refused whole, so the retained
187
+ * text is well formed whenever the input is.
188
+ *
189
+ * Plain text is one byte per unit, so once a streak of it starts, the rest of
190
+ * the run is matched natively instead of unit by unit. The match reads a window
191
+ * one unit past the bytes still free, never the tail the cut drops.
192
+ */
193
+ const boundedPrefix = (value, limit) => {
194
+ let bytes = 0;
195
+ let index = 0;
196
+ let streak = 0;
197
+ while (index < value.length) {
198
+ if (streak >= plainStreak) {
199
+ plainRun.lastIndex = 0;
200
+ plainRun.test(value.slice(index, index + limit - bytes + 1));
201
+ const run = plainRun.lastIndex;
202
+ const admitted = Math.min(run, limit - bytes);
203
+ bytes += admitted;
204
+ index += admitted;
205
+ if (admitted < run)
206
+ break;
207
+ streak = 0;
208
+ continue;
209
+ }
210
+ const code = value.charCodeAt(index);
211
+ let width = 1;
212
+ let cost;
213
+ if (code >= 0xd800 && code <= 0xdbff && isLowSurrogate(value.charCodeAt(index + 1))) {
214
+ width = 2;
215
+ cost = 4;
216
+ }
217
+ else if (code >= 0xd800 && code <= 0xdfff) {
218
+ cost = 6;
219
+ }
220
+ else {
221
+ cost = unitBytes(code);
222
+ }
223
+ if (bytes + cost > limit)
224
+ break;
225
+ bytes += cost;
226
+ index += width;
227
+ streak = cost === 1 ? streak + 1 : 0;
228
+ }
229
+ return { text: value.slice(0, index), bytes };
230
+ };
231
+ const boundedText = (value, budget) => {
232
+ if (value.length <= maximumSnapshotBytes && reserve(budget, textBytes(value)))
233
+ return value;
234
+ const markerBytes = textBytes(truncatedMarker);
235
+ const prefix = boundedPrefix(value, Math.max(0, budget.bytes - markerBytes));
236
+ budget.bytes = Math.max(0, budget.bytes - prefix.bytes - markerBytes);
237
+ return `${prefix.text}${truncatedMarker}`;
238
+ };
239
+ /**
240
+ * Error fields read through the prototype chain, in the order the snapshot
241
+ * projects them before any own data property the error added.
242
+ */
243
+ const standardErrorKeys = ["name", "message", "stack", "cause"];
244
+ /** Reads inherited data fields without invoking accessors or walking forever. */
245
+ const errorField = (value, key) => {
246
+ let current = value;
247
+ for (let depth = 0; current !== null && depth <= maximumSnapshotDepth; depth++) {
248
+ const descriptor = Object.getOwnPropertyDescriptor(current, key);
249
+ if (descriptor !== undefined)
250
+ return "value" in descriptor ? descriptor.value : unrenderableMarker;
251
+ current = Object.getPrototypeOf(current);
252
+ }
253
+ return current === null ? undefined : truncatedMarker;
254
+ };
255
+ const snapshotValue = (value, budget, ancestors, depth = 0) => {
256
+ if (budget.bytes <= 0)
257
+ return truncatedMarker;
258
+ if (depth > maximumSnapshotDepth)
259
+ return Redaction.depthMarker;
260
+ if (typeof value === "string")
261
+ return boundedText(value, budget);
262
+ if (typeof value === "number") {
263
+ const projected = Number.isFinite(value) ? value : String(value);
264
+ reserve(budget, String(projected).length);
265
+ return projected;
266
+ }
267
+ if (typeof value === "boolean" || value === null) {
268
+ reserve(budget, value === null ? 4 : value ? 4 : 5);
269
+ return value;
270
+ }
271
+ if (typeof value === "bigint")
272
+ return boundedText(`${value}n`, budget);
273
+ if (value === undefined)
274
+ return boundedText("[Undefined]", budget);
275
+ if (typeof value === "function")
276
+ return boundedText(Redaction.functionMarker, budget);
277
+ if (typeof value === "symbol")
278
+ return boundedText(Redaction.symbolMarker, budget);
279
+ try {
280
+ if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {
281
+ return boundedText(Redaction.binaryMarker, budget);
282
+ }
283
+ }
284
+ catch {
285
+ return boundedText(unrenderableMarker, budget);
286
+ }
287
+ if (ancestors.has(value))
288
+ return boundedText("[Circular]", budget);
289
+ ancestors.add(value);
290
+ try {
291
+ if (value instanceof Date) {
292
+ try {
293
+ return boundedText(Date.prototype.toISOString.call(value), budget);
294
+ }
295
+ catch {
296
+ return boundedText(unrenderableMarker, budget);
297
+ }
298
+ }
299
+ if (value instanceof Error) {
300
+ const record = Object.create(null);
301
+ for (const key of standardErrorKeys.slice(0, budget.members)) {
302
+ budget.members--;
303
+ try {
304
+ record[key] = snapshotValue(errorField(value, key), budget, ancestors, depth + 1);
305
+ }
306
+ catch {
307
+ record[key] = unrenderableMarker;
308
+ }
309
+ }
310
+ // Tagged failures (`_tag`, domain fields) and system errors (`code`,
311
+ // `path`, `syscall`) keep their diagnostics as own data properties, so
312
+ // the walk that projects plain records runs over the remaining keys.
313
+ let names;
314
+ try {
315
+ names = Object.getOwnPropertyNames(value).filter((key) => !standardErrorKeys.includes(key));
316
+ }
317
+ catch {
318
+ return record;
319
+ }
320
+ let projected = 0;
321
+ let collided = false;
322
+ for (; projected < names.length && budget.members > 0; projected++) {
323
+ budget.members--;
324
+ const key = names[projected];
325
+ const boundedKey = boundedText(key, budget);
326
+ if (Object.hasOwn(record, boundedKey)) {
327
+ collided = true;
328
+ continue;
329
+ }
330
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
331
+ record[boundedKey] = descriptor !== undefined && "value" in descriptor
332
+ ? snapshotValue(descriptor.value, budget, ancestors, depth + 1)
333
+ : unrenderableMarker;
334
+ }
335
+ if (collided || projected < names.length)
336
+ record[truncatedMarker] = truncatedMarker;
337
+ return record;
338
+ }
339
+ if (Array.isArray(value)) {
340
+ const output = [];
341
+ const length = value.length;
342
+ for (let index = 0; index < length && budget.members > 0; index++) {
343
+ budget.members--;
344
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
345
+ output.push(descriptor === undefined || !("value" in descriptor)
346
+ ? unrenderableMarker
347
+ : snapshotValue(descriptor.value, budget, ancestors, depth + 1));
348
+ }
349
+ if (output.length < length)
350
+ output.push(truncatedMarker);
351
+ return output;
352
+ }
353
+ const record = Object.create(null);
354
+ const names = Object.getOwnPropertyNames(value);
355
+ for (let index = 0; index < names.length && budget.members > 0; index++) {
356
+ budget.members--;
357
+ const key = names[index];
358
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
359
+ const boundedKey = boundedText(key, budget);
360
+ // A key truncated to fit the budget can read exactly like one already
361
+ // copied. The first member keeps its slot; the later one is dropped and
362
+ // the record is marked truncated below rather than silently overwritten.
363
+ if (Object.hasOwn(record, boundedKey))
364
+ continue;
365
+ record[boundedKey] = descriptor !== undefined && "value" in descriptor
366
+ ? snapshotValue(descriptor.value, budget, ancestors, depth + 1)
367
+ : unrenderableMarker;
368
+ }
369
+ if (Object.keys(record).length < names.length)
370
+ record[truncatedMarker] = truncatedMarker;
371
+ return record;
372
+ }
373
+ catch {
374
+ return boundedText(unrenderableMarker, budget);
375
+ }
376
+ finally {
377
+ ancestors.delete(value);
378
+ }
379
+ };
380
+ const snapshotCause = (cause, budget) => ({
381
+ version: 1,
382
+ reasons: cause.reasons.slice(0, maximumSnapshotMembers).map((reason) => {
383
+ switch (reason._tag) {
384
+ case "Fail":
385
+ return { _tag: "Fail", error: snapshotValue(reason.error, budget, new WeakSet()) };
386
+ case "Die":
387
+ return { _tag: "Die", defect: snapshotValue(reason.defect, budget, new WeakSet()) };
388
+ case "Interrupt":
389
+ return { _tag: "Interrupt", fiberId: reason.fiberId ?? null };
390
+ }
391
+ })
392
+ });
393
+ const isTelemetryLog = Schema.is(TelemetryLog);
394
+ /**
395
+ * Annotations are a container in the durable schema, so a snapshot that spent
396
+ * the budget names the loss inside a record instead of replacing the record
397
+ * with a scalar the schema refuses.
398
+ */
399
+ const snapshotAnnotations = (value, budget) => {
400
+ const snapshot = snapshotValue(value, budget, new WeakSet());
401
+ return typeof snapshot === "object" && snapshot !== null && !Array.isArray(snapshot)
402
+ ? snapshot
403
+ : { [truncatedMarker]: truncatedMarker };
404
+ };
405
+ const snapshotLog = (options) => {
406
+ const budget = {
407
+ bytes: maximumSnapshotBytes,
408
+ members: maximumSnapshotMembers
409
+ };
410
+ try {
411
+ const span = Option.getOrUndefined(Context.getOption(options.fiber.context, Tracer.ParentSpan));
412
+ let candidate = {
413
+ version: 1,
414
+ level: options.logLevel,
415
+ message: typeof options.message === "string" ? "" : snapshotValue(options.message, budget, new WeakSet()),
416
+ annotations: snapshotAnnotations(options.fiber.getRef(References.CurrentLogAnnotations), budget),
417
+ cause: snapshotCause(options.cause, budget),
418
+ fiberId: options.fiber.id,
419
+ ...(span === undefined ? {} : { traceId: span.traceId, spanId: span.spanId }),
420
+ timestamp: options.date.toISOString()
421
+ };
422
+ // A scalar message can spend the whole value budget. Reserve the actual
423
+ // record envelope first so the final size check does not discard its prefix.
424
+ if (typeof options.message === "string") {
425
+ budget.bytes = Math.max(0, maximumSnapshotBytes - encoder.encode(JSON.stringify(candidate)).byteLength + 2);
426
+ candidate = { ...candidate, message: boundedText(options.message, budget) };
427
+ }
428
+ const redacted = Redaction.redact(candidate, { onTooDeep: "name" });
429
+ // The durable row is only useful if the exported schema decodes it, so an
430
+ // oversized or schema-invalid projection degrades to the total record
431
+ // rather than to a payload every consumer throws on.
432
+ return encoder.encode(JSON.stringify(redacted)).byteLength <= maximumSnapshotBytes && isTelemetryLog(redacted)
433
+ ? redacted
434
+ : { ...candidate, message: truncatedMarker, annotations: {}, cause: { version: 1, reasons: [] } };
435
+ }
436
+ catch {
437
+ return {
438
+ version: 1,
439
+ level: options.logLevel,
440
+ message: unrenderableMarker,
441
+ annotations: {},
442
+ cause: { version: 1, reasons: [] },
443
+ fiberId: options.fiber.id,
444
+ timestamp: options.date.toISOString()
445
+ };
446
+ }
447
+ };
448
+ const makeLog = (options, runId) => new JournalEvent.Input({
449
+ runId,
450
+ sourceId,
451
+ // The journal owns the durable per-run/source allocation. A local counter
452
+ // starts over when a layer is rebuilt and makes distinct records collide.
453
+ eventType: "telemetry.log",
454
+ payload: snapshotLog(options),
455
+ meta: {
456
+ version: 1,
457
+ source: "/observability"
458
+ }
459
+ });
460
+ /**
461
+ * Installs a bounded, drop-on-overflow logger forwarder for one explicit run.
462
+ *
463
+ * Configuration is decoded before a worker starts. The callback reads the
464
+ * queue's remaining room first, snapshots and redacts a bounded DTO
465
+ * synchronously only when a slot is free, then performs only non-blocking
466
+ * queue admission. A record a saturated queue cannot take is counted and
467
+ * discarded without being snapshotted. Queue overflow, journal `Dropped` receipts, delivery failures,
468
+ * and journal defects each advance `Metric.droppedLogRecords`. The two failure
469
+ * paths also warn through the ambient loggers with a fixed code and run id,
470
+ * and the worker keeps draining. `Accepted` and `Duplicate` do not advance the
471
+ * counter. Admission receipts cannot identify later drop-oldest evictions of
472
+ * these records or report asynchronous persistence failures or shutdown losses.
473
+ * Closing the scope interrupts the worker and may drop records still queued
474
+ * behind an in-flight write without advancing the counter.
475
+ *
476
+ * The layer replaces the ambient logger set unless `mergeWithExisting` is
477
+ * `true`, and provides `MinimumLogLevel` only when `minimumLogLevel` is given,
478
+ * so an application that set that reference elsewhere keeps it.
479
+ *
480
+ * @category layers
481
+ * @since 1.0.0-rc.0
482
+ */
483
+ export const layerJournalForwarding = (options) => Layer.unwrap(Effect.map(validateOptions(options), (configured) => Layer.merge(Layer.effect(Logger.CurrentLoggers, Effect.gen(function* () {
484
+ const journal = yield* Journal.Journal;
485
+ const queue = yield* Queue.bounded(configured.capacity ?? 256);
486
+ const dropped = EffectMetric.update(droppedLogRecords, 1);
487
+ // This worker is forked before the logger it feeds is installed, so
488
+ // its ambient logger set cannot contain that logger and a warning
489
+ // here cannot enqueue itself. Delivery stays lossy; the loss is
490
+ // reported and counted instead of vanishing. Warning annotations
491
+ // use fixed codes so ambient sinks never receive raw failures.
492
+ const forward = Effect.fn("JournalLogger.forward")((input) => journal.emitLossy(input).pipe(Effect.tap((receipt) => receipt._tag === "Dropped" ? dropped : Effect.void), Effect.catch(() => dropped.pipe(Effect.andThen(Effect.annotateLogs(Effect.logWarning("A telemetry log record could not be forwarded"), {
493
+ runId: configured.runId,
494
+ code: "journal_forwarding_failed"
495
+ }))))));
496
+ yield* Effect.forever(Queue.take(queue).pipe(Effect.flatMap(forward),
497
+ // A defect from a journal implementation would otherwise end
498
+ // this fiber for the rest of the run, silently, while the layer
499
+ // still looks installed. Interruption stays fatal.
500
+ Effect.catchCause((cause) => Cause.hasInterruptsOnly(cause)
501
+ ? Effect.failCause(cause)
502
+ : dropped.pipe(Effect.andThen(Effect.annotateLogs(Effect.logWarning("The telemetry forwarding worker recovered from a defect"), { runId: configured.runId, code: "journal_forwarding_defect" })))))).pipe(Effect.forkScoped);
503
+ const logger = Logger.make((logOptions) => {
504
+ // Snapshotting and redacting the record is the expensive half of
505
+ // admission, and saturation is exactly when that work is thrown
506
+ // away, so a queue with no room refuses before the record is
507
+ // built. Nothing else runs between this read and the offer, so
508
+ // the check cannot refuse a record the queue would have taken,
509
+ // and the offer still reports a queue that closed underneath it.
510
+ const accepted = !Queue.isFullUnsafe(queue)
511
+ && Queue.offerUnsafe(queue, makeLog(logOptions, configured.runId));
512
+ if (!accepted)
513
+ droppedLogRecords.updateUnsafe(1, logOptions.fiber.context);
514
+ });
515
+ const current = yield* Effect.withFiber((fiber) => Effect.sync(() => fiber.getRef(Logger.CurrentLoggers)));
516
+ return new Set(configured.mergeWithExisting === true ? current : []).add(logger);
517
+ })), configured.minimumLogLevel === undefined
518
+ ? Layer.empty
519
+ : Layer.succeed(References.MinimumLogLevel, configured.minimumLogLevel))));
520
+ //# sourceMappingURL=JournalLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JournalLogger.js","sourceRoot":"","sources":["../../src/JournalLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Effect logger layers used by flows.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as Layer from "effect/Layer";
7
+ import * as Logger from "effect/Logger";
8
+ import type * as LogLevel from "effect/LogLevel";
9
+ /**
10
+ * Options shared by the built-in logger layers.
11
+ *
12
+ * @category models
13
+ * @since 0.1.0
14
+ */
15
+ export interface Options {
16
+ /**
17
+ * Pins `References.MinimumLogLevel` for the whole application. Omitted, the
18
+ * layer leaves that reference alone and Effect's own `Info` default applies.
19
+ */
20
+ readonly minimumLogLevel?: LogLevel.LogLevel | undefined;
21
+ /**
22
+ * Keeps the ambient loggers alongside this one. Defaults to `false`, which
23
+ * replaces the ambient logger set, matching Effect's own `Logger.layer`.
24
+ */
25
+ readonly mergeWithExisting?: boolean | undefined;
26
+ }
27
+ /**
28
+ * Provides a human-readable development logger.
29
+ *
30
+ * @category layers
31
+ * @since 0.1.0
32
+ */
33
+ export declare const layerPrettyDev: (options?: Options) => Layer.Layer<never>;
34
+ /**
35
+ * Provides one structured JSON object per log line.
36
+ *
37
+ * @category layers
38
+ * @since 0.1.0
39
+ */
40
+ export declare const layerStructuredJson: (options?: Options) => Layer.Layer<never>;
41
+ /**
42
+ * Removes the active logger set and pins the minimum level to `None` unless
43
+ * `options.minimumLogLevel` explicitly selects another level.
44
+ *
45
+ * @category layers
46
+ * @since 0.1.0
47
+ */
48
+ export declare const layerNoop: (options?: Pick<Options, "minimumLogLevel">) => Layer.Layer<never>;
49
+ /**
50
+ * A logger layer that can be composed without requiring a runtime service.
51
+ *
52
+ * @category layers
53
+ * @since 0.1.0
54
+ */
55
+ export declare const layer: (logger: Logger.Logger<unknown, unknown>, options?: Options) => Layer.Layer<never>;
56
+ //# sourceMappingURL=Logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/Logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAGhD;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;IACxD;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACjD;AAuBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU,OAAO,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAQnE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,OAAO,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAMxE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAI,UAAU,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAIrF,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,OAAO,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAMnG,CAAA"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Effect logger layers used by flows.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as Layer from "effect/Layer";
7
+ import * as Logger from "effect/Logger";
8
+ import * as References from "effect/References";
9
+ /**
10
+ * Installs the minimum-level reference only when the caller named a level, so
11
+ * a layer that adds a sink does not pin the level an application chose
12
+ * elsewhere. Effect's own default for the reference is already `Info`.
13
+ */
14
+ const withMinimumLogLevel = (layer, minimumLogLevel) => minimumLogLevel === undefined
15
+ ? layer
16
+ : Layer.merge(layer, Layer.succeed(References.MinimumLogLevel, minimumLogLevel));
17
+ const optionsWithDefaults = (options) => ({
18
+ minimumLogLevel: options?.minimumLogLevel,
19
+ mergeWithExisting: options?.mergeWithExisting ?? false
20
+ });
21
+ /**
22
+ * Provides a human-readable development logger.
23
+ *
24
+ * @category layers
25
+ * @since 0.1.0
26
+ */
27
+ export const layerPrettyDev = (options) => {
28
+ const resolved = optionsWithDefaults(options);
29
+ return withMinimumLogLevel(Logger.layer([Logger.consolePretty({ colors: "auto", mode: "auto" })], {
30
+ mergeWithExisting: resolved.mergeWithExisting
31
+ }), resolved.minimumLogLevel);
32
+ };
33
+ /**
34
+ * Provides one structured JSON object per log line.
35
+ *
36
+ * @category layers
37
+ * @since 0.1.0
38
+ */
39
+ export const layerStructuredJson = (options) => {
40
+ const resolved = optionsWithDefaults(options);
41
+ return withMinimumLogLevel(Logger.layer([Logger.consoleJson], { mergeWithExisting: resolved.mergeWithExisting }), resolved.minimumLogLevel);
42
+ };
43
+ /**
44
+ * Removes the active logger set and pins the minimum level to `None` unless
45
+ * `options.minimumLogLevel` explicitly selects another level.
46
+ *
47
+ * @category layers
48
+ * @since 0.1.0
49
+ */
50
+ export const layerNoop = (options) => withMinimumLogLevel(Logger.layer([]), options?.minimumLogLevel ?? "None");
51
+ /**
52
+ * A logger layer that can be composed without requiring a runtime service.
53
+ *
54
+ * @category layers
55
+ * @since 0.1.0
56
+ */
57
+ export const layer = (logger, options) => {
58
+ const resolved = optionsWithDefaults(options);
59
+ return withMinimumLogLevel(Logger.layer([logger], { mergeWithExisting: resolved.mergeWithExisting }), resolved.minimumLogLevel);
60
+ };
61
+ //# sourceMappingURL=Logger.js.map