///
import { IncomingMessage, ServerResponse } from 'http';
import { ParsedUrlQuery } from 'querystring';
import { UrlWithParsedQuery } from 'url';
import { PrerenderManifest } from '../../build';
import { CustomRoutes } from '../../lib/load-custom-routes';
import { getRouteMatcher } from '../lib/router/utils';
import { __ApiPreviewProps } from './api-utils';
import { DomainLocales, NextConfig } from './config';
import Router, { DynamicRoutes, PageChecker, Params, Route } from './router';
import './node-polyfill-fetch';
import { PagesManifest } from '../../build/webpack/plugins/pages-manifest-plugin';
import { FontManifest } from './font-utils';
declare type DynamicRouteItem = {
page: string;
match: ReturnType;
};
export declare type ServerConstructor = {
/**
* Where the Next project is located - @default '.'
*/
dir?: string;
/**
* Hide error messages containing server information - @default false
*/
quiet?: boolean;
/**
* Object what you would use in next.config.js - @default {}
*/
conf?: NextConfig | null;
dev?: boolean;
customServer?: boolean;
};
export default class Server {
protected dir: string;
protected quiet: boolean;
protected nextConfig: NextConfig;
protected distDir: string;
protected pagesDir?: string;
protected publicDir: string;
protected hasStaticDir: boolean;
protected serverBuildDir: string;
protected pagesManifest?: 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: string;
fontManifest: FontManifest;
optimizeImages: boolean;
disableOptimizedLoading?: boolean;
optimizeCss: any;
locale?: string;
locales?: string[];
defaultLocale?: string;
domainLocales?: DomainLocales;
distDir: string;
};
private compression?;
private incrementalCache;
protected router: Router;
protected dynamicRoutes?: DynamicRoutes;
protected customRoutes: CustomRoutes;
constructor({ dir, quiet, conf, dev, minimalMode, customServer, }: ServerConstructor & {
conf: NextConfig;
minimalMode?: boolean;
});
logError(err: Error): void;
private handleRequest;
getRequestHandler(): (req: IncomingMessage, res: ServerResponse, parsedUrl?: UrlWithParsedQuery | undefined) => Promise;
setAssetPrefix(prefix?: string): void;
prepare(): Promise;
protected close(): Promise;
protected setImmutableAssetCacheControl(res: ServerResponse): void;
protected getCustomRoutes(): CustomRoutes;
private _cachedPreviewManifest;
protected getPrerenderManifest(): PrerenderManifest;
protected getPreviewProps(): __ApiPreviewProps;
protected generateRoutes(): {
basePath: string;
headers: Route[];
rewrites: {
beforeFiles: Route[];
afterFiles: Route[];
fallback: Route[];
};
fsRoutes: Route[];
redirects: Route[];
catchAllRoute: Route;
pageChecker: PageChecker;
useFileSystemPublicRoutes: boolean;
dynamicRoutes: DynamicRoutes | undefined;
locales: string[];
};
private getPagePath;
protected hasPage(pathname: string): Promise;
protected _beforeCatchAllRender(_req: IncomingMessage, _res: ServerResponse, _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 generatePublicRoutes(): Route[];
protected getDynamicRoutes(): Array;
private handleCompression;
protected run(req: IncomingMessage, res: ServerResponse, parsedUrl: UrlWithParsedQuery): Promise;
protected sendHTML(req: IncomingMessage, res: ServerResponse, html: string): Promise;
render(req: IncomingMessage, res: ServerResponse, pathname: string, query?: ParsedUrlQuery, parsedUrl?: UrlWithParsedQuery): Promise;
private findPageComponents;
protected getStaticPaths(pathname: string): Promise<{
staticPaths: string[] | undefined;
fallbackMode: 'static' | 'blocking' | false;
}>;
private renderToHTMLWithComponents;
renderToHTML(req: IncomingMessage, res: ServerResponse, pathname: string, query?: ParsedUrlQuery): Promise;
renderError(err: Error | null, req: IncomingMessage, res: ServerResponse, pathname: string, query?: ParsedUrlQuery, setHeaders?: boolean): Promise;
private customErrorNo404Warn;
renderErrorToHTML(err: Error | null, req: IncomingMessage, res: ServerResponse, _pathname: string, query?: ParsedUrlQuery): Promise;
render404(req: IncomingMessage, res: ServerResponse, parsedUrl?: UrlWithParsedQuery, setHeaders?: boolean): Promise;
serveStatic(req: IncomingMessage, res: ServerResponse, path: string, parsedUrl?: UrlWithParsedQuery): Promise;
private _validFilesystemPathSet;
private getFilesystemPaths;
protected isServeableUrl(untrustedFileUrl: string): boolean;
protected readBuildId(): string;
protected get _isLikeServerless(): boolean;
}
export {};