/* * Copyright (C) 2026 Fluxer Contributors * * This file is part of Fluxer. * * Fluxer is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Fluxer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Fluxer. If not, see . */ import { InputValidationError, type LocalizedValidationError, } from '@fluxer/errors/src/domains/core/InputValidationError'; import type {ValidationError} from '@fluxer/errors/src/domains/core/ValidationError'; import {resolveValidationErrorCode} from '@fluxer/validation/src/shared/ValidationErrorCodeUtils'; import {extractValidatorIssueVariables} from '@fluxer/validation/src/validator/ValidatorIssueVariables'; import type {ZodError} from 'zod'; type ZodValidationIssue = ZodError['issues'][number]; function getIssuePath(issue: ZodValidationIssue): string { if (issue.path.length === 0) { return 'root'; } return issue.path.join('.'); } export function createInputValidationError(issues: Array): InputValidationError { const errors: Array = []; const localizedErrors: Array = []; for (const issue of issues) { const path = getIssuePath(issue); const code = resolveValidationErrorCode(issue.message); const variables = extractValidatorIssueVariables(issue); errors.push({path, message: code, code}); localizedErrors.push({path, code, variables}); } return new InputValidationError(errors, localizedErrors); }