Csp.merge constructor

Csp.merge(
  1. Iterable<Csp> csps
)

Merges CSP declarations.

Implementation

factory Csp.merge(Iterable<Csp> csps) {
  final directivesMap = <String, List<String>>{};
  for (var csp in csps) {
    for (var entry in csp.directivesMap.entries) {
      if (entry.key.endsWith('-src')) {
        final argument = directivesMap.putIfAbsent(entry.key, () => []);
        for (var directive in entry.value) {
          if (!argument.contains(directive)) {
            argument.add(directive);
          }
        }
        argument.addAll(entry.value);
      } else {
        directivesMap[entry.key] = entry.value;
      }
    }
  }
  return Csp.fromMap(directivesMap);
}