Skip to content

Commit

Permalink
Add a new submodule: ua-parser-helpers with a method: `isFrozenUA()…
Browse files Browse the repository at this point in the history
…` to match a string with a frozen user-agent pattern
  • Loading branch information
faisalman committed May 27, 2023
1 parent 15d17e9 commit 072a82b
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 1 deletion.
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@
"./extensions": {
"require": "./src/extensions/ua-parser-extensions.js",
"import": "./src/extensions/ua-parser-extensions.mjs"
},
"./helpers": {
"require": "./src/helpers/ua-parser-helpers.js",
"import": "./src/helpers/ua-parser-helpers.mjs"
}
},
"files": [
Expand Down
10 changes: 9 additions & 1 deletion script/build-module.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ const PATH = {
src : 'src/extensions/ua-parser-extensions.js',
dest : 'src/extensions/ua-parser-extensions.mjs',
title : 'extensions'
},
helpers : {
src : 'src/helpers/ua-parser-helpers.js',
dest : 'src/helpers/ua-parser-helpers.mjs',
title : 'helpers'
}
};
const generateMJS = (module, replacers) => {
Expand Down Expand Up @@ -46,4 +51,7 @@ generateMJS('main', [
generateMJS('enums', [[/module\.exports =/ig, 'export']]);

// ua-parser-extension.mjs
generateMJS('extensions', [[/module\.exports =/ig, 'export']]);
generateMJS('extensions', [[/module\.exports =/ig, 'export']]);

// ua-parser-helpers.mjs
generateMJS('helpers', [[/module\.exports =/ig, 'export']]);
42 changes: 42 additions & 0 deletions src/helpers/ua-parser-helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
///////////////////////////////////////////////
/* Helpers for UAParser.js v2.0.0-alpha.2
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
MIT License */
//////////////////////////////////////////////

/*jshint esversion: 6 */

/*
# Reference:
https://www.chromium.org/updates/ua-reduction/
# Desktop
---
Format:
Mozilla/5.0 (<unifiedPlatform>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 Safari/537.36
Possible <unifiedPlatform> values:
- Windows NT 10.0; Win64; x64
- Macintosh; Intel Mac OS X 10_15_7
- X11; Linux x86_64
- X11; CrOS x86_64 14541.0.0
- Fuchsia
# Mobile & Tablet: (except iOS/Android WebView)
---
Format:
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<majorVersion>.0.0.0 <deviceCompat> Safari/537.36
Possible <deviceCompat> values:
- "Mobile"
- "" (empty string for Tablets & Desktop)
*/

const frozenUA = /Mozilla\/5\.0 \((Windows NT 10\.0; Win64; x64|Macintosh; Intel Mac OS X 10_15_7|X11; Linux x86_64|X11; CrOS x86_64 14541\.0\.0|Fuchsia|Linux; Android 10; K)\) AppleWebKit\/537\.36 \(KHTML, like Gecko\) Chrome\/\d+\.0\.0\.0 (Mobile )?Safari\/537\.36/;

const isFrozenUA = str => frozenUA.test(str);

module.exports = {
isFrozenUA
};
35 changes: 35 additions & 0 deletions test/mocha-test-helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
const { isFrozenUA } = require('ua-parser-js/helpers');
const assert = require('assert');

describe('isFrozenUA', () => {
it('Returns whether a user agent is frozen', () => {

const regularWindowsUA = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36";
const freezedWindowsUA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36";

const regularMacUA = "";
const freezedMacUA = "";

const regularLinuxUA = "";
const freezedLinuxUA = "";

const regularCrOSUA = "";
const freezedCrOSUA = "";

const regularFuchsiaUA = "";
const freezedFuchsiaUA = "";

const regularMobileUA = "Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Mobile Safari/537.36";
const freezedMobileUA = "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36";

const regularTabletUA = "Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36";
const freezedTabletUA = "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36";

assert.strictEqual(isFrozenUA(regularWindowsUA), false);
assert.strictEqual(isFrozenUA(freezedWindowsUA), true);
assert.strictEqual(isFrozenUA(regularMobileUA), false);
assert.strictEqual(isFrozenUA(freezedMobileUA), true);
assert.strictEqual(isFrozenUA(regularTabletUA), false);
assert.strictEqual(isFrozenUA(freezedTabletUA), true);
});
});

0 comments on commit 072a82b

Please sign in to comment.