JsonSchemaValidator constructor

JsonSchemaValidator(
  1. Object? schema, {
  2. Map<String, Object?> registry = const {},
  3. JsonSchemaDialect defaultDialect = JsonSchemaDialect.draft2020,
  4. JsonSchemaLimits limits = const JsonSchemaLimits(),
  5. bool assertFormat = false,
  6. String baseUri = 'urn:mcp:schema',
})

Builds the validator, refusing a schema it cannot evaluate faithfully.

registry maps absolute URIs to further schema documents references may name. defaultDialect applies to a schema without $schema.

Implementation

JsonSchemaValidator(
  Object? schema, {
  Map<String, Object?> registry = const {},
  JsonSchemaDialect defaultDialect = JsonSchemaDialect.draft2020,
  this.limits = const JsonSchemaLimits(),
  this.assertFormat = false,
  String baseUri = 'urn:mcp:schema',
}) : _root = schema {
  if (schema is! bool && schema is! Map) {
    throw JsonSchemaException('a schema is an object or a boolean');
  }
  for (final meta in jsonSchemaMetaSchemas.entries) {
    final doc = jsonDecode(meta.value);
    _addDocument(doc, Uri.parse(meta.key), _documentDialect(doc, defaultDialect));
  }
  _metaSubschemas = _indexed.length;
  for (final e in registry.entries) {
    _addDocument(e.value, Uri.parse(_stripEmptyFragment(e.key)),
        _documentDialect(e.value, defaultDialect));
  }
  _dialect = _dialectOf(schema, defaultDialect, (uri) => _resources[uri]?.node);
  _vocabularyValidation = _validationVocabularyActive(schema);
  _refs.clear(); // only the schema's own references are checked up front
  _rootBase = _addDocument(schema, Uri.parse(baseUri), _dialect);
  _checkReferences();
}