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