UNPKG

@accounter/shaam-uniform-format-generator

Version:

Fully typed application that generates, parses, and validates SHAAM uniform format tax reports (INI.TXT and BKMVDATA.TXT).

69 lines (59 loc) 1.85 kB
/** * Input validation utilities */ import { ZodError } from 'zod'; import type { ReportInput, ValidationError } from '../types/index.js'; import { ReportInputSchema } from '../types/index.js'; import { ShaamFormatError } from './errors.js'; /** * Converts Zod errors to ValidationError format */ function convertZodErrorsToValidationErrors(zodError: ZodError): ValidationError[] { return zodError.issues.map((issue, index) => ({ recordType: 'input', recordIndex: index, field: issue.path.join('.') || 'unknown', message: issue.message, value: issue.input, })); } /** * Validates report input data against the schema * * @param input - The input data to validate * @param mode - Validation mode ('fail-fast' or 'collect-all') * @returns Array of validation errors (empty if valid) */ export function validateInput( input: ReportInput, mode: 'fail-fast' | 'collect-all' = 'fail-fast', ): ValidationError[] { const errors: ValidationError[] = []; try { ReportInputSchema.parse(input); } catch (error) { if (error instanceof ZodError) { const validationErrors = convertZodErrorsToValidationErrors(error); if (mode === 'fail-fast') { throw new ShaamFormatError( `Validation failed: ${validationErrors[0]?.message || 'Unknown error'}`, validationErrors, ); } errors.push(...validationErrors); } else { // Handle non-Zod errors const unknownError: ValidationError = { recordType: 'unknown', recordIndex: 0, field: 'unknown', message: error instanceof Error ? error.message : 'Unknown validation error', }; if (mode === 'fail-fast') { throw new ShaamFormatError('Validation failed', [unknownError]); } errors.push(unknownError); } } return errors; }