validateCatalogItemExamples function
Future<List<ExampleValidationError> >
validateCatalogItemExamples(
- CatalogItem item,
- Catalog catalog
Validates the examples for a single catalog item.
The item is the CatalogItem to validate.
The catalog is the full catalog used for context, including any
additional catalogs.
Returns a list of validation errors. An empty list means success.
Implementation
Future<List<ExampleValidationError>> validateCatalogItemExamples(
CatalogItem item,
Catalog catalog,
) async {
final Schema schema = A2uiSchemas.surfaceUpdateSchema(catalog);
final errors = <ExampleValidationError>[];
for (var i = 0; i < item.exampleData.length; i++) {
final String exampleJsonString = item.exampleData[i]();
final List<Object?> exampleData;
try {
exampleData = jsonDecode(exampleJsonString) as List<Object?>;
} catch (e) {
errors.add(
ExampleValidationError(i, 'Failed to parse as a JSON list', cause: e),
);
continue;
}
final List<Component> components = exampleData
.map((e) => Component.fromJson(e as JsonMap))
.toList();
if (components.every((c) => c.id != 'root')) {
errors.add(
ExampleValidationError(
i,
'Example must have a component with id "root"',
),
);
}
final surfaceUpdate = SurfaceUpdate(
surfaceId: 'test-surface',
components: components,
);
final List<ValidationError> validationErrors = await schema.validate(
surfaceUpdate.toJson(),
);
if (validationErrors.isNotEmpty) {
errors.add(
ExampleValidationError(
i,
'Schema validation failed',
cause: validationErrors,
),
);
}
}
return errors;
}