import { Context, context } from '@opentelemetry/api' // eslint-disable-next-line @typescript-eslint/no-explicit-any export function bindAsyncGenerator( ctx: Context, generator: AsyncGenerator, ): AsyncGenerator { return { next: context.bind(ctx, generator.next.bind(generator)), return: context.bind(ctx, generator.return.bind(generator)), throw: context.bind(ctx, generator.throw.bind(generator)), [Symbol.asyncDispose]: context.bind(ctx, async (): Promise => { await generator.return(undefined as void | TReturn) }), [Symbol.asyncIterator](): AsyncGenerator { return bindAsyncGenerator(ctx, generator) }, } } export function hasProperty(value: unknown, key: K): value is Record { return typeof value === 'object' && value !== null && key in value }