# dw-validation-utils
> 12 reusable validation functions for DataWeave 2.x — field validation, pattern matching, and bulk payload validation.
## Installation
```xml
cb0ecddd-1505-4354-870f-45c4217384c2
dw-validation-utils
1.0.0
```
## Usage
```dwl
%dw 2.0
import modules::ValidationUtils
output application/json
---
ValidationUtils::validateAll(payload, {
name: { required: true, minLength: 2, maxLength: 50 },
email: { required: true, pattern: "^[^@]+@[^@]+\\.[^@]+$" },
age: { min: 1, max: 150 },
status: { oneOf: ["ACTIVE", "INACTIVE", "PENDING"] }
})
```
## Function Reference
| Function | Signature | Description |
|----------|-----------|-------------|
| `isRequired` | `(val: Any, fieldName: String) -> Object` | Check if value is non-null and non-empty |
| `minLength` | `(s: String, min: Number, fieldName: String) -> Object` | Validate minimum string length |
| `maxLength` | `(s: String, max: Number, fieldName: String) -> Object` | Validate maximum string length |
| `inRange` | `(n: Number, min: Number, max: Number, fieldName: String) -> Object` | Validate number is within range |
| `matchesPattern` | `(s: String, regex: String, fieldName: String) -> Object` | Validate string matches regex |
| `isValidDate` | `(s: String, fmt: String, fieldName: String) -> Object` | Validate date format |
| `isOneOf` | `(val: Any, allowed: Array, fieldName: String) -> Object` | Validate value is in allowed set |
| `isUUID` | `(s: String) -> Boolean` | Check UUID v4 format |
| `isURL` | `(s: String) -> Boolean` | Check URL format |
| `isPhone` | `(s: String) -> Boolean` | Check E.164 phone format |
| `validateAll` | `(obj: Object, rules: Object) -> Object` | Bulk validate payload against rules |
| `hasRequiredFields` | `(obj: Object, fields: Array) -> Object` | Check all required fields present |
## Validation Result Format
All validation functions return a consistent format:
```json
// Success
{ "valid": true }
// Failure
{ "valid": false, "field": "email", "error": "email is required" }
// validateAll result
{ "valid": false, "errors": [{ "valid": false, "field": "name", "error": "..." }] }
```
## Testing
28 MUnit test cases covering all 12 functions with basic, edge, and boundary inputs (date formats, range boundaries, pattern mismatches, allowed-value sets).
```bash
mvn clean test
```
## License
[MIT](../../LICENSE)