mirror of
https://github.com/actions/setup-node.git
synced 2024-12-24 18:36:31 +08:00
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
|
|
})
|
|
})
|
|
}
|