From 9970036d203ba2d0a46b35ba6fad21d49441cdd4 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 27 Jul 2025 17:03:10 -0700 Subject: hai --- lib/trace/util.ts | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 lib/trace/util.ts (limited to 'lib/trace/util.ts') diff --git a/lib/trace/util.ts b/lib/trace/util.ts new file mode 100644 index 0000000..ec67571 --- /dev/null +++ b/lib/trace/util.ts @@ -0,0 +1,59 @@ +import { + IEither, + IMetric, + isEither, + ITraceable, + ITraceWith, + LogLevel, + ResultMetric, + type Callable, + type ITraceableMapper, +} from '@emprespresso/pengueno'; + +export class TraceUtil { + static promiseify( + mapper: ITraceableMapper, + ): ITraceableMapper, Promise, Trace> { + return (traceablePromise) => + traceablePromise.flatMapAsync(async (t) => t.move(await t.get()).map(mapper)).get(); + } + + static traceResultingEither( + metric?: ResultMetric, + warnOnFailure = false, + ): ITraceableMapper, ITraceable, Trace>, Trace> { + return (t) => { + if (metric) + t.trace.trace( + t.get().fold( + (_err) => (warnOnFailure ? metric.warn : metric.failure), + (_ok) => metric.success, + ), + ); + return t.traceScope((_t) => + _t.get().fold( + (_err) => (warnOnFailure ? LogLevel.WARN : LogLevel.ERROR), + (_ok) => LogLevel.INFO, + ), + ); + }; + } + + static withTrace>( + trace: _Trace, + ): ITraceableMapper, Trace> { + return (t) => t.traceScope(() => trace); + } + + static withMetricTrace(metric: IMetric): ITraceableMapper, Trace> { + return TraceUtil.withTrace(metric); + } + + static withFunctionTrace(f: F): ITraceableMapper, Trace> { + return TraceUtil.withTrace(`fn.${f.name}`); + } + + static withClassTrace(c: C): ITraceableMapper, Trace> { + return TraceUtil.withTrace(`class.${c.constructor.name}`); + } +} -- cgit v1.2.3-70-g09d2