11'use strict' ;
22var http = require ( 'http' ) ;
33var parseUrl = require ( 'url' ) . parse ;
4- var extend = require ( 'extend' ) ;
54var once = require ( './once' ) ;
5+ var joinPath = require ( 'path' ) . join ;
66
7- module . exports = function ( agent , agentOptions ) {
7+ function rawCopy ( obj ) {
8+ var data = { } ;
9+ for ( var k in obj ) {
10+ if ( obj . hasOwnProperty ( k ) ) {
11+ data [ k ] = obj [ k ] ;
12+ }
13+ }
14+ return data ;
15+ }
16+
17+ module . exports = function ( baseUrl , agent , agentOptions ) {
818 if ( ! agent && http . Agent ) agent = new http . Agent ( agentOptions ) ; // server only
919
1020 var queue = [ ] ;
1121 var maxTasks = typeof agent . maxSockets === 'number' ? agent . maxSockets * 2 : Infinity ;
1222 var activeTasks = 0 ;
23+ var baseUrlParts = rawCopy ( parseUrl ( baseUrl ) ) ;
1324
1425 function drainQueue ( ) {
1526 if ( ! queue . length || activeTasks >= maxTasks ) return ;
@@ -22,7 +33,17 @@ module.exports = function (agent, agentOptions) {
2233 }
2334
2435 return function request ( { method, url, headers, body} , cb ) {
25- var options = extend ( parseUrl ( url ) , { method, headers, agent} ) ;
36+ var path = baseUrlParts . pathname ? (
37+ url . pathname ? joinPath ( baseUrlParts . pathname , url . pathname ) : baseUrlParts . pathname
38+ ) : url . pathname ;
39+ var search = url . search ? (
40+ baseUrlParts . search ? baseUrlParts . search + '&' + url . search . slice ( 1 ) : url . search
41+ ) : baseUrlParts . search ;
42+ if ( search ) path += search ;
43+ var options = { path, method, headers, agent} ;
44+ options . hostname = baseUrlParts . hostname ;
45+ options . port = baseUrlParts . port ;
46+ options . auth = baseUrlParts . auth ;
2647
2748 queue . push ( function ( next ) {
2849 var callback = once ( function ( ) {
0 commit comments