unpack method Null safety
- 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,
},
],
},
};
}