@effect/opentelemetry 0.20.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 +17 -13
  2. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.mjs +2 -2
  3. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.cjs.prod.js +17 -13
  4. package/NodeSdk/dist/effect-opentelemetry-NodeSdk.esm.js +16 -15
  5. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.dev.js +44 -11
  6. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.mjs +5 -2
  7. package/Tracer/dist/effect-opentelemetry-Tracer.cjs.prod.js +44 -11
  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 +19 -7
  32. package/package.json +25 -15
  33. package/src/NodeSdk.ts +53 -25
  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 +40 -22
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var sdkTraceWeb = require('@opentelemetry/sdk-trace-web');
6
+ var Effect = require('effect/Effect');
7
+ var Layer = require('effect/Layer');
8
+ var Metrics_dist_effectOpentelemetryMetrics = require('../../Metrics/dist/effect-opentelemetry-Metrics.cjs.prod.js');
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');
18
+ require('@opentelemetry/resources');
19
+ require('@opentelemetry/semantic-conventions');
20
+ require('effect/Context');
21
+ require('effect/Cause');
22
+ require('effect/FiberRef');
23
+ require('effect/Tracer');
24
+
25
+ function _interopNamespace(e) {
26
+ if (e && e.__esModule) return e;
27
+ var n = Object.create(null);
28
+ if (e) {
29
+ Object.keys(e).forEach(function (k) {
30
+ if (k !== 'default') {
31
+ var d = Object.getOwnPropertyDescriptor(e, k);
32
+ Object.defineProperty(n, k, d.get ? d : {
33
+ enumerable: true,
34
+ get: function () { return e[k]; }
35
+ });
36
+ }
37
+ });
38
+ }
39
+ n["default"] = e;
40
+ return Object.freeze(n);
41
+ }
42
+
43
+ var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
44
+ var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
45
+
46
+ /**
47
+ * @since 1.0.0
48
+ */
49
+
50
+ /**
51
+ * @since 1.0.0
52
+ * @category model
53
+ */
54
+
55
+ /**
56
+ * @since 1.0.0
57
+ * @category layers
58
+ */
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 sdkTraceWeb.WebTracerProvider({
61
+ ...(config ?? {}),
62
+ resource
63
+ });
64
+ provider.addSpanProcessor(processor);
65
+ return provider;
66
+ }), provider => Effect__namespace.promise(() => provider.shutdown()))));
67
+
68
+ /**
69
+ * @since 1.0.0
70
+ * @category layer
71
+ */
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
+ }));
79
+
80
+ exports.layer = layer;
81
+ exports.layerTracerProvider = layerTracerProvider;
@@ -0,0 +1,42 @@
1
+ import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
2
+ import * as Effect from 'effect/Effect';
3
+ import * as Layer from 'effect/Layer';
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';
7
+
8
+ /**
9
+ * @since 1.0.0
10
+ */
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category model
15
+ */
16
+
17
+ /**
18
+ * @since 1.0.0
19
+ * @category layers
20
+ */
21
+ const layerTracerProvider = (processor, config) => Layer.scoped(TracerProvider, Effect.flatMap(Resource, resource => Effect.acquireRelease(Effect.sync(() => {
22
+ const provider = new WebTracerProvider({
23
+ ...(config ?? {}),
24
+ resource
25
+ });
26
+ provider.addSpanProcessor(processor);
27
+ return provider;
28
+ }), provider => Effect.promise(() => provider.shutdown()))));
29
+
30
+ /**
31
+ * @since 1.0.0
32
+ * @category layer
33
+ */
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
+ }));
41
+
42
+ export { layer, layerTracerProvider };
@@ -0,0 +1,4 @@
1
+ {
2
+ "main": "dist/effect-opentelemetry-WebSdk.cjs.js",
3
+ "module": "dist/effect-opentelemetry-WebSdk.esm.js"
4
+ }
@@ -1,23 +1,35 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
- import type { NodeSDKConfiguration } from "@opentelemetry/sdk-node";
4
+ import type { TracerProvider } from "@opentelemetry/api";
5
+ import type * as Resources from "@opentelemetry/resources";
6
+ import type { MetricReader } from "@opentelemetry/sdk-metrics";
7
+ import type { SpanProcessor, TracerConfig } from "@opentelemetry/sdk-trace-base";
5
8
  import type { LazyArg } from "effect/Function";
