mirror of
https://github.com/ASzc/change-string-case-action.git
synced 2024-11-24 06:33:50 +08:00
61 lines
2.8 KiB
JavaScript
61 lines
2.8 KiB
JavaScript
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);
|
|
}
|