next.js/packages/next/src/server/lib/cache-control.ts
cache-control.ts36 lines1.0 KB
import { CACHE_ONE_YEAR_SECONDS } from '../../lib/constants'

/**
 * The revalidate option used internally for pages. A value of `false` means
 * that the page should not be revalidated. A number means that the page
 * should be revalidated after the given number of seconds (this also includes
 * `1` which means to revalidate after 1 second). A value of `0` is not a valid
 * value for this option.
 */
export type Revalidate = number | false

export interface CacheControl {
  revalidate: Revalidate
  expire: number | undefined
}

export function getCacheControlHeader({
  revalidate,
  expire,
}: CacheControl): string {
  const swrHeader =
    typeof revalidate === 'number' &&
    expire !== undefined &&
    revalidate < expire
      ? `, stale-while-revalidate=${expire - revalidate}`
      : ''

  if (revalidate === 0) {
    return 'private, no-cache, no-store, max-age=0, must-revalidate'
  } else if (typeof revalidate === 'number') {
    return `s-maxage=${revalidate}${swrHeader}`
  }

  return `s-maxage=${CACHE_ONE_YEAR_SECONDS}${swrHeader}`
}
Quest for Codev2.0.0
/
SIGN IN