From 200d5d26c1c8d351bb0e67600ff62a81f7df108b Mon Sep 17 00:00:00 2001 From: yicrotkd Date: Sat, 21 Sep 2024 00:34:51 +0900 Subject: [PATCH 1/3] Improve middleware type definition --- packages/openapi-fetch/src/index.d.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/openapi-fetch/src/index.d.ts b/packages/openapi-fetch/src/index.d.ts index c2e9ebda3..a2bab4ff7 100644 --- a/packages/openapi-fetch/src/index.d.ts +++ b/packages/openapi-fetch/src/index.d.ts @@ -144,12 +144,22 @@ export interface MiddlewareCallbackParams { readonly options: MergedOptions; } -export interface Middleware { - onRequest?: (options: MiddlewareCallbackParams) => void | Request | undefined | Promise; - onResponse?: ( - options: MiddlewareCallbackParams & { response: Response }, - ) => void | Response | undefined | Promise; -} +type MiddlewareOnRequest = ( + options: MiddlewareCallbackParams, +) => void | Request | undefined | Promise; +type MiddlewareOnResponse = ( + options: MiddlewareCallbackParams & { response: Response }, +) => void | Response | undefined | Promise; + +export type Middleware = + | { + onRequest: MiddlewareOnRequest; + onResponse?: MiddlewareOnResponse; + } + | { + onRequest?: MiddlewareOnRequest; + onResponse: MiddlewareOnResponse; + }; /** This type helper makes the 2nd function param required if params/requestBody are required; otherwise, optional */ export type MaybeOptionalInit = RequiredKeysOf< From 3437a241dad6d3f78841f0cebee72c6c6f20d2b2 Mon Sep 17 00:00:00 2001 From: yicrotkd Date: Sat, 21 Sep 2024 00:35:43 +0900 Subject: [PATCH 2/3] Add type test for middleware --- .../openapi-fetch/test/middleware/middleware.test.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/openapi-fetch/test/middleware/middleware.test.ts b/packages/openapi-fetch/test/middleware/middleware.test.ts index 1ac49e751..a13ee8c57 100644 --- a/packages/openapi-fetch/test/middleware/middleware.test.ts +++ b/packages/openapi-fetch/test/middleware/middleware.test.ts @@ -1,4 +1,4 @@ -import { expect, test } from "vitest"; +import { expect, test, expectTypeOf, assertType } from "vitest"; import { createObservedClient } from "../helpers.js"; import type { Middleware, MiddlewareCallbackParams } from "../../src/index.js"; import type { paths } from "./schemas/middleware.js"; @@ -354,3 +354,12 @@ test("auth header", async () => { }); expect(headers.get("authorization")).toBe(`Bearer ${accessToken}`); }); + +test("type error occurs only when neither onRequest nor onResponse is specified", async () => { + expectTypeOf().not.toEqualTypeOf({}); + const onRequest = async ({ request }: MiddlewareCallbackParams) => request; + const onResponse = async ({ response }: MiddlewareCallbackParams & { response: Response }) => response; + assertType({ onRequest }); + assertType({ onResponse }); + assertType({ onRequest, onResponse }); +}); From 5a0c65ed7f8b4a2565c8944e05941c5b68e7805b Mon Sep 17 00:00:00 2001 From: yicrotkd Date: Sat, 21 Sep 2024 01:50:00 +0900 Subject: [PATCH 3/3] Add changeset --- .changeset/short-lizards-rescue.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/short-lizards-rescue.md diff --git a/.changeset/short-lizards-rescue.md b/.changeset/short-lizards-rescue.md new file mode 100644 index 000000000..cda21aeb2 --- /dev/null +++ b/.changeset/short-lizards-rescue.md @@ -0,0 +1,5 @@ +--- +"openapi-fetch": patch +--- + +Improve `Middleware` type definition to require either onRequest or onResponse