UNPKG

next

Version:

The React Framework

242 lines (241 loc) • 7.95 kB
import type { IncomingMessage } from 'http'; import type { ParsedUrlQuery } from 'querystring'; import type { UrlWithParsedQuery } from 'url'; import type { BaseNextRequest } from './base-http'; import type { CloneableBody } from './body-streams'; import type { RouteMatch } from './route-matches/route-match'; import type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'; import type { ServerComponentsHmrCache } from './response-cache'; import type { PagesDevOverlayBridgeType } from '../next-devtools/userspace/pages/pages-dev-overlay-setup'; export declare const NEXT_REQUEST_META: unique symbol; export type NextIncomingMessage = (BaseNextRequest | IncomingMessage) & { [NEXT_REQUEST_META]?: RequestMeta; }; export interface RequestMeta { /** * The query that was used to make the request. */ initQuery?: ParsedUrlQuery; /** * The URL that was used to make the request. */ initURL?: string; /** * The protocol that was used to make the request. */ initProtocol?: string; /** * The body that was read from the request. This is used to allow the body to * be read multiple times. */ clonableBody?: CloneableBody; /** * True when the request matched a locale domain that was configured in the * next.config.js file. */ isLocaleDomain?: boolean; /** * True when the request had locale information stripped from the pathname * part of the URL. */ didStripLocale?: boolean; /** * If the request had it's URL rewritten, this is the URL it was rewritten to. */ rewroteURL?: string; /** * The cookies that were added by middleware and were added to the response. */ middlewareCookie?: string[]; /** * The match on the request for a given route. */ match?: RouteMatch; /** * The incremental cache to use for the request. */ incrementalCache?: any; /** * The server components HMR cache, only for dev. */ serverComponentsHmrCache?: ServerComponentsHmrCache; /** * Equals the segment path that was used for the prefetch RSC request. */ segmentPrefetchRSCRequest?: string; /** * True when the request is for the prefetch flight data. */ isPrefetchRSCRequest?: true; /** * True when the request is for the flight data. */ isRSCRequest?: true; /** * A search param set by the Next.js client when performing RSC requests. * Because some CDNs do not vary their cache entries on our custom headers, * this search param represents a hash of the header values. For any cached * RSC request, we should verify that the hash matches before responding. * Otherwise this can lead to cache poisoning. * TODO: Consider not using custom request headers at all, and instead encode * everything into the search param. */ cacheBustingSearchParam?: string; /** * True when the request is for the `/_next/data` route using the pages * router. */ isNextDataReq?: true; /** * Postponed state to use for resumption. If present it's assumed that the * request is for a page that has postponed (there are no guarantees that the * page actually has postponed though as it would incur an additional cache * lookup). */ postponed?: string; /** * If provided, this will be called when a response cache entry was generated * or looked up in the cache. */ onCacheEntry?: (cacheEntry: any, requestMeta: any) => Promise<boolean | void> | boolean | void; /** * The previous revalidate before rendering 404 page for notFound: true */ notFoundRevalidate?: number | false; /** * In development, the original source page that returned a 404. */ developmentNotFoundSourcePage?: string; /** * The path we routed to and should be invoked */ invokePath?: string; /** * The specific page output we should be matching */ invokeOutput?: string; /** * The status we are invoking the request with from routing */ invokeStatus?: number; /** * The routing error we are invoking with */ invokeError?: Error; /** * The query parsed for the invocation */ invokeQuery?: Record<string, undefined | string | string[]>; /** * Whether the request is a middleware invocation */ middlewareInvoke?: boolean; /** * Whether the request should render the fallback shell or not. */ renderFallbackShell?: boolean; /** * Whether the request is for the custom error page. */ customErrorRender?: true; /** * Whether to bubble up the NoFallbackError to the caller when a 404 is * returned. */ bubbleNoFallback?: true; /** * True when the request had locale information inferred from the default * locale. */ localeInferredFromDefault?: true; /** * The locale that was inferred or explicitly set for the request. */ locale?: string; /** * The default locale that was inferred or explicitly set for the request. */ defaultLocale?: string; /** * The project dir the server is running in */ projectDir?: string; /** * The dist directory the server is currently using */ distDir?: string; /** * Whether we are generating the fallback version of the page in dev mode */ isIsrFallback?: boolean; /** * The query after resolving routes */ query?: ParsedUrlQuery; /** * The params after resolving routes */ params?: ParsedUrlQuery; /** * The AMP validator to use in development */ ampValidator?: (html: string, pathname: string) => Promise<void>; /** * ErrorOverlay component to use in development for pages router */ PagesErrorDebug?: PagesDevOverlayBridgeType; /** * Whether server is in minimal mode (this will be replaced with more * specific flags in future) */ minimalMode?: boolean; } /** * Gets the request metadata. If no key is provided, the entire metadata object * is returned. * * @param req the request to get the metadata from * @param key the key to get from the metadata (optional) * @returns the value for the key or the entire metadata object */ export declare function getRequestMeta(req: NextIncomingMessage, key?: undefined): RequestMeta; export declare function getRequestMeta<K extends keyof RequestMeta>(req: NextIncomingMessage, key: K): RequestMeta[K]; /** * Sets the request metadata. * * @param req the request to set the metadata on * @param meta the metadata to set * @returns the mutated request metadata */ export declare function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta): RequestMeta; /** * Adds a value to the request metadata. * * @param request the request to mutate * @param key the key to set * @param value the value to set * @returns the mutated request metadata */ export declare function addRequestMeta<K extends keyof RequestMeta>(request: NextIncomingMessage, key: K, value: RequestMeta[K]): RequestMeta; /** * Removes a key from the request metadata. * * @param request the request to mutate * @param key the key to remove * @returns the mutated request metadata */ export declare function removeRequestMeta<K extends keyof RequestMeta>(request: NextIncomingMessage, key: K): RequestMeta; type NextQueryMetadata = { /** * The `_rsc` query parameter used for cache busting to ensure that the RSC * requests do not get cached by the browser explicitly. */ [NEXT_RSC_UNION_QUERY]?: string; }; export type NextParsedUrlQuery = ParsedUrlQuery & NextQueryMetadata & { amp?: '1'; }; export interface NextUrlWithParsedQuery extends UrlWithParsedQuery { query: NextParsedUrlQuery; } export {};