@@ -16,30 +16,64 @@ const internals = {
1616 'deflate, gzip' ,
1717 'gzip' ,
1818 'deflate'
19- ]
19+ ] ,
20+ provision : new Map ( [
21+ [ 'zstd' , [
22+ ( options ) => Zlib . createZstdCompress ( options ) ,
23+ ( options ) => Zlib . createZstdDecompress ( options ) ,
24+ {
25+ params : {
26+ [ Zlib . constants . ZSTD_c_compressionLevel ] : 6
27+ }
28+ }
29+ ] ] ,
30+ [ 'br' , [
31+ ( options ) => Zlib . createBrotliCompress ( options ) ,
32+ ( options ) => Zlib . createBrotliDecompress ( options ) ,
33+ {
34+ params : {
35+ [ Zlib . constants . BROTLI_PARAM_QUALITY ] : 4
36+ }
37+ }
38+ ] ] ,
39+ [ 'deflate' , [
40+ ( options ) => Zlib . createDeflate ( options ) ,
41+ ( options ) => Zlib . createInflate ( options )
42+ ] ] ,
43+ [ 'gzip' , [
44+ ( options ) => Zlib . createGzip ( options ) ,
45+ ( options ) => Zlib . createGunzip ( options )
46+ ] ]
47+ ] )
2048} ;
2149
2250
2351exports = module . exports = internals . Compression = class {
2452
25- decoders = {
26- gzip : ( options ) => Zlib . createGunzip ( options ) ,
27- deflate : ( options ) => Zlib . createInflate ( options )
28- } ;
53+ decoders = { } ;
2954
30- encodings = [ 'identity' , 'gzip' , 'deflate' ] ;
55+ encodings = [ 'identity' ] ;
3156
3257 encoders = {
33- identity : null ,
34- gzip : ( options ) => Zlib . createGzip ( options ) ,
35- deflate : ( options ) => Zlib . createDeflate ( options )
58+ identity : null
3659 } ;
3760
3861 #common = null ;
3962
40- constructor ( ) {
63+ constructor ( { compression } ) {
4164
42- this . _updateCommons ( ) ;
65+ if ( ! compression ) {
66+ this . _updateCommons ( ) ;
67+ }
68+
69+ for ( const [ alg , [ encoder , decoder , defaults = { } ] ] of internals . provision . entries ( ) ) {
70+ let conditions = compression ?. encodings ?. [ alg ] ;
71+ if ( conditions ) {
72+ conditions = Hoek . applyToDefaults ( defaults , conditions ) ;
73+ this . addEncoder ( alg , ( options = { } ) => encoder ( Hoek . applyToDefaults ( conditions , options ) ) ) ;
74+ this . addDecoder ( alg , ( options = { } ) => decoder ( Hoek . applyToDefaults ( conditions , options ) ) ) ;
75+ }
76+ }
4377 }
4478
4579 _updateCommons ( ) {
@@ -125,29 +159,6 @@ exports = module.exports = internals.Compression = class {
125159 return encoder ( request . route . settings . compression [ encoding ] ) ;
126160 }
127161
128- enableBrotliCompression ( compressionOptions ) {
129-
130- const defaults = {
131- params : {
132- [ Zlib . constants . BROTLI_PARAM_QUALITY ] : 4
133- }
134- } ;
135- compressionOptions = Hoek . applyToDefaults ( defaults , compressionOptions ) ;
136- this . decoders . br = ( options ) => Zlib . createBrotliDecompress ( { ...options , ...compressionOptions } ) ;
137- this . encoders . br = ( options ) => Zlib . createBrotliCompress ( { ...options , ...compressionOptions } ) ;
138- this . setPriority ( [ 'br' ] ) ;
139- }
140-
141- enableZstdCompression ( compressionOptions ) {
142-
143- /* $lab:coverage:off$ */
144- Hoek . assert ( ! ! Zlib . constants . ZSTD_CLEVEL_DEFAULT , 'Zstd is not supported by the engine' ) ;
145- this . decoders . zstd = ( options ) => Zlib . createZstdDecompress ( { ...options , ...compressionOptions } ) ;
146- this . encoders . zstd = ( options ) => Zlib . createZstdCompress ( { ...options , ...compressionOptions } ) ;
147- this . setPriority ( [ 'zstd' ] ) ;
148- /* $lab:coverage:on$ */
149- }
150-
151162 setPriority ( priority ) {
152163
153164 this . encodings = [ ...new Set ( [ ...priority , ...this . encodings ] ) ] ;
0 commit comments