From d54e91c6582ed160cf2f2fcf977e48b4439d133b Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Sun, 18 May 2025 22:54:15 -0700 Subject: snapshot --- u/server/filter/json.ts | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) (limited to 'u/server/filter/json.ts') diff --git a/u/server/filter/json.ts b/u/server/filter/json.ts index c839707..4a2961e 100644 --- a/u/server/filter/json.ts +++ b/u/server/filter/json.ts @@ -3,46 +3,49 @@ import { type IEither, type ITraceable, LogLevel, + Metric, + PenguenoError, type PenguenoRequest, type RequestFilter, type ServerTrace, TraceUtil, } from "@emprespresso/pengueno"; -import { Metric } from "../../trace/mod.ts"; -type JsonTransformer = ( - json: ITraceable, -) => IEither; +export interface JsonTransformer { + (json: ITraceable): IEither; +} const ParseJsonMetric = Metric.fromName("JsonParse"); export const jsonModel = ( jsonTransformer: JsonTransformer, -): RequestFilter => +): RequestFilter => (r: ITraceable) => - r - .bimap(TraceUtil.withMetricTrace(ParseJsonMetric)) + r.bimap(TraceUtil.withMetricTrace(ParseJsonMetric)) .map((j) => Either.fromFailableAsync(j.get().json()) .then((either) => either.mapLeft((errReason) => { j.trace.addTrace(LogLevel.WARN).trace(`${errReason}`); - return new Error("seems to be invalid JSON (>//<) can you fix?"); + return new PenguenoError( + "seems to be invalid JSON (>//<) can you fix?", + 400, + ); }) ) ) - .flatMapAsync( - TraceUtil.promiseify((traceableEitherJson) => - traceableEitherJson.map((t) => - t.get().mapRight(traceableEitherJson.move).flatMap( - jsonTransformer, - ) + .peek( + TraceUtil.promiseify((traceableEither) => + traceableEither.get().mapBoth( + () => traceableEither.trace.trace(ParseJsonMetric.failure), + () => traceableEither.trace.trace(ParseJsonMetric.success), ) ), ) - .peek(TraceUtil.promiseify((traceableEither) => - traceableEither.get().mapBoth( - () => traceableEither.trace.trace(ParseJsonMetric.failure), - () => traceableEither.trace.trace(ParseJsonMetric.success), - ) - )) + .map( + TraceUtil.promiseify((traceableEitherJson) => + traceableEitherJson.get() + .mapRight(traceableEitherJson.move) + .flatMap(jsonTransformer) + ), + ) .get(); -- cgit v1.2.3-70-g09d2