parse method

Parses YAML content with layout metadata extraction.

Returns a LayoutAwareParseResult containing both the parsed data map and key-level metadata for preserving layout information.

yaml - The YAML string to parse

Implementation

LayoutAwareParseResult parse(String yaml) {
  if (yaml.isEmpty) {
    return const LayoutAwareParseResult(data: {});
  }

  try {
    // Check for multi-document YAML
    final documents = _parseMultiDocument(yaml);
    if (documents.length > 1) {
      return _parseMultipleDocuments(yaml, documents);
    }

    // Single document parsing
    final doc = loadYaml(yaml);
    if (doc == null) {
      return const LayoutAwareParseResult(data: {});
    }

    // Get the raw YAML node for metadata extraction
    final yamlDoc = loadYamlDocument(yaml);

    final result = _parseNode(yamlDoc.contents, yaml);

    return LayoutAwareParseResult(
      data: result.data is Map<String, dynamic>
          ? result.data as Map<String, dynamic>
          : {'_value': result.data},
      keyMeta: result.keyMeta.isEmpty ? null : result.keyMeta,
    );
  } catch (e) {
    throw FormatException(TurboConstants.failedToParseYaml(e));
  }
}