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