UNPKG

@next-boost/next-boost

Version:

Add a cache layer for next.js SSR pages. Use stale-while-revalidate to boost the performance.

51 lines (50 loc) 1.64 kB
/// <reference types="node" /> import { IncomingMessage } from 'http'; import { Metrics } from './metrics'; import { PagePayload } from './payload'; import Renderer, { RequestListener } from './renderer'; export declare type CacheKeyBuilder = (req: IncomingMessage) => string; export declare type CacheStatus = 'hit' | 'stale' | 'miss'; export declare type Cache = { set(key: string, value: Buffer, ttl?: number): Promise<void>; get(key: string, defaultValue?: Buffer): Promise<Buffer | undefined>; has(key: string): Promise<CacheStatus>; del(key: string): Promise<void>; }; export declare type CacheAdapter = { init(): Promise<Cache>; shutdown(): Promise<void>; }; export declare type URLCacheRuleResolver = (req: IncomingMessage) => number; export interface HandlerConfig { filename?: string; quiet?: boolean; rules?: Array<URLCacheRule> | URLCacheRuleResolver; cacheAdapter?: CacheAdapter; paramFilter?: ParamFilter; cacheKey?: CacheKeyBuilder; metrics?: boolean; } export interface URLCacheRule { regex: string; ttl: number; } export declare type ParamFilter = (param: string) => boolean; declare type RendererType = ReturnType<typeof Renderer>; export declare type WrappedHandler = (cache: Cache, conf: HandlerConfig, renderer: RendererType, plainHandler: RequestListener, metrics: Metrics) => RequestListener; export declare type State = { status: 'hit' | 'fulfill'; payload: PagePayload; } | { status: 'stale'; payload: PagePayload; } | { status: 'miss'; } | { status: 'timeout'; } | { status: 'force'; } | { status: 'bypass'; }; export {};