From 6559890295a30a9626e8da3a84d2dbb6387e666e Mon Sep 17 00:00:00 2001 From: Johan Castiblanco Date: Mon, 25 Sep 2023 12:54:04 -0500 Subject: [PATCH] feat: add parser url function to utils --- src/index.js | 1 + src/utils.js | 21 +++++++++++++++++++++ src/utils.test.js | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/src/index.js b/src/index.js index d0499f9e3..bf05dadcb 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,7 @@ export { convertKeyNames, getQueryParameters, ensureDefinedConfig, + parseURL, } from './utils'; export { APP_TOPIC, diff --git a/src/utils.js b/src/utils.js index be16cff22..8a1c65ff2 100644 --- a/src/utils.js +++ b/src/utils.js @@ -122,6 +122,27 @@ export function convertKeyNames(object, nameMap) { return modifyObjectKeys(object, transformer); } +/** + * Given a string URL return an element that has been parsed via href. + * This element has the possibility to return different part of the URL. + parser.protocol; // => "http:" + parser.hostname; // => "example.com" + parser.port; // => "3000" + parser.pathname; // => "/pathname/" + parser.search; // => "?search=test" + parser.hash; // => "#hash" + parser.host; // => "example.com:3000" + * https://gist.github.com/jlong/2428561 + * + * @param {string} + * @returns {Object} + */ +export function parseURL(url) { + const parser = document.createElement('a'); + parser.href = url; + return parser; +} + /** * *Deprecated*: A method which converts the supplied query string into an object of * key-value pairs and returns it. Defaults to the current query string - should perform like diff --git a/src/utils.test.js b/src/utils.test.js index 016129040..3b9e77f57 100644 --- a/src/utils.test.js +++ b/src/utils.test.js @@ -3,6 +3,7 @@ import { camelCaseObject, snakeCaseObject, convertKeyNames, + parseURL, getQueryParameters, } from '.'; @@ -113,3 +114,41 @@ describe('getQueryParameters', () => { }); }); }); + +describe('ParseURL', () => { + const testURL = 'http://example.com:3000/pathname/?search=test#hash'; + const parsedURL = parseURL(testURL); + it('String URL is correctly parsed', () => { + expect(parsedURL.toString()).toEqual(testURL); + expect(parsedURL.href).toEqual(testURL); + expect(typeof (parsedURL)).toEqual('object'); + }); + + it('should return protocol from URL', () => { + expect(parsedURL.protocol).toEqual('http:'); + }); + + it('should return hostname from URL', () => { + expect(parsedURL.hostname).toEqual('example.com'); + }); + + it('should return port from URL', () => { + expect(parsedURL.port).toEqual('3000'); + }); + + it('should return pathname from URL', () => { + expect(parsedURL.pathname).toEqual('/pathname/'); + }); + + it('should return search rom URL', () => { + expect(parsedURL.search).toEqual('?search=test'); + }); + + it('should return hash from URL', () => { + expect(parsedURL.hash).toEqual('#hash'); + }); + + it('should return host from URL', () => { + expect(parsedURL.host).toEqual('example.com:3000'); + }); +});