setup-node/node_modules/@octokit/rest/plugins/normalize-git-reference-responses/index.js

54 lines
1.3 KiB
JavaScript
Raw Permalink Normal View History

2019-08-07 06:29:44 +08:00
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
})
})
}