denormalize method

List<Map<String, dynamic>> denormalize(
  1. Map<String, dynamic> op
)

Denormalizes a single operation map by splitting newlines into separate operations.

op is a Map representing a single operation within the Delta.

Implementation

List<Map<String, dynamic>> denormalize(Map<String, dynamic> op) {
  const newLine = '\n';
  final insertValue = op['insert'];
  if (insertValue is Map || insertValue == newLine) {
    return <Map<String, dynamic>>[op];
  }

  final List<String> newlinedArray =
      tokenizeWithNewLines(insertValue.toString());

  if (newlinedArray.length == 1) {
    return <Map<String, dynamic>>[op];
  }

  // Copy op to retain its attributes, but replace the insert value with a newline.
  final Map<String, dynamic> nlObj = <String, dynamic>{
    ...op,
    ...<String, String>{'insert': newLine}
  };

  return newlinedArray.map((String line) {
    if (line == newLine) {
      return nlObj;
    }
    return <String, dynamic>{
      ...op,
      ...<String, String>{'insert': line},
    };
  }).toList();
}