зеркало из https://github.com/github/docs.git
46 строки
1.5 KiB
JavaScript
46 строки
1.5 KiB
JavaScript
// Fastly provides a Soft Purge feature that allows you to mark content as outdated (stale) instead of permanently
|
|
// purging and thereby deleting it from Fastly's caches. Objects invalidated with Soft Purge will be treated as
|
|
// outdated (stale) while Fastly fetches a new version from origin.
|
|
//
|
|
// Use of a surrogate key is required for soft purging
|
|
// https://docs.fastly.com/en/guides/soft-purges
|
|
// https://docs.fastly.com/en/guides/getting-started-with-surrogate-keys
|
|
|
|
// What the header needs to be called for Fastly to recognize it.
|
|
const KEY = 'surrogate-key'
|
|
|
|
export const SURROGATE_ENUMS = {
|
|
DEFAULT: 'every-deployment',
|
|
MANUAL: 'manual-purge',
|
|
}
|
|
|
|
export function setFastlySurrogateKey(res, enumKey, isCustomKey = false) {
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
if (!isCustomKey && !Object.values(SURROGATE_ENUMS).includes(enumKey)) {
|
|
throw new Error(
|
|
`Unrecognizes surrogate enumKey. ${enumKey} is not one of ${Object.values(
|
|
SURROGATE_ENUMS,
|
|
)}`,
|
|
)
|
|
}
|
|
}
|
|
res.set(KEY, enumKey)
|
|
}
|
|
|
|
export function setDefaultFastlySurrogateKey(req, res, next) {
|
|
res.set(KEY, `${SURROGATE_ENUMS.DEFAULT} ${makeLanguageSurrogateKey()}`)
|
|
return next()
|
|
}
|
|
|
|
export function setLanguageFastlySurrogateKey(req, res, next) {
|
|
res.set(KEY, `${SURROGATE_ENUMS.DEFAULT} ${makeLanguageSurrogateKey(req.language)}`)
|
|
return next()
|
|
}
|
|
|
|
export function makeLanguageSurrogateKey(langCode = null) {
|
|
if (!langCode) {
|
|
return 'no-language'
|
|
}
|
|
return `language:${langCode}`
|
|
}
|