@effect/opentelemetry 0.19.0 → 0.21.0

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 (37) hide show
  1. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.dev.js +30 -12
  2. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.mjs +2 -2
  3. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.prod.js +30 -12
  4. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.esm.js +21 -13
  5. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.dev.js +51 -24
  6. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.mjs +5 -2
  7. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.prod.js +51 -24
  8. package/Tracer/dist/effect-opentelemetry-Tracer.esm.js +22 -4
  9. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.mts +2 -0
  10. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.mts.map +1 -0
  11. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.ts +2 -0
  12. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.d.ts.map +1 -0
  13. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.dev.js +81 -0
  14. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.js +7 -0
  15. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.mjs +4 -0
  16. package/WebSdk/dist/effect-opentelemetry-WebSdk.cjs.prod.js +81 -0
  17. package/WebSdk/dist/effect-opentelemetry-WebSdk.esm.js +42 -0
  18. package/WebSdk/package.json +4 -0
  19. package/dist/declarations/src/NodeSdk.d.ts +18 -6
  20. package/dist/declarations/src/NodeSdk.d.ts.map +1 -1
  21. package/dist/declarations/src/Tracer.d.ts +20 -5
  22. package/dist/declarations/src/Tracer.d.ts.map +1 -1
  23. package/dist/declarations/src/WebSdk.d.ts +35 -0
  24. package/dist/declarations/src/WebSdk.d.ts.map +1 -0
  25. package/dist/declarations/src/index.d.ts +4 -0
  26. package/dist/declarations/src/index.d.ts.map +1 -1
  27. package/dist/effect-opentelemetry.cjs.dev.js +3 -0
  28. package/dist/effect-opentelemetry.cjs.mjs +2 -1
  29. package/dist/effect-opentelemetry.cjs.prod.js +3 -0
  30. package/dist/effect-opentelemetry.esm.js +2 -0
  31. package/internal/tracer.esm.js +26 -18
  32. package/package.json +28 -17
  33. package/src/NodeSdk.ts +60 -20
  34. package/src/Tracer.ts +23 -5
  35. package/src/WebSdk.ts +79 -0
  36. package/src/index.ts +5 -0
  37. package/src/internal/tracer.ts +47 -37
@@ -2,13 +2,25 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var sdkNode = require('@opentelemetry/sdk-node');
5
+ var sdkTraceNode = require('@opentelemetry/sdk-trace-node');
6
6
  var Effect = require('effect/Effect');
7
7
  var Layer = require('effect/Layer');
8
+ var Metrics_dist_effectOpentelemetryMetrics = require('../../Metrics/dist/effect-opentelemetry-Metrics.cjs.dev.js');
8
9
  var Resource_dist_effectOpentelemetryResource = require('../../Resource/dist/effect-opentelemetry-Resource.cjs.dev.js');
10
+ var Tracer_dist_effectOpentelemetryTracer = require('../../Tracer/dist/effect-opentelemetry-Tracer.cjs.dev.js');
11
+ require('@opentelemetry/api');
12
+ require('@opentelemetry/sdk-metrics');
13
+ require('effect/HashSet');
14
+ require('effect/Metric');
15
+ require('effect/MetricKeyType');
16
+ require('effect/MetricState');
17
+ require('effect/Option');
9
18
  require('@opentelemetry/resources');
10
19
  require('@opentelemetry/semantic-conventions');
11
20
  require('effect/Context');
21
+ require('effect/Cause');
22
+ require('effect/FiberRef');
23
+ require('effect/Tracer');
12
24
 
