90 lines
2.4 KiB
JavaScript
90 lines
2.4 KiB
JavaScript
|
module.exports = parseOptions;
|
||
|
|
||
|
const { Deprecation } = require("deprecation");
|
||
|
const { getUserAgent } = require("universal-user-agent");
|
||
|
const once = require("once");
|
||
|
|
||
|
const pkg = require("../package.json");
|
||
|
|
||
|
const deprecateOptionsTimeout = once((log, deprecation) =>
|
||
|
log.warn(deprecation)
|
||
|
);
|
||
|
const deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation));
|
||
|
const deprecateOptionsHeaders = once((log, deprecation) =>
|
||
|
log.warn(deprecation)
|
||
|
);
|
||
|
|
||
|
function parseOptions(options, log, hook) {
|
||
|
if (options.headers) {
|
||
|
options.headers = Object.keys(options.headers).reduce((newObj, key) => {
|
||
|
newObj[key.toLowerCase()] = options.headers[key];
|
||
|
return newObj;
|
||
|
}, {});
|
||
|
}
|
||
|
|
||
|
const clientDefaults = {
|
||
|
headers: options.headers || {},
|
||
|
request: options.request || {},
|
||
|
mediaType: {
|
||
|
previews: [],
|
||
|
format: ""
|
||
|
}
|
||
|
};
|
||
|
|
||
|
if (options.baseUrl) {
|
||
|
clientDefaults.baseUrl = options.baseUrl;
|
||
|
}
|
||
|
|
||
|
if (options.userAgent) {
|
||
|
clientDefaults.headers["user-agent"] = options.userAgent;
|
||
|
}
|
||
|
|
||
|
if (options.previews) {
|
||
|
clientDefaults.mediaType.previews = options.previews;
|
||
|
}
|
||
|
|
||
|
if (options.timeZone) {
|
||
|
clientDefaults.headers["time-zone"] = options.timeZone;
|
||
|
}
|
||
|
|
||
|
if (options.timeout) {
|
||
|
deprecateOptionsTimeout(
|
||
|
log,
|
||
|
new Deprecation(
|
||
|
"[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request"
|
||
|
)
|
||
|
);
|
||
|
clientDefaults.request.timeout = options.timeout;
|
||
|
}
|
||
|
|
||
|
if (options.agent) {
|
||
|
deprecateOptionsAgent(
|
||
|
log,
|
||
|
new Deprecation(
|
||
|
"[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request"
|
||
|
)
|
||
|
);
|
||
|
clientDefaults.request.agent = options.agent;
|
||
|
}
|
||
|
|
||
|
if (options.headers) {
|
||
|
deprecateOptionsHeaders(
|
||
|
log,
|
||
|
new Deprecation(
|
||
|
"[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request"
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const userAgentOption = clientDefaults.headers["user-agent"];
|
||
|
const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`;
|
||
|
|
||
|
clientDefaults.headers["user-agent"] = [userAgentOption, defaultUserAgent]
|
||
|
.filter(Boolean)
|
||
|
.join(" ");
|
||
|
|
||
|
clientDefaults.request.hook = hook.bind(null, "request");
|
||
|
|
||
|
return clientDefaults;
|
||
|
}
|