index.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
  4. var endpoint = require('@octokit/endpoint');
  5. var universalUserAgent = require('universal-user-agent');
  6. var isPlainObject = _interopDefault(require('is-plain-object'));
  7. var nodeFetch = _interopDefault(require('node-fetch'));
  8. var requestError = require('@octokit/request-error');
  9. const VERSION = "5.4.2";
  10. function getBufferResponse(response) {
  11. return response.arrayBuffer();
  12. }
  13. function fetchWrapper(requestOptions) {
  14. if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
  15. requestOptions.body = JSON.stringify(requestOptions.body);
  16. }
  17. let headers = {};
  18. let status;
  19. let url;
  20. const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
  21. return fetch(requestOptions.url, Object.assign({
  22. method: requestOptions.method,
  23. body: requestOptions.body,
  24. headers: requestOptions.headers,
  25. redirect: requestOptions.redirect
  26. }, requestOptions.request)).then(response => {
  27. url = response.url;
  28. status = response.status;
  29. for (const keyAndValue of response.headers) {
  30. headers[keyAndValue[0]] = keyAndValue[1];
  31. }
  32. if (status === 204 || status === 205) {
  33. return;
  34. } // GitHub API returns 200 for HEAD requests
  35. if (requestOptions.method === "HEAD") {
  36. if (status < 400) {
  37. return;
  38. }
  39. throw new requestError.RequestError(response.statusText, status, {
  40. headers,
  41. request: requestOptions
  42. });
  43. }
  44. if (status === 304) {
  45. throw new requestError.RequestError("Not modified", status, {
  46. headers,
  47. request: requestOptions
  48. });
  49. }
  50. if (status >= 400) {
  51. return response.text().then(message => {
  52. const error = new requestError.RequestError(message, status, {
  53. headers,
  54. request: requestOptions
  55. });
  56. try {
  57. let responseBody = JSON.parse(error.message);
  58. Object.assign(error, responseBody);
  59. let errors = responseBody.errors; // Assumption `errors` would always be in Array format
  60. error.message = error.message + ": " + errors.map(JSON.stringify).join(", ");
  61. } catch (e) {// ignore, see octokit/rest.js#684
  62. }
  63. throw error;
  64. });
  65. }
  66. const contentType = response.headers.get("content-type");
  67. if (/application\/json/.test(contentType)) {
  68. return response.json();
  69. }
  70. if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
  71. return response.text();
  72. }
  73. return getBufferResponse(response);
  74. }).then(data => {
  75. return {
  76. status,
  77. url,
  78. headers,
  79. data
  80. };
  81. }).catch(error => {
  82. if (error instanceof requestError.RequestError) {
  83. throw error;
  84. }
  85. throw new requestError.RequestError(error.message, 500, {
  86. headers,
  87. request: requestOptions
  88. });
  89. });
  90. }
  91. function withDefaults(oldEndpoint, newDefaults) {
  92. const endpoint = oldEndpoint.defaults(newDefaults);
  93. const newApi = function (route, parameters) {
  94. const endpointOptions = endpoint.merge(route, parameters);
  95. if (!endpointOptions.request || !endpointOptions.request.hook) {
  96. return fetchWrapper(endpoint.parse(endpointOptions));
  97. }
  98. const request = (route, parameters) => {
  99. return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
  100. };
  101. Object.assign(request, {
  102. endpoint,
  103. defaults: withDefaults.bind(null, endpoint)
  104. });
  105. return endpointOptions.request.hook(request, endpointOptions);
  106. };
  107. return Object.assign(newApi, {
  108. endpoint,
  109. defaults: withDefaults.bind(null, endpoint)
  110. });
  111. }
  112. const request = withDefaults(endpoint.endpoint, {
  113. headers: {
  114. "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
  115. }
  116. });
  117. exports.request = request;
  118. //# sourceMappingURL=index.js.map