eskemaStrict function
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, {String? message}) {
FutureOr<Result> strictEskemaPredicate(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: message ?? 'has unknown keys: ${unknownKeys.join(', ')}',
value: value,
code: ExpectationCodes.structureUnknownKey,
data: {'keys': unknownKeys},
),
],
);
}
return eskema(schema) & Validator(strictEskemaPredicate);
}