From 35c2b91534e47fd17b254f1bdfa016d22f21a820 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Fri, 14 Apr 2023 15:36:37 +0700 Subject: [PATCH] Fix: accept empty string as input --- src/ua-parser.js | 23 ++++++++++------------- test/playwright-test-browser.spec.mjs | 12 ++++++++++++ 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index d72fda7..5f30625 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -918,10 +918,10 @@ // Constructor //////////////// - function UACHData (uach, isHTTP_UACH) { + function UACHData (uach, isHttpUACH) { uach = uach || {}; setProps.call(this, CH_ALL_VALUES); - if (isHTTP_UACH) { + if (isHttpUACH) { setProps.call(this, [ [BRANDS, itemListToArray(uach[CH_HEADER])], [FULLVERLIST, itemListToArray(uach[CH_HEADER_FULL_VER_LIST])], @@ -1106,15 +1106,12 @@ return new UAParser(ua, extensions, headers).getResult(); } - var userAgent = ua || - ((NAVIGATOR && NAVIGATOR.userAgent) ? - NAVIGATOR.userAgent : - (headers && headers[USER_AGENT] ? - headers[USER_AGENT] : - EMPTY)), - - HTTP_UACH = new UACHData(headers, true), + var userAgent = typeof ua === STR_TYPE ? ua : // Passed user-agent string + ((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent + (headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers + EMPTY)), // empty string + httpUACH = new UACHData(headers, true), regexMap = extensions ? extend(defaultRegexes, extensions) : defaultRegexes, @@ -1122,7 +1119,7 @@ createItemFunc = function (itemType) { if (itemType == UA_RESULT) { return function () { - return new UAItem(itemType, userAgent, regexMap, HTTP_UACH) + return new UAItem(itemType, userAgent, regexMap, httpUACH) .set('ua', userAgent) .set(UA_BROWSER, this.getBrowser()) .set(UA_CPU, this.getCPU()) @@ -1133,13 +1130,13 @@ }; } else { return function () { - return new UAItem(itemType, userAgent, regexMap[itemType], HTTP_UACH) + return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH) .parseUA() .get(); }; } }; - + // public methods setProps.call(this, [ ['getBrowser', createItemFunc(UA_BROWSER)], diff --git a/test/playwright-test-browser.spec.mjs b/test/playwright-test-browser.spec.mjs index a3fb5b8..bab1f3a 100644 --- a/test/playwright-test-browser.spec.mjs +++ b/test/playwright-test-browser.spec.mjs @@ -5,6 +5,18 @@ import url from 'url'; const localHtml = `file://${path.resolve(path.dirname(url.fileURLToPath(import.meta.url)), '../')}/dist/ua-parser.html`; +test.describe('test input', () => { + test.beforeEach(async ({ page }) => { + await page.goto(localHtml); + }); + + test('accept empty string', async ({ page }) => { + // @ts-ignore + const uap = await page.evaluate(async () => await UAParser('')); + expect(uap).toHaveProperty('ua', ''); + }); +}); + test('read client hints data', async ({ page }) => { await page.addInitScript(() => { Object.defineProperty(navigator, 'userAgentData', {