validateAll method

  1. @override
JarResult validateAll(
  1. Map<String, dynamic>? value, [
  2. Map<String, dynamic>? allValues,
  3. String? path,
  4. Object? root,
])
override

Implementation

@override
JarResult validateAll(Map<String, dynamic>? value,
    [Map<String, dynamic>? allValues, String? path, Object? root]) {
  final effectiveRoot = root ?? value;
  final issues = <JarIssue>[];
  issues.addAll(super
      .validateAll(value, allValues ?? value, path, effectiveRoot)
      .issues);

  if (fields.isEmpty || value == null) {
    return _aggregate(issues, value);
  }

  final ignoredFields = _ignoredFields ?? [];
  if (!_allowExtra) {
    final extraFields = value.keys
        .where(
            (key) => !fields.containsKey(key) && !ignoredFields.contains(key))
        .toList();
    if (extraFields.isNotEmpty) {
      issues.add(JarIssue(
          path: path,
          code: 'unrecognized_keys',
          message: 'Extra fields are not allowed: ${extraFields.join(", ")}'));
    }
  }

  final output = <String, dynamic>{};
  fields.forEach((key, fieldSchema) {
    final childPath = path == null ? key : '$path.$key';
    final fieldResult =
        fieldSchema.validateAll(value[key], value, childPath, effectiveRoot);
    output[key] = fieldResult.value;
    issues.addAll(fieldResult.issues);
  });

  return _aggregate(issues, output);
}