Permalink
Cannot retrieve contributors at this time
119 lines (119 sloc)
4.03 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/@octokit/request/dist-src/fetch-wrapper.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { isPlainObject } from "is-plain-object"; | |
import nodeFetch from "node-fetch"; | |
import { RequestError } from "@octokit/request-error"; | |
import getBuffer from "./get-buffer-response"; | |
export default function fetchWrapper(requestOptions) { | |
const log = requestOptions.request && requestOptions.request.log | |
? requestOptions.request.log | |
: console; | |
if (isPlainObject(requestOptions.body) || | |
Array.isArray(requestOptions.body)) { | |
requestOptions.body = JSON.stringify(requestOptions.body); | |
} | |
let headers = {}; | |
let status; | |
let url; | |
const fetch = (requestOptions.request && requestOptions.request.fetch) || nodeFetch; | |
return fetch(requestOptions.url, Object.assign({ | |
method: requestOptions.method, | |
body: requestOptions.body, | |
headers: requestOptions.headers, | |
redirect: requestOptions.redirect, | |
}, | |
// `requestOptions.request.agent` type is incompatible | |
// see https://github.com/octokit/types.ts/pull/264 | |
requestOptions.request)) | |
.then(async (response) => { | |
url = response.url; | |
status = response.status; | |
for (const keyAndValue of response.headers) { | |
headers[keyAndValue[0]] = keyAndValue[1]; | |
} | |
if ("deprecation" in headers) { | |
const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); | |
const deprecationLink = matches && matches.pop(); | |
log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`); | |
} | |
if (status === 204 || status === 205) { | |
return; | |
} | |
// GitHub API returns 200 for HEAD requests | |
if (requestOptions.method === "HEAD") { | |
if (status < 400) { | |
return; | |
} | |
throw new RequestError(response.statusText, status, { | |
response: { | |
url, | |
status, | |
headers, | |
data: undefined, | |
}, | |
request: requestOptions, | |
}); | |
} | |
if (status === 304) { | |
throw new RequestError("Not modified", status, { | |
response: { | |
url, | |
status, | |
headers, | |
data: await getResponseData(response), | |
}, | |
request: requestOptions, | |
}); | |
} | |
if (status >= 400) { | |
const data = await getResponseData(response); | |
const error = new RequestError(toErrorMessage(data), status, { | |
response: { | |
url, | |
status, | |
headers, | |
data, | |
}, | |
request: requestOptions, | |
}); | |
throw error; | |
} | |
return getResponseData(response); | |
}) | |
.then((data) => { | |
return { | |
status, | |
url, | |
headers, | |
data, | |
}; | |
}) | |
.catch((error) => { | |
if (error instanceof RequestError) | |
throw error; | |
throw new RequestError(error.message, 500, { | |
request: requestOptions, | |
}); | |
}); | |
} | |
async function getResponseData(response) { | |
const contentType = response.headers.get("content-type"); | |
if (/application\/json/.test(contentType)) { | |
return response.json(); | |
} | |
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { | |
return response.text(); | |
} | |
return getBuffer(response); | |
} | |
function toErrorMessage(data) { | |
if (typeof data === "string") | |
return data; | |
// istanbul ignore else - just in case | |
if ("message" in data) { | |
if (Array.isArray(data.errors)) { | |
return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; | |
} | |
return data.message; | |
} | |
// istanbul ignore next - just in case | |
return `Unknown error: ${JSON.stringify(data)}`; | |
} |