1
1
'use strict'
2
2
3
+ const createCompress = require ( 'compress-brotli' )
3
4
const { resolve : urlResolve } = require ( 'url' )
4
5
const normalizeUrl = require ( 'normalize-url' )
5
6
const { parse } = require ( 'querystring' )
@@ -9,9 +10,7 @@ const assert = require('assert')
9
10
const { URL } = require ( 'url' )
10
11
const Keyv = require ( 'keyv' )
11
12
12
- const { decompress : brotliDecompress , compress : brotliCompress } = require ( 'iltorb' )
13
-
14
- const getEtag = data => computeEtag ( typeof data === 'string' ? data : JSON . stringify ( data ) )
13
+ const getEtag = data => computeEtag ( JSON . stringify ( data ) )
15
14
16
15
const getKey = url => {
17
16
const { origin } = new URL ( url )
@@ -45,7 +44,7 @@ const createSetHeaders = ({ revalidate }) => {
45
44
46
45
module . exports = ( {
47
46
cache = new Keyv ( { namespace : 'ssr' } ) ,
48
- compress = false ,
47
+ compress : enableCompression = false ,
49
48
get,
50
49
send,
51
50
revalidate = ttl => ttl / 24 ,
@@ -58,6 +57,8 @@ module.exports = ({
58
57
revalidate : typeof revalidate === 'function' ? revalidate : ( ) => revalidate
59
58
} )
60
59
60
+ const { compress, decompress } = createCompress ( { enable : enableCompression } )
61
+
61
62
return async ( { req, res, ...opts } ) => {
62
63
const hasForce = Boolean ( req . query ? req . query . force : parse ( req . url . split ( '?' ) [ 1 ] ) . force )
63
64
const url = urlResolve ( 'http://localhost' , req . url )
@@ -67,8 +68,7 @@ module.exports = ({
67
68
const hasData = cachedData !== undefined
68
69
const isHit = ! hasForce && hasData
69
70
70
- const cachedResult =
71
- compress && hasData ? JSON . parse ( await brotliDecompress ( cachedData ) ) : cachedData
71
+ const cachedResult = await decompress ( cachedData )
72
72
73
73
const { etag : cachedEtag , ttl = defaultTtl , createdAt = Date . now ( ) , data, ...props } = isHit
74
74
? cachedResult
@@ -87,7 +87,7 @@ module.exports = ({
87
87
88
88
if ( ! isHit ) {
89
89
const payload = { etag, createdAt, ttl, data, ...props }
90
- const value = compress ? await brotliCompress ( Buffer . from ( JSON . stringify ( payload ) ) ) : payload
90
+ const value = await compress ( payload )
91
91
await cache . set ( key , value , ttl )
92
92
}
93
93
0 commit comments