From 6e236694019953818bc695f7cd9f162286bc4c98 Mon Sep 17 00:00:00 2001 From: Romuald DANSOU Date: Mon, 16 Feb 2026 14:20:09 +0000 Subject: [PATCH] fix(#790): preserve port from COUCH_URL when using --local The parseLocalUrl function unconditionally overwrote the port to 5988, ignoring any port specified in COUCH_URL. Now the user-specified port is preserved and 5988 is only used as the default fallback. --- src/lib/get-api-url.js | 2 +- test/lib/get-api-url.spec.js | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/lib/get-api-url.js b/src/lib/get-api-url.js index 8178bbb86..efbe28cc4 100644 --- a/src/lib/get-api-url.js +++ b/src/lib/get-api-url.js @@ -55,7 +55,7 @@ const parseLocalUrl = (couchUrl) => { const doParse = (unparsed) => { const parsed = new url.URL(unparsed); parsed.path = parsed.pathname = ''; - parsed.host = `${parsed.hostname}:5988`; + parsed.host = `${parsed.hostname}:${parsed.port || 5988}`; return new url.URL(url.format(parsed)); }; diff --git a/test/lib/get-api-url.spec.js b/test/lib/get-api-url.spec.js index 0e492ac7a..83ef65aa5 100644 --- a/test/lib/get-api-url.spec.js +++ b/test/lib/get-api-url.spec.js @@ -35,7 +35,12 @@ describe('get-api-url', () => { it('use environment variable', () => { const actual = apiUrlLib.getApiUrl({ local: true }, { COUCH_URL: 'http://user:pwd@localhost:5984/db' }); - expect(actual).to.deep.equal(new url.URL('http://user:pwd@localhost:5988/medic')); + expect(actual).to.deep.equal(new url.URL('http://user:pwd@localhost:5984/medic')); + }); + + it('use environment variable with custom port', () => { + const actual = apiUrlLib.getApiUrl({ local: true }, { COUCH_URL: 'http://medic:pass@localhost:61418/medic' }); + expect(actual).to.deep.equal(new url.URL('http://medic:pass@localhost:61418/medic')); }); it('warn if environment variable targets remote', () => { @@ -70,11 +75,17 @@ describe('get-api-url', () => { it('basic', () => expect(parseLocalUrl('http://admin:pass@localhost:5988/medic').href).to.eq('http://admin:pass@localhost:5988/')); - it('updates port', () => - expect(parseLocalUrl('http://admin:pass@localhost:5984/medic').href).to.eq('http://admin:pass@localhost:5988/')); + it('preserves port from COUCH_URL', () => + expect(parseLocalUrl('http://admin:pass@localhost:5984/medic').href).to.eq('http://admin:pass@localhost:5984/')); + + it('preserves custom port from COUCH_URL', () => + expect(parseLocalUrl('http://admin:pass@localhost:61418/medic').href).to.eq('http://admin:pass@localhost:61418/')); + + it('defaults to 5988 when no port specified', () => + expect(parseLocalUrl('http://admin:pass@localhost/medic').href).to.eq('http://admin:pass@localhost:5988/')); it('ignores path', () => - expect(parseLocalUrl('http://admin:pass@localhost:5984/foo').href).to.eq('http://admin:pass@localhost:5988/')); + expect(parseLocalUrl('http://admin:pass@localhost:5984/foo').href).to.eq('http://admin:pass@localhost:5984/')); }); describe('isLocalhost', () => {