eskemaStrict function

IValidator eskemaStrict(
  1. Map<String, IValidator> schema, {
  2. String? message,
})

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);
}