41 lines · 1.0 KB · TypeScript
RawDownload
import {  ControlPlaneBadRequestError,  ControlPlaneStorageError,} from "../api/errors";import * as Effect from "effect/Effect"; import {  asOperationErrors,  type OperationErrorsLike,} from "./operation-errors";export type Mutable<T> = { -readonly [K in keyof T]: T[K] }; export const mapPersistenceError = <A, R>(  operation: OperationErrorsLike,  effect: Effect.Effect<A, Error, R>,): Effect.Effect<A, ControlPlaneBadRequestError | ControlPlaneStorageError, R> =>  effect.pipe(    Effect.mapError((error) => {      const errors = asOperationErrors(operation);      return errors.storage(error);    }),  ); export const parseJsonString = (  operation: OperationErrorsLike,  fieldName: string,  value: string,): Effect.Effect<string, ControlPlaneBadRequestError> =>  Effect.try({    try: () => {      JSON.parse(value);      return value;    },    catch: () => {      const errors = asOperationErrors(operation);      return errors.badRequest(        `Invalid ${fieldName}`,        `${fieldName} must be valid JSON`,      );    },  });