initial commit with cache support & example

This commit is contained in:
Kingkor Roy Tirtho
2022-02-07 00:11:15 +06:00
commit c7169b04c7
65 changed files with 7155 additions and 0 deletions
@@ -0,0 +1,45 @@
bool notNull(Object? any) {
return any != null;
}
Map<String, dynamic>? _recursivelyAddAll(
Map<String, dynamic>? target,
Map<String, dynamic>? source,
) {
target = Map<String, dynamic>.from(target ?? {});
source?.forEach((String key, dynamic value) {
if (target!.containsKey(key) &&
target[key] is Map<String, dynamic> &&
value != null &&
value is Map<String, dynamic>) {
target[key] = _recursivelyAddAll(
target[key] as Map<String, dynamic>,
value,
);
} else {
// Lists and nulls overwrite target as if they were normal scalars
target[key] = value;
}
});
return target;
}
/// Deeply merges `maps` into a new map, merging nested maps recursively.
///
/// Paths in the rightmost maps override those in the earlier ones, so:
/// ```
/// print(deeplyMergeLeft([
/// {'keyA': 'a1'},
/// {'keyA': 'a2', 'keyB': 'b2'},
/// {'keyB': 'b3'}
/// ]));
/// // { keyA: a2, keyB: b3 }
/// ```
///
/// Conflicting [List]s are overwritten like scalars
Map<String, dynamic>? deeplyMergeLeft(
Iterable<Map<String, dynamic>?> maps,
) {
// prepend an empty literal for functional immutability
return (<Map<String, dynamic>?>[{}]..addAll(maps)).reduce(_recursivelyAddAll);
}