FactuGES_ERP/packages/rdx-ddd/src/helpers/normalizers.ts

41 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-09-01 14:07:59 +00:00
// application/shared/normalizers.ts
// Normalizadores y adaptadores DTO -> Maybe/VO
import { Maybe, Result, isNullishOrEmpty } from "@repo/rdx-utils";
2026-02-17 18:13:59 +00:00
/** any | null | undefined -> Maybe<T> usando validación */
export function maybeFromNullableResult<T>(
2025-09-01 14:07:59 +00:00
input: any,
2026-02-17 18:13:59 +00:00
validate: (raw: any) => Result<T>
2025-09-01 14:07:59 +00:00
): Result<Maybe<T>> {
if (isNullishOrEmpty(input)) return Result.ok(Maybe.none<T>());
2026-02-17 18:13:59 +00:00
const value = validate(input);
return value.isSuccess ? Result.ok(Maybe.some(value.data)) : Result.fail(value.error);
2025-09-01 14:07:59 +00:00
}
/** string | null | undefined -> Maybe<string> (trim, vacío => None) */
2026-02-17 18:13:59 +00:00
export function maybeFromNullableOrEmptyString(input?: string | null): Maybe<string> {
2025-09-01 14:07:59 +00:00
if (isNullishOrEmpty(input)) return Maybe.none<string>();
2026-02-17 18:13:59 +00:00
const t = input as string;
2025-09-01 14:07:59 +00:00
return t ? Maybe.some(t) : Maybe.none<string>();
}
/** Maybe<T> -> null para transporte */
2026-02-17 18:13:59 +00:00
export function maybeToNullable<T, R>(m: Maybe<T>, map: (t: T) => R): R | null {
2025-09-26 18:09:14 +00:00
if (!m || m.isNone()) return null;
return map(m.unwrap() as T);
}
2026-02-17 18:13:59 +00:00
export function maybeToNullableString<T>(m: Maybe<T>, map?: (t: T) => string): string | null {
2025-09-02 10:55:45 +00:00
if (!m || m.isNone()) return null;
2025-09-01 14:07:59 +00:00
const v = m.unwrap() as T;
return map ? String(map(v)) : String(v);
}
/** Maybe<T> -> "" para transporte */
2026-02-17 18:13:59 +00:00
export function maybeToEmptyString<T>(m: Maybe<T>, map?: (t: T) => string): string {
2025-09-02 10:55:45 +00:00
if (!m || m.isNone()) return "";
2025-09-01 14:07:59 +00:00
const v = m.unwrap() as T;
return map ? map(v) : String(v);
}