From 53daecb6ff2994e4855544e7ab05cddf7709364c Mon Sep 17 00:00:00 2001 From: kainpets Date: Wed, 11 Oct 2023 20:38:31 +0200 Subject: [PATCH] add openApiMetadata to openapi builder --- .../src/generators/generate-openapi/index.ts | 4 ++ packages/nextlove/src/types/index.ts | 57 ++++++++++--------- .../nextlove/src/with-route-spec/index.ts | 9 +-- .../middlewares/with-metadata.ts | 14 ----- 4 files changed, 35 insertions(+), 49 deletions(-) delete mode 100644 packages/nextlove/src/with-route-spec/middlewares/with-metadata.ts diff --git a/packages/nextlove/src/generators/generate-openapi/index.ts b/packages/nextlove/src/generators/generate-openapi/index.ts index 769f69e14..caa1c4d11 100644 --- a/packages/nextlove/src/generators/generate-openapi/index.ts +++ b/packages/nextlove/src/generators/generate-openapi/index.ts @@ -144,6 +144,10 @@ export async function generateOpenAPI(opts: GenerateOpenAPIOpts) { ) // TODO: support multipart/form-data + if (routeSpec.openApiMetada) { + // handle openApiMetadata + } + // handle body let body_to_generate_schema if (isPostOrPutOrPatch) { diff --git a/packages/nextlove/src/types/index.ts b/packages/nextlove/src/types/index.ts index 2987c9ed4..a050256c7 100644 --- a/packages/nextlove/src/types/index.ts +++ b/packages/nextlove/src/types/index.ts @@ -27,6 +27,7 @@ export interface RouteSpec< JsonResponse extends ParamDef = z.ZodTypeAny, FormData extends ParamDef = z.ZodTypeAny > { + openApiMetada?: any methods: Methods auth: Auth jsonBody?: JsonBody @@ -47,11 +48,11 @@ export type MiddlewareChainOutput< ? {} : MWChain extends readonly [infer First, ...infer Rest] ? First extends Middleware - ? T & - (Rest extends readonly Middleware[] - ? MiddlewareChainOutput - : never) - : never + ? T & + (Rest extends readonly Middleware[] + ? MiddlewareChainOutput + : never) + : never : never export type AuthMiddlewares = { @@ -116,34 +117,34 @@ export type RouteFunction< > = ( req: (SP["authMiddlewareMap"] & typeof defaultMiddlewareMap)[RS["auth"]] extends Middleware< - infer AuthMWOut, - any - > + infer AuthMWOut, + any + > ? Omit & - AuthMWOut & - MiddlewareChainOutput< - RS["middlewares"] extends readonly Middleware[] - ? [...SP["globalMiddlewares"], ...RS["middlewares"]] - : SP["globalMiddlewares"] - > & { - body: RS["formData"] extends z.ZodTypeAny - ? z.infer - : RS["jsonBody"] extends z.ZodTypeAny - ? z.infer - : {} - query: RS["queryParams"] extends z.ZodTypeAny - ? z.infer - : {} - commonParams: RS["commonParams"] extends z.ZodTypeAny - ? z.infer - : {} - } + AuthMWOut & + MiddlewareChainOutput< + RS["middlewares"] extends readonly Middleware[] + ? [...SP["globalMiddlewares"], ...RS["middlewares"]] + : SP["globalMiddlewares"] + > & { + body: RS["formData"] extends z.ZodTypeAny + ? z.infer + : RS["jsonBody"] extends z.ZodTypeAny + ? z.infer + : {} + query: RS["queryParams"] extends z.ZodTypeAny + ? z.infer + : {} + commonParams: RS["commonParams"] extends z.ZodTypeAny + ? z.infer + : {} + } : `unknown auth type: ${RS["auth"]}. You should configure this auth type in your auth_middlewares w/ createWithRouteSpec, or maybe you need to add "as const" to your route spec definition.`, res: NextApiResponseWithoutJsonAndStatusMethods & SuccessfulNextApiResponseMethods< RS["jsonResponse"] extends z.ZodTypeAny - ? z.infer - : any + ? z.infer + : any > & ErrorNextApiResponseMethods ) => Promise diff --git a/packages/nextlove/src/with-route-spec/index.ts b/packages/nextlove/src/with-route-spec/index.ts index bb04dce2b..76fc2b59e 100644 --- a/packages/nextlove/src/with-route-spec/index.ts +++ b/packages/nextlove/src/with-route-spec/index.ts @@ -9,7 +9,6 @@ import { import withMethods, { HTTPMethods } from "./middlewares/with-methods" import withValidation from "./middlewares/with-validation" import { z } from "zod" -import withMetadata, { MetaData } from "./middlewares/with-metadata" type ParamDef = z.ZodTypeAny | z.ZodEffects @@ -24,7 +23,6 @@ export const checkRouteSpec = < any >[], FormData extends ParamDef = z.ZodTypeAny, - MetaData extends ParamDef = z.ZodTypeAny, Spec extends RouteSpec< AuthType, Methods, @@ -32,8 +30,7 @@ export const checkRouteSpec = < QueryParams, CommonParams, Middlewares, - FormData, - MetaData + FormData > = RouteSpec< AuthType, Methods, @@ -41,8 +38,7 @@ export const checkRouteSpec = < QueryParams, CommonParams, Middlewares, - FormData, - MetaData + FormData > >( spec: Spec @@ -113,7 +109,6 @@ export const createWithRouteSpec: CreateWithRouteSpecFunction = (( shouldValidateGetRequestBody, supportedArrayFormats, }), - withMetadata(spec.metaData), userDefinedRouteFn )(req as any, res) } diff --git a/packages/nextlove/src/with-route-spec/middlewares/with-metadata.ts b/packages/nextlove/src/with-route-spec/middlewares/with-metadata.ts deleted file mode 100644 index 552caddbd..000000000 --- a/packages/nextlove/src/with-route-spec/middlewares/with-metadata.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { z } from "zod" - -const MetaDataSchema = z.object({ - legacySdkTakesDeviceIdStringParameter: z.boolean().optional(), -}) - -export type MetaData = z.infer - -export const withMetadata = (metaData: MetaData) => (next) => (req, res) => { - // do something with metaData - return next(req, res) -} - -export default withMetadata