UNPKG

1.43 kBJavaScriptView Raw
1'use strict';
2
3var url = require('url');
4
5//Parse method copied from https://github.com/brianc/node-postgres
6//Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com)
7//MIT License
8
9//parses a connection string
10function parse(str) {
11 var config;
12 //unix socket
13 if(str.charAt(0) === '/') {
14 config = str.split(' ');
15 return { host: config[0], database: config[1] };
16 }
17 // url parse expects spaces encoded as %20
18 if(/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {
19 str = encodeURI(str).replace(/\%25(\d\d)/g, "%$1");
20 }
21 var result = url.parse(str, true);
22 config = {};
23
24 if (result.query.application_name) {
25 config.application_name = result.query.application_name;
26 }
27 if (result.query.fallback_application_name) {
28 config.fallback_application_name = result.query.fallback_application_name;
29 }
30
31 if(result.protocol == 'socket:') {
32 config.host = decodeURI(result.pathname);
33 config.database = result.query.db;
34 config.client_encoding = result.query.encoding;
35 return config;
36 }
37 config.host = result.hostname;
38 config.database = result.pathname ? decodeURI(result.pathname.slice(1)) : null;
39 var auth = (result.auth || ':').split(':');
40 config.user = auth[0];
41 config.password = auth[1];
42 config.port = result.port;
43
44 var ssl = result.query.ssl;
45 if (ssl === 'true' || ssl === '1') {
46 config.ssl = true;
47 }
48
49 return config;
50}
51
52module.exports = {
53 parse: parse
54};