Skip to content

Commit cc2dc55

Browse files
authored
feat: response middleware extra info (#788)
1 parent 6f07a0e commit cc2dc55

File tree

3 files changed

+67
-4
lines changed

3 files changed

+67
-4
lines changed

src/raw/classes/GraphQLClient.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,11 @@ export class GraphQLClient {
7575
})
7676

7777
if (responseMiddleware) {
78-
responseMiddleware(response)
78+
responseMiddleware(response, {
79+
operationName: document.operationName,
80+
variables,
81+
url: this.url,
82+
})
7983
}
8084

8185
if (response instanceof Error) {
@@ -142,7 +146,11 @@ export class GraphQLClient {
142146
})
143147

144148
if (responseMiddleware) {
145-
responseMiddleware(response)
149+
responseMiddleware(response, {
150+
operationName: analyzedDocument.operationName,
151+
variables: requestOptions.variables,
152+
url: this.url,
153+
})
146154
}
147155

148156
if (response instanceof Error) {
@@ -214,7 +222,11 @@ export class GraphQLClient {
214222
})
215223

216224
if (this.requestConfig.responseMiddleware) {
217-
this.requestConfig.responseMiddleware(response)
225+
this.requestConfig.responseMiddleware(response, {
226+
operationName: undefined,
227+
variables,
228+
url: this.url,
229+
})
218230
}
219231

220232
if (response instanceof Error) {

src/raw/helpers/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,14 @@ export type RequestOptions<V extends Variables = Variables, T = unknown> =
9292

9393
export type ResponseMiddleware = (
9494
response: GraphQLClientResponse<unknown> | ClientError | Error,
95+
request: RequestExtendedInit,
9596
) => void
9697

9798
export type RequestMiddleware<V extends Variables = Variables> = (
9899
request: RequestExtendedInit<V>,
99100
) => RequestExtendedInit | Promise<RequestExtendedInit>
100101

101-
type RequestExtendedInit<V extends Variables = Variables> = RequestInit & {
102+
export type RequestExtendedInit<V extends Variables = Variables> = RequestInit & {
102103
url: string
103104
operationName?: string
104105
variables?: V

tests/raw/general.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,56 @@ describe(`middleware`, () => {
107107
expect(requestMiddleware).toBeCalledTimes(1)
108108
expect(res.result).toBe(123)
109109
})
110+
111+
describe(`when response middleware needs second req arg`, () => {
112+
it(`request`, async () => {
113+
await client.request({
114+
document: `query x($foo: String) { foo(foo: $foo) }`,
115+
variables: { foo: `bar` },
116+
})
117+
expect(responseMiddleware).toBeCalledTimes(1)
118+
119+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
120+
const [_, res] = responseMiddleware.mock.calls[0]
121+
expect(res).toMatchObject({
122+
operationName: `x`,
123+
url: ctx.url,
124+
variables: { foo: `bar` },
125+
})
126+
})
127+
it(`rawRequest`, async () => {
128+
await client.rawRequest(`query x($foo: String) { foo(foo: $foo) }`, {
129+
foo: `bar`,
130+
})
131+
expect(responseMiddleware).toBeCalledTimes(1)
132+
133+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
134+
const [_, res] = responseMiddleware.mock.calls[0]
135+
expect(res).toMatchObject({
136+
operationName: `x`,
137+
url: ctx.url,
138+
variables: { foo: `bar` },
139+
})
140+
})
141+
142+
it(`batchRequests`, async () => {
143+
await client.batchRequests([
144+
{
145+
document: `query x($foo: String) { foo(foo: $foo) }`,
146+
variables: {foo: `bar`},
147+
},
148+
])
149+
expect(responseMiddleware).toBeCalledTimes(1)
150+
151+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
152+
const [_, res] = responseMiddleware.mock.calls[0]
153+
expect(res).toMatchObject({
154+
operationName: undefined,
155+
url: ctx.url,
156+
variables: [{ foo: `bar` }],
157+
})
158+
})
159+
});
110160
})
111161

112162
describe(`async request middleware`, () => {

0 commit comments

Comments
 (0)