UNPKG

next

Version:

The React Framework

146 lines (145 loc) 6.1 kB
import type { NextConfig } from '../../config-shared'; import type { AppRouteRouteDefinition } from '../../route-definitions/app-route-route-definition'; import type { AppSegmentConfig } from '../../../build/segment-config/app/app-segment-config'; import type { NextRequest } from '../../web/spec-extension/request'; import type { DeepReadonly } from '../../../shared/lib/deep-readonly'; import type { __ApiPreviewProps } from '../../api-utils'; import { RouteModule, type RouteModuleHandleContext, type RouteModuleOptions } from '../route-module'; import { type WorkStoreContext } from '../../async-storage/work-store'; import { type HTTP_METHOD } from '../../web/http'; import * as serverHooks from '../../../client/components/hooks-server-context'; import * as sharedModules from './shared-modules'; import type { RenderOptsPartial } from '../../app-render/types'; import type { AppSegment } from '../../../build/segment-config/app/app-segments'; import { type RedirectError } from '../../../client/components/redirect-error'; export declare class WrappedNextRouterError { readonly error: RedirectError; readonly headers?: Headers | undefined; constructor(error: RedirectError, headers?: Headers | undefined); } /** * The AppRouteModule is the type of the module exported by the bundled App * Route module. */ export type AppRouteModule = typeof import('../../../build/templates/app-route'); export type AppRouteSharedContext = { buildId: string; }; /** * AppRouteRouteHandlerContext is the context that is passed to the route * handler for app routes. */ export interface AppRouteRouteHandlerContext extends RouteModuleHandleContext { renderOpts: WorkStoreContext['renderOpts'] & Pick<RenderOptsPartial, 'onInstrumentationRequestError'> & CollectedCacheInfo; previewProps: DeepReadonly<__ApiPreviewProps>; sharedContext: AppRouteSharedContext; } type CollectedCacheInfo = { collectedTags?: string; collectedRevalidate?: number; collectedExpire?: number; collectedStale?: number; }; /** * AppRouteHandlerFnContext is the context that is passed to the handler as the * second argument. */ type AppRouteHandlerFnContext = { params?: Promise<Record<string, string | string[] | undefined>>; }; /** * Handler function for app routes. If a non-Response value is returned, an error * will be thrown. */ export type AppRouteHandlerFn = ( /** * Incoming request object. */ req: NextRequest, /** * Context properties on the request (including the parameters if this was a * dynamic route). */ ctx: AppRouteHandlerFnContext) => unknown; /** * AppRouteHandlers describes the handlers for app routes that is provided by * the userland module. */ export type AppRouteHandlers = { [method in HTTP_METHOD]?: AppRouteHandlerFn; }; /** * AppRouteUserlandModule is the userland module that is provided for app * routes. This contains all the user generated code. */ export type AppRouteUserlandModule = AppRouteHandlers & Pick<AppSegmentConfig, 'dynamic' | 'revalidate' | 'dynamicParams' | 'fetchCache'> & Pick<AppSegment, 'generateStaticParams'>; /** * AppRouteRouteModuleOptions is the options that are passed to the app route * module from the bundled code. */ export interface AppRouteRouteModuleOptions extends RouteModuleOptions<AppRouteRouteDefinition, AppRouteUserlandModule> { readonly resolvedPagePath: string; readonly nextConfigOutput: NextConfig['output']; /** * Optional getter that returns the live userland module. When provided (in * Turbopack dev mode), it is called on every request so that server HMR * updates are picked up without re-executing the entry chunk. */ readonly getUserland?: () => Promise<AppRouteUserlandModule>; } /** * AppRouteRouteHandler is the handler for app routes. */ export declare class AppRouteRouteModule extends RouteModule<AppRouteRouteDefinition, AppRouteUserlandModule> { /** * A reference to the request async storage. */ readonly workUnitAsyncStorage: import("../../app-render/work-unit-async-storage.external").WorkUnitAsyncStorage; /** * A reference to the static generation async storage. */ readonly workAsyncStorage: import("../../app-render/work-async-storage.external").WorkAsyncStorage; /** * An interface to call server hooks which interact with the underlying * storage. */ readonly serverHooks: typeof serverHooks; static readonly sharedModules: typeof sharedModules; /** * A reference to the mutation related async storage, such as mutations of * cookies. */ readonly actionAsyncStorage: import("../../app-render/action-async-storage.external").ActionAsyncStorage; readonly resolvedPagePath: string; readonly nextConfigOutput: NextConfig['output'] | undefined; private readonly _getUserland?; private methods; private hasNonStaticMethods; private dynamic; constructor({ userland, getUserland, definition, distDir, relativeProjectDir, resolvedPagePath, nextConfigOutput, }: AppRouteRouteModuleOptions); /** * Resolves the handler function for the given method. * * @param method the requested method * @returns the handler function for the given method */ private resolve; /** * Like resolve(), but re-fetches the userland module on every call via the * async getter. Only used in Turbopack dev mode, where server HMR disposes * modules between requests. The async wrapper also unwraps async-module * Promises produced by ESM-only serverExternalPackages. */ private resolveWithGetter; private do; handle(req: NextRequest, context: AppRouteRouteHandlerContext): Promise<Response>; } export default AppRouteRouteModule; /** * Gets all the method names for handlers that are not considered static. * * @param handlers the handlers from the userland module * @returns the method names that are not considered static or false if all * methods are static */ export declare function hasNonStaticMethods(handlers: AppRouteHandlers): boolean;