You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.6 KiB
68 lines
1.6 KiB
'use strict'; |
|
const got = require('got'); |
|
const isPlainObj = require('is-plain-obj'); |
|
|
|
function ghGot(path, opts) { |
|
if (typeof path !== 'string') { |
|
return Promise.reject(new TypeError(`Expected 'path' to be a string, got ${typeof path}`)); |
|
} |
|
|
|
const env = process.env; |
|
|
|
opts = Object.assign({ |
|
json: true, |
|
token: env.GITHUB_TOKEN, |
|
endpoint: env.GITHUB_ENDPOINT ? env.GITHUB_ENDPOINT.replace(/[^/]$/, '$&/') : 'https://api.github.com/' |
|
}, opts); |
|
|
|
opts.headers = Object.assign({ |
|
'accept': 'application/vnd.github.v3+json', |
|
'user-agent': 'https://github.com/sindresorhus/gh-got' |
|
}, opts.headers); |
|
|
|
if (opts.token) { |
|
opts.headers.authorization = `token ${opts.token}`; |
|
} |
|
|
|
// https://developer.github.com/v3/#http-verbs |
|
if (opts.method && opts.method.toLowerCase() === 'put' && !opts.body) { |
|
opts.headers['content-length'] = 0; |
|
} |
|
|
|
// TODO: remove this when Got eventually supports it |
|
// https://github.com/sindresorhus/got/issues/174 |
|
if (isPlainObj(opts.body)) { |
|
opts.headers['content-type'] = 'application/json'; |
|
opts.body = JSON.stringify(opts.body); |
|
} |
|
|
|
const url = /^https?/.test(path) ? path : opts.endpoint + path; |
|
|
|
if (opts.stream) { |
|
return got.stream(url, opts); |
|
} |
|
|
|
return got(url, opts); |
|
} |
|
|
|
const helpers = [ |
|
'get', |
|
'post', |
|
'put', |
|
'patch', |
|
'head', |
|
'delete' |
|
]; |
|
|
|
ghGot.stream = (url, opts) => ghGot(url, Object.assign({}, opts, { |
|
json: false, |
|
stream: true |
|
})); |
|
|
|
for (const x of helpers) { |
|
const method = x.toUpperCase(); |
|
ghGot[x] = (url, opts) => ghGot(url, Object.assign({}, opts, {method})); |
|
ghGot.stream[x] = (url, opts) => ghGot.stream(url, Object.assign({}, opts, {method})); |
|
} |
|
|
|
module.exports = ghGot;
|
|
|