123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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);
- }
|