1
- /* eslint-disable max-lines-per-function */
1
+ /* eslint-disable max-lines-per-function, max-lines */
2
2
const { promises, createWriteStream, existsSync } = require ( 'fs' )
3
3
const { Server } = require ( 'http' )
4
4
const { tmpdir } = require ( 'os' )
@@ -19,6 +19,10 @@ const makeHandler =
19
19
// eslint-disable-next-line node/no-missing-require
20
20
require . resolve ( './pages.js' )
21
21
} catch { }
22
+ // eslint-disable-next-line no-underscore-dangle
23
+ process . env . _BYPASS_SSG = 'true'
24
+
25
+ const ONE_YEAR_IN_SECONDS = 31536000
22
26
23
27
// We don't want to write ISR files to disk in the lambda environment
24
28
conf . experimental . isrFlushToDisk = false
@@ -114,6 +118,22 @@ const makeHandler =
114
118
const bridge = new Bridge ( server )
115
119
bridge . listen ( )
116
120
121
+ const getMaxAge = ( header ) => {
122
+ const parts = header . split ( ',' )
123
+ let maxAge
124
+ for ( const part of parts ) {
125
+ const [ key , value ] = part . split ( '=' )
126
+ if ( key ?. trim ( ) === 's-max-age' ) {
127
+ maxAge = value ?. trim ( )
128
+ }
129
+ }
130
+ if ( maxAge ) {
131
+ const result = Number . parseInt ( maxAge )
132
+ return Number . isNaN ( result ) ? 0 : result
133
+ }
134
+ return 0
135
+ }
136
+
117
137
return async ( event , context ) => {
118
138
// Ensure that paths are encoded - but don't double-encode them
119
139
event . path = new URL ( event . path , event . rawUrl ) . pathname
@@ -147,7 +167,14 @@ const makeHandler =
147
167
// Sending SWR headers causes undefined behaviour with the Netlify CDN
148
168
const cacheHeader = multiValueHeaders [ 'cache-control' ] ?. [ 0 ]
149
169
if ( cacheHeader ?. includes ( 'stale-while-revalidate' ) ) {
150
- console . log ( { cacheHeader } )
170
+ if ( mode === 'odb' && process . env . EXPERIMENTAL_ODB_TTL ) {
171
+ mode = 'isr'
172
+ const ttl = getMaxAge ( cacheHeader )
173
+ // Long-expiry TTL is basically no TTL
174
+ if ( ttl > 0 && ttl < ONE_YEAR_IN_SECONDS ) {
175
+ result . ttl = Math . min ( ttl , 60 )
176
+ }
177
+ }
151
178
multiValueHeaders [ 'cache-control' ] = [ 'public, max-age=0, must-revalidate' ]
152
179
}
153
180
multiValueHeaders [ 'x-render-mode' ] = [ mode ]
@@ -186,4 +213,4 @@ exports.handler = ${
186
213
`
187
214
188
215
module . exports = getHandler
189
- /* eslint-enable max-lines-per-function */
216
+ /* eslint-enable max-lines-per-function, max-lines */
0 commit comments