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