13
25
  function _interopNamespace(e) {
14
26
  if (e && e.__esModule) return e;
@@ -42,22 +54,28 @@ var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
42
54
 
43
55
  /**
44
56
  * @since 1.0.0
45
- * @category constructor
57
+ * @category layers
46
58
  */
47
- const config = config => config;
59
+ const layerTracerProvider = (processor, config) => Layer__namespace.scoped(Tracer_dist_effectOpentelemetryTracer.TracerProvider, Effect__namespace.flatMap(Resource_dist_effectOpentelemetryResource.Resource, resource => Effect__namespace.acquireRelease(Effect__namespace.sync(() => {
60
+ const provider = new sdkTraceNode.NodeTracerProvider({
61
+ ...(config ?? {}),
62
+ resource
63
+ });
64
+ provider.addSpanProcessor(processor);
65
+ return provider;
66
+ }), provider => Effect__namespace.promise(() => provider.shutdown()))));
48
67
 
49
68
  /**
50
69
  * @since 1.0.0
51
70
  * @category layer
52
71
  */
53
- const layer = config => Layer__namespace.scopedDiscard(Effect__namespace.acquireRelease(Effect__namespace.flatMap(Resource_dist_effectOpentelemetryResource.Resource, resource => Effect__namespace.sync(() => {
54
- const sdk = new sdkNode.NodeSDK({
55
- ...config(),
56
- resource
57
- });
58
- sdk.start();
59
- return sdk;
60
- })), sdk => Effect__namespace.promise(() => sdk.shutdown())));
72
+ const layer = evaluate => Layer__namespace.unwrapEffect(Effect__namespace.sync(() => {
73
+ const config = evaluate();
74
+ const ResourceLive = Resource_dist_effectOpentelemetryResource.layer(config.resource);
75
+ const TracerLive = config.spanProcessor ? Tracer_dist_effectOpentelemetryTracer.layer.pipe(Layer__namespace.use(layerTracerProvider(config.spanProcessor, config.tracerConfig))) : Layer__namespace.effectDiscard(Effect__namespace.unit);
76
+ const MetricsLive = config.metricReader ? Metrics_dist_effectOpentelemetryMetrics.layer(() => config.metricReader) : Layer__namespace.effectDiscard(Effect__namespace.unit);
77
+ return Layer__namespace.merge(TracerLive, MetricsLive).pipe(Layer__namespace.useMerge(ResourceLive));
78
+ }));
61
79
 
62
- exports.config = config;
63
80
  exports.layer = layer;
81
+ exports.layerTracerProvider = layerTracerProvider;
@@ -1,4 +1,4 @@
1
1
  export {
2
- config,
3
- layer
2
+ layer,
3
+ layerTracerProvider
4
4
  } from "./effect-opentelemetry-NodeSdk.cjs.js";
@@ -2,13 +2,25 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var sdkNode = require('@opentelemetry/sdk-node');
5
+ var sdkTraceNode = require('@opentelemetry/sdk-trace-node');
6
6
  var Effect = require('effect/Effect');
7
7
  var Layer = require('effect/Layer');
8
+ var Metrics_dist_effectOpentelemetryMetrics = require('../../Metrics/dist/effect-opentelemetry-Metrics.cjs.prod.js');
8
9
  var Resource_dist_effectOpentelemetryResource = require('../../Resource/dist/effect-opentelemetry-Resource.cjs.prod.js');
10
+ var Tracer_dist_effectOpentelemetryTracer = require('../../Tracer/dist/effect-opentelemetry-Tracer.cjs.prod.js');
11
+ require('@opentelemetry/api');
12
+ require('@opentelemetry/sdk-metrics');
13
+ require('effect/HashSet');
14
+ require('effect/Metric');
15
+ require('effect/MetricKeyType');
16
+ require('effect/MetricState');
17
+ require('effect/Option');
9
18
  require('@opentelemetry/resources');
10
19
  require('@opentelemetry/semantic-conventions');
11
20
  require('effect/Context');
21
+ require('effect/Cause');
22
+ require('effect/FiberRef');
23
+ require('effect/Tracer');
12
24
 
13
25
  function _interopNamespace(e) {
14
26
  if (e && e.__esModule) return e;
@@ -42,22 +54,28 @@ var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
42
54
 
43
55
  /**
44
56
  * @since 1.0.0
45
- * @category constructor
57
+ * @category layers
46
58
  */
47
- const config = config => config;
59
+ const layerTracerProvider = (processor, config) => Layer__namespace.scoped(Tracer_dist_effectOpentelemetryTracer.TracerProvider, Effect__namespace.flatMap(Resource_dist_effectOpentelemetryResource.Resource, resource => Effect__namespace.acquireRelease(Effect__namespace.sync(() => {
60
+ const provider = new sdkTraceNode.NodeTracerProvider({
61
+ ...(config ?? {}),
62
+ resource
63
+ });
64
+ provider.addSpanProcessor(processor);
65
+ return provider;
66
+ }), provider => Effect__namespace.promise(() => provider.shutdown()))));
48
67
 
49
68
  /**
50
69
  * @since 1.0.0
51
70
  * @category layer
52
71
  */
53
- const layer = config => Layer__namespace.scopedDiscard(Effect__namespace.acquireRelease(Effect__namespace.flatMap(Resource_dist_effectOpentelemetryResource.Resource, resource => Effect__namespace.sync(() => {
54
- const sdk = new sdkNode.NodeSDK({
55
- ...config(),
56
- resource
57
- });
58
- sdk.start();
59
- return sdk;
60
- })), sdk => Effect__namespace.promise(() => sdk.shutdown())));
72
+ const layer = evaluate => Layer__namespace.unwrapEffect(Effect__namespace.sync(() => {
73
+ const config = evaluate();
74
+ const ResourceLive = Resource_dist_effectOpentelemetryResource.layer(config.resource);
75
+ const TracerLive = config.spanProcessor ? Tracer_dist_effectOpentelemetryTracer.layer.pipe(Layer__namespace.use(layerTracerProvider(config.spanProcessor, config.tracerConfig))) : Layer__namespace.effectDiscard(Effect__namespace.unit);
76
+ const MetricsLive = config.metricReader ? Metrics_dist_effectOpentelemetryMetrics.layer(() => config.metricReader) : Layer__namespace.effectDiscard(Effect__namespace.unit);
77
+ return Layer__namespace.merge(TracerLive, MetricsLive).pipe(Layer__namespace.useMerge(ResourceLive));
78
+ }));
61
79
 
62
- exports.config = config;
63
80
  exports.layer = layer;
81
+ exports.layerTracerProvider = layerTracerProvider;
@@ -1,7 +1,9 @@
1
- import { NodeSDK } from '@opentelemetry/sdk-node';
1
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
2
2
  import * as Effect from 'effect/Effect';
3
3
  import * as Layer from 'effect/Layer';
4
- import { Resource } from '../../Resource/dist/effect-opentelemetry-Resource.esm.js';
4
+ import { layer as layer$3 } from '../../Metrics/dist/effect-opentelemetry-Metrics.esm.js';
5
+ import { Resource, layer as layer$1 } from '../../Resource/dist/effect-opentelemetry-Resource.esm.js';
6
+ import { TracerProvider, layer as layer$2 } from '../../Tracer/dist/effect-opentelemetry-Tracer.esm.js';
5
7
 
6
8
  /**
7
9
  * @since 1.0.0
@@ -14,21 +16,27 @@ import { Resource } from '../../Resource/dist/effect-opentelemetry-Resource.esm.
14
16
 
15
17
  /**
16
18
  * @since 1.0.0
17
- * @category constructor
19
+ * @category layers
18
20
  */
19
- const config = config => config;
21
+ const layerTracerProvider = (processor, config) => Layer.scoped(TracerProvider, Effect.flatMap(Resource, resource => Effect.acquireRelease(Effect.sync(() => {
22
+ const provider = new NodeTracerProvider({
23
+ ...(config ?? {}),
24
+ resource
25
+ });
26
+ provider.addSpanProcessor(processor);
27
+ return provider;
28
+ }), provider => Effect.promise(() => provider.shutdown()))));
20
29
 
21
30
  /**
22
31
  * @since 1.0.0
23
32
  * @category layer
24
33
  */
25
- const layer = config => Layer.scopedDiscard(Effect.acquireRelease(Effect.flatMap(Resource, resource => Effect.sync(() => {
26
- const sdk = new NodeSDK({
27
- ...config(),
28
- resource
29
- });
30
- sdk.start();
31
- return sdk;
32
- })), sdk => Effect.promise(() => sdk.shutdown())));
34
+ const layer = evaluate => Layer.unwrapEffect(Effect.sync(() => {
35
+ const config = evaluate();
36
+ const ResourceLive = layer$1(config.resource);
37
+ const TracerLive = config.spanProcessor ? layer$2.pipe(Layer.use(layerTracerProvider(config.spanProcessor, config.tracerConfig))) : Layer.effectDiscard(Effect.unit);
38
+ const MetricsLive = config.metricReader ? layer$3(() => config.metricReader) : Layer.effectDiscard(Effect.unit);
39
+ return Layer.merge(TracerLive, MetricsLive).pipe(Layer.useMerge(ResourceLive));
40
+ }));
33
41
 
34
- export { config, layer };
42
+ export { layer, layerTracerProvider };
@@ -7,11 +7,9 @@ var Cause = require('effect/Cause');
7
7
  var Context = require('effect/Context');
8
8
  var Effect = require('effect/Effect');
9
9
  var FiberRef = require('effect/FiberRef');
10
- var FiberRefs = require('effect/FiberRefs');
11
10
  var Layer = require('effect/Layer');
12
- var List = require('effect/List');
13
11
  var Option = require('effect/Option');
14
- var Tracer = require('effect/Tracer');
12
+ var EffectTracer = require('effect/Tracer');
15
13
  var Resource_dist_effectOpentelemetryResource = require('../../Resource/dist/effect-opentelemetry-Resource.cjs.dev.js');
16
14
  require('@opentelemetry/resources');
17
15
  require('@opentelemetry/semantic-conventions');
@@ -39,22 +37,19 @@ var Cause__namespace = /*#__PURE__*/_interopNamespace(Cause);
39
37
  var Context__namespace = /*#__PURE__*/_interopNamespace(Context);
40
38
  var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
41
39
  var FiberRef__namespace = /*#__PURE__*/_interopNamespace(FiberRef);
42
- var FiberRefs__namespace = /*#__PURE__*/_interopNamespace(FiberRefs);
43
40
  var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
44
- var List__namespace = /*#__PURE__*/_interopNamespace(List);
45
41
  var Option__namespace = /*#__PURE__*/_interopNamespace(Option);
46
- var Tracer__namespace = /*#__PURE__*/_interopNamespace(Tracer);
42
+ var EffectTracer__namespace = /*#__PURE__*/_interopNamespace(EffectTracer);
47
43
 
48
44
  /** @internal */
49
45
  class OtelSpan {
50
46
  _tag = "Span";
51
47
  attributes = new Map();
52
- constructor(contextApi, tracer, name, parent, context, links, sampled, startTime) {
48
+ constructor(contextApi, tracer, name, parent, context, links, startTime) {
53
49
  this.name = name;
54
50
  this.parent = parent;
55
51
  this.context = context;
56
52
  this.links = links;
57
- this.sampled = sampled;
58
53
  const active = contextApi.active();
59
54
  this.span = tracer.startSpan(name, {
60
55
  startTime: nanosToHrTime(startTime),
@@ -70,6 +65,7 @@ class OtelSpan {
70
65
  _tag: "Started",
71
66
  startTime
72
67
  };
68
+ this.sampled = (spanContext.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED;
73
69
  }
74
70
  attribute(key, value) {
75
71
  this.span.setAttribute(key, unknownToAttributeValue(value));
@@ -109,24 +105,25 @@ class OtelSpan {
109
105
  }
110
106
 
111
107
  /** @internal */
112
- const OtelTracer$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/OtelTracer");
108
+ const TracerProvider$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/TracerProvider");
113
109
 
114
110
  /** @internal */
115
- const make$1 = /*#__PURE__*/Effect__namespace.map(OtelTracer$1, tracer => Tracer__namespace.make({
116
- span(name, parent, context, links, sampled, startTime) {
117
- return new OtelSpan(OtelApi__namespace.context, tracer, name, parent, context, links, sampled, startTime);
111
+ const Tracer$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/Tracer");
112
+
113
+ /** @internal */
114
+ const make$1 = /*#__PURE__*/Effect__namespace.map(Tracer$1, tracer => EffectTracer__namespace.make({
115
+ span(name, parent, context, links, startTime) {
116
+ return new OtelSpan(OtelApi__namespace.context, tracer, name, parent, context, links, startTime);
118
117
  },
119
118
  context(execution, fiber) {
120
- const currentSpan = Option__namespace.flatMap(FiberRefs__namespace.get(fiber.getFiberRefs(), FiberRef__namespace.currentTracerSpan), List__namespace.head);
121
- if (currentSpan._tag === "None") {
119
+ const currentSpan = fiber.getFiberRef(FiberRef__namespace.currentContext).unsafeMap.get(EffectTracer__namespace.ParentSpan);
120
+ if (currentSpan === undefined) {
122
121
  return execution();
123
122
  }
124
- return OtelApi__namespace.context.with(populateContext(OtelApi__namespace.context.active(), currentSpan.value), execution);
123
+ return OtelApi__namespace.context.with(populateContext(OtelApi__namespace.context.active(), currentSpan), execution);
125
124
  }
126
125
  }));
127
126
 
128
- /** @internal */
129
-
130
127
  /** @internal */
131
128
  const traceFlagsTag = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/traceFlags");
132
129
 
@@ -151,7 +148,7 @@ const makeExternalSpan$1 = options => {
151
148
  _tag: "ExternalSpan",
152
149
  traceId: options.traceId,
153
150
  spanId: options.spanId,
154
- sampled: options.traceFlags ? options.traceFlags === OtelApi__namespace.TraceFlags.SAMPLED : true,
151
+ sampled: options.traceFlags ? (options.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED : true,
155
152
  context
156
153
  };
157
154
  };
@@ -160,10 +157,19 @@ const makeExternalSpan$1 = options => {
160
157
  const currentOtelSpan$1 = /*#__PURE__*/Effect__namespace.map(Effect__namespace.currentSpan, span => Option__namespace.map(Option__namespace.filter(span, span => "span" in span), _ => _.span));
161
158
 
162
159
  /** @internal */
163
- const layerOtelTracer$1 = /*#__PURE__*/Layer__namespace.effect(OtelTracer$1, /*#__PURE__*/Effect__namespace.flatMap(Resource_dist_effectOpentelemetryResource.Resource, resource => Effect__namespace.sync(() => OtelApi__namespace.trace.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
160
+ const layerGlobalProvider = /*#__PURE__*/Layer__namespace.sync(TracerProvider$1, () => OtelApi__namespace.trace.getTracerProvider());
164
161
 
165
162
  /** @internal */
166
- const layer$1 = /*#__PURE__*/Layer__namespace.provide(layerOtelTracer$1, /*#__PURE__*/Layer__namespace.unwrapEffect( /*#__PURE__*/Effect__namespace.map(make$1, Layer__namespace.setTracer)));
163
+ const layerTracer$1 = /*#__PURE__*/Layer__namespace.effect(Tracer$1, /*#__PURE__*/Effect__namespace.flatMap( /*#__PURE__*/Effect__namespace.zip(Resource_dist_effectOpentelemetryResource.Resource, TracerProvider$1), ([resource, provider]) => Effect__namespace.sync(() => provider.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
164
+
165
+ /** @internal */
166
+ const layerGlobalTracer$1 = /*#__PURE__*/layerTracer$1.pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalProvider));
167
+
168
+ /** @internal */
169
+ const layerGlobal$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalTracer$1));
170
+
171
+ /** @internal */
172
+ const layer$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerTracer$1));
167
173
 
168
174
  // -------------------------------------------------------------------------------------
169
175
  // utils
@@ -236,13 +242,31 @@ const layer = layer$1;
236
242
  * @since 1.0.0
237
243
  * @category layers
238
244
  */
239
- const layerOtelTracer = layerOtelTracer$1;
245
+ const layerGlobal = layerGlobal$1;
246
+
247
+ /**
248
+ * @since 1.0.0
249
+ * @category layers
250
+ */
251
+ const layerTracer = layerTracer$1;
252
+
253
+ /**
254
+ * @since 1.0.0
255
+ * @category layers
256
+ */
257
+ const layerGlobalTracer = layerGlobalTracer$1;
258
+
259
+ /**
260
+ * @since 1.0.0
261
+ * @category tags
262
+ */
263
+ const TracerProvider = TracerProvider$1;
240
264
 
241
265
  /**
242
266
  * @since 1.0.0
243
267
  * @category tags
244
268
  */
245
- const OtelTracer = OtelTracer$1;
269
+ const Tracer = Tracer$1;
246
270
 
247
271
  /**
248
272
  * @since 1.0.0
@@ -256,11 +280,14 @@ const TraceFlags = traceFlagsTag;
256
280
  */
257
281
  const TraceState = traceStateTag;
258
282
 
259
- exports.OtelTracer = OtelTracer;
260
283
  exports.TraceFlags = TraceFlags;
261
284
  exports.TraceState = TraceState;
285
+ exports.Tracer = Tracer;
286
+ exports.TracerProvider = TracerProvider;
262
287
  exports.currentOtelSpan = currentOtelSpan;
263
288
  exports.layer = layer;
264
- exports.layerOtelTracer = layerOtelTracer;
289
+ exports.layerGlobal = layerGlobal;
290
+ exports.layerGlobalTracer = layerGlobalTracer;
291
+ exports.layerTracer = layerTracer;
265
292
  exports.make = make;
266
293
  exports.makeExternalSpan = makeExternalSpan;
@@ -1,10 +1,13 @@
1
1
  export {
2
- OtelTracer,
3
2
  TraceFlags,
4
3
  TraceState,
4
+ Tracer,
5
+ TracerProvider,
5
6
  currentOtelSpan,
6
7
  layer,
7
- layerOtelTracer,
8
+ layerGlobal,
9
+ layerGlobalTracer,
10
+ layerTracer,
8
11
  make,
9
12
  makeExternalSpan
10
13
  } from "./effect-opentelemetry-Tracer.cjs.js";
@@ -7,11 +7,9 @@ var Cause = require('effect/Cause');
7
7
  var Context = require('effect/Context');
8
8
  var Effect = require('effect/Effect');
9
9
  var FiberRef = require('effect/FiberRef');
10
- var FiberRefs = require('effect/FiberRefs');
11
10
  var Layer = require('effect/Layer');
12
- var List = require('effect/List');
13
11
  var Option = require('effect/Option');
14
- var Tracer = require('effect/Tracer');
12
+ var EffectTracer = require('effect/Tracer');
15
13
  var Resource_dist_effectOpentelemetryResource = require('../../Resource/dist/effect-opentelemetry-Resource.cjs.prod.js');
16
14
  require('@opentelemetry/resources');
17
15
  require('@opentelemetry/semantic-conventions');
@@ -39,22 +37,19 @@ var Cause__namespace = /*#__PURE__*/_interopNamespace(Cause);
39
37
  var Context__namespace = /*#__PURE__*/_interopNamespace(Context);
40
38
  var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
41
39
  var FiberRef__namespace = /*#__PURE__*/_interopNamespace(FiberRef);
42
- var FiberRefs__namespace = /*#__PURE__*/_interopNamespace(FiberRefs);
43
40
  var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
44
- var List__namespace = /*#__PURE__*/_interopNamespace(List);
45
41
  var Option__namespace = /*#__PURE__*/_interopNamespace(Option);
46
- var Tracer__namespace = /*#__PURE__*/_interopNamespace(Tracer);
42
+ var EffectTracer__namespace = /*#__PURE__*/_interopNamespace(EffectTracer);
47
43
 
48
44
  /** @internal */
49
45
  class OtelSpan {
50
46
  _tag = "Span";
51
47
  attributes = new Map();
52
- constructor(contextApi, tracer, name, parent, context, links, sampled, startTime) {
48
+ constructor(contextApi, tracer, name, parent, context, links, startTime) {
53
49
  this.name = name;
54
50
  this.parent = parent;
55
51
  this.context = context;
56
52
  this.links = links;
57
- this.sampled = sampled;
58
53
  const active = contextApi.active();
59
54
  this.span = tracer.startSpan(name, {
60
55
  startTime: nanosToHrTime(startTime),
@@ -70,6 +65,7 @@ class OtelSpan {
70
65
  _tag: "Started",
71
66
  startTime
72
67
  };
68
+ this.sampled = (spanContext.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED;
73
69
  }
74
70
  attribute(key, value) {
75
71
  this.span.setAttribute(key, unknownToAttributeValue(value));
@@ -109,24 +105,25 @@ class OtelSpan {
109
105
  }
110
106
 
111
107
  /** @internal */
112
- const OtelTracer$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/OtelTracer");
108
+ const TracerProvider$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/TracerProvider");
113
109
 
114
110
  /** @internal */
115
- const make$1 = /*#__PURE__*/Effect__namespace.map(OtelTracer$1, tracer => Tracer__namespace.make({
116
- span(name, parent, context, links, sampled, startTime) {
117
- return new OtelSpan(OtelApi__namespace.context, tracer, name, parent, context, links, sampled, startTime);
111
+ const Tracer$1 = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/Tracer/Tracer");
112
+
113
+ /** @internal */
114
+ const make$1 = /*#__PURE__*/Effect__namespace.map(Tracer$1, tracer => EffectTracer__namespace.make({
115
+ span(name, parent, context, links, startTime) {
116
+ return new OtelSpan(OtelApi__namespace.context, tracer, name, parent, context, links, startTime);
118
117
  },
119
118
  context(execution, fiber) {
120
- const currentSpan = Option__namespace.flatMap(FiberRefs__namespace.get(fiber.getFiberRefs(), FiberRef__namespace.currentTracerSpan), List__namespace.head);
121
- if (currentSpan._tag === "None") {
119
+ const currentSpan = fiber.getFiberRef(FiberRef__namespace.currentContext).unsafeMap.get(EffectTracer__namespace.ParentSpan);
120
+ if (currentSpan === undefined) {
122
121
  return execution();
123
122
  }
124
- return OtelApi__namespace.context.with(populateContext(OtelApi__namespace.context.active(), currentSpan.value), execution);
123
+ return OtelApi__namespace.context.with(populateContext(OtelApi__namespace.context.active(), currentSpan), execution);
125
124
  }
126
125
  }));
127
126
 
128
- /** @internal */
129
-
130
127
  /** @internal */
131
128
  const traceFlagsTag = /*#__PURE__*/Context__namespace.Tag("@effect/opentelemetry/traceFlags");
132
129
 
@@ -151,7 +148,7 @@ const makeExternalSpan$1 = options => {
151
148
  _tag: "ExternalSpan",
152
149
  traceId: options.traceId,
153
150
  spanId: options.spanId,
154
- sampled: options.traceFlags ? options.traceFlags === OtelApi__namespace.TraceFlags.SAMPLED : true,
151
+ sampled: options.traceFlags ? (options.traceFlags & OtelApi__namespace.TraceFlags.SAMPLED) === OtelApi__namespace.TraceFlags.SAMPLED : true,
155
152
  context
156
153
  };
157
154
  };
@@ -160,10 +157,19 @@ const makeExternalSpan$1 = options => {
160
157
  const currentOtelSpan$1 = /*#__PURE__*/Effect__namespace.map(Effect__namespace.currentSpan, span => Option__namespace.map(Option__namespace.filter(span, span => "span" in span), _ => _.span));
161
158
 
162
159
  /** @internal */
163
- const layerOtelTracer$1 = /*#__PURE__*/Layer__namespace.effect(OtelTracer$1, /*#__PURE__*/Effect__namespace.flatMap(Resource_dist_effectOpentelemetryResource.Resource, resource => Effect__namespace.sync(() => OtelApi__namespace.trace.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
160
+ const layerGlobalProvider = /*#__PURE__*/Layer__namespace.sync(TracerProvider$1, () => OtelApi__namespace.trace.getTracerProvider());
164
161
 
165
162
  /** @internal */
166
- const layer$1 = /*#__PURE__*/Layer__namespace.provide(layerOtelTracer$1, /*#__PURE__*/Layer__namespace.unwrapEffect( /*#__PURE__*/Effect__namespace.map(make$1, Layer__namespace.setTracer)));
163
+ const layerTracer$1 = /*#__PURE__*/Layer__namespace.effect(Tracer$1, /*#__PURE__*/Effect__namespace.flatMap( /*#__PURE__*/Effect__namespace.zip(Resource_dist_effectOpentelemetryResource.Resource, TracerProvider$1), ([resource, provider]) => Effect__namespace.sync(() => provider.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
164
+
165
+ /** @internal */
166
+ const layerGlobalTracer$1 = /*#__PURE__*/layerTracer$1.pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalProvider));
167
+
168
+ /** @internal */
169
+ const layerGlobal$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerGlobalTracer$1));
170
+
171
+ /** @internal */
172
+ const layer$1 = /*#__PURE__*/Layer__namespace.unwrapEffect(Effect__namespace.map(make$1, Layer__namespace.setTracer)).pipe( /*#__PURE__*/Layer__namespace.use(layerTracer$1));
167
173
 
168
174
  // -------------------------------------------------------------------------------------
169
175
  // utils
@@ -236,13 +242,31 @@ const layer = layer$1;
236
242
  * @since 1.0.0
237
243
  * @category layers
238
244
  */
239
- const layerOtelTracer = layerOtelTracer$1;
245
+ const layerGlobal = layerGlobal$1;
246
+
247
+ /**
248
+ * @since 1.0.0
249
+ * @category layers
250
+ */
251
+ const layerTracer = layerTracer$1;
252
+
253
+ /**
254
+ * @since 1.0.0
255
+ * @category layers
256
+ */
257
+ const layerGlobalTracer = layerGlobalTracer$1;
258
+
259
+ /**
260
+ * @since 1.0.0
261
+ * @category tags
262
+ */
263
+ const TracerProvider = TracerProvider$1;
240
264
 
241
265
  /**
242
266
  * @since 1.0.0
243
267
  * @category tags
244
268
  */
245
- const OtelTracer = OtelTracer$1;
269
+ const Tracer = Tracer$1;
246
270
 
247
271
  /**
248
272
  * @since 1.0.0
@@ -256,11 +280,14 @@ const TraceFlags = traceFlagsTag;
256
280
  */
257
281
  const TraceState = traceStateTag;
258
282
 
259
- exports.OtelTracer = OtelTracer;
260
283
  exports.TraceFlags = TraceFlags;
261
284
  exports.TraceState = TraceState;
285
+ exports.Tracer = Tracer;
286
+ exports.TracerProvider = TracerProvider;
262
287
  exports.currentOtelSpan = currentOtelSpan;
263
288
  exports.layer = layer;
264
- exports.layerOtelTracer = layerOtelTracer;
289
+ exports.layerGlobal = layerGlobal;
290
+ exports.layerGlobalTracer = layerGlobalTracer;
291
+ exports.layerTracer = layerTracer;
265
292
  exports.make = make;
266
293
  exports.makeExternalSpan = makeExternalSpan;
@@ -1,4 +1,4 @@
1
- import { make as make$1, makeExternalSpan as makeExternalSpan$1, currentOtelSpan as currentOtelSpan$1, layer as layer$1, layerOtelTracer as layerOtelTracer$1, OtelTracer as OtelTracer$1, traceFlagsTag, traceStateTag } from '../../internal/tracer.esm.js';
1
+ import { make as make$1, makeExternalSpan as makeExternalSpan$1, currentOtelSpan as currentOtelSpan$1, layer as layer$1, layerGlobal as layerGlobal$1, layerTracer as layerTracer$1, layerGlobalTracer as layerGlobalTracer$1, TracerProvider as TracerProvider$1, Tracer as Tracer$1, traceFlagsTag, traceStateTag } from '../../internal/tracer.esm.js';
2
2
 
3
3
  /**
4
4
  * @since 1.0.0
@@ -31,13 +31,31 @@ const layer = layer$1;
31
31
  * @since 1.0.0
32
32
  * @category layers
33
33
  */
34
- const layerOtelTracer = layerOtelTracer$1;
34
+ const layerGlobal = layerGlobal$1;
35
+
36
+ /**
37
+ * @since 1.0.0
38
+ * @category layers
39
+ */
40
+ const layerTracer = layerTracer$1;
41
+
42
+ /**
43
+ * @since 1.0.0
44
+ * @category layers
45
+ */
46
+ const layerGlobalTracer = layerGlobalTracer$1;
47
+
48
+ /**
49
+ * @since 1.0.0
50
+ * @category tags
51
+ */
52
+ const TracerProvider = TracerProvider$1;
35
53
 
36
54
  /**
37
55
  * @since 1.0.0
38
56
  * @category tags
39
57
  */
40
- const OtelTracer = OtelTracer$1;
58
+ const Tracer = Tracer$1;
41
59
 
42
60
  /**
43
61
  * @since 1.0.0
@@ -51,4 +69,4 @@ const TraceFlags = traceFlagsTag;
51
69
  */
52
70
  const TraceState = traceStateTag;
53
71
 
54
- export { OtelTracer, TraceFlags, TraceState, currentOtelSpan, layer, layerOtelTracer, make, makeExternalSpan };
72
+ export { TraceFlags, TraceState, Tracer, TracerProvider, currentOtelSpan, layer, layerGlobal, layerGlobalTracer, layerTracer, make, makeExternalSpan };
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/WebSdk.js";
2
+ //# sourceMappingURL=effect-opentelemetry-WebSdk.cjs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-opentelemetry-WebSdk.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/WebSdk.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/WebSdk";
2
+ //# sourceMappingURL=effect-opentelemetry-WebSdk.cjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-opentelemetry-WebSdk.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/WebSdk.d.ts"],"names":[],"mappings":"AAAA"}