unpack method Null safety

FutureOr<Map<String, Object?>> unpack(
  1. List<ArchiveSchemaPart>? options
)
override

unpack unpacks the opened XFile object the given mappings and returns a FutureOr of Map<String, Object?>.

Implementation

@override
FutureOr<Map<String, Object?>> unpack(List<ArchiveSchemaPart>? options) {
  final partGroupByFile = options!.groupListsBy((_) => _.part);
  final jsonGroupByFile = <String, Map<String, dynamic>>{
    for (final key in partGroupByFile.keys)
      key: jsonDecode(String.fromCharCodes(_dotDirectory![key]!.content))
  };

  final instant = clock.now();
  final archiveId = Slugid.nice().toString();
  final meta = {
    'archiveId': archiveId,
  };

  final result = <String, List>{};

  jsonGroupByFile.forEach((key, value) {
    partGroupByFile[key]
        ?.forEach((element) => Normalize(element.schema).accumulate(
              element.id,
              value,
              (String name, dynamic key, dynamic entity) {
                result[name] ??= [];
                result[name]!.add(entity);
              },
            ));
  });

  return {
    'id': archiveId,
    'created': instant,
    'updated': instant,
    ...meta,
    ...{
      for (final r in result.entries)
        r.key: [
          for (final s in r.value.cast<Map<String, dynamic>>())
            {
              ...meta,
              ...s,
            },
        ],
    },
  };
}