diff method

Future<Map<String, DVFieldChange>> diff(
  1. DVContentVersion<T> version, {
  2. DVContentVersion<T>? against,
})

The top-level fields version changes relative to against, or to the published version when against is null.

Implementation

Future<Map<String, DVFieldChange>> diff(
  DVContentVersion<T> version, {
  DVContentVersion<T>? against,
}) async {
  final DVContentVersion<T>? base =
      against ?? await current(version.documentId);
  final Map<String, Object?> before = base == null
      ? const <String, Object?>{}
      : _encode(base.document);
  final Map<String, Object?> after = _encode(version.document);
  return <String, DVFieldChange>{
    for (final String key in <String>{...before.keys, ...after.keys})
      if (_canonicalJson(before[key]) != _canonicalJson(after[key]))
        key: DVFieldChange(from: before[key], to: after[key]),
  };
}