@hemia/workflow-node-validator
v0.0.2
Published
Nodo de validación para Hemia Workflow: evalúa reglas declarativas con JEXL.
Readme
@hemia/workflow-node-validator
Nodo de validación para Hemia Workflow. Evalúa reglas declarativas (JEXL) contra las variables del contexto (variables).
Instalación
npm install @hemia/workflow-node-validatorUso
import { NodeRegistry } from '@hemia/workflow-engine';
import { validatorNode } from '@hemia/workflow-node-validator';
const registry = new NodeRegistry();
registry.register('validator', validatorNode);En tu workflow:
{
"id": "vacation-request-flow",
"name": "Solicitud de Vacaciones",
"steps": [
{
"id": "validateInput",
"type": "validator",
"params": {
"rules": [
"input.startDate < input.endDate",
"input.employeeId != null",
"input.email != null"
]
},
"next": [{ "id": "checkVacationBalance" }]
}
]
}Parámetros
rules: string[]Reglas JEXL; si alguna falla, el nodo falla.allMustPass?: boolean(default true). Si false, basta que una pase para éxito.failCode?: stringCódigo de error personalizado.
Ejemplos adicionales
1) Validar con allMustPass = false (con que una pase es suficiente)
{
"id": "validateAny",
"type": "validator",
"params": {
"allMustPass": false,
"rules": [
"input.managerApproved == true",
"input.hrApproved == true"
]
},
"next": [{ "id": "continue" }]
}2) Personalizar el código de error (failCode)
{
"id": "validateInput",
"type": "validator",
"params": {
"failCode": "INPUT_INVALID",
"rules": [
"input.requestedDays > 0",
"input.employeeId != null"
]
},
"error": { "next": "handleError" }
}3) Usar la salida del validator en condiciones posteriores
El engine guarda la salida en variables.output_<stepId>. Puedes usarla en next.condition:
{
"id": "validateInput",
"type": "validator",
"params": { "rules": ["input.requestedDays > 0"] },
"next": [{ "id": "callApi", "condition": "output_validateInput.passed == true" }]
}4) Transforms JEXL en reglas
Si registras transforms globales en @hemia/workflow-core, puedes usarlos dentro de las reglas:
import { registerJexlTransforms } from "@hemia/workflow-core";
registerJexlTransforms({ toLower: (s: any) => (s ?? "").toString().toLowerCase() });Regla de ejemplo:
{
"id": "validateDept",
"type": "validator",
"params": {
"rules": ["(input.department | toLower) == 'hr'"]
}
}Notas:
- Si
allMustPasses true, el nodo falla en la primera regla no cumplida. - Con
allMustPassen false, si ninguna regla pasa, el nodo falla. - El error incluye detalles de la regla que falló (
details).