6
9
  import * as Layer from "effect/Layer";
7
- import { Resource } from "./Resource.js";
10
+ import * as Resource from "./Resource.js";
8
11
  /**
9
12
  * @since 1.0.0
10
13
  * @category model
11
14
  */
12
- export type Configuration = Partial<Omit<NodeSDKConfiguration, "resource" | "serviceName">>;
15
+ export interface Configuration {
16
+ readonly spanProcessor?: SpanProcessor;
17
+ readonly tracerConfig?: Omit<TracerConfig, "resource">;
18
+ readonly metricReader?: MetricReader;
19
+ readonly resource: {
20
+ readonly serviceName: string;
21
+ readonly serviceVersion?: string;
22
+ readonly attributes?: Resources.ResourceAttributes;
23
+ };
24
+ }
13
25
  /**
14
26
  * @since 1.0.0
15
- * @category constructor
27
+ * @category layers
16
28
  */
17
- export declare const config: (config: Configuration) => Configuration;
29
+ export declare const layerTracerProvider: (processor: SpanProcessor, config?: Omit<TracerConfig, "resource">) => Layer.Layer<Resource.Resource, never, TracerProvider>;
18
30
  /**
19
31
  * @since 1.0.0
20
32
  * @category layer
21
33
  */
22
- export declare const layer: (evaluate: LazyArg<Configuration>) => Layer.Layer<Resource, never, never>;
34
+ export declare const layer: (evaluate: LazyArg<Configuration>) => Layer.Layer<never, never, Resource.Resource>;
23
35
  //# sourceMappingURL=NodeSdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSdk.d.ts","sourceRoot":"../../../src","sources":["NodeSdk.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAGnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,QAAQ,EAAE,sBAAkB;AAErC;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC,CAAA;AAE3F;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAiD,CAAA;AAajG;;;GAGG;AACH,eAAO,MAAM,KAAK,aACN,QAAQ,aAAa,CAAC,KAC/B,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAYlC,CAAA"}
