diff --git a/src/utils/helpers/uri.ts b/src/utils/helpers/uri.ts new file mode 100644 index 00000000..a9a41d84 --- /dev/null +++ b/src/utils/helpers/uri.ts @@ -0,0 +1,7 @@ +export const replaceAuthorityFromUri = (uri: string, newAuthority: string): string => { + const [ schema, rest ] = uri.split('://'); + const [ , ...pathParts ] = rest.split('/'); + const normalizedPath = pathParts.length ? `/${pathParts.join('/')}` : ''; + + return `${schema}://${newAuthority}${normalizedPath}`; +}; diff --git a/test/utils/helpers/uri.test.ts b/test/utils/helpers/uri.test.ts new file mode 100644 index 00000000..6ae4d072 --- /dev/null +++ b/test/utils/helpers/uri.test.ts @@ -0,0 +1,13 @@ +import { replaceAuthorityFromUri } from '../../../src/utils/helpers/uri'; + +describe('uri-helper', () => { + describe('replaceAuthorityFromUri', () => { + it.each([ + [ 'http://something.com/foo/bar', 'www.new.to', 'http://www.new.to/foo/bar' ], + [ 'https://www.authori.ty:8000/', 'doma.in', 'https://doma.in/' ], + [ 'http://localhost:8080/this/is-a-long/path', 'somewhere:8888', 'http://somewhere:8888/this/is-a-long/path' ], + ])('replaces authority as expected', (uri, newAuthority, expectedResult) => { + expect(replaceAuthorityFromUri(uri, newAuthority)).toEqual(expectedResult); + }); + }); +});