60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
module.exports = octokitRestNormalizeGitReferenceResponses;
|
|
|
|
const { RequestError } = require("@octokit/request-error");
|
|
|
|
function octokitRestNormalizeGitReferenceResponses(octokit) {
|
|
octokit.hook.wrap("request", (request, options) => {
|
|
const isGetOrListRefRequest = /\/repos\/:?\w+\/:?\w+\/git\/refs\/:?\w+/.test(
|
|
options.url
|
|
);
|
|
|
|
if (!isGetOrListRefRequest) {
|
|
return request(options);
|
|
}
|
|
|
|
const isGetRefRequest = "ref" in options;
|
|
|
|
return request(options)
|
|
.then(response => {
|
|
// request single reference
|
|
if (isGetRefRequest) {
|
|
if (Array.isArray(response.data)) {
|
|
throw new RequestError(
|
|
`More than one reference found for "${options.ref}"`,
|
|
404,
|
|
{
|
|
request: options
|
|
}
|
|
);
|
|
}
|
|
|
|
// ✅ received single reference
|
|
return response;
|
|
}
|
|
|
|
// request list of references
|
|
if (!Array.isArray(response.data)) {
|
|
response.data = [response.data];
|
|
}
|
|
|
|
return response;
|
|
})
|
|
|
|
.catch(error => {
|
|
if (isGetRefRequest) {
|
|
throw error;
|
|
}
|
|
|
|
if (error.status === 404) {
|
|
return {
|
|
status: 200,
|
|
headers: error.headers,
|
|
data: []
|
|
};
|
|
}
|
|
|
|
throw error;
|
|
});
|
|
});
|
|
}
|