Skip to content
Snippets Groups Projects
Unverified Commit 3527d8b4 authored by Sergei Zharinov's avatar Sergei Zharinov Committed by GitHub
Browse files

feat(util): Add lightweight parseUrl function (#9019)

parent 412e779a
No related branches found
No related tags found
No related merge requests found
import { resolveBaseUrl, trimTrailingSlash, validateUrl } from './url'; import {
parseUrl,
resolveBaseUrl,
trimTrailingSlash,
validateUrl,
} from './url';
describe('util/url', () => { describe('util/url', () => {
test.each([ test.each([
...@@ -45,6 +50,7 @@ describe('util/url', () => { ...@@ -45,6 +50,7 @@ describe('util/url', () => {
])('%s + %s => %s', (baseUrl, x, result) => { ])('%s + %s => %s', (baseUrl, x, result) => {
expect(resolveBaseUrl(baseUrl, x)).toBe(result); expect(resolveBaseUrl(baseUrl, x)).toBe(result);
}); });
it('validates URLs', () => { it('validates URLs', () => {
expect(validateUrl()).toBe(false); expect(validateUrl()).toBe(false);
expect(validateUrl(null)).toBe(false); expect(validateUrl(null)).toBe(false);
...@@ -53,6 +59,17 @@ describe('util/url', () => { ...@@ -53,6 +59,17 @@ describe('util/url', () => {
expect(validateUrl('http://github.com')).toBe(true); expect(validateUrl('http://github.com')).toBe(true);
expect(validateUrl('https://github.com')).toBe(true); expect(validateUrl('https://github.com')).toBe(true);
}); });
it('parses URL', () => {
expect(parseUrl(null)).toBeNull();
expect(parseUrl(undefined)).toBeNull();
const url = parseUrl('https://github.com/renovatebot/renovate');
expect(url.protocol).toBe('https:');
expect(url.host).toBe('github.com');
expect(url.pathname).toBe('/renovatebot/renovate');
});
it('trimTrailingSlash', () => { it('trimTrailingSlash', () => {
expect(trimTrailingSlash('foo')).toBe('foo'); expect(trimTrailingSlash('foo')).toBe('foo');
expect(trimTrailingSlash('/foo/bar')).toBe('/foo/bar'); expect(trimTrailingSlash('/foo/bar')).toBe('/foo/bar');
......
...@@ -48,3 +48,11 @@ export function validateUrl(url?: string, httpOnly = true): boolean { ...@@ -48,3 +48,11 @@ export function validateUrl(url?: string, httpOnly = true): boolean {
return false; return false;
} }
} }
export function parseUrl(url: string): URL | null {
try {
return new URL(url);
} catch (err) {
return null;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment