parse method

List<JsonSchemaProperty> parse(
  1. Map<String, dynamic> schema
)

Parse a complete JSON Schema to list of properties.

Implementation

List<JsonSchemaProperty> parse(Map<String, dynamic> schema) {
  final requiredFields =
      (schema['required'] as List?)?.cast<String>() ?? <String>[];
  final properties =
      schema['properties'] as Map<String, dynamic>? ?? <String, dynamic>{};

  // Extract definitions for $ref resolution
  final defs = schema['\$defs'] as Map<String, dynamic>? ??
      schema['definitions'] as Map<String, dynamic>? ??
      definitions;

  final result = <JsonSchemaProperty>[];

  for (final entry in properties.entries) {
    final prop = _parseProperty(
      entry.key,
      entry.value as Map<String, dynamic>,
      requiredFields.contains(entry.key),
      defs,
      uiSchema[entry.key] as Map<String, dynamic>? ?? const {},
    );
    if (prop != null && !prop.uiHidden) {
      result.add(prop);
    }
  }

  // Sort by ui:order if specified
  result.sort((a, b) {
    final orderA = a.uiOrder ?? 999;
    final orderB = b.uiOrder ?? 999;
    return orderA.compareTo(orderB);
  });

  return result;
}