@leancodepl/validation
Version:
CQRS validation helpers for command and query validation
44 lines • 3.38 kB
TypeScript
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