44import {
55 acceptsEncodings ,
66 ContentNegotiationHeader ,
7+ isIterable ,
78 type Middleware ,
89 vary ,
910} from "./deps.ts" ;
@@ -12,7 +13,7 @@ import { Gzip } from "./encoders/gzip.ts";
1213import { Deflate } from "./encoders/deflate.ts" ;
1314import type { Encode , Encoder , EncodingMap } from "./types.ts" ;
1415
15- const DefaultEncoders : Encoder [ ] = [ Gzip , Deflate ] ;
16+ const BuiltInEncoders : Encoder [ ] = [ Gzip , Deflate ] ;
1617
1718/** Create HTTP content compression middleware.
1819 *
@@ -37,10 +38,12 @@ const DefaultEncoders: Encoder[] = [Gzip, Deflate];
3738 * assertEquals(response.headers.get("content-encoding"), "gzip");
3839 * ```
3940 */
40- export function compression ( encoders ?: Encoder [ ] | EncodingMap ) : Middleware {
41+ export function compression (
42+ encoders ?: Iterable < Encoder > | EncodingMap ,
43+ ) : Middleware {
4144 const encodingMap = {
42- ...fromEncoders ( DefaultEncoders ) ,
43- ...Array . isArray ( encoders ) ? fromEncoders ( encoders ) : encoders ,
45+ ...fromEncoders ( BuiltInEncoders ) ,
46+ ...isIterable ( encoders ) ? fromEncoders ( encoders ) : encoders ,
4447 } ;
4548 const encodings = Object . keys ( encodingMap ) ;
4649
@@ -64,8 +67,8 @@ export function flat(encoder: Encoder): [encoding: string, encode: Encode] {
6467 return [ encoder . encoding , encoder . encode ] ;
6568}
6669
67- export function fromEncoders ( encoders : readonly Encoder [ ] ) : EncodingMap {
68- return Object . fromEntries ( encoders . map ( flat ) ) ;
70+ export function fromEncoders ( encoders : Iterable < Encoder > ) : EncodingMap {
71+ return Object . fromEntries ( Array . from ( encoders ) . map ( flat ) ) ;
6972}
7073
7174const IDENTITY = "identity" ;
0 commit comments