diff options
author | Elizabeth Alexander Hunt <me@liz.coffee> | 2025-05-18 12:24:09 -0700 |
---|---|---|
committer | Elizabeth Alexander Hunt <me@liz.coffee> | 2025-05-18 12:24:09 -0700 |
commit | 9cf3fc0259730b7dcf47b3ab4a04369e39fb4614 (patch) | |
tree | a96d39b4f28d38e327376cbef7ba60dbaa95e111 /u/trace/util.ts | |
parent | ef51b25e4388cbdf3a27e23d9f1fa381ae20a5ad (diff) | |
download | ci-9cf3fc0259730b7dcf47b3ab4a04369e39fb4614.tar.gz ci-9cf3fc0259730b7dcf47b3ab4a04369e39fb4614.zip |
finish up pengueno
Diffstat (limited to 'u/trace/util.ts')
-rw-r--r-- | u/trace/util.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/u/trace/util.ts b/u/trace/util.ts new file mode 100644 index 0000000..dd8fb0d --- /dev/null +++ b/u/trace/util.ts @@ -0,0 +1,48 @@ +import type { + Callable, + IMetric, + ITraceableMapper, + ITraceableTuple, + MetricsTraceSupplier, +} from "@emprespresso/pengueno"; + +export class TraceUtil { + static withMetricTrace<T, Trace extends MetricsTraceSupplier>( + metric: IMetric, + ): ITraceableMapper< + T, + ITraceableTuple<T, Trace | Array<Trace>>, + Trace + > { + return (t) => [t.get(), metric as Trace]; + } + + static withFunctionTrace<F extends Callable, T, Trace>( + f: F, + ): ITraceableMapper< + T, + ITraceableTuple<T, Trace | Array<Trace>>, + Trace + > { + return (t) => [t.get(), `[${f.name}]`]; + } + + static withClassTrace<C extends object, T, Trace>( + c: C, + ): ITraceableMapper< + T, + ITraceableTuple<T, Trace | Array<Trace>>, + Trace + > { + return (t) => [t.get(), `[${c.constructor.name}]`]; + } + + static promiseify<T, U, Trace>( + mapper: ITraceableMapper<T, U, Trace>, + ): ITraceableMapper<Promise<T>, Promise<U>, Trace> { + return (traceablePromise) => + traceablePromise.flatMapAsync(async (t) => + t.move(await t.get()).map(mapper) + ).get(); + } +} |