/// import { __ApiPreviewProps } from './api-utils'; import type { CustomRoutes } from '../lib/load-custom-routes'; import type { DomainLocale } from './config'; import type { DynamicRoutes, PageChecker, Route } from './router'; import type { FontManifest } from './font-utils'; import type { LoadComponentsReturnType } from './load-components'; import type { RouteMatch } from '../shared/lib/router/utils/route-matcher'; import type { Params } from '../shared/lib/router/utils/route-matcher'; import type { NextConfig, NextConfigComplete, ServerRuntime } from './config-shared'; import type { NextParsedUrlQuery, NextUrlWithParsedQuery } from './request-meta'; import type { ParsedUrlQuery } from 'querystring'; import type { RenderOpts, RenderOptsPartial } from './render'; import type { UrlWithParsedQuery } from 'url'; import { CacheFs } from '../shared/lib/utils'; import type { PagesManifest } from '../build/webpack/plugins/pages-manifest-plugin'; import type { BaseNextRequest, BaseNextResponse } from './base-http'; import type { PayloadOptions } from './send-payload'; import Router from './router'; import RenderResult from './render-result'; import { PrerenderManifest } from '../build'; import { ImageConfigComplete } from '../shared/lib/image-config'; export declare type FindComponentsResult = { components: LoadComponentsReturnType; query: NextParsedUrlQuery; }; export interface RoutingItem { page: string; match: RouteMatch; re?: RegExp; } export interface Options { /** * Object containing the configuration next.config.js */ conf: NextConfig; /** * Set to false when the server was created by Next.js */ customServer?: boolean; /** * Tells if Next.js is running in dev mode */ dev?: boolean; /** * Where the Next project is located */ dir?: string; /** * Tells if Next.js is running in a Serverless platform */ minimalMode?: boolean; /** * Hide error messages containing server information */ quiet?: boolean; /** * The hostname the server is running behind */ hostname?: string; /** * The port the server is running behind */ port?: number; } export interface BaseRequestHandler { (req: BaseNextRequest, res: BaseNextResponse, parsedUrl?: NextUrlWithParsedQuery | undefined): Promise; } declare type RequestContext = { req: BaseNextRequest; res: BaseNextResponse; pathname: string; query: NextParsedUrlQuery; renderOpts: RenderOptsPartial; }; export default abstract class Server { protected dir: string; protected quiet: boolean; protected nextConfig: NextConfigComplete; protected distDir: string; protected publicDir: string; protected hasStaticDir: boolean; protected pagesManifest?: PagesManifest; protected appPathsManifest?: PagesManifest; protected buildId: string; protected minimalMode: boolean; protected renderOpts: { poweredByHeader: boolean; buildId: string; generateEtags: boolean; runtimeConfig?: { [key: string]: any; }; assetPrefix?: string; canonicalBase: string; dev?: boolean; previewProps: __ApiPreviewProps; customServer?: boolean; ampOptimizerConfig?: { [key: string]: any; }; basePath: string; optimizeFonts: boolean; images: ImageConfigComplete; fontManifest?: FontManifest; disableOptimizedLoading?: boolean; optimizeCss: any; nextScriptWorkers: any; locale?: string; locales?: string[]; defaultLocale?: string; domainLocales?: DomainLocale[]; distDir: string; runtime?: ServerRuntime; serverComponents?: boolean; crossOrigin?: string; supportsDynamicHTML?: boolean; serverComponentManifest?: any; renderServerComponentData?: boolean; serverComponentProps?: any; largePageDataBytes?: number; }; protected serverOptions: ServerOptions; private incrementalCache; private responseCache; protected router: Router; protected dynamicRoutes?: DynamicRoutes; protected appPathRoutes?: Record; protected customRoutes: CustomRoutes; protected serverComponentManifest?: any; readonly hostname?: string; readonly port?: number; protected abstract getPublicDir(): string; protected abstract getHasStaticDir(): boolean; protected abstract getPagesManifest(): PagesManifest | undefined; protected abstract getAppPathsManifest(): PagesManifest | undefined; protected abstract getBuildId(): string; protected abstract generatePublicRoutes(): Route[]; protected abstract generateImageRoutes(): Route[]; protected abstract generateStaticRoutes(): Route[]; protected abstract generateFsStaticRoutes(): Route[]; protected abstract generateCatchAllMiddlewareRoute(): Route[]; protected abstract generateRewrites({ restrictedRedirectPaths, }: { restrictedRedirectPaths: string[]; }): { beforeFiles: Route[]; afterFiles: Route[]; fallback: Route[]; }; protected abstract getFilesystemPaths(): Set; protected abstract findPageComponents(pathname: string, query?: NextParsedUrlQuery, params?: Params, isAppDir?: boolean): Promise; protected abstract getPagePath(pathname: string, locales?: string[]): string; protected abstract getFontManifest(): FontManifest | undefined; protected abstract getRoutesManifest(): CustomRoutes; protected abstract getPrerenderManifest(): PrerenderManifest; protected abstract getServerComponentManifest(): any; protected abstract attachRequestMeta(req: BaseNextRequest, parsedUrl: NextUrlWithParsedQuery): void; protected abstract sendRenderResult(req: BaseNextRequest, res: BaseNextResponse, options: { result: RenderResult; type: 'html' | 'json'; generateEtags: boolean; poweredByHeader: boolean; options?: PayloadOptions; }): Promise; protected abstract runApi(req: BaseNextRequest, res: BaseNextResponse, query: ParsedUrlQuery, params: Params | undefined, page: string, builtPagePath: string): Promise; protected abstract renderHTML(req: BaseNextRequest, res: BaseNextResponse, pathname: string, query: NextParsedUrlQuery, renderOpts: RenderOpts): Promise; protected abstract handleCompression(req: BaseNextRequest, res: BaseNextResponse): void; protected abstract loadEnvConfig(params: { dev: boolean; }): void; constructor(options: ServerOptions); logError(err: Error): void; private handleRequest; getRequestHandler(): BaseRequestHandler; setAssetPrefix(prefix?: string): void; prepare(): Promise; protected close(): Promise; protected getCustomRoutes(): CustomRoutes; protected getFallback(page: string): Promise; protected getPreviewProps(): __ApiPreviewProps; protected generateRoutes(): { headers: Route[]; rewrites: { beforeFiles: Route[]; afterFiles: Route[]; fallback: Route[]; }; fsRoutes: Route[]; redirects: Route[]; catchAllRoute: Route; catchAllMiddleware: Route[]; pageChecker: PageChecker; useFileSystemPublicRoutes: boolean; dynamicRoutes: DynamicRoutes | undefined; nextConfig: NextConfig; }; protected hasPage(pathname: string): Promise; protected _beforeCatchAllRender(_req: BaseNextRequest, _res: BaseNextResponse, _params: Params, _parsedUrl: UrlWithParsedQuery): Promise; protected ensureApiPage(_pathname: string): Promise; /** * Resolves `API` request, in development builds on demand * @param req http request * @param res http response * @param pathname path of request */ private handleApiRequest; protected getDynamicRoutes(): Array; protected getAppPathRoutes(): Record; protected run(req: BaseNextRequest, res: BaseNextResponse, parsedUrl: UrlWithParsedQuery): Promise; private pipe; private getStaticHTML; render(req: BaseNextRequest, res: BaseNextResponse, pathname: string, query?: NextParsedUrlQuery, parsedUrl?: NextUrlWithParsedQuery, internalRender?: boolean): Promise; protected getStaticPaths(pathname: string): Promise<{ staticPaths: string[] | undefined; fallbackMode: 'static' | 'blocking' | false; }>; private renderToResponseWithComponents; private stripNextDataPath; protected renderPageComponent(ctx: RequestContext, bubbleNoFallback: boolean): Promise; private renderToResponse; renderToHTML(req: BaseNextRequest, res: BaseNextResponse, pathname: string, query?: ParsedUrlQuery): Promise; renderError(err: Error | null, req: BaseNextRequest, res: BaseNextResponse, pathname: string, query?: NextParsedUrlQuery, setHeaders?: boolean): Promise; private customErrorNo404Warn; private renderErrorToResponse; renderErrorToHTML(err: Error | null, req: BaseNextRequest, res: BaseNextResponse, pathname: string, query?: ParsedUrlQuery): Promise; protected getCacheFilesystem(): CacheFs; protected getFallbackErrorComponents(): Promise; render404(req: BaseNextRequest, res: BaseNextResponse, parsedUrl?: NextUrlWithParsedQuery, setHeaders?: boolean): Promise; protected get _isLikeServerless(): boolean; protected get serverDistDir(): string; } export declare function prepareServerlessUrl(req: BaseNextRequest, query: ParsedUrlQuery): void; export { stringifyQuery } from './server-route-utils'; export declare class WrappedBuildError extends Error { innerError: Error; constructor(innerError: Error); } declare type ResponsePayload = { type: 'html' | 'json'; body: RenderResult; revalidateOptions?: any; };