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