11/*
22 Helper Modules
33*/
4- import url , { UrlWithStringQuery , URLSearchParams } from "url" ;
4+ import { URLSearchParams , URL } from "url" ;
55import path from "path" ;
66import crypto from "crypto" ;
77
@@ -38,32 +38,21 @@ export const encodeStringIfRequired = (str: string) => {
3838}
3939
4040const buildURL = function ( opts : FinalUrlOptions ) : string {
41- //Create correct query parameters
42- var parsedURL : UrlWithStringQuery ;
43- var parsedHost : UrlWithStringQuery ;
4441 var isSrcParameterUsedForURL : boolean = false ;
4542
46- var urlObject : { [ key : string ] : string | null } = { host : "" , pathname : "" , search : "" } ;
43+ var urlObject : URL ;
4744
4845 if ( opts . path ) {
49- parsedURL = url . parse ( opts . path ) ;
50- parsedHost = url . parse ( opts . urlEndpoint ) ;
51-
52- urlObject . protocol = parsedHost . protocol ;
53- urlObject . host = opts . urlEndpoint . replace ( urlObject . protocol + "//" , "" ) ;
46+ urlObject = new URL ( opts . urlEndpoint )
5447 } else if ( opts . src ) {
55- parsedURL = url . parse ( opts . src ) ;
5648 isSrcParameterUsedForURL = true ;
57-
58- urlObject . host = [ parsedURL . auth , parsedURL . auth ? "@" : "" , parsedURL . host ] . join ( "" ) ;
59- urlObject . protocol = parsedURL . protocol ;
49+ urlObject = new URL ( opts . src )
6050 } else {
6151 return "" ;
6252 }
6353
64- urlObject . pathname = parsedURL . pathname ? parsedURL . pathname : "" ;
6554
66- var queryParameters = new URLSearchParams ( parsedURL . query || "" ) ;
55+ var queryParameters = new URLSearchParams ( urlObject . search || "" ) ;
6756 for ( var i in opts . queryParameters ) {
6857 queryParameters . set ( i , opts . queryParameters [ i ] ) ;
6958 }
@@ -75,13 +64,18 @@ const buildURL = function (opts: FinalUrlOptions): string {
7564 //string should be added only as a query parameter
7665 if ( transformationUtils . addAsQueryParameter ( opts ) || isSrcParameterUsedForURL ) {
7766 queryParameters . set ( TRANSFORMATION_PARAMETER , transformationString ) ;
67+ urlObject . pathname = `${ urlObject . pathname } ${ opts . path || '' } ` ;
7868 } else {
7969 urlObject . pathname = path . posix . join (
80- [ TRANSFORMATION_PARAMETER , transformationString ] . join ( transformationUtils . getChainTransformDelimiter ( ) ) ,
8170 urlObject . pathname ,
71+ [ TRANSFORMATION_PARAMETER , transformationString ] . join ( transformationUtils . getChainTransformDelimiter ( ) ) ,
72+ opts . path || '' ,
8273 ) ;
8374 }
8475 }
76+ else {
77+ urlObject . pathname = `${ urlObject . pathname } ${ opts . path || '' } ` ;
78+ }
8579
8680 urlObject . host = urlFormatter . removeTrailingSlash ( urlObject . host ) ;
8781 urlObject . pathname = urlFormatter . addLeadingSlash ( urlObject . pathname ) ;
@@ -107,7 +101,7 @@ const buildURL = function (opts: FinalUrlOptions): string {
107101 expiryTimestamp = DEFAULT_TIMESTAMP ;
108102 }
109103
110- var intermediateURL = url . format ( urlObject ) ;
104+ var intermediateURL = urlObject . href ;
111105
112106 var urlSignature = getSignature ( {
113107 privateKey : opts . privateKey ,
@@ -122,8 +116,7 @@ const buildURL = function (opts: FinalUrlOptions): string {
122116 queryParameters . set ( SIGNATURE_PARAMETER , urlSignature ) ;
123117 urlObject . search = queryParameters . toString ( ) ;
124118 }
125-
126- return url . format ( urlObject ) ;
119+ return urlObject . href ;
127120} ;
128121
129122function constructTransformationString ( inputTransformation : Array < Transformation > | undefined ) {
0 commit comments