compute static method

List<DbLensDiffField> compute({
  1. String? beforeJson,
  2. String? afterJson,
  3. List<String>? changedColumns,
})

Implementation

static List<DbLensDiffField> compute({
  String? beforeJson,
  String? afterJson,
  List<String>? changedColumns,
}) {
  final before = _tryParse(beforeJson);
  final after = _tryParse(afterJson);
  final keys = <String>{...before.keys, ...after.keys}.toList()..sort();
  final changedSet = changedColumns?.toSet();

  return keys.map((key) {
    final hasBefore = before.containsKey(key);
    final hasAfter = after.containsKey(key);

    final DbLensDiffKind kind;
    if (hasBefore && !hasAfter) {
      kind = DbLensDiffKind.removed;
    } else if (!hasBefore && hasAfter) {
      kind = DbLensDiffKind.added;
    } else if (changedSet != null) {
      kind = changedSet.contains(key)
          ? DbLensDiffKind.changed
          : DbLensDiffKind.unchanged;
    } else {
      kind = jsonEncode(before[key]) != jsonEncode(after[key])
          ? DbLensDiffKind.changed
          : DbLensDiffKind.unchanged;
    }

    return DbLensDiffField(
      key: key,
      beforeValue: before[key],
      afterValue: after[key],
      kind: kind,
    );
  }).toList();
}