@livestore/utils 0.0.0 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/.tsbuildinfo.json +1 -1
  2. package/dist/NoopTracer.d.ts +1 -0
  3. package/dist/NoopTracer.d.ts.map +1 -1
  4. package/dist/NoopTracer.js +1 -1
  5. package/dist/NoopTracer.js.map +1 -1
  6. package/dist/effect/Effect.d.ts +4 -0
  7. package/dist/effect/Effect.d.ts.map +1 -1
  8. package/dist/effect/Effect.js +8 -0
  9. package/dist/effect/Effect.js.map +1 -1
  10. package/dist/effect/Layer.d.ts +17 -3
  11. package/dist/effect/Layer.d.ts.map +1 -1
  12. package/dist/effect/Layer.js +8 -7
  13. package/dist/effect/Layer.js.map +1 -1
  14. package/dist/effect/ServiceContext.d.ts.map +1 -1
  15. package/dist/effect/ServiceContext.js +7 -7
  16. package/dist/effect/ServiceContext.js.map +1 -1
  17. package/dist/effect/index.d.ts +3 -2
  18. package/dist/effect/index.d.ts.map +1 -1
  19. package/dist/effect/index.js +3 -3
  20. package/dist/effect/index.js.map +1 -1
  21. package/package.json +12 -23
  22. package/src/NoopTracer.ts +1 -1
  23. package/src/effect/Effect.ts +18 -0
  24. package/src/effect/Layer.ts +42 -0
  25. package/src/effect/ServiceContext.ts +7 -9
  26. package/src/effect/index.ts +4 -4
  27. package/dist/binary.d.ts +0 -4
  28. package/dist/binary.d.ts.map +0 -1
  29. package/dist/binary.js +0 -23
  30. package/dist/binary.js.map +0 -1
  31. package/dist/effect/Debounce.d.ts +0 -5
  32. package/dist/effect/Debounce.d.ts.map +0 -1
  33. package/dist/effect/Debounce.js +0 -33
  34. package/dist/effect/Debounce.js.map +0 -1
  35. package/dist/effect/EndableQueue.d.ts +0 -11
  36. package/dist/effect/EndableQueue.d.ts.map +0 -1
  37. package/dist/effect/EndableQueue.js +0 -22
  38. package/dist/effect/EndableQueue.js.map +0 -1
  39. package/dist/effect/EnvVar.d.ts +0 -16
  40. package/dist/effect/EnvVar.d.ts.map +0 -1
  41. package/dist/effect/EnvVar.js +0 -21
  42. package/dist/effect/EnvVar.js.map +0 -1
  43. package/dist/effect/Gate.d.ts +0 -14
  44. package/dist/effect/Gate.d.ts.map +0 -1
  45. package/dist/effect/Gate.js +0 -17
  46. package/dist/effect/Gate.js.map +0 -1
  47. package/dist/effect/Otel/Dummy.d.ts +0 -5
  48. package/dist/effect/Otel/Dummy.d.ts.map +0 -1
  49. package/dist/effect/Otel/Dummy.js +0 -22
  50. package/dist/effect/Otel/Dummy.js.map +0 -1
  51. package/dist/effect/Otel/Meter.d.ts +0 -20
  52. package/dist/effect/Otel/Meter.d.ts.map +0 -1
  53. package/dist/effect/Otel/Meter.js +0 -76
  54. package/dist/effect/Otel/Meter.js.map +0 -1
  55. package/dist/effect/Otel/OtlpGrpc.d.ts +0 -6
  56. package/dist/effect/Otel/OtlpGrpc.d.ts.map +0 -1
  57. package/dist/effect/Otel/OtlpGrpc.js +0 -42
  58. package/dist/effect/Otel/OtlpGrpc.js.map +0 -1
  59. package/dist/effect/Otel/OtlpHttp.d.ts +0 -6
  60. package/dist/effect/Otel/OtlpHttp.d.ts.map +0 -1
  61. package/dist/effect/Otel/OtlpHttp.js +0 -42
  62. package/dist/effect/Otel/OtlpHttp.js.map +0 -1
  63. package/dist/effect/Otel/OtlpWebsocket.d.ts +0 -6
  64. package/dist/effect/Otel/OtlpWebsocket.d.ts.map +0 -1
  65. package/dist/effect/Otel/OtlpWebsocket.js +0 -42
  66. package/dist/effect/Otel/OtlpWebsocket.js.map +0 -1
  67. package/dist/effect/Otel/Span.d.ts +0 -32
  68. package/dist/effect/Otel/Span.d.ts.map +0 -1
  69. package/dist/effect/Otel/Span.js +0 -97
  70. package/dist/effect/Otel/Span.js.map +0 -1
  71. package/dist/effect/Otel/Tracer.d.ts +0 -15
  72. package/dist/effect/Otel/Tracer.d.ts.map +0 -1
  73. package/dist/effect/Otel/Tracer.js +0 -17
  74. package/dist/effect/Otel/Tracer.js.map +0 -1
  75. package/dist/effect/Otel/index.d.ts +0 -8
  76. package/dist/effect/Otel/index.d.ts.map +0 -1
  77. package/dist/effect/Otel/index.js +0 -9
  78. package/dist/effect/Otel/index.js.map +0 -1
  79. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.d.ts +0 -14
  80. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.d.ts.map +0 -1
  81. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.js +0 -15
  82. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.js.map +0 -1
  83. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.d.ts +0 -14
  84. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.d.ts.map +0 -1
  85. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.js +0 -15
  86. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.js.map +0 -1
  87. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.d.ts +0 -19
  88. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.d.ts.map +0 -1
  89. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.js +0 -17
  90. package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.js.map +0 -1
  91. package/dist/effect/Otel/lib-metrics/MetricsProvider.d.ts +0 -10
  92. package/dist/effect/Otel/lib-metrics/MetricsProvider.d.ts.map +0 -1
  93. package/dist/effect/Otel/lib-metrics/MetricsProvider.js +0 -4
  94. package/dist/effect/Otel/lib-metrics/MetricsProvider.js.map +0 -1
  95. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.d.ts +0 -16
  96. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.d.ts.map +0 -1
  97. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.js +0 -39
  98. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.js.map +0 -1
  99. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.d.ts +0 -16
  100. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.d.ts.map +0 -1
  101. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.js +0 -39
  102. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.js.map +0 -1
  103. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.d.ts +0 -16
  104. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.d.ts.map +0 -1
  105. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.js +0 -39
  106. package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.js.map +0 -1
  107. package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.d.ts +0 -17
  108. package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.d.ts.map +0 -1
  109. package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.js +0 -27
  110. package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.js.map +0 -1
  111. package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.d.ts +0 -18
  112. package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.d.ts.map +0 -1
  113. package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.js +0 -31
  114. package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.js.map +0 -1
  115. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.d.ts +0 -19
  116. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.d.ts.map +0 -1
  117. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.js +0 -36
  118. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.js.map +0 -1
  119. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.d.ts +0 -19
  120. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.d.ts.map +0 -1
  121. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.js +0 -36
  122. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.js.map +0 -1
  123. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.d.ts +0 -9
  124. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.d.ts.map +0 -1
  125. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.js +0 -29
  126. package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.js.map +0 -1
  127. package/dist/effect/Otel/lib-tracer/SimpleProcessor.d.ts +0 -19
  128. package/dist/effect/Otel/lib-tracer/SimpleProcessor.d.ts.map +0 -1
  129. package/dist/effect/Otel/lib-tracer/SimpleProcessor.js +0 -25
  130. package/dist/effect/Otel/lib-tracer/SimpleProcessor.js.map +0 -1
  131. package/dist/effect/Otel/lib-tracer/TracerProvider.d.ts +0 -10
  132. package/dist/effect/Otel/lib-tracer/TracerProvider.d.ts.map +0 -1
  133. package/dist/effect/Otel/lib-tracer/TracerProvider.js +0 -7
  134. package/dist/effect/Otel/lib-tracer/TracerProvider.js.map +0 -1
  135. package/dist/effect/Otel/lib-tracer/WebProvider.d.ts +0 -18
  136. package/dist/effect/Otel/lib-tracer/WebProvider.d.ts.map +0 -1
  137. package/dist/effect/Otel/lib-tracer/WebProvider.js +0 -25
  138. package/dist/effect/Otel/lib-tracer/WebProvider.js.map +0 -1
  139. package/dist/effect/ReadonlyArray.d.ts +0 -4
  140. package/dist/effect/ReadonlyArray.d.ts.map +0 -1
  141. package/dist/effect/ReadonlyArray.js +0 -11
  142. package/dist/effect/ReadonlyArray.js.map +0 -1
  143. package/dist/effect/RequestResolver.d.ts +0 -11
  144. package/dist/effect/RequestResolver.d.ts.map +0 -1
  145. package/dist/effect/RequestResolver.js +0 -18
  146. package/dist/effect/RequestResolver.js.map +0 -1
  147. package/dist/effect/STM.d.ts +0 -3
  148. package/dist/effect/STM.d.ts.map +0 -1
  149. package/dist/effect/STM.js +0 -3
  150. package/dist/effect/STM.js.map +0 -1
  151. package/dist/effect/Scheduler.d.ts +0 -49
  152. package/dist/effect/Scheduler.d.ts.map +0 -1
  153. package/dist/effect/Scheduler.js +0 -168
  154. package/dist/effect/Scheduler.js.map +0 -1
  155. package/dist/effect/Schema/SchemaHash.d.ts +0 -3
  156. package/dist/effect/Schema/SchemaHash.d.ts.map +0 -1
  157. package/dist/effect/Schema/SchemaHash.js +0 -15
  158. package/dist/effect/Schema/SchemaHash.js.map +0 -1
  159. package/dist/effect/Schema/SchemaHash.test.d.ts +0 -2
  160. package/dist/effect/Schema/SchemaHash.test.d.ts.map +0 -1
  161. package/dist/effect/Schema/SchemaHash.test.js +0 -13
  162. package/dist/effect/Schema/SchemaHash.test.js.map +0 -1
  163. package/dist/effect/Schema/SchemaJsonWrapper.d.ts +0 -11
  164. package/dist/effect/Schema/SchemaJsonWrapper.d.ts.map +0 -1
  165. package/dist/effect/Schema/SchemaJsonWrapper.js +0 -38
  166. package/dist/effect/Schema/SchemaJsonWrapper.js.map +0 -1
  167. package/dist/effect/Schema/SchemaJsonWrapper.test.d.ts +0 -2
  168. package/dist/effect/Schema/SchemaJsonWrapper.test.d.ts.map +0 -1
  169. package/dist/effect/Schema/SchemaJsonWrapper.test.js +0 -42
  170. package/dist/effect/Schema/SchemaJsonWrapper.test.js.map +0 -1
  171. package/dist/effect/Schema/index.d.ts +0 -15
  172. package/dist/effect/Schema/index.d.ts.map +0 -1
  173. package/dist/effect/Schema/index.js +0 -14
  174. package/dist/effect/Schema/index.js.map +0 -1
  175. package/dist/effect/SmartQueue.d.ts +0 -38
  176. package/dist/effect/SmartQueue.d.ts.map +0 -1
  177. package/dist/effect/SmartQueue.js +0 -123
  178. package/dist/effect/SmartQueue.js.map +0 -1
  179. package/dist/effect/Stream/chainSwitch.d.ts +0 -3
  180. package/dist/effect/Stream/chainSwitch.d.ts.map +0 -1
  181. package/dist/effect/Stream/chainSwitch.js +0 -48
  182. package/dist/effect/Stream/chainSwitch.js.map +0 -1
  183. package/dist/effect/Stream/index.d.ts +0 -37
  184. package/dist/effect/Stream/index.d.ts.map +0 -1
  185. package/dist/effect/Stream/index.js +0 -82
  186. package/dist/effect/Stream/index.js.map +0 -1
  187. package/dist/effect/SubscriptionRef.d.ts +0 -10
  188. package/dist/effect/SubscriptionRef.d.ts.map +0 -1
  189. package/dist/effect/SubscriptionRef.js +0 -8
  190. package/dist/effect/SubscriptionRef.js.map +0 -1
  191. package/dist/effect/TimeoutGate.d.ts +0 -13
  192. package/dist/effect/TimeoutGate.d.ts.map +0 -1
  193. package/dist/effect/TimeoutGate.js +0 -41
  194. package/dist/effect/TimeoutGate.js.map +0 -1
  195. package/dist/effect/WebCrypto.d.ts +0 -18
  196. package/dist/effect/WebCrypto.d.ts.map +0 -1
  197. package/dist/effect/WebCrypto.js +0 -56
  198. package/dist/effect/WebCrypto.js.map +0 -1
  199. package/dist/effect/WebLock.d.ts +0 -5
  200. package/dist/effect/WebLock.d.ts.map +0 -1
  201. package/dist/effect/WebLock.js +0 -20
  202. package/dist/effect/WebLock.js.map +0 -1
  203. package/dist/effect/browser.d.ts +0 -19
  204. package/dist/effect/browser.d.ts.map +0 -1
  205. package/dist/effect/browser.js +0 -82
  206. package/dist/effect/browser.js.map +0 -1
  207. package/dist/effect/fetch.d.ts +0 -89
  208. package/dist/effect/fetch.d.ts.map +0 -1
  209. package/dist/effect/fetch.js +0 -142
  210. package/dist/effect/fetch.js.map +0 -1
  211. package/dist/single-item.d.ts +0 -8
  212. package/dist/single-item.d.ts.map +0 -1
  213. package/dist/single-item.js +0 -9
  214. package/dist/single-item.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -2
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -2
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/types/json.d.ts +0 -27
  220. package/dist/types/json.d.ts.map +0 -1
  221. package/dist/types/json.js +0 -2
  222. package/dist/types/json.js.map +0 -1
  223. package/src/effect/Otel/Dummy.ts +0 -32
  224. package/src/effect/Otel/Meter.ts +0 -145
  225. package/src/effect/Otel/OtlpGrpc.ts +0 -75
  226. package/src/effect/Otel/OtlpHttp.ts +0 -75
  227. package/src/effect/Otel/OtlpWebsocket.ts +0 -75
  228. package/src/effect/Otel/Span.ts +0 -222
  229. package/src/effect/Otel/Tracer.ts +0 -30
  230. package/src/effect/Otel/index.ts +0 -8
  231. package/src/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.ts +0 -39
  232. package/src/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.ts +0 -39
  233. package/src/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.ts +0 -47
  234. package/src/effect/Otel/lib-metrics/MetricsProvider.ts +0 -12
  235. package/src/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.ts +0 -77
  236. package/src/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.ts +0 -77
  237. package/src/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.ts +0 -80
  238. package/src/effect/Otel/lib-metrics/PeriodicMetricsProvider.ts +0 -55
  239. package/src/effect/Otel/lib-tracer/BatchSpanProcessor.ts +0 -58
  240. package/src/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.ts +0 -64
  241. package/src/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.ts +0 -64
  242. package/src/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.ts +0 -38
  243. package/src/effect/Otel/lib-tracer/README.md +0 -1
  244. package/src/effect/Otel/lib-tracer/SimpleProcessor.ts +0 -46
  245. package/src/effect/Otel/lib-tracer/TracerProvider.ts +0 -16
  246. package/src/effect/Otel/lib-tracer/WebProvider.ts +0 -48
