react-monaco-editor
Version:
Monaco Editor for React
69 lines (54 loc) • 1.62 kB
JavaScript
;
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;
}
const url = /^https?/.test(path) ? path : opts.endpoint + path;
if (opts.stream) {
return got.stream(url, opts);
}
return got(url, opts).catch(err => {
if (err.response && isPlainObj(err.response.body)) {
err.name = 'GitHubError';
err.message = `${err.response.body.message} (${err.statusCode})`;
}
throw err;
});
}
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;