in lib/src/diff_alg.dart [27:61]
List<DiffItem> diff(InfoHelper before, InfoHelper after) {
List<DiffItem> changedElements = <DiffItem>[];
for (String path in before.joinedPaths) {
String beforeId = before.idFromJoinedPath(path);
int beforeSize = before.sizeOf(beforeId);
if (beforeSize == null) continue;
if (after.idFromJoinedPath(path) != null) {
String afterId = after.idFromJoinedPath(path);
int afterSize = after.sizeOf(afterId);
if (afterSize == null) continue;
int diff = afterSize - beforeSize;
if (diff == 0) {
continue;
} else if (diff > 0) {
changedElements.add(new DiffItem('partial-add', path, diff));
} else {
changedElements.add(new DiffItem('partial-remove', path, diff));
}
} else {
changedElements.add(new DiffItem("full-remove", path, -beforeSize));
}
}
for (String path in after.joinedPaths) {
String afterId = after.idFromJoinedPath(path);
int afterSize = after.sizeOf(afterId);
if (afterSize == null) continue;
if (before.idFromJoinedPath(path) == null) {
changedElements.add(new DiffItem("full-add", path, afterSize));
}
}
changedElements.sort((a, b) => -a.diff.abs().compareTo(b.diff.abs()));
return changedElements;
}