validate

  1. @override
ValidationResult<T> validate(
  1. dynamic value
)

override

Implementation

@override
ValidationResult<T> validate(dynamic value) {
  if (value == null) {
    return const Invalid({
      'body': ['is required']
    });
  }

Map<String, dynamic> map; if (value is Map<String, dynamic>) { map = value; } else if (value is JSObject) { // Convert JS object to Dart map map = (value.dartify() as Map).cast<String, dynamic>(); } else { return const Invalid({ 'body': ['must be an object'] }); }

final errors = <String, List<String>>{}; final validated = <String, dynamic>{};

for (final entry in fields.entries) { final fieldName = entry.key; final validator = entry.value; final fieldValue = map[fieldName];

final result = validator.validate(fieldValue); switch (result) { case Valid(:final value): validated[fieldName] = value; case final Invalid invalid: // Prefix errors with field name for (final e in invalid.errors.entries) { final key = e.key == 'value' ? fieldName : '$fieldName.${e.key}'; errors[key] = e.value; } } }

if (errors.isNotEmpty) { return Invalid(errors); }

return Valid(constructor(validated)); }