UNPKG

next-rest-framework

Version:

Next REST Framework - Type-safe, self-documenting APIs for Next.js

326 lines (315 loc) 38.1 kB
import { N as NextRestFrameworkConfig, B as BaseQuery, a as BaseContentType, F as FormDataContentType, T as TypedFormData, A as AnyContentTypeWithAutocompleteForMostCommonOnes, b as BaseParams, O as OutputObject, c as BaseOptions, d as BaseStatus, C as ContentTypesThatSupportInputValidation, Z as ZodFormSchema, e as OpenApiOperation, M as Modify, f as AnyCase, g as OpenApiPathItem } from './types-wqKDLBM8.js'; import { OpenAPIV3_1 } from 'openapi-types'; import { NextApiRequest, NextApiResponse } from 'next/types'; import { ValidMethod } from './constants.js'; import { z, ZodType } from 'zod'; import { R as RpcOperationDefinition, a as RpcClient } from './index-woXbucRS.js'; export { r as rpcOperation } from './index-woXbucRS.js'; import { NextRequest, NextResponse } from 'next/server'; import { I18NConfig } from 'next/dist/server/config-shared'; import { NextURL } from 'next/dist/server/web/next-url'; import { ResponseCookies } from 'next/dist/compiled/@edge-runtime/cookies'; declare const docsRoute: (_config?: NextRestFrameworkConfig) => { GET: { (_req: NextRequest, _context: { params: Promise<BaseQuery>; }): Promise<NextResponse<unknown>>; _nextRestFrameworkConfig: Required<NextRestFrameworkConfig> & NextRestFrameworkConfig; }; }; interface TypedSearchParams<Query = BaseQuery> extends URLSearchParams { get: <K extends keyof Query & string>(key: K) => string | null; getAll: <K extends keyof Query & string>(key: K) => string[]; } interface TypedNextURL<Query = BaseQuery> extends NextURL { searchParams: TypedSearchParams<Query>; } interface TypedNextRequest<Method extends string = keyof typeof ValidMethod, ContentType = BaseContentType, Body = unknown, Query = BaseQuery> extends NextRequest { method: Method; /*! Prevent parsing JSON body for GET requests. Form requests return parsed form data as JSON when the form schema is defined. */ json: Method extends 'GET' ? never : () => Promise<Body>; /*! Prevent parsing form data for GET and non-form requests. */ formData: Method extends 'GET' ? never : ContentType extends FormDataContentType ? () => Promise<TypedFormData<Body>> : never; nextUrl: TypedNextURL<Query>; } type TypedHeaders<ContentType extends BaseContentType> = Modify<Record<string, string>, { [K in AnyCase<'Content-Type'>]?: ContentType; }>; interface TypedResponseInit<Status extends BaseStatus, ContentType extends BaseContentType> extends globalThis.ResponseInit { nextConfig?: { basePath?: string; i18n?: I18NConfig; trailingSlash?: boolean; }; url?: string; status?: Status; headers?: TypedHeaders<ContentType>; } interface ModifiedRequest { headers?: Headers; } interface TypedMiddlewareResponseInit<Status extends BaseStatus> extends globalThis.ResponseInit { request?: ModifiedRequest; status?: Status; } declare const INTERNALS: unique symbol; declare class TypedNextResponseType<Body, Status extends BaseStatus, ContentType extends BaseContentType> extends Response { [INTERNALS]: { cookies: ResponseCookies; url?: NextURL; body?: Body; status?: Status; contentType?: ContentType; }; constructor(body?: BodyInit | null, init?: TypedResponseInit<Status, ContentType>); get cookies(): ResponseCookies; static json<Body, Status extends BaseStatus, ContentType extends BaseContentType>(body: Body, init?: TypedResponseInit<Status, ContentType>): TypedNextResponseType<Body, Status, ContentType>; static redirect<Status extends BaseStatus, ContentType extends BaseContentType>(url: string | NextURL | URL, init?: number | TypedResponseInit<Status, ContentType>): TypedNextResponseType<unknown, Status, ContentType>; static rewrite<Status extends BaseStatus, ContentType extends BaseContentType>(destination: string | NextURL | URL, init?: TypedMiddlewareResponseInit<Status>): TypedNextResponseType<unknown, Status, ContentType>; static next<Status extends BaseStatus, ContentType extends BaseContentType>(init?: TypedMiddlewareResponseInit<Status>): TypedNextResponseType<unknown, Status, ContentType>; } declare const TypedNextResponse: typeof TypedNextResponseType; type RouteMiddleware<InputOptions extends BaseOptions = BaseOptions, OutputOptions extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ResponseContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes = AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>>, TypedResponse = TypedNextResponseType<z.infer<Outputs[number]['body']>, Outputs[number]['status'], Outputs[number]['contentType']> | NextResponse<z.infer<Outputs[number]['body']>> | void> = (req: NextRequest, context: { params: BaseParams; }, options: InputOptions) => Promise<TypedResponse | OutputOptions> | TypedResponse | OutputOptions; type TypedRouteHandler<Method extends keyof typeof ValidMethod = keyof typeof ValidMethod, ContentType extends BaseContentType = BaseContentType, Body = unknown, Query extends BaseQuery = BaseQuery, Params extends BaseParams = BaseParams, Options extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ResponseContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>>, TypedResponse = TypedNextResponseType<z.infer<Outputs[number]['body']>, Outputs[number]['status'], Outputs[number]['contentType']> | NextResponse<z.infer<Outputs[number]['body']>> | void> = (req: TypedNextRequest<Method, ContentType, Body, Query>, context: { params: Params; }, options: Options) => Promise<TypedResponse> | TypedResponse; interface InputObject$1<ContentType = BaseContentType, Body = unknown, Query = BaseQuery, Params = BaseParams> { contentType?: ContentType; /*! Body schema is supported only for certain content types that support input validation. */ body?: ContentType extends ContentTypesThatSupportInputValidation ? ContentType extends FormDataContentType ? ZodFormSchema<Body> : ZodType<Body> : never; /*! If defined, this will override the body schema for the OpenAPI spec. */ bodySchema?: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject; query?: ZodType<Query>; /*! If defined, this will override the query schema for the OpenAPI spec. */ querySchema?: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject; params?: ZodType<Params>; /*! If defined, this will override the params schema for the OpenAPI spec. */ paramsSchema?: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject; } interface RouteOperationDefinition<Method extends keyof typeof ValidMethod = keyof typeof ValidMethod> { openApiOperation?: OpenApiOperation; method: Method; input?: InputObject$1; outputs?: readonly OutputObject[]; middleware1?: RouteMiddleware; middleware2?: RouteMiddleware; middleware3?: RouteMiddleware; handler?: TypedRouteHandler; } declare const routeOperation: <Method extends "GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">({ openApiOperation, method }: { openApiOperation?: Partial<Pick<OpenAPIV3_1.OperationObject<{}>, "description" | "externalDocs" | "deprecated" | "summary" | "servers" | "security" | "tags" | "parameters" | "callbacks">> | undefined; method: Method; }) => { input: <ContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Body_1, Query extends BaseQuery, Params extends BaseParams>(input: InputObject$1<ContentType, Body_1, Query, Params>) => { outputs: <ResponseBody, Status extends number, ResponseContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs extends readonly OutputObject<ResponseBody, Status, ResponseContentType>[]>(outputs: Outputs) => { middleware: <Options1 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1, ResponseBody, Status, ResponseContentType, Outputs, void | TypedNextResponseType<z.core.output<Outputs[number]["body"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.core.output<Outputs[number]["body"]>>>) => { middleware: <Options2 extends BaseOptions>(middleware2: RouteMiddleware<Options1, Options2, ResponseBody, Status, ResponseContentType, Outputs, void | TypedNextResponseType<z.core.output<Outputs[number]["body"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.core.output<Outputs[number]["body"]>>>) => { middleware: <Options3 extends BaseOptions>(middleware3: RouteMiddleware<Options2, Options3, ResponseBody, Status, ResponseContentType, Outputs, void | TypedNextResponseType<z.core.output<Outputs[number]["body"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.core.output<Outputs[number]["body"]>>>) => { handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options3, ResponseBody, Status, ResponseContentType, Outputs, void | TypedNextResponseType<z.core.output<Outputs[number]["body"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.core.output<Outputs[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options2, ResponseBody, Status, ResponseContentType, Outputs, void | TypedNextResponseType<z.core.output<Outputs[number]["body"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.core.output<Outputs[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options1, ResponseBody, Status, ResponseContentType, Outputs, void | TypedNextResponseType<z.core.output<Outputs[number]["body"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.core.output<Outputs[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, BaseOptions, ResponseBody, Status, ResponseContentType, Outputs, void | TypedNextResponseType<z.core.output<Outputs[number]["body"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.core.output<Outputs[number]["body"]>>>) => RouteOperationDefinition<Method>; }; middleware: <Options1_1 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => { middleware: <Options2_1 extends BaseOptions>(middleware2: RouteMiddleware<Options1_1, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => { middleware: <Options3_1 extends BaseOptions>(middleware3: RouteMiddleware<Options2_1, Options3_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => { outputs: <ResponseBody_1, Status_1 extends number, ResponseContentType_1 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_1 extends readonly OutputObject<ResponseBody_1, Status_1, ResponseContentType_1>[]>(outputs: Outputs_1) => { handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options3_1, ResponseBody_1, Status_1, ResponseContentType_1, Outputs_1, void | TypedNextResponseType<z.core.output<Outputs_1[number]["body"]>, Outputs_1[number]["status"], Outputs_1[number]["contentType"]> | NextResponse<z.core.output<Outputs_1[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>; }; outputs: <ResponseBody_2, Status_2 extends number, ResponseContentType_2 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_2 extends readonly OutputObject<ResponseBody_2, Status_2, ResponseContentType_2>[]>(outputs: Outputs_2) => { handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options2_1, ResponseBody_2, Status_2, ResponseContentType_2, Outputs_2, void | TypedNextResponseType<z.core.output<Outputs_2[number]["body"]>, Outputs_2[number]["status"], Outputs_2[number]["contentType"]> | NextResponse<z.core.output<Outputs_2[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>; }; outputs: <ResponseBody_3, Status_3 extends number, ResponseContentType_3 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_3 extends readonly OutputObject<ResponseBody_3, Status_3, ResponseContentType_3>[]>(outputs: Outputs_3) => { handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options1_1, ResponseBody_3, Status_3, ResponseContentType_3, Outputs_3, void | TypedNextResponseType<z.core.output<Outputs_3[number]["body"]>, Outputs_3[number]["status"], Outputs_3[number]["contentType"]> | NextResponse<z.core.output<Outputs_3[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, ContentType, Body_1, Query, Params, BaseOptions, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>; }; outputs: <ResponseBody_4, Status_4 extends number, ResponseContentType_4 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_4 extends readonly OutputObject<ResponseBody_4, Status_4, ResponseContentType_4>[]>(outputs: Outputs_4) => { middleware: <Options1_2 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4, void | TypedNextResponseType<z.core.output<Outputs_4[number]["body"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.core.output<Outputs_4[number]["body"]>>>) => { middleware: <Options2_2 extends BaseOptions>(middleware2: RouteMiddleware<Options1_2, Options2_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4, void | TypedNextResponseType<z.core.output<Outputs_4[number]["body"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.core.output<Outputs_4[number]["body"]>>>) => { middleware: <Options3_2 extends BaseOptions>(middleware3: RouteMiddleware<Options2_2, Options3_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4, void | TypedNextResponseType<z.core.output<Outputs_4[number]["body"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.core.output<Outputs_4[number]["body"]>>>) => { handler: (handler: TypedRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options3_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4, void | TypedNextResponseType<z.core.output<Outputs_4[number]["body"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.core.output<Outputs_4[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options2_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4, void | TypedNextResponseType<z.core.output<Outputs_4[number]["body"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.core.output<Outputs_4[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options1_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4, void | TypedNextResponseType<z.core.output<Outputs_4[number]["body"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.core.output<Outputs_4[number]["body"]>>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, BaseOptions, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4, void | TypedNextResponseType<z.core.output<Outputs_4[number]["body"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.core.output<Outputs_4[number]["body"]>>>) => RouteOperationDefinition<Method>; }; middleware: <Options1_3 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => { middleware: <Options2_3 extends BaseOptions>(middleware2: RouteMiddleware<Options1_3, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => { middleware: <Options3_3 extends BaseOptions>(middleware3: RouteMiddleware<Options2_3, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => { handler: (handler: TypedRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>; }; handler: (handler: TypedRouteHandler) => RouteOperationDefinition<Method>; }; declare const route: <T extends Record<string, RouteOperationDefinition<"GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">>>(operations: T, options?: { openApiPath?: OpenApiPathItem; }) => { [key in T[keyof T]["method"]]: { (_req: NextRequest, context: { params: Promise<BaseParams>; }): Promise<NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>; _getPathsForRoute(route: string): Promise<NrfOasData>; }; }; declare const rpcRoute: <T extends Record<string, RpcOperationDefinition<any, any, any, any>>>(operations: T, options?: { openApiPath?: OpenApiPathItem; }) => { POST: { (req: NextRequest, { params }: { params: Promise<BaseParams>; }): Promise<NextResponse<unknown>>; _getPathsForRoute(route: string): Promise<NrfOasData>; client: RpcClient<T>; }; }; interface NrfOasData { paths?: OpenAPIV3_1.PathsObject; schemas?: Record<string, OpenAPIV3_1.SchemaObject>; } type TypedNextApiRequest<Method = keyof typeof ValidMethod, ContentType = BaseContentType, Body = unknown, QueryAndParams = BaseQuery & BaseParams> = Modify<NextApiRequest, { /*! * For GET requests, attempting to parse a JSON body gives a type error. * application/json requests are typed with a strongly-typed JSON body. * application/x-www-form-urlencoded and multipart/form-data requests are * typed with a strongly-typed form data object. */ body: Method extends 'GET' ? never : ContentType extends FormDataContentType ? TypedFormData<Body> : Body; query: QueryAndParams; method: ValidMethod; }>; type TypedNextApiResponse<Body, Status, ContentType> = Modify<NextApiResponse<Body>, { status: (status: Status) => TypedNextApiResponse<Body, Status, ContentType>; redirect: (status: Status, url: string) => TypedNextApiResponse<Body, Status, ContentType>; setDraftMode: (options: { enable: boolean; }) => TypedNextApiResponse<Body, Status, ContentType>; setPreviewData: (data: object | string, options?: { maxAge?: number; path?: string; }) => TypedNextApiResponse<Body, Status, ContentType>; clearPreviewData: (options?: { path?: string; }) => TypedNextApiResponse<Body, Status, ContentType>; setHeader: <K extends AnyCase<'Content-Type'> | string, V extends number | string | readonly string[]>(name: K, value: K extends AnyCase<'Content-Type'> ? ContentType : V) => void; }>; type TypedApiRouteHandler<Method extends keyof typeof ValidMethod = keyof typeof ValidMethod, ContentType extends BaseContentType = BaseContentType, Body = unknown, Query extends BaseQuery = BaseQuery, Params extends BaseParams = BaseParams, Options extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ResponseContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>>> = (req: TypedNextApiRequest<Method, ContentType, Body, Query & Params>, res: TypedNextApiResponse<z.infer<Outputs[number]['body']>, Outputs[number]['status'], Outputs[number]['contentType']>, options: Options) => Promise<void> | void; type ApiRouteMiddleware<InputOptions extends BaseOptions = BaseOptions, OutputOptions extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ResponseContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ResponseContentType>>> = (req: NextApiRequest, res: TypedNextApiResponse<z.infer<Outputs[number]['body']>, Outputs[number]['status'], Outputs[number]['contentType']>, options: InputOptions) => Promise<void> | void | Promise<OutputOptions> | OutputOptions; interface InputObject<ContentType = BaseContentType, Body = unknown, Query = BaseQuery, Params = BaseParams> { contentType?: ContentType; /*! * Body schema is supported only for certain content types that support input validation. * multipart/form-data validation is also supported with app router. */ body?: ContentType extends ContentTypesThatSupportInputValidation ? ContentType extends FormDataContentType ? ZodFormSchema<Body> : ZodType<Body> : never; /*! If defined, this will override the body schema for the OpenAPI spec. */ bodySchema?: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject; query?: ZodType<Query>; /*! If defined, this will override the query schema for the OpenAPI spec. */ querySchema?: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject; params?: ZodType<Params>; /*! If defined, this will override the params schema for the OpenAPI spec. */ paramsSchema?: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject; } interface ApiRouteOperationDefinition<Method extends keyof typeof ValidMethod = keyof typeof ValidMethod> { openApiOperation?: OpenApiOperation; method: Method; input?: InputObject; outputs?: readonly OutputObject[]; middleware1?: ApiRouteMiddleware; middleware2?: ApiRouteMiddleware; middleware3?: ApiRouteMiddleware; handler?: TypedApiRouteHandler; } declare const apiRouteOperation: <Method extends "GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">({ openApiOperation, method }: { openApiOperation?: Partial<Pick<OpenAPIV3_1.OperationObject<{}>, "description" | "externalDocs" | "deprecated" | "summary" | "servers" | "security" | "tags" | "parameters" | "callbacks">> | undefined; method: Method; }) => { input: <ContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Body_1, Query extends BaseQuery, Params extends BaseParams>(input: InputObject<ContentType, Body_1, Query, Params>) => { outputs: <ResponseBody, Status extends number, ResponseContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs extends readonly OutputObject<ResponseBody, Status, ResponseContentType>[]>(outputs: Outputs) => { middleware: <Options1 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1, ResponseBody, Status, ResponseContentType, Outputs>) => { middleware: <Options2 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1, Options2, ResponseBody, Status, ResponseContentType, Outputs>) => { middleware: <Options3 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2, Options3, ResponseBody, Status, ResponseContentType, Outputs>) => { handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options3, ResponseBody, Status, ResponseContentType, Outputs>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options2, ResponseBody, Status, ResponseContentType, Outputs>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options1, ResponseBody, Status, ResponseContentType, Outputs>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, BaseOptions, ResponseBody, Status, ResponseContentType, Outputs>) => ApiRouteOperationDefinition<Method>; }; middleware: <Options1_1 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { middleware: <Options2_1 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1_1, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { middleware: <Options3_1 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2_1, Options3_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { outputs: <ResponseBody_1, Status_1 extends number, ResponseContentType_1 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_1 extends readonly OutputObject<ResponseBody_1, Status_1, ResponseContentType_1>[]>(outputs: Outputs_1) => { handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options3_1, ResponseBody_1, Status_1, ResponseContentType_1, Outputs_1>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options3_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>; }; outputs: <ResponseBody_2, Status_2 extends number, ResponseContentType_2 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_2 extends readonly OutputObject<ResponseBody_2, Status_2, ResponseContentType_2>[]>(outputs: Outputs_2) => { handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options2_1, ResponseBody_2, Status_2, ResponseContentType_2, Outputs_2>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>; }; outputs: <ResponseBody_3, Status_3 extends number, ResponseContentType_3 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_3 extends readonly OutputObject<ResponseBody_3, Status_3, ResponseContentType_3>[]>(outputs: Outputs_3) => { handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options1_1, ResponseBody_3, Status_3, ResponseContentType_3, Outputs_3>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, Params, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, ContentType, Body_1, Query, BaseParams, BaseOptions, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>; }; outputs: <ResponseBody_4, Status_4 extends number, ResponseContentType_4 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_4 extends readonly OutputObject<ResponseBody_4, Status_4, ResponseContentType_4>[]>(outputs: Outputs_4) => { middleware: <Options1_2 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1_2, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { middleware: <Options2_2 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1_2, Options2_2, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { middleware: <Options3_2 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2_2, Options3_2, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { handler: (handler: TypedApiRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options3_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options2_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options1_2, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, BaseOptions, ResponseBody_4, Status_4, ResponseContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>; }; middleware: <Options1_3 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { middleware: <Options2_3 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1_3, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { middleware: <Options3_3 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2_3, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => { handler: (handler: TypedApiRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler<Method, AnyContentTypeWithAutocompleteForMostCommonOnes, unknown, BaseQuery, BaseParams, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>; }; handler: (handler: TypedApiRouteHandler) => ApiRouteOperationDefinition<Method>; }; declare const apiRoute: <T extends Record<string, ApiRouteOperationDefinition<"GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">>>(operations: T, options?: { openApiPath?: OpenApiPathItem; }) => { (req: NextApiRequest, res: NextApiResponse): Promise<Response | undefined>; _getPathsForRoute(route: string): Promise<NrfOasData>; }; declare const docsApiRoute: (_config?: NextRestFrameworkConfig) => { (req: NextApiRequest, res: NextApiResponse): Promise<Response | undefined>; _nextRestFrameworkConfig: Required<NextRestFrameworkConfig> & NextRestFrameworkConfig; }; declare const rpcApiRoute: <T extends Record<string, RpcOperationDefinition<any, any, any, any>>>(operations: T, options?: { openApiPath?: OpenApiPathItem; }) => { (req: NextApiRequest, res: NextApiResponse): Promise<Response | undefined>; _getPathsForRoute(route: string): Promise<NrfOasData>; client: RpcClient<T>; }; export { type TypedNextApiRequest, type TypedNextApiResponse, type TypedNextRequest, TypedNextResponse, apiRoute, apiRouteOperation, docsApiRoute, docsRoute, route, routeOperation, rpcApiRoute, rpcRoute };