import { type } from 'arktype' export const MAX_TRANSACTION_AMOUNT = 1_000_000 export const transactionFormSchema = type({ name: 'unknown', amount: 'unknown', payBy: 'unknown' }).narrow((data, ctx) => { if (typeof data.name !== 'string' || data.name.trim().length === 0) { ctx.reject({ message: 'validation.transaction_name_required', path: ['name'] }) } if (typeof data.amount !== 'number' || Number.isNaN(data.amount)) { ctx.reject({ message: 'validation.amount_required', path: ['amount'] }) } else if (data.amount <= 0) { ctx.reject({ message: 'validation.amount_must_be_positive', path: ['amount'] }) } else if (data.amount > MAX_TRANSACTION_AMOUNT) { ctx.reject({ message: 'validation.amount_too_large', path: ['amount'] }) } if (typeof data.payBy !== 'string' || data.payBy.length === 0) { ctx.reject({ message: 'validation.pay_by_required', path: ['payBy'] }) } return !ctx.hasError() })