resolveCompressionEncodings static method
Resolves compressionEncodings (a List or a comma separated String,
e.g. br,gzip), falling back to server.compression_encodings in
apiConfig, then to APIContentEncoding.defaultEncodings.
true(oron/yes) uses the defaults.- An empty value,
false(ornone/off/no) disables the response compression. - Unknown encodings are ignored (logged). If none is known, the defaults are used.
Implementation
static List<APIContentEncoding> resolveCompressionEncodings(
Object? compressionEncodings, {
APIConfig? apiConfig,
}) {
compressionEncodings ??= apiConfig?.getPath(
'server',
'compression_encodings',
);
if (compressionEncodings is bool) {
return compressionEncodings
? APIContentEncoding.defaultEncodings
: const <APIContentEncoding>[];
}
// Not defined, or enabled without a list:
if (compressionEncodings == null ||
_compressionEnabledValues.contains(
compressionEncodings.toString().trim().toLowerCase(),
)) {
return APIContentEncoding.defaultEncodings;
}
var items = compressionEncodings is Iterable
? compressionEncodings
: compressionEncodings.toString().split(',');
var encodings = <APIContentEncoding>[];
var unknown = <String>[];
var disabled = false;
for (var e in items) {
var encoding = APIContentEncoding.parse(e);
if (encoding != null) {
if (!encodings.contains(encoding)) encodings.add(encoding);
continue;
}
var name = '${e ?? ''}'.trim().toLowerCase();
if (name.isEmpty) continue;
if (_compressionDisabledValues.contains(name)) {
disabled = true;
} else {
unknown.add(name);
}
}
if (encodings.isEmpty && (disabled || unknown.isEmpty)) {
return const <APIContentEncoding>[];
}
if (encodings.isEmpty) {
_log.warning(
"Unknown `compression_encodings`: $unknown. "
"Using the defaults: ${APIContentEncoding.defaultEncodings.map((e) => e.name).toList()}",
);
return APIContentEncoding.defaultEncodings;
} else if (unknown.isNotEmpty) {
_log.warning("Ignoring unknown `compression_encodings`: $unknown");
}
return List.unmodifiable(encodings);
}