diff --git a/packages/metrics-opentelemetry/package.json b/packages/metrics-opentelemetry/package.json index 54e314b534..0822f104fa 100644 --- a/packages/metrics-opentelemetry/package.json +++ b/packages/metrics-opentelemetry/package.json @@ -48,6 +48,7 @@ }, "dependencies": { "@libp2p/interface": "^2.4.0", + "@libp2p/utils": "^6.3.1", "@opentelemetry/api": "^1.9.0", "it-foreach": "^2.1.1", "it-stream-types": "^2.0.2" diff --git a/packages/metrics-opentelemetry/src/index.ts b/packages/metrics-opentelemetry/src/index.ts index c0ec0035b0..ebc8f3014e 100644 --- a/packages/metrics-opentelemetry/src/index.ts +++ b/packages/metrics-opentelemetry/src/index.ts @@ -34,6 +34,9 @@ */ import { InvalidParametersError, serviceCapabilities } from '@libp2p/interface' +import { isAsyncGenerator } from '@libp2p/utils/is-async-generator' +import { isGenerator } from '@libp2p/utils/is-generator' +import { isPromise } from '@libp2p/utils/is-promise' import { trace, metrics, context, SpanStatusCode } from '@opentelemetry/api' import each from 'it-foreach' import { OpenTelemetryCounterGroup } from './counter-group.js' @@ -438,10 +441,6 @@ export function openTelemetryMetrics (init: OpenTelemetryMetricsInit = {}): (com return (components: OpenTelemetryComponents) => new OpenTelemetryMetrics(components, init) } -function isPromise (obj?: any): obj is Promise { - return typeof obj?.then === 'function' -} - async function wrapPromise (promise: Promise, span: Span, attributes: TraceAttributes, options?: TraceFunctionOptions): Promise { return promise .then(res => { @@ -458,10 +457,6 @@ async function wrapPromise (promise: Promise, span: Span, attributes: Trace }) } -function isGenerator (obj?: any): obj is Generator { - return obj?.[Symbol.iterator] != null -} - function wrapGenerator (gen: Generator, span: Span, attributes: TraceAttributes, options?: TraceGeneratorFunctionOptions): Generator { const iter = gen[Symbol.iterator]() let index = 0 @@ -502,10 +497,6 @@ function wrapGenerator (gen: Generator, span: Span, attributes: TraceAttributes, return wrapped } -function isAsyncGenerator (obj?: any): obj is AsyncGenerator { - return obj?.[Symbol.asyncIterator] != null -} - function wrapAsyncGenerator (gen: AsyncGenerator, span: Span, attributes: TraceAttributes, options?: TraceGeneratorFunctionOptions): AsyncGenerator { const iter = gen[Symbol.asyncIterator]() let index = 0 diff --git a/packages/utils/src/is-async-generator.ts b/packages/utils/src/is-async-generator.ts index 73a7a20b6b..57a4a9ed1c 100644 --- a/packages/utils/src/is-async-generator.ts +++ b/packages/utils/src/is-async-generator.ts @@ -1,9 +1,15 @@ export function isAsyncGenerator (obj: unknown): obj is AsyncGenerator { - if (obj == null) return false + if (obj == null) { + return false + } + const asyncIterator = (obj as { [Symbol.asyncIterator]?: unknown })?.[ Symbol.asyncIterator ] - if (typeof asyncIterator !== 'function') return false + + if (typeof asyncIterator !== 'function') { + return false + } const instance = obj as { next?: unknown } return typeof instance.next === 'function' diff --git a/packages/utils/src/is-generator.ts b/packages/utils/src/is-generator.ts index ee5825412d..6307cd4457 100644 --- a/packages/utils/src/is-generator.ts +++ b/packages/utils/src/is-generator.ts @@ -1,8 +1,15 @@ export function isGenerator (obj: unknown): obj is Generator { - if (obj == null) return false + if (obj == null) { + return false + } + const iterator = (obj as { [Symbol.iterator]?: unknown })?.[Symbol.iterator] - if (typeof iterator !== 'function') return false + + if (typeof iterator !== 'function') { + return false + } const instance = obj as { next?: unknown } + return typeof instance.next === 'function' }