UNPKG

@leancodepl/validation

Version:

CQRS validation helpers for command and query validation

44 lines 3.38 kB
import { ValidationError } from '@leancodepl/cqrs-client-base'; export type ReducerDescription<THandlerResult, TReturnValue = THandlerResult> = { reducer: (prev: TReturnValue, cur: THandlerResult) => TReturnValue; initialValue: TReturnValue; }; export type SpecificValidationError<TErrors extends Record<string, number>, TError extends keyof TErrors> = ValidationError<Record<TError, TErrors[TError]>>; export type ValidationErrorHandlerFunc<TErrorsToHandle extends Record<string, number>, THandledErrors extends keyof TErrorsToHandle, TResult> = (errorName: THandledErrors, error: SpecificValidationError<TErrorsToHandle, THandledErrors>) => TResult; export type ValidationErrorsHandleFunc<TErrorsToHandle extends Record<string, number>, TInResult> = { <THandledErrors extends keyof TErrorsToHandle, TResult>(validationErrors: ReadonlyArray<THandledErrors> | THandledErrors, handler: ValidationErrorHandlerFunc<TErrorsToHandle, THandledErrors, TResult>): ValidationErrorsHandler<Omit<TErrorsToHandle, THandledErrors>, TInResult | TResult>; }; export type ValidationErrorHandlerAllFunc<TErrorsToHandle extends Record<string, number>, THandledErrors extends keyof TErrorsToHandle, TResult> = (errors: { errorName: THandledErrors; errors: SpecificValidationError<TErrorsToHandle, THandledErrors>[]; }[]) => TResult; export type ValidationErrorsHandleAllFunc<TErrorsToHandle extends Record<string, number>, TInResult> = { <THandledErrors extends keyof TErrorsToHandle, TResult>(validationErrors: ReadonlyArray<THandledErrors> | THandledErrors, handler: ValidationErrorHandlerAllFunc<TErrorsToHandle, THandledErrors, TResult>): ValidationErrorsHandler<Omit<TErrorsToHandle, THandledErrors>, TInResult | TResult>; }; export interface ValidationErrorsHandler<TRemainingErrors extends Record<string, number>, TResult> { handle: ValidationErrorsHandleFunc<TRemainingErrors, TResult>; handleAll: ValidationErrorsHandleAllFunc<TRemainingErrors, TResult>; check: object extends TRemainingErrors ? <TReturnValue = void>(reducer?: ReducerDescription<TResult, TReturnValue>) => TReturnValue : unknown; } /** * Creates a validation error handler that processes errors with type-safe error code mapping. * * @template TAllErrors - Error codes map type extending Record<string, number> * @template TInResult - Type of results accumulated from previous handlers * @param validationErrors - Array of validation errors to process * @param errorCodesMap - Mapping of error names to numeric codes * @param validationResults - Optional array of previous handler results * @returns Handler with handle, handleAll, and check methods * @example * ```typescript * const errorCodes = { EmailExists: 1, InvalidEmail: 2 } as const; * const errors = [{ ErrorCode: 1, ErrorMessage: 'Email exists', PropertyName: 'Email' }]; * * handleValidationErrors(errors, errorCodes) * .handle('EmailExists', () => console.warn('Email already registered')) * .handle('InvalidEmail', () => console.warn('Invalid email format')) * .check(); * ``` */ export declare function handleValidationErrors<TAllErrors extends Record<string, number>, TInResult = never>(validationErrors: ValidationError<TAllErrors>[], errorCodesMap: TAllErrors, validationResults?: TInResult[]): ValidationErrorsHandler<TAllErrors, TInResult>; //# sourceMappingURL=handleValidationErrors.d.ts.map