@@ -8,18 +8,20 @@ var url = require('url');
88
99//parses a connection string
1010function parse ( str ) {
11- var config ;
1211 //unix socket
1312 if ( str . charAt ( 0 ) === '/' ) {
14- config = str . split ( ' ' ) ;
13+ var config = str . split ( ' ' ) ;
1514 return { host : config [ 0 ] , database : config [ 1 ] } ;
1615 }
16+
1717 // url parse expects spaces encoded as %20
18- if ( / | % [ ^ a - f 0 - 9 ] | % [ a - f 0 - 9 ] [ ^ a - f 0 - 9 ] / i. test ( str ) ) {
19- str = encodeURI ( str ) . replace ( / \% 2 5 ( \d \d ) / g, "%$1" ) ;
18+ var result = url . parse ( / | % [ ^ a - f 0 - 9 ] | % [ a - f 0 - 9 ] [ ^ a - f 0 - 9 ] / i. test ( str ) ? encodeURI ( str ) . replace ( / \% 2 5 ( \d \d ) / g, "%$1" ) : str , true ) ;
19+ var config = result . query ;
20+ for ( var k in config ) {
21+ if ( Array . isArray ( config [ k ] ) ) {
22+ config [ k ] = config [ k ] [ config [ k ] . length - 1 ] ;
23+ }
2024 }
21- var result = url . parse ( str , true ) ;
22- config = { } ;
2325
2426 config . port = result . port ;
2527 if ( result . protocol == 'socket:' ) {
@@ -42,26 +44,14 @@ function parse(str) {
4244 config . user = auth [ 0 ] ;
4345 config . password = auth . splice ( 1 ) . join ( ':' ) ;
4446
45- var ssl = result . query . ssl ;
46- if ( ssl === 'true' || ssl === '1' ) {
47+ if ( config . ssl === 'true' || config . ssl === '1' ) {
4748 config . ssl = true ;
4849 }
4950
50- [ 'db' , 'database' , 'encoding' , 'client_encoding' , 'host' , 'port' , 'user' , 'password' , 'ssl' ]
51- . forEach ( function ( key ) {
52- delete result . query [ key ] ;
53- } ) ;
54-
55- Object . getOwnPropertyNames ( result . query ) . forEach ( function ( key ) {
56- var value = result . query [ key ] ;
57- if ( Array . isArray ( value ) )
58- value = value [ value . length - 1 ] ;
59- config [ key ] = value ;
60- } ) ;
61-
6251 return config ;
6352}
6453
65- module . exports = {
66- parse : parse
67- } ;
54+
55+ module . exports = parse ;
56+
57+ parse . parse = parse ;
0 commit comments