diff --git a/packages/pg-connection-string/index.js b/packages/pg-connection-string/index.js index 7ee302976..139cc17b1 100644 --- a/packages/pg-connection-string/index.js +++ b/packages/pg-connection-string/index.js @@ -50,7 +50,7 @@ function parse(str, options = {}) { config.client_encoding = result.searchParams.get('encoding') return config } - const hostname = dummyHost ? '' : result.hostname + const hostname = (dummyHost ? '' : result.hostname).replace(/^\[(.+)\]$/, '$1') if (!config.host) { // Only set the host if there is no equivalent query param. config.host = decodeURIComponent(hostname) diff --git a/packages/pg-connection-string/test/parse.ts b/packages/pg-connection-string/test/parse.ts index c2a537581..562c3ece0 100644 --- a/packages/pg-connection-string/test/parse.ts +++ b/packages/pg-connection-string/test/parse.ts @@ -14,6 +14,11 @@ describe('parse', function () { subject.database?.should.equal('lala') }) + it('strips the URI brackets from an IPv6 host', function () { + parse('postgres://brian:pw@[::1]:5432/lala').host?.should.equal('::1') + parse('postgres://brian:pw@[2001:db8::1]:5432/lala').host?.should.equal('2001:db8::1') + }) + it('escape spaces if present', function () { const subject = parse('postgres://localhost/post gres') subject.database?.should.equal('post gres')