@@ -1,77 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import { identity, pipe } from '@effect/data/Function'
3
- import * as Option from '@effect/data/Option'
4
- import * as Effect from '@effect/io/Effect'
5
- import * as Layer from '@effect/io/Layer'
6
- import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
7
- import type { MeterProviderOptions } from '@opentelemetry/sdk-metrics'
8
- import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
9
-
10
- import { OTLPMetricExporterConfig } from './ExporterMetricsOltpHttp.js'
11
- import { MeterProviderSymbol, MetricsProvider } from './MetricsProvider.js'
12
-
13
- export const OTLPMetricsProviderConfigSymbol = Symbol.for('effect-otel/OTLPMetricsProviderConfig')
14
-
15
- export interface OTLPMetricsProviderConfig {
16
- readonly options: MeterProviderOptions
17
- }
18
-
19
- export const OTLPMetricsProviderConfig = Context.Tag<OTLPMetricsProviderConfig>(OTLPMetricsProviderConfigSymbol)
20
-
21
- export const LiveOTLPMetricsProviderConfig = (options: MeterProviderOptions) =>
22
- Layer.succeed(OTLPMetricsProviderConfig, { options })
23
-
24
- export const makeOTLPMetricsProvider = Effect.gen(function* ($) {
25
- const ctx = yield* $(Effect.context<never>())
26
-
27
- const options = pipe(
28
- Context.getOption(ctx, OTLPMetricsProviderConfig),
29
- Option.map((_) => _.options),
30
- Option.getOrUndefined,
31
- )
32
-
33
- const metricsProvider = yield* $(Effect.sync(() => new MeterProvider(options)))
34
-
35
- // TODO remove below
36
-
37
- // const metricsExporter = yield* _(exporter)
38
- const config = yield* $(OTLPMetricExporterConfig)
39
-
40
- const metricExporter = yield* $(
41
- Effect.sync(() => new OTLPMetricExporter(config)),
42
- // TODO re-enable
43
- Effect.acquireRelease((_p) =>
44
- pipe(
45
- // Effect.tryPromise(() => p.shutdown()),
46
- Effect.unit, // TODO without this I'm seeing a "`config` of undefined" bug
47
- Effect.orDie,
48
- ),
49
- ),
50
- )
51
-
52
- const metricReader = yield* $(
53
- Effect.sync(
54
- () =>
55
- new PeriodicExportingMetricReader({
56
- exporter: metricExporter,
57
- exportIntervalMillis: 1000, // TODO make configurable
58
- }),
59
- ),
60
- )
61
-
62
- yield* $(Effect.sync(() => metricsProvider.addMetricReader(metricReader)))
63
-
64
- // TODO remove above
65
-
66
- return identity<MetricsProvider>({
67
- [MeterProviderSymbol]: MeterProviderSymbol,
68
- metricsProvider,
69
- })
70
- })
71
-
72
- export const OTLPMetricsProviderLayer = Layer.scoped(MetricsProvider, makeOTLPMetricsProvider)
73
-
74
- export const OTLPMetricsProvider = (
75
- config?: MeterProviderOptions,
76
- ): Layer.Layer<OTLPMetricExporterConfig, never, MetricsProvider> =>
77
- config ? Layer.provide(LiveOTLPMetricsProviderConfig(config), OTLPMetricsProviderLayer) : OTLPMetricsProviderLayer
@@ -1,80 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import { identity, pipe } from '@effect/data/Function'
3
- import * as Option from '@effect/data/Option'
4
- import * as Effect from '@effect/io/Effect'
5
- import * as Layer from '@effect/io/Layer'
6
- // import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
7
- import type { MeterProviderOptions } from '@opentelemetry/sdk-metrics'
8
- import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
9
- import { WebsocketMetricExporter } from 'otel-websocket-exporter'
10
-
11
- import { OTLPMetricExporterConfig } from './ExporterMetricsOltpWebsocket.js'
12
- import { MeterProviderSymbol, MetricsProvider } from './MetricsProvider.js'
13
-
14
- export const OTLPMetricsProviderConfigSymbol = Symbol.for('effect-otel/OTLPMetricsProviderConfig')
15
-
16
- export interface OTLPMetricsProviderConfig {
17
- readonly options: MeterProviderOptions
18
- }
19
-
20
- export const OTLPMetricsProviderConfig = Context.Tag<OTLPMetricsProviderConfig>(OTLPMetricsProviderConfigSymbol)
21
-
22
- export const LiveOTLPMetricsProviderConfig = (options: MeterProviderOptions) =>
23
- Layer.succeed(OTLPMetricsProviderConfig, { options })
24
-
25
- export const makeOTLPMetricsProvider = Effect.gen(function* ($) {
26
- const ctx = yield* $(Effect.context<never>())
27
-
28
- const options = pipe(
29
- Context.getOption(ctx, OTLPMetricsProviderConfig),
30
- Option.map((_) => _.options),
31
- Option.getOrUndefined,
32
- )
33
-
34
- const metricsProvider = yield* $(Effect.sync(() => new MeterProvider(options)))
35
-
36
- // TODO remove below
37
-
38
- // const metricsExporter = yield* _(exporter)
39
- const { config } = yield* $(OTLPMetricExporterConfig)
40
-
41
- const metricExporter = yield* $(
42
- pipe(
43
- Effect.sync(() => new WebsocketMetricExporter(config)),
44
- // TODO re-enable
45
- Effect.acquireRelease((_p) =>
46
- pipe(
47
- // Effect.tryPromise(() => p.shutdown()),
48
- Effect.unit, // TODO without this I'm seeing a "`config` of undefined" bug
49
- Effect.orDie,
50
- ),
51
- ),
52
- ),
53
- )
54
-
55
- const metricReader = yield* $(
56
- Effect.sync(
57
- () =>
58
- new PeriodicExportingMetricReader({
59
- exporter: metricExporter,
60
- exportIntervalMillis: 1000, // TODO make configurable
61
- }),
62
- ),
63
- )
64
-
65
- yield* $(Effect.sync(() => metricsProvider.addMetricReader(metricReader)))
66
-
67
- // TODO remove above
68
-
69
- return identity<MetricsProvider>({
70
- [MeterProviderSymbol]: MeterProviderSymbol,
71
- metricsProvider,
72
- })
73
- })
74
-
75
- export const OTLPMetricsProviderLayer = Layer.scoped(MetricsProvider, makeOTLPMetricsProvider)
76
-
77
- export const OTLPMetricsProvider = (
78
- config?: MeterProviderOptions,
79
- ): Layer.Layer<OTLPMetricExporterConfig, never, MetricsProvider> =>
80
- config ? Layer.provide(LiveOTLPMetricsProviderConfig(config), OTLPMetricsProviderLayer) : OTLPMetricsProviderLayer
@@ -1,55 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import { identity } from '@effect/data/Function'
3
- import * as Effect from '@effect/io/Effect'
4
- import * as Layer from '@effect/io/Layer'
5
- import type * as Scope from '@effect/io/Scope'
6
- import type { MetricReader, PushMetricExporter } from '@opentelemetry/sdk-metrics'
7
- import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
8
-
9
- import { MetricsProvider } from './MetricsProvider.js'
10
-
11
- //
12
- // Span Processor
13
- //
14
-
15
- export const PeriodicMetricsProviderSymbol = Symbol.for('effect-otel/PeriodicMetricsProvider')
16
- export type PeriodicMetricsProviderSymbol = typeof PeriodicMetricsProviderSymbol
17
-
18
- export interface PeriodicMetricsProvider {
19
- readonly [PeriodicMetricsProviderSymbol]: PeriodicMetricsProviderSymbol
20
- readonly metricsExporter: PushMetricExporter
21
- readonly metricReader: MetricReader
22
- }
23
-
24
- export const makePeriodicMetricsProvider = <R, E, A extends PushMetricExporter>(
25
- exporter: Effect.Effect<R | Scope.Scope, E, A>,
26
- ) =>
27
- Effect.gen(function* ($) {
28
- const { metricsProvider } = yield* $(MetricsProvider)
29
-
30
- const metricsExporter = yield* $(exporter)
31
-
32
- const metricReader = yield* $(
33
- Effect.sync(
34
- () =>
35
- new PeriodicExportingMetricReader({
36
- exporter: metricsExporter,
37
- exportIntervalMillis: 1000, // TODO make configurable
38
- }),
39
- ),
40
- )
41
-
42
- yield* $(Effect.sync(() => metricsProvider.addMetricReader(metricReader)))
43
-
44
- return identity<PeriodicMetricsProvider>({
45
- [PeriodicMetricsProviderSymbol]: PeriodicMetricsProviderSymbol,
46
- metricsExporter,
47
- metricReader,
48
- })
49
- })
50
-
51
- export const PeriodicMetricsProviderTag = Context.Tag<PeriodicMetricsProvider>(PeriodicMetricsProviderSymbol)
52
-
53
- export const PeriodicMetricsProvider = <R, E, A extends PushMetricExporter>(
54
- exporter: Effect.Effect<R | Scope.Scope, E, A>,
55
- ) => Layer.scoped(PeriodicMetricsProviderTag, makePeriodicMetricsProvider(exporter))
@@ -1,58 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import { identity } from '@effect/data/Function'
3
- import * as Effect from '@effect/io/Effect'
4
- import * as Layer from '@effect/io/Layer'
5
- import type * as Scope from '@effect/io/Scope'
6
- import type { SpanExporter } from '@opentelemetry/sdk-trace-base'
7
- import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'
8
-
9
- import { TracerProvider } from './TracerProvider.js'
10
-
11
- //
12
- // Span Processor
13
- //
14
-
15
- export const BatchProcessorSymbol = Symbol.for('effect-otel/BatchProcessor')
16
- export type BatchProcessorSymbol = typeof BatchProcessorSymbol
17
-
18
- export interface BatchProcessor {
19
- readonly [BatchProcessorSymbol]: BatchProcessorSymbol
20
- readonly spanExporter: SpanExporter
21
- readonly spanProcessor: BatchSpanProcessor
22
- }
23
-
24
- export const makeBatchProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
25
- Effect.gen(function* ($) {
26
- const { tracerProvider } = yield* $(TracerProvider)
27
-
28
- const spanExporter = yield* $(exporter)
29
-
30
- const spanProcessor = yield* $(
31
- Effect.sync(
32
- () =>
33
- new BatchSpanProcessor(
34
- spanExporter,
35
- // TODO make this configurable
36
- {
37
- scheduledDelayMillis: 500,
38
- maxExportBatchSize: 1000,
39
- maxQueueSize: 10_000_000,
40
- exportTimeoutMillis: 1000 * 60 * 3, // 3 minutes
41
- },
42
- ),
43
- ),
44
- )
45
-
46
- yield* $(Effect.sync(() => tracerProvider.addSpanProcessor(spanProcessor)))
47
-
48
- return identity<BatchProcessor>({
49
- [BatchProcessorSymbol]: BatchProcessorSymbol,
50
- spanExporter,
51
- spanProcessor,
52
- })
53
- })
54
-
55
- export const BatchProcessorTag = Context.Tag<BatchProcessor>(BatchProcessorSymbol)
56
-
57
- export const BatchProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
58
- Layer.scoped(BatchProcessorTag, makeBatchProcessor(exporter))
@@ -1,64 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import * as Duration from '@effect/data/Duration'
3
- import { pipe } from '@effect/data/Function'
4
- import * as Effect from '@effect/io/Effect'
5
- import * as Layer from '@effect/io/Layer'
6
- import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api'
7
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'
8
- import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'
9
-
10
- import { SimpleProcessor } from './SimpleProcessor.js'
11
-
12
- export const OTLPTraceExporterConfigSymbol = Symbol.for('effect-otel/OTLPTraceExporterConfig')
13
- type OTLPTraceExporterConfigSymbol = typeof OTLPTraceExporterConfigSymbol
14
-
15
- export interface OTLPTraceExporterConfig {
16
- readonly [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol
17
- readonly config: OTLPExporterNodeConfigBase
18
- }
19
-
20
- export const OTLPTraceExporterConfig = Context.Tag<OTLPTraceExporterConfig>(OTLPTraceExporterConfigSymbol)
21
-
22
- export const makeOTLPTraceExporterConfigLayer = (config: OTLPExporterNodeConfigBase) =>
23
- Layer.succeed(OTLPTraceExporterConfig, { [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config })
24
-
25
- export const makeOTLPTraceExporterConfigLayerM = <R, E>(configEff: Effect.Effect<R, E, OTLPExporterNodeConfigBase>) =>
26
- Layer.effect(
27
- OTLPTraceExporterConfig,
28
- Effect.map(
29
- configEff,
30
- (config) => ({ [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config }) as const,
31
- ),
32
- )
33
- export const makeTracingSpanExporter = Effect.gen(function* ($) {
34
- const { config } = yield* $(OTLPTraceExporterConfig)
35
-
36
- diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR)
37
-
38
- const spanExporter = yield* $(
39
- pipe(
40
- Effect.sync(() => new OTLPTraceExporter(config)),
41
- // NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
42
- // way to shutdown.
43
- //
44
- // Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
45
- Effect.acquireRelease((p) =>
46
- Effect.gen(function* ($) {
47
- while (1) {
48
- yield* $(Effect.sleep(Duration.millis(0)))
49
- const promises = p['_sendingPromises'] as any[]
50
- if (promises.length > 0) {
51
- yield* $(Effect.exit(Effect.promise(() => Promise.all(promises))))
52
- } else {
53
- break
54
- }
55
- }
56
- }),
57
- ),
58
- ),
59
- )
60
-
61
- return spanExporter
62
- })
63
-
64
- export const LiveSimpleProcessor = SimpleProcessor(makeTracingSpanExporter)
@@ -1,64 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import * as Duration from '@effect/data/Duration'
3
- import { pipe } from '@effect/data/Function'
4
- import * as Effect from '@effect/io/Effect'
5
- import * as Layer from '@effect/io/Layer'
6
- import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api'
7
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
8
- import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'
9
-
10
- import { SimpleProcessor } from './SimpleProcessor.js'
11
-
12
- export const OTLPTraceExporterConfigSymbol = Symbol.for('effect-otel/OTLPTraceExporterConfig')
13
- type OTLPTraceExporterConfigSymbol = typeof OTLPTraceExporterConfigSymbol
14
-
15
- export interface OTLPTraceExporterConfig {
16
- readonly [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol
17
- readonly config: OTLPExporterNodeConfigBase
18
- }
19
-
20
- export const OTLPTraceExporterConfig = Context.Tag<OTLPTraceExporterConfig>(OTLPTraceExporterConfigSymbol)
21
-
22
- export const makeOTLPTraceExporterConfigLayer = (config: OTLPExporterNodeConfigBase) =>
23
- Layer.succeed(OTLPTraceExporterConfig, { [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config })
24
-
25
- export const makeOTLPTraceExporterConfigLayerM = <R, E>(configEff: Effect.Effect<R, E, OTLPExporterNodeConfigBase>) =>
26
- Layer.effect(
27
- OTLPTraceExporterConfig,
28
- Effect.map(
29
- configEff,
30
- (config) => ({ [OTLPTraceExporterConfigSymbol]: OTLPTraceExporterConfigSymbol, config }) as const,
31
- ),
32
- )
33
- export const makeTracingSpanExporter = Effect.gen(function* ($) {
34
- const { config } = yield* $(OTLPTraceExporterConfig)
35
-
36
- diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR)
37
-
38
- const spanExporter = yield* $(
39
- pipe(
40
- Effect.sync(() => new OTLPTraceExporter(config)),
41
- // NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
42
- // way to shutdown.
43
- //
44
- // Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
45
- Effect.acquireRelease((p) =>
46
- Effect.gen(function* ($) {
47
- while (1) {
48
- yield* $(Effect.sleep(Duration.millis(0)))
49
- const promises = p['_sendingPromises'] as any[]
50
- if (promises.length > 0) {
51
- yield* $(Effect.exit(Effect.promise(() => Promise.all(promises))))
52
- } else {
53
- break
54
- }
55
- }
56
- }),
57
- ),
58
- ),
59
- )
60
-
61
- return spanExporter
62
- })
63
-
64
- export const LiveSimpleProcessor = SimpleProcessor(makeTracingSpanExporter)
@@ -1,38 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import * as Duration from '@effect/data/Duration'
3
- import * as Effect from '@effect/io/Effect'
4
- import * as Layer from '@effect/io/Layer'
5
- import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'
6
- import { WebsocketTraceExporter } from 'otel-websocket-exporter'
7
-
8
- export const OTLPTraceExporterConfig = Context.Tag<OTLPExporterNodeConfigBase>('effect-otel/OTLPTraceExporterConfig')
9
-
10
- export const makeOTLPTraceExporterConfigLayer = (config: OTLPExporterNodeConfigBase) =>
11
- Layer.succeed(OTLPTraceExporterConfig, config)
12
-
13
- export const makeTracingSpanExporter = Effect.gen(function* ($) {
14
- const config = yield* $(OTLPTraceExporterConfig)
15
-
16
- const spanExporter = yield* $(
17
- Effect.sync(() => new WebsocketTraceExporter(config)),
18
- // NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
19
- // way to shutdown.
20
- //
21
- // Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
22
- Effect.acquireRelease((p) =>
23
- Effect.gen(function* ($) {
24
- while (1) {
25
- yield* $(Effect.sleep(Duration.millis(0)))
26
- const promises = p['_sendingPromises'] as any[]
27
- if (promises.length > 0) {
28
- yield* $(Effect.exit(Effect.promise(() => Promise.all(promises))))
29
- } else {
30
- break
31
- }
32
- }
33
- }),
34
- ),
35
- )
36
-
37
- return spanExporter
38
- })
@@ -1 +0,0 @@
1
- The files in this folder should be contributed back into effect/otel.
@@ -1,46 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import { identity } from '@effect/data/Function'
3
- import * as Effect from '@effect/io/Effect'
4
- import * as Layer from '@effect/io/Layer'
5
- import type * as Scope from '@effect/io/Scope'
6
- import type { SpanExporter } from '@opentelemetry/sdk-trace-base'
7
- import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
8
-
9
- import { TracerProvider } from './TracerProvider.js'
10
-
11
- //
12
- // Span Processor
13
- //
14
-
15
- export const SimpleProcessorSymbol = Symbol.for('effect-otel/SimpleProcessor')
16
- export type SimpleProcessorSymbol = typeof SimpleProcessorSymbol
17
-
18
- export interface SimpleProcessor {
19
- readonly [SimpleProcessorSymbol]: SimpleProcessorSymbol
20
- readonly spanExporter: SpanExporter
21
- readonly spanProcessor: SimpleSpanProcessor
22
- }
23
-
24
- export const makeSimpleProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
25
- Effect.gen(function* ($) {
26
- const { tracerProvider } = yield* $(TracerProvider)
27
-
28
- const spanExporter = yield* $(exporter)
29
-
30
- const spanProcessor = yield* $(Effect.sync(() => new SimpleSpanProcessor(spanExporter)))
31
-
32
- yield* $(Effect.sync(() => tracerProvider.addSpanProcessor(spanProcessor)))
33
-
34
- return identity<SimpleProcessor>({
35
- [SimpleProcessorSymbol]: SimpleProcessorSymbol,
36
- spanExporter,
37
- spanProcessor,
38
- })
39
- })
40
-
41
- export const SimpleProcessorTag = Context.Tag<SimpleProcessor>(SimpleProcessorSymbol)
42
-
43
- export const SimpleProcessor = <R, E, A extends SpanExporter>(exporter: Effect.Effect<R | Scope.Scope, E, A>) =>
44
- Layer.scoped(SimpleProcessorTag, makeSimpleProcessor(exporter))
45
-
46
- export const LiveConsoleSimple = SimpleProcessor(Effect.sync(() => new ConsoleSpanExporter()))
@@ -1,16 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'
3
-
4
- //
5
- // ets_tracing Provider
6
- //
7
-
8
- export const TracerProviderSymbol = Symbol.for('effect-otel/TracerProvider')
9
- export type TracerProviderSymbol = typeof TracerProviderSymbol
10
-
11
- export interface TracerProvider {
12
- readonly [TracerProviderSymbol]: TracerProviderSymbol
13
- readonly tracerProvider: BasicTracerProvider
14
- }
15
-
16
- export const TracerProvider = Context.Tag<TracerProvider>(TracerProviderSymbol)
@@ -1,48 +0,0 @@
1
- import * as Context from '@effect/data/Context'
2
- import { identity, pipe } from '@effect/data/Function'
3
- import * as Option from '@effect/data/Option'
4
- import * as Effect from '@effect/io/Effect'
5
- import * as Layer from '@effect/io/Layer'
6
- import type { WebTracerConfig } from '@opentelemetry/sdk-trace-web'
7
- import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'
8
-
9
- import { TracerProvider, TracerProviderSymbol } from './TracerProvider.js'
10
-
11
- export const WebTracerProviderConfigSymbol = Symbol.for('effect-otel/WebTracerProviderConfig')
12
- type WebTracerProviderConfigSymbol = typeof WebTracerProviderConfigSymbol
13
-
14
- export interface WebTracerProviderConfig {
15
- [WebTracerProviderConfigSymbol]: WebTracerProviderConfigSymbol
16
-
17
- readonly config: WebTracerConfig
18
- }
19
-
20
- export const WebTracerProviderConfig = Context.Tag<WebTracerProviderConfig>(WebTracerProviderConfigSymbol)
21
-
22
- export const LiveWebTracerProviderConfig = (config: WebTracerConfig) =>
23
- Layer.succeed(WebTracerProviderConfig, {
24
- [WebTracerProviderConfigSymbol]: WebTracerProviderConfigSymbol,
25
- config,
26
- })
27
-
28
- export const makeWebTracingProvider = Effect.gen(function* ($) {
29
- const ctx = yield* $(Effect.context<never>())
30
-
31
- const config = pipe(
32
- Context.getOption(ctx, WebTracerProviderConfig),
33
- Option.map((_) => _.config),
34
- Option.getOrUndefined,
35
- )
36
-
37
- const tracerProvider = yield* $(Effect.sync(() => new WebTracerProvider(config)))
38
-
39
- return identity<TracerProvider>({
40
- [TracerProviderSymbol]: TracerProviderSymbol,
41
- tracerProvider,
42
- })
43
- })
44
-
45
- export const WebProviderLayer = Layer.scoped(TracerProvider, makeWebTracingProvider)
46
-
47
- export const WebProvider = (config?: WebTracerConfig) =>
48
- config ? Layer.provide(LiveWebTracerProviderConfig(config), WebProviderLayer) : WebProviderLayer