1
+ {"version":3,"file":"NodeSdk.d.ts","sourceRoot":"../../../src","sources":["NodeSdk.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,KAAK,SAAS,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAGhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,QAAQ,sBAAkB;AAGtC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;QAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAA;KACnD,CAAA;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,cACnB,aAAa,WACf,KAAK,YAAY,EAAE,UAAU,CAAC,KACtC,WAAW,CAAC,iBAAiB,EAAE,KAAK,EAAE,cAAc,CAkBpD,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,KAAK,aACN,QAAQ,aAAa,CAAC,KAC/B,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAiB3C,CAAA"}
@@ -6,13 +6,13 @@ import type { Tag } from "effect/Context";
6
6
  import type { Effect } from "effect/Effect";
7
7
  import type { Layer } from "effect/Layer";
8
8
  import type * as Option from "effect/Option";
9
- import type { ExternalSpan, Tracer } from "effect/Tracer";
9
+ import type { ExternalSpan, Tracer as EffectTracer } from "effect/Tracer";
10
10
  import type { Resource } from "./Resource.js";
11
11
  /**
12
12
  * @since 1.0.0
13
13
  * @category constructors
14
14
  */
15
- export declare const make: Effect<Otel.Tracer, never, Tracer>;
15
+ export declare const make: Effect<Otel.Tracer, never, EffectTracer>;
16
16
  /**
17
17
  * @since 1.0.0
18
18
  * @category constructors
@@ -32,17 +32,32 @@ export declare const currentOtelSpan: Effect<never, never, Option.Option<Otel.Sp
32
32
  * @since 1.0.0
33
33
  * @category layers
34
34
  */
35
- export declare const layer: Layer<Resource, never, never>;
35
+ export declare const layer: Layer<Resource | Otel.TracerProvider, never, never>;
36
36
  /**
37
37
  * @since 1.0.0
38
38
  * @category layers
39
39
  */
40
- export declare const layerOtelTracer: Layer<Resource, never, Otel.Tracer>;
40
+ export declare const layerGlobal: Layer<Resource, never, never>;
41
+ /**
42
+ * @since 1.0.0
43
+ * @category layers
44
+ */
45
+ export declare const layerTracer: Layer<Resource | Otel.TracerProvider, never, Otel.Tracer>;
46
+ /**
47
+ * @since 1.0.0
48
+ * @category layers
49
+ */
50
+ export declare const layerGlobalTracer: Layer<Resource, never, Otel.Tracer>;
51
+ /**
52
+ * @since 1.0.0
53
+ * @category tags
54
+ */
55
+ export declare const TracerProvider: Tag<Otel.TracerProvider, Otel.TracerProvider>;
41
56
  /**
42
57
  * @since 1.0.0
43
58
  * @category tags
44
59
  */
45
- export declare const OtelTracer: Tag<Otel.Tracer, Otel.Tracer>;
60
+ export declare const Tracer: Tag<Otel.Tracer, Otel.Tracer>;
46
61
  /**
47
62
  * @since 1.0.0
48
63
  * @category tags
@@ -1 +1 @@
1
- {"version":3,"file":"Tracer.d.ts","sourceRoot":"../../../src","sources":["Tracer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,sBAAkB;AAE1C;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAiB,CAAA;AAErE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAC7B,OAAO,EAAE;IACP,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;CAC3D,KACE,YAAwC,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAA4B,CAAA;AAEvG;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAkB,CAAA;AAElE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAA4B,CAAA;AAE5F;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAuB,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAA0B,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAA0B,CAAA"}
1
+ {"version":3,"file":"Tracer.d.ts","sourceRoot":"../../../src","sources":["Tracer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,eAAe,CAAA;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,sBAAkB;AAE1C;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAiB,CAAA;AAE3E;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAC7B,OAAO,EAAE;IACP,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;CAC3D,KACE,YAAwC,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAA4B,CAAA;AAEvG;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAkB,CAAA;AAExF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAwB,CAAA;AAE9E;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAwB,CAAA;AAE1G;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAA8B,CAAA;AAEhG;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAA2B,CAAA;AAEpG;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAmB,CAAA;AAEpE;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAA0B,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAA0B,CAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type { TracerProvider } from "@opentelemetry/api";
5
+ import type * as Resources from "@opentelemetry/resources";
6
+ import type { MetricReader } from "@opentelemetry/sdk-metrics";
7
+ import type { SpanProcessor, TracerConfig } from "@opentelemetry/sdk-trace-base";
8
+ import type { LazyArg } from "effect/Function";
9
+ import * as Layer from "effect/Layer";
10
+ import * as Resource from "./Resource.js";
11
+ /**
12
+ * @since 1.0.0
13
+ * @category model
14
+ */
15
+ export interface Configuration {
16
+ readonly spanProcessor?: SpanProcessor;
17
+ readonly tracerConfig?: Omit<TracerConfig, "resource">;
18
+ readonly metricReader?: MetricReader;
19
+ readonly resource: {
20
+ readonly serviceName: string;
21
+ readonly serviceVersion?: string;
22
+ readonly attributes?: Resources.ResourceAttributes;
23
+ };
24
+ }
25
+ /**
26
+ * @since 1.0.0
27
+ * @category layers
28
+ */
29
+ export declare const layerTracerProvider: (processor: SpanProcessor, config?: Omit<TracerConfig, "resource">) => Layer.Layer<Resource.Resource, never, TracerProvider>;
30
+ /**
31
+ * @since 1.0.0
32
+ * @category layer
33
+ */
34
+ export declare const layer: (evaluate: LazyArg<Configuration>) => Layer.Layer<never, never, Resource.Resource>;
35
+ //# sourceMappingURL=WebSdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSdk.d.ts","sourceRoot":"../../../src","sources":["WebSdk.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,KAAK,SAAS,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAGhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,QAAQ,sBAAkB;AAGtC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;QAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAA;KACnD,CAAA;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,cACnB,aAAa,WACf,KAAK,YAAY,EAAE,UAAU,CAAC,KACtC,WAAW,CAAC,iBAAiB,EAAE,KAAK,EAAE,cAAc,CAkBpD,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,KAAK,aACN,QAAQ,aAAa,CAAC,KAC/B,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAe3C,CAAA"}
@@ -14,4 +14,8 @@ export * as Resource from "./Resource.js";
14
14
  * @since 1.0.0
15
15
  */
16
16
  export * as Tracer from "./Tracer.js";
17
+ /**
18
+ * @since 1.0.0
19
+ */
20
+ export * as WebSdk from "./WebSdk.js";
17
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAqC;AAExD;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAqC;AAExD;;GAEG;AACH,OAAO,KAAK,QAAQ,sBAAsC;AAE1D;;GAEG;AACH,OAAO,KAAK,MAAM,oBAAoC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAqC;AAExD;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAqC;AAExD;;GAEG;AACH,OAAO,KAAK,QAAQ,sBAAsC;AAE1D;;GAEG;AACH,OAAO,KAAK,MAAM,oBAAoC;AAEtD;;GAEG;AACH,OAAO,KAAK,MAAM,oBAAoC"}
@@ -6,6 +6,7 @@ var Metrics = require('@effect/opentelemetry/Metrics');
6
6
  var NodeSdk = require('@effect/opentelemetry/NodeSdk');
7
7
  var Resource = require('@effect/opentelemetry/Resource');
8
8
  var Tracer = require('@effect/opentelemetry/Tracer');
9
+ var WebSdk = require('@effect/opentelemetry/WebSdk');
9
10
 
10
11
  function _interopNamespace(e) {
11
12
  if (e && e.__esModule) return e;
@@ -29,6 +30,7 @@ var Metrics__namespace = /*#__PURE__*/_interopNamespace(Metrics);
29
30
  var NodeSdk__namespace = /*#__PURE__*/_interopNamespace(NodeSdk);
30
31
  var Resource__namespace = /*#__PURE__*/_interopNamespace(Resource);
31
32
  var Tracer__namespace = /*#__PURE__*/_interopNamespace(Tracer);
33
+ var WebSdk__namespace = /*#__PURE__*/_interopNamespace(WebSdk);
32
34
 
33
35
 
34
36
 
@@ -36,3 +38,4 @@ exports.Metrics = Metrics__namespace;
36
38
  exports.NodeSdk = NodeSdk__namespace;
37
39
  exports.Resource = Resource__namespace;
38
40
  exports.Tracer = Tracer__namespace;
41
+ exports.WebSdk = WebSdk__namespace;
@@ -2,5 +2,6 @@ export {
2
2
  Metrics,
3
3
  NodeSdk,
4
4
  Resource,
5
- Tracer
5
+ Tracer,
6
+ WebSdk
6
7
  } from "./effect-opentelemetry.cjs.js";
@@ -6,6 +6,7 @@ var Metrics = require('@effect/opentelemetry/Metrics');
6
6
  var NodeSdk = require('@effect/opentelemetry/NodeSdk');
7
7
  var Resource = require('@effect/opentelemetry/Resource');
8
8
  var Tracer = require('@effect/opentelemetry/Tracer');
9
+ var WebSdk = require('@effect/opentelemetry/WebSdk');
9
10
 
10
11
  function _interopNamespace(e) {
11
12
  if (e && e.__esModule) return e;
@@ -29,6 +30,7 @@ var Metrics__namespace = /*#__PURE__*/_interopNamespace(Metrics);
29
30
  var NodeSdk__namespace = /*#__PURE__*/_interopNamespace(NodeSdk);
30
31
  var Resource__namespace = /*#__PURE__*/_interopNamespace(Resource);
31
32
  var Tracer__namespace = /*#__PURE__*/_interopNamespace(Tracer);
33
+ var WebSdk__namespace = /*#__PURE__*/_interopNamespace(WebSdk);
32
34
 
33
35
 
34
36
 
@@ -36,3 +38,4 @@ exports.Metrics = Metrics__namespace;
36
38
  exports.NodeSdk = NodeSdk__namespace;
37
39
  exports.Resource = Resource__namespace;
38
40
  exports.Tracer = Tracer__namespace;
41
+ exports.WebSdk = WebSdk__namespace;
@@ -6,3 +6,5 @@ import * as Resource from '@effect/opentelemetry/Resource';
6
6
  export { Resource };
7
7
  import * as Tracer from '@effect/opentelemetry/Tracer';
8
8
  export { Tracer };
9
+ import * as WebSdk from '@effect/opentelemetry/WebSdk';
10
+ export { WebSdk };
@@ -5,7 +5,7 @@ import * as Effect from 'effect/Effect';
5
5
  import * as FiberRef from 'effect/FiberRef';
6
6
  import * as Layer from 'effect/Layer';
7
7
  import * as Option from 'effect/Option';
8
- import * as Tracer from 'effect/Tracer';
8
+ import * as EffectTracer from 'effect/Tracer';
9
9
  import { Resource } from '../Resource/dist/effect-opentelemetry-Resource.esm.js';
10
10
 
11
11
  /** @internal */
@@ -72,15 +72,18 @@ class OtelSpan {
72
72
  }
73
73
 
74
74
  /** @internal */
75
- const OtelTracer = /*#__PURE__*/Context.Tag("@effect/opentelemetry/Tracer/OtelTracer");
75
+ const TracerProvider = /*#__PURE__*/Context.Tag("@effect/opentelemetry/Tracer/TracerProvider");
76
76
 
77
77
  /** @internal */
78
- const make = /*#__PURE__*/Effect.map(OtelTracer, tracer => Tracer.make({
78
+ const Tracer = /*#__PURE__*/Context.Tag("@effect/opentelemetry/Tracer/Tracer");
79
+
80
+ /** @internal */
81
+ const make = /*#__PURE__*/Effect.map(Tracer, tracer => EffectTracer.make({
79
82
  span(name, parent, context, links, startTime) {
80
83
  return new OtelSpan(OtelApi.context, tracer, name, parent, context, links, startTime);
81
84
  },
82
85
  context(execution, fiber) {
83
- const currentSpan = fiber.getFiberRef(FiberRef.currentContext).unsafeMap.get(Tracer.ParentSpan);
86
+ const currentSpan = fiber.getFiberRef(FiberRef.currentContext).unsafeMap.get(EffectTracer.ParentSpan);
84
87
  if (currentSpan === undefined) {
85
88
  return execution();
86
89
  }
@@ -121,10 +124,19 @@ const makeExternalSpan = options => {
121
124
  const currentOtelSpan = /*#__PURE__*/Effect.map(Effect.currentSpan, span => Option.map(Option.filter(span, span => "span" in span), _ => _.span));
122
125
 
123
126
  /** @internal */
124
- const layerOtelTracer = /*#__PURE__*/Layer.effect(OtelTracer, /*#__PURE__*/Effect.flatMap(Resource, resource => Effect.sync(() => OtelApi.trace.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
127
+ const layerGlobalProvider = /*#__PURE__*/Layer.sync(TracerProvider, () => OtelApi.trace.getTracerProvider());
128
+
129
+ /** @internal */
130
+ const layerTracer = /*#__PURE__*/Layer.effect(Tracer, /*#__PURE__*/Effect.flatMap( /*#__PURE__*/Effect.zip(Resource, TracerProvider), ([resource, provider]) => Effect.sync(() => provider.getTracer(resource.attributes["service.name"], resource.attributes["service.version"]))));
131
+
132
+ /** @internal */
133
+ const layerGlobalTracer = /*#__PURE__*/layerTracer.pipe( /*#__PURE__*/Layer.use(layerGlobalProvider));
134
+
135
+ /** @internal */
136
+ const layerGlobal = /*#__PURE__*/Layer.unwrapEffect(Effect.map(make, Layer.setTracer)).pipe( /*#__PURE__*/Layer.use(layerGlobalTracer));
125
137
 
126
138
  /** @internal */
127
- const layer = /*#__PURE__*/Layer.provide(layerOtelTracer, /*#__PURE__*/Layer.unwrapEffect( /*#__PURE__*/Effect.map(make, Layer.setTracer)));
139
+ const layer = /*#__PURE__*/Layer.unwrapEffect(Effect.map(make, Layer.setTracer)).pipe( /*#__PURE__*/Layer.use(layerTracer));
128
140
 
129
141
  // -------------------------------------------------------------------------------------
130
142
  // utils
@@ -166,4 +178,4 @@ const objectToAttribute = value => {
166
178
  }
167
179
  };
168
180
 
169
- export { OtelSpan, OtelTracer, currentOtelSpan, layer, layerOtelTracer, make, makeExternalSpan, traceFlagsTag, traceStateTag };
181
+ export { OtelSpan, Tracer, TracerProvider, currentOtelSpan, layer, layerGlobal, layerGlobalProvider, layerGlobalTracer, layerTracer, make, makeExternalSpan, traceFlagsTag, traceStateTag };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/opentelemetry",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -44,12 +44,14 @@
44
44
  "dependencies": {
45
45
  "@opentelemetry/resources": "^1.17.1",
46
46
  "@opentelemetry/sdk-metrics": "^1.17.1",
47
- "@opentelemetry/sdk-node": "^0.44.0",
47
+ "@opentelemetry/sdk-trace-base": "^1.17.1",
48
+ "@opentelemetry/sdk-trace-node": "^1.17.1",
49
+ "@opentelemetry/sdk-trace-web": "^1.17.1",
48
50
  "@opentelemetry/semantic-conventions": "^1.17.1"
49
51
  },
50
52
  "peerDependencies": {
51
53
  "@opentelemetry/api": "^1.4",
52
- "effect": "2.0.0-next.50"
54
+ "effect": "2.0.0-next.51"
53
55
  },
54
56
  "devDependencies": {
55
57
  "@babel/core": "^7.23.2",
@@ -62,26 +64,27 @@
62
64
  "@effect/eslint-plugin": "^0.1.2",
63
65
  "@effect/language-service": "^0.0.21",
64
66
  "@opentelemetry/api": "^1.6.0",
65
- "@opentelemetry/exporter-metrics-otlp-http": "^0.44.0",
66
- "@opentelemetry/exporter-prometheus": "^0.44.0",
67
- "@opentelemetry/exporter-trace-otlp-http": "^0.44.0",
68
- "@opentelemetry/sdk-trace-base": "^1.17.1",
67
+ "@opentelemetry/context-async-hooks": "^1.17.1",
68
+ "@opentelemetry/exporter-metrics-otlp-http": "0.43.0",
69
+ "@opentelemetry/exporter-prometheus": "0.43.0",
70
+ "@opentelemetry/exporter-trace-otlp-http": "0.43.0",
71
+ "@opentelemetry/otlp-exporter-base": "0.43.0",
69
72
  "@preconstruct/cli": "^2.8.1",
70
73
  "@types/chai": "^4.3.9",
71
- "@types/node": "^20.8.7",
72
- "@typescript-eslint/eslint-plugin": "^6.8.0",
73
- "@typescript-eslint/parser": "^6.8.0",
74
+ "@types/node": "^20.8.9",
75
+ "@typescript-eslint/eslint-plugin": "^6.9.0",
76
+ "@typescript-eslint/parser": "^6.9.0",
74
77
  "@vitejs/plugin-react": "^4.1.0",
75
78
  "@vitest/coverage-v8": "^0.34.6",
76
79
  "@vitest/expect": "^0.34.6",
77
80
  "babel-plugin-annotate-pure-calls": "^0.4.0",
78
- "concurrently": "^8.2.1",
79
- "effect": "2.0.0-next.50",
80
- "eslint": "^8.51.0",
81
+ "concurrently": "^8.2.2",
82
+ "effect": "2.0.0-next.51",
83
+ "eslint": "^8.52.0",
81
84
  "eslint-import-resolver-typescript": "^3.6.1",
82
85
  "eslint-plugin-codegen": "0.17.0",
83
86
  "eslint-plugin-deprecation": "^2.0.0",
84
- "eslint-plugin-import": "^2.28.1",
87
+ "eslint-plugin-import": "^2.29.0",
85
88
  "eslint-plugin-simple-import-sort": "^10.0.0",
86
89
  "eslint-plugin-sort-destructure-keys": "^1.5.0",
87
90
  "madge": "^6.1.0",
@@ -121,6 +124,12 @@
121
124
  "module": "./Tracer/dist/effect-opentelemetry-Tracer.esm.js",
122
125
  "import": "./Tracer/dist/effect-opentelemetry-Tracer.cjs.mjs",
123
126
  "default": "./Tracer/dist/effect-opentelemetry-Tracer.cjs.js"
127
+ },
128
+ "./WebSdk": {
129
+ "types": "./dist/declarations/src/WebSdk.d.ts",
130
+ "module": "./WebSdk/dist/effect-opentelemetry-WebSdk.esm.js",
131
+ "import": "./WebSdk/dist/effect-opentelemetry-WebSdk.cjs.mjs",
132
+ "default": "./WebSdk/dist/effect-opentelemetry-WebSdk.cjs.js"
124
133
  }
125
134
  },
126
135
  "files": [
@@ -130,7 +139,8 @@
130
139
  "Metrics",
131
140
  "NodeSdk",
132
141
  "Resource",
133
- "Tracer"
142
+ "Tracer",
143
+ "WebSdk"
134
144
  ],
135
145
  "scripts": {
136
146
  "example": "node -r ts-node/register",
package/src/NodeSdk.ts CHANGED
@@ -1,36 +1,59 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
- import type { NodeSDKConfiguration } from "@opentelemetry/sdk-node"
5
- import { NodeSDK } from "@opentelemetry/sdk-node"
4
+ import type { TracerProvider } from "@opentelemetry/api"
5
+ import type * as Resources from "@opentelemetry/resources"
6
+ import type { MetricReader } from "@opentelemetry/sdk-metrics"
7
+ import type { SpanProcessor, TracerConfig } from "@opentelemetry/sdk-trace-base"
8
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node"
6
9
  import * as Effect from "effect/Effect"
7
10
  import type { LazyArg } from "effect/Function"
8
11
  import * as Layer from "effect/Layer"
9
12
  import * as Metrics from "./Metrics"
10
- import { Resource } from "./Resource"
13
+ import * as Resource from "./Resource"
14
+ import * as Tracer from "./Tracer"
11
15
 
12
16
  /**
13
17
  * @since 1.0.0
14
18
  * @category model
15
19
  */
16
- export type Configuration = Partial<Omit<NodeSDKConfiguration, "resource" | "serviceName">>
20
+ export interface Configuration {
21
+ readonly spanProcessor?: SpanProcessor
22
+ readonly tracerConfig?: Omit<TracerConfig, "resource">
23
+ readonly metricReader?: MetricReader
24
+ readonly resource: {
25
+ readonly serviceName: string
26
+ readonly serviceVersion?: string
27
+ readonly attributes?: Resources.ResourceAttributes
28
+ }
29
+ }
17
30
 
18
31
  /**
19
32
  * @since 1.0.0
20
- * @category constructor
33
+ * @category layers
21
34
  */
22
- export const config: (config: Configuration) => Configuration = (config: Configuration) => config
23
-
24
- const make = (config: Configuration) =>
25
- Effect.flatMap(Resource, (resource) =>
26
- Effect.acquireRelease(
27
- Effect.sync(() => {
28
- const sdk = new NodeSDK({ ...config, metricReader: undefined, resource })
29
- sdk.start()
30
- return sdk
31
- }),
32
- (sdk) => Effect.promise(() => sdk.shutdown())
33
- ))
35
+ export const layerTracerProvider = (
36
+ processor: SpanProcessor,
37
+ config?: Omit<TracerConfig, "resource">
38
+ ): Layer.Layer<Resource.Resource, never, TracerProvider> =>
39
+ Layer.scoped(
40
+ Tracer.TracerProvider,
41
+ Effect.flatMap(
42
+ Resource.Resource,
43
+ (resource) =>
44
+ Effect.acquireRelease(
45
+ Effect.sync(() => {
46
+ const provider = new NodeTracerProvider({
47
+ ...(config ?? {}),
48
+ resource
49
+ })
50
+ provider.addSpanProcessor(processor)
51
+ return provider
52
+ }),
53
+ (provider) => Effect.promise(() => provider.shutdown())
54
+ )
55
+ )
56
+ )
34
57
 
35
58
  /**
36
59
  * @since 1.0.0
@@ -38,16 +61,21 @@ const make = (config: Configuration) =>
38
61
  */
39
62
  export const layer = (
40
63
  evaluate: LazyArg<Configuration>
41
- ): Layer.Layer<Resource, never, never> =>
64
+ ): Layer.Layer<never, never, Resource.Resource> =>
42
65
  Layer.unwrapEffect(
43
66
  Effect.sync(() => {
44
67
  const config = evaluate()
45
- const Tracing = Layer.scopedDiscard(make(config))
46
- return config.metricReader ?
47
- Layer.merge(
48
- Tracing,
49
- Metrics.layer(() => config.metricReader!)
50
- ) :
51
- Tracing
68
+ const ResourceLive = Resource.layer(config.resource)
69
+ const TracerLive = config.spanProcessor ?
70
+ Tracer.layer.pipe(
71
+ Layer.use(layerTracerProvider(config.spanProcessor, config.tracerConfig))
72
+ )
73
+ : Layer.effectDiscard(Effect.unit)
74
+ const MetricsLive = config.metricReader
75
+ ? Metrics.layer(() => config.metricReader!)
76
+ : Layer.effectDiscard(Effect.unit)
77
+ return Layer.merge(TracerLive, MetricsLive).pipe(
78
+ Layer.useMerge(ResourceLive)
79
+ )
52
80
  })
53
81
  )