From 0f0247ce2ff9fea7c3b9858e7c550e8f2c6a02d0 Mon Sep 17 00:00:00 2001 From: Darcy Ye Date: Wed, 6 Mar 2024 18:47:41 +0800 Subject: [PATCH] refactor(core): overload function interface --- packages/core/src/middleware/koa-guard.ts | 34 ++++++++++------------- packages/core/src/routes/logto-config.ts | 6 ++-- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/packages/core/src/middleware/koa-guard.ts b/packages/core/src/middleware/koa-guard.ts index d1e56c607..5ea365626 100644 --- a/packages/core/src/middleware/koa-guard.ts +++ b/packages/core/src/middleware/koa-guard.ts @@ -92,33 +92,27 @@ export const isGuardMiddleware = ( ): function_ is WithGuardConfig => function_.name === 'guardMiddleware' && has(function_, 'config'); -/** - * Previous `tryParse` function's output type was `Output | undefined`. - * It can not properly infer the output type to be `Output` even if the guard is provided, - * which brings additional but unnecessary type checks. - */ -export const parse = ( +export function tryParse( type: 'query' | 'body' | 'params' | 'files', guard: ZodType, data: unknown -) => { - try { - return guard.parse(data); - } catch (error: unknown) { - throw new RequestError({ code: 'guard.invalid_input', type }, error); - } -}; - -const tryParse = ( +): Output; +export function tryParse( + type: 'query' | 'body' | 'params' | 'files', + guard: undefined, + data: unknown +): undefined; +export function tryParse( type: 'query' | 'body' | 'params' | 'files', guard: Optional>, data: unknown -) => { - if (!guard) { - return; +) { + try { + return guard?.parse(data); + } catch (error: unknown) { + throw new RequestError({ code: 'guard.invalid_input', type }, error); } - return parse(type, guard, data); -}; +} export default function koaGuard< StateT, diff --git a/packages/core/src/routes/logto-config.ts b/packages/core/src/routes/logto-config.ts index 94c8d3546..8f82d61f3 100644 --- a/packages/core/src/routes/logto-config.ts +++ b/packages/core/src/routes/logto-config.ts @@ -19,7 +19,7 @@ import { import { z } from 'zod'; import RequestError from '#src/errors/RequestError/index.js'; -import koaGuard, { parse } from '#src/middleware/koa-guard.js'; +import koaGuard, { tryParse } from '#src/middleware/koa-guard.js'; import { exportJWK } from '#src/utils/jwks.js'; import type { AuthedRouter, RouterInitArgs } from './types.js'; @@ -41,12 +41,12 @@ const getJwtTokenKeyAndBody = (tokenPath: LogtoJwtTokenPath, body: unknown) => { if (tokenPath === LogtoJwtTokenPath.AccessToken) { return { key: LogtoJwtTokenKey.AccessToken, - body: parse('body', jwtCustomizerAccessTokenGuard, body), + body: tryParse('body', jwtCustomizerAccessTokenGuard, body), }; } return { key: LogtoJwtTokenKey.ClientCredentials, - body: parse('body', jwtCustomizerClientCredentialsGuard, body), + body: tryParse('body', jwtCustomizerClientCredentialsGuard, body), }; };