Skip to content

Commit 4767529

Browse files
committed
fail early, fail fast
1 parent 9205e49 commit 4767529

File tree

1 file changed

+31
-33
lines changed

1 file changed

+31
-33
lines changed

src/fetch-wrapper.ts

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,6 @@ import type { EndpointInterface } from "@octokit/types";
55
export default function fetchWrapper(
66
requestOptions: ReturnType<EndpointInterface>,
77
) {
8-
const log =
9-
requestOptions.request && requestOptions.request.log
10-
? requestOptions.request.log
11-
: console;
12-
const parseSuccessResponseBody =
13-
requestOptions.request?.parseSuccessResponseBody !== false;
14-
15-
if (
16-
isPlainObject(requestOptions.body) ||
17-
Array.isArray(requestOptions.body)
18-
) {
19-
requestOptions.body = JSON.stringify(requestOptions.body);
20-
}
21-
22-
let headers: { [header: string]: string } = {};
23-
let status: number;
24-
let url: string;
25-
268
const fetch: typeof globalThis.fetch =
279
requestOptions.request?.fetch || globalThis.fetch;
2810

@@ -32,17 +14,32 @@ export default function fetchWrapper(
3214
);
3315
}
3416

17+
const log = requestOptions.request?.log || console;
18+
const parseSuccessResponseBody =
19+
requestOptions.request?.parseSuccessResponseBody !== false;
20+
21+
const body =
22+
isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)
23+
? JSON.stringify(requestOptions.body)
24+
: requestOptions.body;
25+
26+
const requestHeaders = Object.fromEntries(
27+
Object.entries(requestOptions.headers).map(([name, value]) => [
28+
name,
29+
String(value),
30+
]),
31+
);
32+
33+
let responseHeaders: { [header: string]: string } = {};
34+
let status: number;
35+
let url: string;
36+
3537
return fetch(requestOptions.url, {
3638
method: requestOptions.method,
37-
body: requestOptions.body,
39+
body,
3840
redirect: requestOptions.request?.redirect,
3941
// Header values must be `string`
40-
headers: Object.fromEntries(
41-
Object.entries(requestOptions.headers).map(([name, value]) => [
42-
name,
43-
String(value),
44-
]),
45-
),
42+
headers: requestHeaders,
4643
signal: requestOptions.request?.signal,
4744
// duplex must be set if request.body is ReadableStream or Async Iterables.
4845
// See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
@@ -53,17 +50,18 @@ export default function fetchWrapper(
5350
status = response.status;
5451

5552
for (const keyAndValue of response.headers) {
56-
headers[keyAndValue[0]] = keyAndValue[1];
53+
responseHeaders[keyAndValue[0]] = keyAndValue[1];
5754
}
5855

59-
if ("deprecation" in headers) {
56+
if ("deprecation" in responseHeaders) {
6057
const matches =
61-
headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/);
58+
responseHeaders.link &&
59+
responseHeaders.link.match(/<([^>]+)>; rel="deprecation"/);
6260
const deprecationLink = matches && matches.pop();
6361
log.warn(
6462
`[@octokit/request] "${requestOptions.method} ${
6563
requestOptions.url
66-
}" is deprecated. It is scheduled to be removed on ${headers.sunset}${
64+
}" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${
6765
deprecationLink ? `. See ${deprecationLink}` : ""
6866
}`,
6967
);
@@ -83,7 +81,7 @@ export default function fetchWrapper(
8381
response: {
8482
url,
8583
status,
86-
headers,
84+
headers: responseHeaders,
8785
data: undefined,
8886
},
8987
request: requestOptions,
@@ -95,7 +93,7 @@ export default function fetchWrapper(
9593
response: {
9694
url,
9795
status,
98-
headers,
96+
headers: responseHeaders,
9997
data: await getResponseData(response),
10098
},
10199
request: requestOptions,
@@ -109,7 +107,7 @@ export default function fetchWrapper(
109107
response: {
110108
url,
111109
status,
112-
headers,
110+
headers: responseHeaders,
113111
data,
114112
},
115113
request: requestOptions,
@@ -126,7 +124,7 @@ export default function fetchWrapper(
126124
return {
127125
status,
128126
url,
129-
headers,
127+
headers: responseHeaders,
130128
data,
131129
};
132130
})

0 commit comments

Comments
 (0)