1 | module.exports = parseOptions
|
2 |
|
3 | const getUserAgent = require('universal-user-agent')
|
4 | const pick = require('lodash.pick')
|
5 |
|
6 | const pkg = require('../package.json')
|
7 |
|
8 | const OPTION_NAMES = [
|
9 | 'timeout',
|
10 | 'baseUrl',
|
11 | 'agent',
|
12 | 'headers'
|
13 | ]
|
14 |
|
15 | function parseOptions (userOptions) {
|
16 | if (!userOptions) {
|
17 | userOptions = {}
|
18 | }
|
19 |
|
20 | if (userOptions.headers) {
|
21 | userOptions.headers = Object.keys(userOptions.headers).reduce((newObj, key) => {
|
22 | newObj[key.toLowerCase()] = userOptions.headers[key]
|
23 | return newObj
|
24 | }, {})
|
25 | }
|
26 |
|
27 | const options = pick(userOptions, OPTION_NAMES)
|
28 |
|
29 | const clientDefaults = {
|
30 | headers: options.headers || {},
|
31 | request: {}
|
32 | }
|
33 |
|
34 | if (options.baseUrl) {
|
35 | clientDefaults.baseUrl = options.baseUrl
|
36 | }
|
37 |
|
38 | if (options.timeout) {
|
39 | clientDefaults.request.timeout = options.timeout
|
40 | }
|
41 |
|
42 | if (options.agent) {
|
43 | clientDefaults.request.agent = options.agent
|
44 | }
|
45 |
|
46 | const userAgentOption = clientDefaults.headers['user-agent']
|
47 | const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`
|
48 |
|
49 | clientDefaults.headers['user-agent'] = [userAgentOption, defaultUserAgent].filter(Boolean).join(' ')
|
50 |
|
51 | return clientDefaults
|
52 | }
|