parsePage method
Implementation
(List<T> upserts, List<Id> deletes) parsePage(
List<Map<String, dynamic>> rows,
) {
final upserts = <T>[];
final deletes = <Id>[];
var skipped = 0;
for (final m in rows) {
// Defensive checks: skip rows without required fields
if (!m.containsKey(config.idField)) {
skipped++;
continue;
}
if (!m.containsKey(config.scopeNameField)) {
skipped++;
continue;
}
if (!m.containsKey(config.scopeKeysField)) {
skipped++;
continue;
}
final idRaw = m[config.idField];
if (idRaw is! String) {
skipped++;
continue;
}
final isDeleted =
config.deletedAtField != null && m[config.deletedAtField!] != null;
if (isDeleted) {
deletes.add(config.idFromString(idRaw));
} else {
upserts.add(config.fromJson(m));
}
}
config.onParsePageStats?.call(skipped: skipped, total: rows.length);
return (upserts, deletes);
}