write method
Stores entry, including its variant key and response metadata.
Implementation
@override
Future<void> write(AlphaXCacheEntry entry) async {
if (entry.bodyBytes.length > maxBytes) {
return;
}
final sameIdentity = _entries
.where((existing) => _sameIdentityResource(existing.key, entry.key))
.toList(growable: false);
final incomingVary = entry.vary.toSet();
if (sameIdentity.any(
(existing) =>
existing.vary.toSet().difference(incomingVary).isNotEmpty ||
incomingVary.difference(existing.vary.toSet()).isNotEmpty,
)) {
_entries.removeWhere((existing) => _sameIdentityResource(existing.key, entry.key));
} else {
_entries.removeWhere(
(existing) =>
_sameIdentityResource(existing.key, entry.key) &&
existing.vary.toSet().containsAll(incomingVary) &&
incomingVary.containsAll(existing.vary) &&
_sameHeaders(existing.key.requestHeaders, entry.key.requestHeaders),
);
}
_entries.add(entry);
while (_entries.length > maxEntries || totalBytes > maxBytes) {
_entries.removeAt(0);
}
}