|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // @flow
-
- import http from 'http';
- import https from 'https';
-
- type AgentType = http.Agent | https.Agent;
-
- // eslint-disable-next-line flowtype/no-weak-types
- export default (originalMethod: Function, agent: AgentType, forceGlobalAgent: boolean) => {
- // eslint-disable-next-line unicorn/prevent-abbreviations
- return (...args: *) => {
- let url;
- let options;
- let callback;
-
- if (typeof args[0] === 'string' || args[0] instanceof URL) {
- url = args[0];
-
- if (typeof args[1] === 'function') {
- options = {};
- callback = args[1];
- } else {
- options = {
- ...args[1],
- };
- callback = args[2];
- }
- } else {
- options = {
- ...args[0],
- };
- callback = args[1];
- }
-
- if (forceGlobalAgent) {
- options.agent = agent;
- } else {
- if (!options.agent) {
- options.agent = agent;
- }
-
- if (options.agent === http.globalAgent || options.agent === https.globalAgent) {
- options.agent = agent;
- }
- }
-
- if (url) {
- // $FlowFixMe
- return originalMethod(url, options, callback);
- } else {
- return originalMethod(options, callback);
- }
- };
- };
|