import type { Callable, IMetric, ITraceableMapper, ITraceableTuple, MetricsTraceSupplier, } from "@emprespresso/pengueno"; export class TraceUtil { static withMetricTrace( metric: IMetric, ): ITraceableMapper< T, ITraceableTuple>, Trace > { return (t) => [t.get(), metric as Trace]; } static withFunctionTrace( f: F, ): ITraceableMapper< T, ITraceableTuple>, Trace > { return (t) => [t.get(), `[${f.name}]`]; } static withClassTrace( c: C, ): ITraceableMapper< T, ITraceableTuple>, Trace > { return (t) => [t.get(), `[${c.constructor.name}]`]; } static promiseify( mapper: ITraceableMapper, ): ITraceableMapper, Promise, Trace> { return (traceablePromise) => traceablePromise.flatMapAsync(async (t) => t.move(await t.get()).map(mapper) ).get(); } }