setup-node/node_modules/@octokit/rest/plugins/register-endpoints/register-endpoints.js
2019-08-05 15:18:52 -04:00

88 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module.exports = registerEndpoints
const { Deprecation } = require('deprecation')
function registerEndpoints (octokit, routes) {
Object.keys(routes).forEach(namespaceName => {
if (!octokit[namespaceName]) {
octokit[namespaceName] = {}
}
Object.keys(routes[namespaceName]).forEach(apiName => {
const apiOptions = routes[namespaceName][apiName]
const endpointDefaults = ['method', 'url', 'headers'].reduce((map, key) => {
if (typeof apiOptions[key] !== 'undefined') {
map[key] = apiOptions[key]
}
return map
}, {})
endpointDefaults.request = {
validate: apiOptions.params
}
let request = octokit.request.defaults(endpointDefaults)
// patch request & endpoint methods to support deprecated parameters.
// Not the most elegant solution, but we dont want to move deprecation
// logic into octokit/endpoint.js as its out of scope
const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(key => apiOptions.params[key].deprecated)
if (hasDeprecatedParam) {
const patch = patchForDeprecation.bind(null, octokit, apiOptions)
request = patch(
octokit.request.defaults(endpointDefaults),
`.${namespaceName}.${apiName}()`
)
request.endpoint = patch(
request.endpoint,
`.${namespaceName}.${apiName}.endpoint()`
)
request.endpoint.merge = patch(
request.endpoint.merge,
`.${namespaceName}.${apiName}.endpoint.merge()`
)
}
if (apiOptions.deprecated) {
octokit[namespaceName][apiName] = function deprecatedEndpointMethod () {
octokit.log.warn(new Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`))
octokit[namespaceName][apiName] = request
return request.apply(null, arguments)
}
return
}
octokit[namespaceName][apiName] = request
})
})
}
function patchForDeprecation (octokit, apiOptions, method, methodName) {
const patchedMethod = (options) => {
options = Object.assign({}, options)
Object.keys(options).forEach(key => {
if (apiOptions.params[key] && apiOptions.params[key].deprecated) {
const aliasKey = apiOptions.params[key].alias
octokit.log.warn(new Deprecation(`[@octokit/rest] "${key}" parameter is deprecated for "${methodName}". Use "${aliasKey}" instead`))
if (!(aliasKey in options)) {
options[aliasKey] = options[key]
}
delete options[key]
}
})
return method(options)
}
Object.keys(method).forEach(key => {
patchedMethod[key] = method[key]
})
return patchedMethod
}