| export function endpointsToMethods(octokit, endpointsMap) { |
| const newMethods = {}; |
| for (const [scope, endpoints] of Object.entries(endpointsMap)) { |
| for (const [methodName, endpoint] of Object.entries(endpoints)) { |
| const [route, defaults, decorations] = endpoint; |
| const [method, url] = route.split(/ /); |
| const endpointDefaults = Object.assign({ method, url }, defaults); |
| if (!newMethods[scope]) { |
| newMethods[scope] = {}; |
| } |
| const scopeMethods = newMethods[scope]; |
| if (decorations) { |
| scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations); |
| continue; |
| } |
| scopeMethods[methodName] = octokit.request.defaults(endpointDefaults); |
| } |
| } |
| return newMethods; |
| } |
| function decorate(octokit, scope, methodName, defaults, decorations) { |
| const requestWithDefaults = octokit.request.defaults(defaults); |
| /* istanbul ignore next */ |
| function withDecorations(...args) { |
| // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 |
| let options = requestWithDefaults.endpoint.merge(...args); |
| // There are currently no other decorations than `.mapToData` |
| if (decorations.mapToData) { |
| options = Object.assign({}, options, { |
| data: options[decorations.mapToData], |
| [decorations.mapToData]: undefined, |
| }); |
| return requestWithDefaults(options); |
| } |
| if (decorations.renamed) { |
| const [newScope, newMethodName] = decorations.renamed; |
| octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`); |
| } |
| if (decorations.deprecated) { |
| octokit.log.warn(decorations.deprecated); |
| } |
| if (decorations.renamedParameters) { |
| // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 |
| const options = requestWithDefaults.endpoint.merge(...args); |
| for (const [name, alias] of Object.entries(decorations.renamedParameters)) { |
| if (name in options) { |
| octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`); |
| if (!(alias in options)) { |
| options[alias] = options[name]; |
| } |
| delete options[name]; |
| } |
| } |
| return requestWithDefaults(options); |
| } |
| // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 |
| return requestWithDefaults(...args); |
| } |
| return Object.assign(withDecorations, requestWithDefaults); |
| } |