// application/shared/normalizers.ts // Normalizadores y adaptadores DTO -> Maybe/VO import { Maybe, Result, isNullishOrEmpty } from "@repo/rdx-utils"; /** any | null | undefined -> Maybe usando fábrica VO */ export function maybeFromNullableVO( input: any, voFactory: (raw: any) => Result ): Result> { if (isNullishOrEmpty(input)) return Result.ok(Maybe.none()); const vo = voFactory(input); return vo.isSuccess ? Result.ok(Maybe.some(vo.data)) : Result.fail(vo.error); } /** string | null | undefined -> Maybe (trim, vacío => None) */ export function maybeFromNullableString(input?: string | null): Maybe { if (isNullishOrEmpty(input)) return Maybe.none(); const t = (input as string).trim(); return t ? Maybe.some(t) : Maybe.none(); } /** Maybe -> null para transporte */ export function toNullable(m: Maybe, map?: (t: T) => any): any | null { if (m.isNone()) return null; const v = m.unwrap() as T; return map ? String(map(v)) : String(v); } /** Maybe -> "" para transporte */ export function toEmptyString(m: Maybe, map?: (t: T) => string): string { if (m.isNone()) return ""; const v = m.unwrap() as T; return map ? map(v) : String(v); }