@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
TypeScript
/// <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 {};