@@ -7,7 +7,7 @@ const Keyv = require('@keyvhq/core')
7
7
const assert = require ( 'assert' )
8
8
const getEtag = require ( 'etag' )
9
9
10
- const { hasQueryParameter, createSetHeaders } = require ( './util' )
10
+ const { hasQueryParameter, setHeaders } = require ( './util' )
11
11
12
12
const cacheableResponse = ( {
13
13
bypassQueryParameter = 'force' ,
@@ -17,29 +17,36 @@ const cacheableResponse = ({
17
17
getKey = require ( './util' ) . getKey ,
18
18
send,
19
19
staleTtl : rawStaleTtl = 3600000 ,
20
- ttl : defaultTtl = 86400000 ,
20
+ ttl : rawTtl = 86400000 ,
21
21
...compressOpts
22
22
} = { } ) => {
23
23
assert ( get , '.get required' )
24
24
assert ( send , '.send required' )
25
25
26
- const staleTtl = typeof rawStaleTtl === 'number' ? rawStaleTtl : undefined
26
+ const isStaleEnabled = rawStaleTtl !== false
27
+
28
+ const staleTtl = isStaleEnabled
29
+ ? typeof rawStaleTtl === 'function'
30
+ ? rawStaleTtl
31
+ : ( { staleTtl = rawStaleTtl } = { } ) => staleTtl
32
+ : undefined
33
+
34
+ const ttl =
35
+ typeof rawTtl === 'function' ? rawTtl : ( { ttl = rawTtl } = { } ) => ttl
27
36
28
37
const { serialize, compress, decompress } = createCompress ( {
29
38
enable : enableCompression ,
30
39
...compressOpts
31
40
} )
32
41
33
42
const memoGet = memoize ( get , cache , {
34
- ttl : ( { ttl = defaultTtl } = { } ) => ttl ,
43
+ ttl,
35
44
staleTtl,
36
45
objectMode : true ,
37
46
key : opts => getKey ( opts , { bypassQueryParameter } ) ,
38
47
value : compress
39
48
} )
40
49
41
- const setHeaders = createSetHeaders ( { staleTtl } )
42
-
43
50
return async opts => {
44
51
const { req, res } = opts
45
52
const hasForce = hasQueryParameter ( req , bypassQueryParameter )
@@ -50,10 +57,11 @@ const cacheableResponse = ({
50
57
const isHit = ! hasForce && ! isExpired && hasValue
51
58
52
59
const {
53
- etag : cachedEtag ,
54
- ttl = defaultTtl ,
55
60
createdAt = Date . now ( ) ,
56
61
data = null ,
62
+ etag : cachedEtag ,
63
+ staleTtl = isStaleEnabled ? memoGet . staleTtl ( result ) : undefined ,
64
+ ttl = memoGet . ttl ( result ) ,
57
65
...props
58
66
} = result
59
67
@@ -79,6 +87,7 @@ const cacheableResponse = ({
79
87
isHit,
80
88
isStale,
81
89
ttl,
90
+ staleTtl,
82
91
hasForce
83
92
} )
84
93
0 commit comments