1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-10 22:11:50 +02:00

Chore: Migrate urlUtils from deprecated url.parse to URL (#12750)

This commit is contained in:
Henry Heino
2025-07-21 10:28:53 -07:00
committed by GitHub
parent b705be33e1
commit e6b81d42c3
2 changed files with 28 additions and 2 deletions

View File

@@ -14,6 +14,7 @@ describe('urlUtils', () => {
expect(urlUtils.prependBaseUrl('//somewhereelse.com/testing.html', 'http://example.com/something')).toBe('http://somewhereelse.com/testing.html'); expect(urlUtils.prependBaseUrl('//somewhereelse.com/testing.html', 'http://example.com/something')).toBe('http://somewhereelse.com/testing.html');
expect(urlUtils.prependBaseUrl('', 'http://example.com/something')).toBe('http://example.com/something'); expect(urlUtils.prependBaseUrl('', 'http://example.com/something')).toBe('http://example.com/something');
expect(urlUtils.prependBaseUrl('testing.html', '')).toBe('testing.html'); expect(urlUtils.prependBaseUrl('testing.html', '')).toBe('testing.html');
expect(urlUtils.prependBaseUrl('/testing.html', '')).toBe('/testing.html');
// It shouldn't prepend anything for these: // It shouldn't prepend anything for these:
expect(urlUtils.prependBaseUrl('mailto:emailme@example.com', 'http://example.com')).toBe('mailto:emailme@example.com'); expect(urlUtils.prependBaseUrl('mailto:emailme@example.com', 'http://example.com')).toBe('mailto:emailme@example.com');
@@ -91,4 +92,22 @@ describe('urlUtils', () => {
} }
})); }));
it('urlProtocol should detect file protocol URLs', () => {
expect(urlUtils.urlProtocol('file:/test')).toBe('file:');
expect(urlUtils.urlProtocol('file://test')).toBe('file:');
expect(urlUtils.urlProtocol('file:///test')).toBe('file:');
expect(urlUtils.urlProtocol('file://C:\\Users\\test`')).toBe('file:');
});
it('urlProtocol should return null for non-empty URLs with no protocol', () => {
expect(urlUtils.urlProtocol('invalid!protocol:/test')).toBe(null);
expect(urlUtils.urlProtocol('!protocol:/test')).toBe(null);
expect(urlUtils.urlProtocol('.protocol:/test')).toBe(null);
});
it('urlProtocol should support protocols with uppercase characters, hyphens, and +s', () => {
expect(urlUtils.urlProtocol('ValidProtocol:/test')).toBe('validprotocol:');
expect(urlUtils.urlProtocol('valid-protocol:/test')).toBe('valid-protocol:');
expect(urlUtils.urlProtocol('valid+protocol:/test')).toBe('valid+protocol:');
});
}); });

View File

@@ -8,13 +8,20 @@ export const hash = (url: string) => {
}; };
export const urlWithoutPath = (url: string) => { export const urlWithoutPath = (url: string) => {
const parsed = require('url').parse(url, true); const parsed = new URL(url);
return `${parsed.protocol}//${parsed.host}`; return `${parsed.protocol}//${parsed.host}`;
}; };
export const urlProtocol = (url: string) => { export const urlProtocol = (url: string) => {
if (!url) return ''; if (!url) return '';
const parsed = require('url').parse(url, true);
let parsed;
try {
parsed = new URL(url);
} catch (error) {
// Match the NodeJS url.parse behavior in the case of an invalid URL:
return null;
}
return parsed.protocol; return parsed.protocol;
}; };