eskemaStrict function

IValidator eskemaStrict(
  1. Map<String, IValidator> schema
)

Returns a Validator that checks a value against a Map eskema and fails if any keys exist in the map that are not defined in the schema.

Example:

final validator = eskemaStrict({ 'name': isString() });

validator.validate({ 'name': 'test' }); // valid
validator.validate({ 'name': 'test', 'age': 25 }); // invalid

Implementation

IValidator eskemaStrict(Map<String, IValidator> schema) {
  return eskema(schema) &
      Validator((value) {
        final map = value as Map<String, dynamic>;
        final unknownKeys = map.keys.where((key) => !schema.containsKey(key)).toList();

        if (unknownKeys.isEmpty) {
          return Result.valid(value);
        }

        return Result.invalid(
          value,
          expectations: [
            Expectation(message: 'has unknown keys: ${unknownKeys.join(', ')}', value: value, code: 'structure.unknown_key', data: {'keys': unknownKeys})
          ],
        );
      });
}