parse-client-options.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. module.exports = parseOptions;
  2. const { Deprecation } = require("deprecation");
  3. const { getUserAgent } = require("universal-user-agent");
  4. const once = require("once");
  5. const pkg = require("../package.json");
  6. const deprecateOptionsTimeout = once((log, deprecation) =>
  7. log.warn(deprecation)
  8. );
  9. const deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation));
  10. const deprecateOptionsHeaders = once((log, deprecation) =>
  11. log.warn(deprecation)
  12. );
  13. function parseOptions(options, log, hook) {
  14. if (options.headers) {
  15. options.headers = Object.keys(options.headers).reduce((newObj, key) => {
  16. newObj[key.toLowerCase()] = options.headers[key];
  17. return newObj;
  18. }, {});
  19. }
  20. const clientDefaults = {
  21. headers: options.headers || {},
  22. request: options.request || {},
  23. mediaType: {
  24. previews: [],
  25. format: ""
  26. }
  27. };
  28. if (options.baseUrl) {
  29. clientDefaults.baseUrl = options.baseUrl;
  30. }
  31. if (options.userAgent) {
  32. clientDefaults.headers["user-agent"] = options.userAgent;
  33. }
  34. if (options.previews) {
  35. clientDefaults.mediaType.previews = options.previews;
  36. }
  37. if (options.timeZone) {
  38. clientDefaults.headers["time-zone"] = options.timeZone;
  39. }
  40. if (options.timeout) {
  41. deprecateOptionsTimeout(
  42. log,
  43. new Deprecation(
  44. "[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request"
  45. )
  46. );
  47. clientDefaults.request.timeout = options.timeout;
  48. }
  49. if (options.agent) {
  50. deprecateOptionsAgent(
  51. log,
  52. new Deprecation(
  53. "[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request"
  54. )
  55. );
  56. clientDefaults.request.agent = options.agent;
  57. }
  58. if (options.headers) {
  59. deprecateOptionsHeaders(
  60. log,
  61. new Deprecation(
  62. "[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request"
  63. )
  64. );
  65. }
  66. const userAgentOption = clientDefaults.headers["user-agent"];
  67. const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`;
  68. clientDefaults.headers["user-agent"] = [userAgentOption, defaultUserAgent]
  69. .filter(Boolean)
  70. .join(" ");
  71. clientDefaults.request.hook = hook.bind(null, "request");
  72. return clientDefaults;
  73. }