SSEResponse.parse constructor

SSEResponse.parse(
  1. String rawResponse
)

Parses a raw SSE response string and returns an SSEResponse instance.

rawResponse is the raw response string to parse. Returns an SSEResponse instance with the parsed data.

Implementation

factory SSEResponse.parse(String rawResponse) {
  String? id;
  String? event;
  String? comment;
  StringBuffer dataBuffer = StringBuffer();

  final RegExp regex = RegExp(r'^(id|event|data|:|comment):\s*(.*)$');

  for (String line in rawResponse.split('\n')) {
    final match = regex.firstMatch(line);
    if (match != null) {
      final key = match.group(1);
      final value = match.group(2)?.trim() ?? '';

      switch (key) {
        case 'id':
          id = value;
          break;
        case 'event':
          event = value;
          break;
        case 'data':
          if (dataBuffer.isNotEmpty) dataBuffer.write('\n');
          dataBuffer.write(value);
          break;
        case ':':
          comment = value;
          break;
      }
    }
  }

  dynamic parsedData;
  final jsonData = dataBuffer.toString();
  if (jsonData.isNotEmpty) {
    try {
      parsedData = json.decode(jsonData);
    } catch (e) {
      return SSEResponse.raw(rawResponse);
    }
  }

  return SSEResponse(
      id ?? '', event ?? '', comment ?? '', parsedData, rawResponse);
}