JsonSchemaValidator constructor
JsonSchemaValidator(
- Object? schema, {
- Map<
String, Object?> registry = const {}, - JsonSchemaDialect defaultDialect = JsonSchemaDialect.draft2020,
- JsonSchemaLimits limits = const JsonSchemaLimits(),
- bool assertFormat = false,
- 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();
}