| // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:collection'; |
| |
| import 'package:http_parser/http_parser.dart'; |
| |
| import 'util.dart'; |
| |
| final _emptyHeaders = Headers._empty(); |
| |
| /// Unmodifiable, key-insensitive header map. |
| class Headers extends UnmodifiableMapView<String, List<String>> { |
| late final Map<String, String> singleValues = UnmodifiableMapView( |
| CaseInsensitiveMap.from( |
| map((key, value) => MapEntry(key, joinHeaderValues(value)!)), |
| ), |
| ); |
| |
| factory Headers.from(Map<String, List<String>>? values) { |
| if (values == null || values.isEmpty) { |
| return _emptyHeaders; |
| } else if (values is Headers) { |
| return values; |
| } else { |
| return Headers._(values); |
| } |
| } |
| |
| Headers._(Map<String, List<String>> values) |
| : super(CaseInsensitiveMap.from(Map.fromEntries(values.entries |
| .where((e) => e.value.isNotEmpty) |
| .map((e) => MapEntry(e.key, List.unmodifiable(e.value)))))); |
| |
| Headers._empty() : super(const {}); |
| |
| factory Headers.empty() => _emptyHeaders; |
| } |