@accounter/shaam-uniform-format-generator
Version:
Fully typed application that generates, parses, and validates SHAAM uniform format tax reports (INI.TXT and BKMVDATA.TXT).
55 lines (54 loc) • 1.78 kB
JavaScript
/**
* Input validation utilities
*/
import { ZodError } from 'zod';
import { ReportInputSchema } from '../types/index.js';
import { ShaamFormatError } from './errors.js';
/**
* Converts Zod errors to ValidationError format
*/
function convertZodErrorsToValidationErrors(zodError) {
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, mode = 'fail-fast') {
const errors = [];
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 = {
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;
}