Varios campos a la vez
Una regla puede mirar dos o más campos juntos, por ejemplo edad y ocupación.
A veces un campo solo no basta. “CEO” puede ser un trabajo válido. “12 años” puede ser una edad válida. Juntos, no tienen sentido.
Para eso usas crossField. Declaras qué campos mirar y escribes una regla que habla de todos ellos.
Ejemplo: edad y ocupación
const PersonSemantic = edcheck.define(Person, { rules: { fullName: semantic("Un nombre completo creíble de una persona real"), }, crossField: [ { paths: ["age", "occupation"], rule: semantic({ intent: "La `occupation` es creíble para alguien de esa `age`", invalid: "La `occupation` pide más años de los que permite la `age`", id: "occupation_age_coherence", }), }, ],});Los nombres entre backticks
Si en intent, valid o invalid mencionas un campo entre backticks (por ejemplo occupation), ese nombre tiene que estar en paths. Si pones un campo que no declaraste, define() falla con EDcheckConfigError y el código unknown_reference.
Textos con espacios o signos, por ejemplo N/A entre backticks, se ignoran. No se tratan como campos.
Un issue por cada campo
Si la regla falla o da aviso, EDcheck crea un issue para cada path. El mensaje es el mismo. Cambia path, para que puedas pintar el error en ambos inputs.
Cada issue también trae paths (todos los campos de la regla) y el mismo ruleId. Así tu código puede no mostrar el mismo error dos veces si no quiere.
Si falta un valor
Si alguno de los campos es undefined o null, EDcheck se salta esa regla. No inventa un error. Zod ya se encargó (o el campo era opcional).
No puedes usar un array dentro de paths. define() lo rechaza.