mirror of https://github.com/actions/setup-node
54 lines
1.3 KiB
JavaScript
54 lines
1.3 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
|
||
|
})
|
||
|
})
|
||
|
}
|