next-rest-framework
Version:
Next REST Framework - Type-safe, self-documenting APIs for Next.js
298 lines (287 loc) • 32.6 kB
text/typescript
import { N as NextRestFrameworkConfig, B as BaseQuery, a as BaseParams, A as AnyContentTypeWithAutocompleteForMostCommonOnes, O as OutputObject, b as BaseOptions, c as BaseStatus, d as BaseContentType, e as OpenApiOperation, M as Modify, f as AnyCase, g as OpenApiPathItem, R as RpcOperationDefinition, h as RpcClient } from './index-RAoE6vgd.mjs';
export { r as rpcOperation } from './index-RAoE6vgd.mjs';
import * as openapi_types from 'openapi-types';
import { OpenAPIV3_1 } from 'openapi-types';
import { NextApiRequest, NextApiResponse } from 'next/types';
import { ValidMethod } from './constants.mjs';
import { z, ZodSchema } from 'zod';
import { NextRequest, NextResponse } from 'next/server';
import { I18NConfig } from 'next/dist/server/config-shared';
import { ResponseCookies } from 'next/dist/server/web/spec-extension/cookies';
import { NextURL } from 'next/dist/server/web/next-url';
declare const docsRoute: (_config?: NextRestFrameworkConfig) => {
GET: {
(req: NextRequest, _context: {
params: BaseQuery;
}): Promise<NextResponse<unknown>>;
_nextRestFrameworkConfig: Required<NextRestFrameworkConfig> & NextRestFrameworkConfig;
};
};
type TypedNextRequest<Body = unknown, Query = BaseQuery> = Modify<NextRequest, {
json: () => Promise<Body>;
method: ValidMethod;
nextUrl: Modify<NextURL, {
searchParams: Modify<URLSearchParams, {
get: (key: keyof Query) => string | null;
getAll: (key: keyof Query) => string[];
}>;
}>;
}>;
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, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>, TypedResponse = TypedNextResponseType<z.infer<Outputs[number]['schema']>, Outputs[number]['status'], Outputs[number]['contentType']> | NextResponse<z.infer<Outputs[number]['schema']>> | void> = (req: NextRequest, context: {
params: BaseParams;
}, options: InputOptions) => Promise<TypedResponse> | TypedResponse | OutputOptions;
type TypedRouteHandler<Body = unknown, Query extends BaseQuery = BaseQuery, Params extends BaseParams = BaseParams, Options extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>, TypedResponse = TypedNextResponseType<z.infer<Outputs[number]['schema']>, Outputs[number]['status'], Outputs[number]['contentType']> | NextResponse<z.infer<Outputs[number]['schema']>> | void> = (req: TypedNextRequest<Body, Query>, context: {
params: Params;
}, options: Options) => Promise<TypedResponse> | TypedResponse;
interface InputObject$1<Body = unknown, Query = BaseQuery, Params = BaseParams> {
contentType?: BaseContentType;
body?: ZodSchema<Body>;
query?: ZodSchema<Query>;
params?: ZodSchema<Params>;
}
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<openapi_types.OpenAPIV3_1.OperationObject<{}>, "servers" | "security" | "tags" | "externalDocs" | "description" | "summary" | "parameters" | "callbacks" | "deprecated">> | undefined;
method: Method;
}) => {
input: <Body_1, Query extends BaseQuery, Params extends BaseParams>(input: InputObject$1<Body_1, Query, Params>) => {
outputs: <ResponseBody, Status extends number, ContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs extends readonly OutputObject<ResponseBody, Status, ContentType>[]>(outputs: Outputs) => {
middleware: <Options1 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => {
middleware: <Options2 extends BaseOptions>(middleware2: RouteMiddleware<Options1, Options2, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => {
middleware: <Options3 extends BaseOptions>(middleware3: RouteMiddleware<Options2, Options3, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => {
handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options3, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options2, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options1, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<Body_1, Query, Params, BaseOptions, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => 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, ContentType_1 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_1 extends readonly OutputObject<ResponseBody_1, Status_1, ContentType_1>[]>(outputs: Outputs_1) => {
handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options3_1, ResponseBody_1, Status_1, ContentType_1, Outputs_1, void | TypedNextResponseType<z.TypeOf<Outputs_1[number]["schema"]>, Outputs_1[number]["status"], Outputs_1[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_1[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<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, ContentType_2 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_2 extends readonly OutputObject<ResponseBody_2, Status_2, ContentType_2>[]>(outputs: Outputs_2) => {
handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options2_1, ResponseBody_2, Status_2, ContentType_2, Outputs_2, void | TypedNextResponseType<z.TypeOf<Outputs_2[number]["schema"]>, Outputs_2[number]["status"], Outputs_2[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_2[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<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, ContentType_3 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_3 extends readonly OutputObject<ResponseBody_3, Status_3, ContentType_3>[]>(outputs: Outputs_3) => {
handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options1_1, ResponseBody_3, Status_3, ContentType_3, Outputs_3, void | TypedNextResponseType<z.TypeOf<Outputs_3[number]["schema"]>, Outputs_3[number]["status"], Outputs_3[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_3[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<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<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, ContentType_4 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_4 extends readonly OutputObject<ResponseBody_4, Status_4, ContentType_4>[]>(outputs: Outputs_4) => {
middleware: <Options1_2 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => {
middleware: <Options2_2 extends BaseOptions>(middleware2: RouteMiddleware<Options1_2, Options2_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => {
middleware: <Options3_2 extends BaseOptions>(middleware3: RouteMiddleware<Options2_2, Options3_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => {
handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options3_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options2_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options1_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => RouteOperationDefinition<Method>;
};
handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, BaseOptions, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => 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<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<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<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: BaseParams;
}): Promise<NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>;
_getPathsForRoute(route: string): Promise<NrfOasData>;
}; };
declare const rpcRoute: <T extends Record<string, RpcOperationDefinition<any, any, any>>>(operations: T, options?: {
openApiPath?: OpenApiPathItem;
}) => {
POST: {
(req: NextRequest, { params }: {
params: BaseParams;
}): Promise<NextResponse<any>>;
_getPathsForRoute(route: string): Promise<NrfOasData>;
client: RpcClient<T>;
};
};
interface NrfOasData {
paths?: OpenAPIV3_1.PathsObject;
schemas?: Record<string, OpenAPIV3_1.SchemaObject>;
}
type TypedNextApiRequest<Body = unknown, Query = BaseQuery> = Modify<NextApiRequest, {
body: Body;
query: Query;
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<Body = unknown, Query extends BaseQuery = BaseQuery, Options extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>> = (req: TypedNextApiRequest<Body, Query>, res: TypedNextApiResponse<z.infer<Outputs[number]['schema']>, 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, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>> = (req: NextApiRequest, res: TypedNextApiResponse<z.infer<Outputs[number]['schema']>, Outputs[number]['status'], Outputs[number]['contentType']>, options: InputOptions) => Promise<void> | void | OutputOptions;
interface InputObject<Body = unknown, Query = BaseQuery> {
contentType?: BaseContentType;
body?: ZodSchema<Body>;
query?: ZodSchema<Query>;
}
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<openapi_types.OpenAPIV3_1.OperationObject<{}>, "servers" | "security" | "tags" | "externalDocs" | "description" | "summary" | "parameters" | "callbacks" | "deprecated">> | undefined;
method: Method;
}) => {
input: <Body_1, Query extends BaseQuery>(input: InputObject<Body_1, Query>) => {
outputs: <ResponseBody, Status extends number, ContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs extends readonly OutputObject<ResponseBody, Status, ContentType>[]>(outputs: Outputs) => {
middleware: <Options1 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1, ResponseBody, Status, ContentType, Outputs>) => {
middleware: <Options2 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1, Options2, ResponseBody, Status, ContentType, Outputs>) => {
middleware: <Options3 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2, Options3, ResponseBody, Status, ContentType, Outputs>) => {
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options3, ResponseBody, Status, ContentType, Outputs>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options2, ResponseBody, Status, ContentType, Outputs>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options1, ResponseBody, Status, ContentType, Outputs>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<Body_1, Query, BaseOptions, ResponseBody, Status, ContentType, 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, ContentType_1 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_1 extends readonly OutputObject<ResponseBody_1, Status_1, ContentType_1>[]>(outputs: Outputs_1) => {
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options3_1, ResponseBody_1, Status_1, ContentType_1, Outputs_1>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options3_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
};
outputs: <ResponseBody_2, Status_2 extends number, ContentType_2 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_2 extends readonly OutputObject<ResponseBody_2, Status_2, ContentType_2>[]>(outputs: Outputs_2) => {
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options2_1, ResponseBody_2, Status_2, ContentType_2, Outputs_2>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
};
outputs: <ResponseBody_3, Status_3 extends number, ContentType_3 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_3 extends readonly OutputObject<ResponseBody_3, Status_3, ContentType_3>[]>(outputs: Outputs_3) => {
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options1_1, ResponseBody_3, Status_3, ContentType_3, Outputs_3>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<Body_1, Query, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<Body_1, Query, BaseOptions, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
};
outputs: <ResponseBody_4, Status_4 extends number, ContentType_4 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_4 extends readonly OutputObject<ResponseBody_4, Status_4, ContentType_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<unknown, BaseQuery, Options3_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options2_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options1_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, BaseOptions, ResponseBody_4, Status_4, ContentType_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<unknown, BaseQuery, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
};
handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, 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>>>(operations: T, options?: {
openApiPath?: OpenApiPathItem;
openApiOperation?: OpenApiOperation;
}) => {
(req: NextApiRequest, res: NextApiResponse): Promise<Response | undefined>;
_getPathsForRoute(route: string): Promise<NrfOasData>;
client: RpcClient<T>;
};
export { TypedNextResponse, apiRoute, apiRouteOperation, docsApiRoute, docsRoute, route, routeOperation, rpcApiRoute, rpcRoute };