mirror of
https://github.com/tenrok/axios.git
synced 2026-06-17 19:21:29 +03:00
Add isAbsoluteURL helper
This commit is contained in:
@@ -0,0 +1,14 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether the specified URL is absolute
|
||||||
|
*
|
||||||
|
* @param {string} url The URL to test
|
||||||
|
* @returns {boolean} True if the specified URL is absolute, otherwise false
|
||||||
|
*/
|
||||||
|
module.exports = function isAbsoluteURL(url) {
|
||||||
|
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
|
||||||
|
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
|
||||||
|
// by any combination of letters, digits, plus, period, or hyphen.
|
||||||
|
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
|
||||||
|
};
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
var isAbsoluteURL = require('../../../lib/helpers/isAbsoluteURL');
|
||||||
|
|
||||||
|
describe('helpers::isAbsoluteURL', function () {
|
||||||
|
it('should return true if URL begins with valid scheme name', function () {
|
||||||
|
expect(isAbsoluteURL('https://api.github.com/users')).toBe(true);
|
||||||
|
expect(isAbsoluteURL('custom-scheme-v1.0://example.com/')).toBe(true);
|
||||||
|
expect(isAbsoluteURL('HTTP://example.com/')).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false if URL begins with invalid scheme name', function () {
|
||||||
|
expect(isAbsoluteURL('123://example.com/')).toBe(false);
|
||||||
|
expect(isAbsoluteURL('!valid://example.com/')).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true if URL is protocol-relative', function () {
|
||||||
|
expect(isAbsoluteURL('//example.com/')).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false if URL is relative', function () {
|
||||||
|
expect(isAbsoluteURL('/foo')).toBe(false);
|
||||||
|
expect(isAbsoluteURL('foo')).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user